6 releases
0.1.5 | Feb 28, 2023 |
---|---|
0.1.4 | Feb 21, 2023 |
#17 in #author
Used in binggpt-cli
19KB
364 lines
BingGPT
BingGPT command line client, written in rust
This project is a rust language implementation of EdgeGPT, all the hard stuff was done by the original project author acheong08
, I just wrote it in rust, all credit goes to him, thanks for the hard work big guy!
Install
cargo install binggpt
Or download the binary from the release page.
Requirements
You must have a Microsoft account with access to BingGPT.
Configuration (required)
- for Chrome or Firefox to install the
cookie-editor
extension - Go to bing.com and log in to your Microsoft account
- Open the extension
- Click "Export" in the bottom right corner (this will save your cookies to the clipboard)
- Create or write your cookies to the
~/.config/bing-cookies.json
file
Usage
First you need to perform the configuration steps above.
If you have a rust development environment, first you need to clone the code, go to this project directory, and run cargo run
.
If you want to compile it into binaries, you can run cargo build --release
. After the compilation is done, you can find the compiled binaries in the target/release
directory.
If you want to install it to the system, you can run cargo install --path .
, so you can easily use the binggpt
command anywhere.
After starting the program, when you see You:
, it means you can start a conversation with BingGPT, press enter twice to send a message.
In the conversation, you can use the following command.
:q
:quit
:exit
to quit the program:more
to enter multi-line mode, where you can safely type more text, or paste text from the clipboard:end
exit multi-line mode
Possible problems
For Windows10 users
see #3
Ensure that users running Windows 10 use this command in their terminal, with administrator privileges, to enable text colors in the terminal.
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
As a rust crate
cargo add binggpt
cargo add utf8-slice
cargo add tokio --features full
use std::io::{stdout, Write};
#[tokio::main]
async fn main() {
let mut bing = binggpt::Bing::new("~/.config/bing-cookies.json")
.await
.unwrap();
// send message
bing.send_msg("hello").await.unwrap();
// receive message
let mut index = 0;
// loop until the chat is done
loop {
if bing.is_done() {
break;
}
let Some(answer) = bing.recv_text().await.unwrap() else{
continue;
};
// print the new part of the answer
if !answer.is_empty() {
print!("{}", utf8_slice::from(&answer, index));
if stdout().flush().is_err() {
println!("Warning: Failed to flush stdout");
};
index = utf8_slice::len(&answer);
}
}
}
Contributors
This project exists thanks to all the people who contribute.
License
Dependencies
~10–25MB
~336K SLoC