You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Go to file
sigoden cfb6ce6958
feat: support light theme (#65)
There are two ways to enable the light theme:
- add `light_theme: true` to config.yaml
- use `AICHAT_LIGHT_THEME=true` env var
1 year ago
.github/workflows chore: use rustls (#1) 1 year ago
assets feat: support light theme (#65) 1 year ago
src feat: support light theme (#65) 1 year ago
.gitignore init commit 1 year ago
Cargo.lock feat: support light theme (#65) 1 year ago
Cargo.toml feat: support light theme (#65) 1 year ago
LICENSE-APACHE chore: add LICENSE 1 year ago
LICENSE-MIT chore: add LICENSE 1 year ago
README.md chore: fix some typos 1 year ago

README.md

AIChat

CI Crates

Chat with gpt-3.5/chatgpt in terminal.

demo

Install

With cargo

cargo install --force aichat

Binaries on macOS, Linux, Windows

Download it from Github Releases, unzip and add aichat to your $PATH.

Features

  • Predefine AI roles
  • Use GPT prompt easily
  • Powerful Chat REPL
  • Context-ware conversation
  • syntax highlighting markdown and other 200 languages.
  • Stream output with hand typing effect
  • Multiline input support and emacs-like editing experience
  • Proxy support
  • Save chat messages

Config

On first launch, aichat will guide you through configuration.

> No config file, create a new one? Yes
> Openai API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Use proxy? Yes
> Set proxy: socks5://127.0.0.1:1080
> Save chat messages Yes

After setting, it will automatically create the configuration file. Of course, you can also manually set the configuration file.

api_key: "<YOUR SECRET API KEY>"  # Request via https://platform.openai.com/account/api-keys
temperature: 1.0                  # optional, see https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature
save: true                        # optional, If set true, aichat will save chat messages to message.md
highlight: true                   # optional, Set false to turn highlight
proxy: "socks5://127.0.0.1:1080"  # optional, set proxy server. e.g. http://127.0.0.1:8080 or socks5://127.0.0.1:1080
conversation_first: false         # optional, If set true, start a conversation immediately upon repl

You can specify the configuration directory through $AICHAT_CONFIG_DIR

You can use .info to view the current configuration file path

Roles

We can let ChatGPT play a certain role through prompt to make it better generate what we want.

We can predefine a batch of roles in roles.yaml.

For example, we define a role

- name: shell
  prompt: >
    I want you to act as a linux shell expert.
    I want you to answer only with bash code.
    Do not provide explanations.    
  # temperature: 0.3

Let ChatGPT answer questions in the role of a linux shell expert.

〉.role shell

shell〉 extract encrypted zipfile app.zip to /tmp/app
---
mkdir /tmp/app
unzip -P PASSWORD app.zip -d /tmp/app
---

CLI

A powerful chatgpt cli.

Usage: aichat [OPTIONS] [TEXT]...

Arguments:
  [TEXT]...  Input text

Options:
  -H, --no-highlight  Disable syntax highlightiing
  -S, --no-stream     No stream output
      --list-roles    List all roles
  -r, --role <ROLE>   Select a role
  -h, --help          Print help
  -V, --version       Print version

Command mode

aichat math 3.8x4 

control highlighting and streaming

aichat how to post a json in rust         # highlight, streaming output
aichat -H -S how to post a json in rust   # no highlight, output all at once

pipe input/output

# convert toml to json
cat data.toml | aichat turn toml below to json > data.json

Chat mode

Enter Chat REPL if no text input.

$ aichat
Welcome to aichat 0.5.0
Type ".help" for more information.
〉

Chat REPL

aichat has a powerful Chat REPL.

The Chat REPL supports:

  • Emacs keybinding
  • Command autocompletion
  • History search
  • Fish-style history autosuggestion hints
  • Edit/past multiline input
  • Undo support
  • Clipboard integration

multi-line editing mode

Type { or ( or [ at the beginning of the line to enter the multi-line editing mode. In this mode you can type or paste multiple lines of text. Type the corresponding } or ) or ] at the end of the line to exit the mode and submit the content.

〉{ convert json below to toml
{
  "an": [
    "arbitrarily",
    "nested"
  ],
  "data": "structure"
}}

.help - Print help message

〉.help
.info                    Print the information
.set                     Modify the configuration temporarily
.prompt                  Add a GPT prompt
.role                    Select a role
.clear role              Clear the currently selected role
.conversation            Start a conversation.
.clear conversation      End current conversation.
.history                 Print the history
.clear history           Clear the history
.help                    Print this help message
.exit                    Exit the REPL

Press Ctrl+C to abort conversation, Ctrl+D to exit the REPL

.info - view current configuration information.

〉.info
config_file         /home/alice/.config/aichat/config.yaml
roles_file          /home/alice/.config/aichat/roles.yaml
messages_file       /home/alice/.config/aichat/messages.md
role                -
api_key             sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
temperature         -
save                true
highlight           true
proxy               -
conversation_first  false
dry_run             false

.set - modify the configuration temporarily

〉.set highlight false
〉.set save false
〉.set temperature 1.2

.prompt - use GPT prompt

When you set up a prompt, every message sent later will carry the prompt.

〉{ .prompt
I want you to translate the sentences I wrote into emojis.
I will write the sentence, and you will express it with emojis.
I don't want you to reply with anything but emoji.
}
Done

〉You are a genius
👉🧠💡👨‍🎓

〉I'm embarrassed
🙈😳

.prompt actually creates a temporary role called %TEMP% internally, so run .clear role to clear the prompt.

When you are satisfied with the prompt, add it to roles.yaml for later use.

.role - let the ai play a role

Select a role.

〉.role emoji
name: emoji
prompt: I want you to translate the sentences I wrote into emojis. I will write the sentence, and you will express it with emojis. I just want you to express it with emojis. I don't want you to reply with anything but emoji. When I need to tell you something in English, I will do it by wrapping it in curly brackets like {like this}.
temperature: null

AI play the role we specified

emoji〉hello
👋

Clear current selected role

emoji〉.clear role

〉hello 
Hello there! How can I assist you today?

.conversation - start a context-aware conversation

By default, aichat behaves in a one-off request/response manner.

You can run .conversation to enter context-aware mode, or set config.conversation_first true to start a conversation immediately upon repl.

〉.conversation

list 1 to 5, one per line                                                              4089
1
2
3
4
5

reverse the list                                                                       4065
5
4
3
2
1

.clear conversation                                                                    4043

〉

When enter conversation mode, prompt will change to , A number will appear on the right, which means how many tokens left to use. Once the number becomes zero, you need to start a new conversation.

License

Copyright (c) 2023 aichat-developers.

aichat is made available under the terms of either the MIT License or the Apache License 2.0, at your option.

See the LICENSE-APACHE and LICENSE-MIT files for license details.