Commit Graph

258 Commits

Author SHA1 Message Date
sigoden
f4160ff85b
feat: suppport vi keybindings (#148) 2023-10-24 19:28:16 +08:00
sigoden
b5e1460151
feat: use backslash at end of line for multiline text (#147)
BREAKING CHANGE: use backslash at end of line for multiline text

```
〉.set dry_run true

〉abc \
def \
ijk

>>> The following message consumes 12 tokens.
abc 
def 
ijk
```

Deprecate old {}/() multi-line editing
2023-10-24 17:45:49 +08:00
sigoden
90bdc1b7db chore: update deps 2023-10-17 19:37:36 +08:00
Jackson Goode
30daa40eb0
fix: grammar/wording corrections (#135) 2023-07-10 11:17:42 +08:00
Anthony Rubick
97fc7de675
fix: minor code cleanup and pedantic lints (#134) 2023-07-10 11:07:09 +08:00
sigoden
ec51b84290
feat: add new model gpt-3.5-turbo-16k (#126) 2023-06-19 08:44:26 +08:00
sigoden
00ce157571
feat: add .copy command (#119) 2023-05-04 22:42:50 +08:00
shane s
cf03952c7b
feat: add config.auto_copy (#102)
* added config option to copy all ChatGPT output to clipboard

* formatted with

* updates

---------

Co-authored-by: sigoden <sigoden@gmail.com>
2023-05-04 21:22:12 +08:00
sigoden
2489e34993
fix: config file with strict perms (#118) 2023-05-04 16:29:34 +08:00
sigoden
439d231e42 chore: trivial updates 2023-05-04 16:07:50 +08:00
sigoden
065a32decb
feat: support backeted paste (#117) 2023-05-04 15:43:34 +08:00
sigoden
a7b31d4367 chore: fix typo 2023-04-26 08:30:53 +08:00
sigoden
f257931b0b
fix: mask api_key/organization_id in info text (#93) 2023-03-22 21:02:09 +08:00
sigoden
601a5134d0
feat: add --dry-run (#83) 2023-03-20 23:20:48 +08:00
sigoden
19ce62ab76
feat: check token usage in dry_run mode (#82) 2023-03-20 22:51:51 +08:00
sigoden
28f019b72c
feat: add --info (#79) 2023-03-20 16:51:06 +08:00
sigoden
acddece520
feat: add config.organization_id (#77) 2023-03-17 15:09:06 +08:00
sigoden
66a73c7b84
feat: add config.connect_timeout (#76) 2023-03-16 17:11:25 +08:00
sigoden
1ef97b2f32
feat: support multiple models (#71) 2023-03-16 17:02:09 +08:00
sigoden
ad04f60365 chore: optimzie role args 2023-03-13 10:13:50 +08:00
sigoden
9c04455e36
feat: support role args (#69)
* feat: support role args

We can use role args to pass some additional arguments to the prompt.

```
- name: convert:json:yaml
  prompt: convert __ARG1__ below to __ARG2__
```

`:json:yaml` is `role args`. It has two args:

- arg1 `json`, it will replace __ARG1__ in prompt
- arg2 `yaml`, it will replace __ARG2__ in prompt

```
〉.role convert:json:yaml
name: convert:json:yaml
prompt: convert json below to yaml
temperature: null

〉.role convert:yaml:json
name: convert:yaml:json
prompt: convert yaml below to json
temperature: null
```

different role args,  will generate different prompts.

* small updates
2023-03-13 10:09:01 +08:00
sigoden
8fa2e2683b
feat: support HTTPS_PROXY and ALL_PROXY (#68) 2023-03-12 08:31:06 +08:00
sigoden
0ed0ad1fd2 chore: optimize readline multiline 2023-03-12 07:54:18 +08:00
sigoden
4aab872ee1
feat: add support for NO_COLOR (#67) 2023-03-11 21:45:34 +08:00
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
2023-03-11 18:53:36 +08:00
sigoden
dc09cb38d4
feat: support more env vars (#63)
- AICHAT_CONFIG_DIR: sepecify the configuration directory
- AICHAT_ROLES_FILE: set the `roles.yaml` file path
- AICHAT_API_KEY: set the api key
2023-03-11 11:26:24 +08:00
sigoden
d48cd64162
feat: provide --prompt for adding a prompt from cli (#62) 2023-03-11 07:37:47 +08:00
sigoden
cc626e73df chore: update .help output text 2023-03-10 09:59:56 +08:00
sigoden
1dc16e6709
feat: type { [ ( to enter multi-line editing mode (#58)
Abandon `.editor` command, it's too complicated.
2023-03-10 09:52:40 +08:00
sigoden
54e6edbf21 chore: recovery cursor in case of stream abort 2023-03-10 07:55:53 +08:00
sigoden
865fb49af9 chore: improve code quality, omit head 2 newlines in handler but in not client 2023-03-10 07:36:46 +08:00
sigoden
978d4c54c0 chore: opitmize code, move MAX_TOKENS related to config/message.rs 2023-03-10 07:25:33 +08:00
sigoden
899c4af9ea fix: forbid .clear role in middle of conversation 2023-03-10 07:13:22 +08:00
sigoden
ff00426c2c chore: improve code quality, split rep/prompt.rs from repl/init.rs 2023-03-10 07:08:40 +08:00
sigoden
4161eaa6c3
fix: cli specify role is not applied when conversation_first set true (#57)
close #56
2023-03-10 07:02:44 +08:00
sigoden
0044399509
feat: add config.conversation_first (#55)
If set true, start a conversation immediately upon repl.
2023-03-09 23:30:12 +08:00
sigoden
ad282ae74c refactor: no need to confirm conversation when token used out 2023-03-09 22:53:25 +08:00
sigoden
89eaf1b653 fix: csharp and php do not render correctly 2023-03-09 22:46:33 +08:00
sigoden
553d0fe55b
refactor: optimize counting tokens (#53) 2023-03-09 21:18:28 +08:00
sigoden
9767c07eee
feat: support two types of role prompts (#52)
1. embeded prompt

use __INPUT__ placeholder
will generate one user message when send to gpt
```
- name: shell
  prompt: >
    I want you to act as a linux shell expert.
    Q: How to unzip a file
    A: unzip file.zip
    Q: __INPUT__
    A:
```

2. system prompt
no __INPUT__ placeholder
will generate on system message and one user message when send to gpt
```
- name: shell
  prompt: |
    I want you to act as a linux shell expert.
    I want you to answer only with bash code.
    Do not write explanations.
```
2023-03-09 19:10:02 +08:00
sigoden
c45d71cdea refactor: trivial updates
- change prompt's temp role name
- questionnaire of 'save chat messages' default set true
- `.info` do not show role name
2023-03-09 16:52:04 +08:00
sigoden
05d20f207f
feat: add remain tokens indicator and max tokens guard (#50) 2023-03-09 15:30:39 +08:00
sigoden
c7eb261abc
fix: abort by ctrlc unexpectedly prints error message (#49) 2023-03-09 11:05:42 +08:00
sigoden
a62e461e38
feat: support conversation (#48) 2023-03-09 10:39:28 +08:00
sigoden
a7f2da156c
feat: add role info to readline indicator (#47)
```
coder〉
```
2023-03-09 08:26:35 +08:00
sigoden
e78b5f7c58 refactor: imports order and group 2023-03-09 08:15:14 +08:00
sigoden
1ec451da89
refactor: replace Arc<Refcell<Config>> with Arc<Mutex<Config>> (#46) 2023-03-09 07:58:44 +08:00
sigoden
00ba8b5108 refactor: extra spaces are allowed around repl command 2023-03-09 07:02:28 +08:00
sigoden
9d32837669
chore: optimize newline again (#43)
* chore: optimize newline again

command mode: should no extra newline
chat mode: should have one newline

* fix windows newline

* fix macos newline
2023-03-08 21:34:20 +08:00
sigoden
56483e04f0
feat: add role-specific config (#42)
Now we can set role temperature. For example:

```
- name: shell
  prompt: >
    I want you to act as a linux shell expert.
    I want you to answer only with bash code.
    Do not write explanations.
  temperature: 0.4
```
2023-03-08 19:43:11 +08:00
sigoden
2539e24fe9
chore: improve code by getting prompt from config (#39) 2023-03-08 17:13:11 +08:00
sigoden
ee81275431
fix: windows no stream output (#37) 2023-03-08 16:17:51 +08:00
sigoden
2a7a6f5f27 chore: no longer ignore any error 2023-03-08 16:06:24 +08:00
sigoden
4e729db237 chore: optimize output newline 2023-03-08 13:58:50 +08:00
sigoden
f694a59dcc
refactor: replace dump with print_now! (#35) 2023-03-08 11:58:50 +08:00
sigoden
b7cb6f89f1
fix: repl set save true not work if not rerun(#34) 2023-03-08 11:27:51 +08:00
sigoden
b05fce7bca
refactor: split long paragraphs for smoother stream output (#33) 2023-03-08 10:40:19 +08:00
sigoden
ec1c4bcf8f
refactor: theme and code color (#32) 2023-03-08 07:25:32 +08:00
sigoden
360264121c
feat: command mode supports stream out (#31)
* feat: command mode supports stream out

* update cli
2023-03-07 22:33:34 +08:00
sigoden
c7fcdb1744
refactor: adjust repl (#30)
- abandon .copy
- rename .multiple => .editor
- if command successed, do not output `Done`
- if command failed, output `Error: <error message>`
2023-03-07 19:04:54 +08:00
sigoden
d73be65b07
refactor: support highlighting more languages (#28) 2023-03-07 15:37:03 +08:00
sigoden
11dc4d104b
refactor: optimize ctrl+c/ctrl+d abort handling (#27) 2023-03-07 11:51:52 +08:00
sigoden
1640456049
refactor: use syntect for highlight, abandon mdcat (#26)
* refactor: use syntect for highlight, abandon mdcat

* split src/render.rs to sub modules. embed a default theme

* simulate typing effect.

* fix format
2023-03-07 11:38:44 +08:00
sigoden
c12ae02751 chore: improve code by renameing some function 2023-03-06 16:35:51 +08:00
sigoden
056f38428c
fix: $AI_CONFIG_DIR points to the parent directory (#25) 2023-03-06 10:47:50 +08:00
sigoden
ffa444399f chore: release v0.4.0 2023-03-06 10:34:07 +08:00
sigoden
f29ca57446 chore: optimize cli help 2023-03-06 10:08:59 +08:00
sigoden
cfb46ca0de
feat: add --no-highlight option (#24) 2023-03-06 09:27:49 +08:00
sigoden
7def9aef01
fix: combine pipe and cli args, disable highlight when pipe (#23) 2023-03-06 08:43:24 +08:00
sigoden
c5a2f4603c chore: optimize code 2023-03-06 07:08:51 +08:00
sigoden
2152667fc6
refactor: split src/repl.rs to submodules (#22) 2023-03-06 06:45:00 +08:00
sigoden
d40913d739
feat: add .prompt command (#21)
* feat: add `.prompt` command

* set temp role name
2023-03-06 05:30:20 +08:00
sigoden
4b1d6c16b3
feat: add .set command (#20)
* feat: add `.set` command

* Add config.role
2023-03-05 22:51:29 +08:00
sigoden
957ea431c2
refactor: rename config.no_highlight to highlight (#19) 2023-03-05 19:48:22 +08:00
sigoden
aadffb17a3
feat: repl command replaces .editor with .multiline (#18)
You can use `.multiline` command to put multiline content

```
〉.multiline {
::: abc
::: cdf
::: }
```
It's much easier than `.editor`.
2023-03-05 19:16:41 +08:00
sigoden
625f0343cb chore: refactor error encapsulation 2023-03-05 16:45:42 +08:00
sigoden
2ac0155fa3
feat: accept pipe (#17)
`cat data | aichat` works
2023-03-05 11:11:15 +08:00
sigoden
d876818df1
refactor: optimize clear screen (#16) 2023-03-05 10:42:35 +08:00
sigoden
181fbe8163
refactor: adjusted command name (#14)
* refactor: adjusted command name

.clear => .clear screen
.clear-history => .clear history
.clear-role => .clear role

* re-order commands in help text
2023-03-05 08:34:43 +08:00
sigoden
598c31c3d9
refactor: optimize role prompt (#13) 2023-03-05 07:52:36 +08:00
sigoden
822f0eed94
refactor: message record format (#12)
```
i am excited

--------
😃💥🎉
--------
```
2023-03-05 06:17:43 +08:00
sigoden
7a60a36367
feat: add .info command (#11) 2023-03-05 05:50:30 +08:00
sigoden
a055d4bee6
feat: add .copy command (#10) 2023-03-05 00:19:48 +08:00
sigoden
5179b9a827
feat: add .editor command (#9)
* feat: add `.editor` command

Use `.editor` to edit/input multiline text

* support paste
2023-03-05 00:01:45 +08:00
sigoden
069583098f
refactor: no need tui, just render stream directly (#8) 2023-03-04 22:18:42 +08:00
sigoden
e594d1bd5f chore: fix typos 2023-03-04 18:28:42 +08:00
sigoden
71f1127f9a
fix: tui warp long paragraph (#6)
* chore: optimize stream render

* fix: tui textwrap long paragraph
2023-03-04 18:18:00 +08:00
sigoden
b058cca46d
refactor: use tui for better stream render (#5)
* feat: show question in the begining of stream render

* refactor: use tui for better stream render

* trivial updates

* fine-tune stream text merging
2023-03-04 15:00:11 +08:00
sigoden
dbdb2ed125
refactor: replace config.highlight with config.no_highlight (#4)
* refactor: replace config.highlight with config.no_highlight

* update readme
2023-03-04 09:22:55 +08:00
sigoden
0fa1ae215a
feat: support highlight reply markdown (#3)
* feat: support highlight reply markdown

* migrate markdown highlighter from termimad to mdcat

* optimize render

No need to clear screen when there is no newline in reply token

* handle ctrl-c when rendering stream

* update readme

* fix ctrlc don't abort acquire_stream when establish connection

* ensure render_stream's dtect_ctrlc is exit before next readline

This will make reedline don't throw err 'The cursor position could not be read within a normal duration'
2023-03-04 09:02:57 +08:00
sigoden
3ffebce8bb refactor: split into separate mods 2023-03-03 18:27:42 +08:00
sigoden
2e511c1327 chore: optimize config path 2023-03-03 12:43:34 +08:00
sigoden
17ee12a7f9 feat: support initial configuration items 2023-03-03 10:24:27 +08:00
sigoden
627a2d08ce refactor: config path and config data
use yaml other than toml for configuration.
use $AICHAT_CONFIG_DIR other than $HOME for config dir.
split roles to seperate config file
2023-03-03 10:11:23 +08:00
sigoden
9e8a5481cf feat: support save chat messages to file 2023-03-03 09:15:58 +08:00
sigoden
b516080a66 chore: update readme 2023-03-03 08:34:15 +08:00
sigoden
7057b9db19 refactor: remove config::Role.first_sentense 2023-03-03 08:26:59 +08:00
sigoden
6178959454 feat: add .view command 2023-03-03 08:04:15 +08:00
sigoden
99c48a3c59 feat: enable connect timeout 2023-03-03 02:43:21 +08:00
sigoden
1099edcb1a refactor: optimize line sperator 2023-03-03 00:51:23 +08:00
sigoden
48ebf1895d feat: remove the first two newlines 2023-03-02 23:22:06 +08:00
sigoden
57844638ce feat: add config.temperature 2023-03-02 23:11:34 +08:00
sigoden
f6e4e4889c refactor: optimize .role command 2023-03-02 22:45:54 +08:00
sigoden
97af9322e7 feat: support list roles with --list-roles 2023-03-02 22:26:32 +08:00
sigoden
f66d33e324 feat: handle ctrl-c 2023-03-02 21:52:19 +08:00
sigoden
a9128f7933 refactor: reorganize repl commands 2023-03-02 21:19:26 +08:00
sigoden
a80399df36 feat: repl supports history 2023-03-02 20:11:17 +08:00
sigoden
dfebab910d init commit 2023-03-02 19:52:11 +08:00