aia 0.3.4 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.semver +6 -0
- data/CHANGELOG.md +12 -0
- data/README.md +165 -55
- data/Rakefile +2 -0
- data/justfile +167 -0
- data/lib/aia/cli.rb +228 -115
- data/lib/aia/config.rb +7 -0
- data/lib/aia/logging.rb +49 -12
- data/lib/aia/main.rb +29 -15
- data/lib/aia/prompt_processing.rb +208 -4
- data/lib/aia/tools/editor.rb +50 -0
- data/lib/aia/{external → tools}/mods.rb +69 -10
- data/lib/aia/{external → tools}/sgpt.rb +2 -2
- data/lib/aia/{external → tools}/subl.rb +23 -5
- data/lib/aia/tools/vim.rb +91 -0
- data/lib/aia/{external/tool.rb → tools.rb} +28 -24
- data/lib/aia/version.rb +5 -1
- data/lib/aia.rb +17 -3
- data/main.just +56 -0
- data/man/aia.1 +134 -0
- data/man/aia.1.md +107 -0
- metadata +72 -18
- data/lib/aia/configuration.rb +0 -39
- data/lib/aia/external/,keep +0 -0
- data/lib/aia/external/.irbrc +0 -11
- data/lib/aia/external/ag.rb +0 -103
- data/lib/aia/external/bat.rb +0 -189
- data/lib/aia/external/fzf.rb +0 -147
- data/lib/aia/external/glow.rb +0 -37
- data/lib/aia/external/rg.rb +0 -1163
- data/lib/aia/external.rb +0 -259
- data/lib/aia/external_two.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 505546a036010eb8b0360f7fbfbb4c6494c311e98969c8095fa091882815aac2
|
4
|
+
data.tar.gz: 6f9323e50879c3b51a5ead99c29b1b41fc377dc1957283edb13e03bb30c866db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23926f77a010a023fd1fbbde152f83cfacd75f003bb2e060d4e2b4ca0cd7aecac6631b0520c5e3c6d56cbde31914f158f520f15bfa239a1a72bf682c5ea79032
|
7
|
+
data.tar.gz: 9d76ab35f70a13a4320d9fb4ee5f3fd47e4039c95e99fc02ce858977e179d1891d44fb08cf7cfc17975e6828dbe28d01d9d778d949c371e898e847e7fa865020
|
data/.semver
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
## [Unreleased]
|
2
|
+
## [0.3.19] 2023-12-26
|
3
|
+
- major code refactoring.
|
4
|
+
- supports config files \*.yml, \*.yaml and \*.toml
|
5
|
+
- usage implemented as a man page. --help will display the man page/
|
6
|
+
- added "--dump <yml|yaml|toml>" to send current configuration to STDOUT
|
7
|
+
- added "--completion <bash|fish|zsh>" to send a a completion function for the indicated shell to STDOUT
|
8
|
+
- added system environment variable (envar) over-rides of default config values uppercase environment variables prefixed with "AIA_" + config item name for example AIA_PROMPTS_DIR and AIA_MODEL. All config items can be over-ridden by their cooresponding envars.
|
9
|
+
- config value hierarchy is:
|
10
|
+
1. values from config file over-rides ...
|
11
|
+
2. command line values over-rides ...
|
12
|
+
3. envar values over-rides ...
|
13
|
+
4. default values
|
2
14
|
|
3
15
|
## [0.3.0] = 2023-11-23
|
4
16
|
|
data/README.md
CHANGED
@@ -6,8 +6,7 @@ Uses the gem "prompt_manager" to manage the prompts sent to the `mods` command-l
|
|
6
6
|
|
7
7
|
**Most Recent Change**
|
8
8
|
|
9
|
-
v0.3.
|
10
|
-
|
9
|
+
v0.3.19 - Major code refactoring. Now supports conf giles in YAML or TOML format. Supports system environment variable (envar) over-rides of default config values using envar's with keys that have the prefix "AIA_" followed by a config item name in all upper case.
|
11
10
|
|
12
11
|
<!-- Tocer[start]: Auto-generated, don't remove. -->
|
13
12
|
|
@@ -15,8 +14,9 @@ v0.3.0 - Matching version to [prompt_manager](https://github.com/prompt_manager)
|
|
15
14
|
|
16
15
|
- [Installation](#installation)
|
17
16
|
- [Usage](#usage)
|
18
|
-
- [System Environment Variables (
|
17
|
+
- [System Environment Variables (envar)](#system-environment-variables-envar)
|
19
18
|
- [External CLI Tools Used](#external-cli-tools-used)
|
19
|
+
- [Shell Completion](#shell-completion)
|
20
20
|
- [Development](#development)
|
21
21
|
- [Contributing](#contributing)
|
22
22
|
- [License](#license)
|
@@ -47,83 +47,190 @@ TODO: don't forget to mention have access token (API keys) setup as envars for t
|
|
47
47
|
|
48
48
|
## Usage
|
49
49
|
|
50
|
+
The usage report obtained using either `-h` or `--help` is implemented as a standard `man` page. You can use both `--help --verbose` of `-h -v` together to get not only the `aia` man page but also the usage report from the `backend` LLM processing tool.
|
51
|
+
|
50
52
|
```text
|
51
53
|
$ aia --help
|
52
54
|
|
53
|
-
aia
|
55
|
+
aia(1) User Manuals aia(1)
|
54
56
|
|
55
|
-
|
57
|
+
NAME
|
58
|
+
aia - command-line interface for an AI assistant
|
56
59
|
|
57
|
-
|
58
|
-
|
60
|
+
SYNOPSIS
|
61
|
+
aia [options]* PROMPT_ID [CONTEXT_FILE]* [-- EXTERNAL_OPTIONS+]
|
59
62
|
|
60
|
-
|
61
|
-
|
63
|
+
DESCRIPTION
|
64
|
+
The aia command-line tool is an interface for interacting with an AI
|
65
|
+
model backend, providing a simple way to send prompts and receive
|
66
|
+
responses. The CLI supports various options to customize the
|
67
|
+
interaction, load a configuration file, edit prompts, set debugging
|
68
|
+
levels, and more.
|
62
69
|
|
63
|
-
|
64
|
-
|
70
|
+
ARGUMENTS
|
71
|
+
PROMPT_ID
|
72
|
+
This is a required argument.
|
65
73
|
|
66
|
-
|
67
|
-
|
74
|
+
CONTEXT_FILES
|
75
|
+
This is an optional argument. One or more files can be added to
|
76
|
+
the prompt as context for the backend gen-AI tool to process.
|
68
77
|
|
69
|
-
|
70
|
-
|
78
|
+
EXTERNAL_OPTIONS
|
79
|
+
External options are optional. Anything that follow “ -- “ will
|
80
|
+
be sent to the backend gen-AI tool. For example “-- -C -m
|
81
|
+
gpt4-128k” will send the options “-C -m gpt4-128k” to the
|
82
|
+
backend gen-AI tool. aia will not validate these external
|
83
|
+
options before sending them to the backend gen-AI tool.
|
71
84
|
|
72
|
-
|
73
|
-
|
85
|
+
OPTIONS
|
86
|
+
-c, --config PATH_TO_CONFIG_FILE
|
87
|
+
Load Config File - default: nil
|
74
88
|
|
75
|
-
|
76
|
-
default: false
|
89
|
+
--dump FORMAT
|
77
90
|
|
78
|
-
|
79
|
-
default:
|
91
|
+
-e, --edit
|
92
|
+
Edit the Prompt File - default: false
|
80
93
|
|
81
|
-
|
82
|
-
default:
|
94
|
+
-d, --debug
|
95
|
+
Turn On Debugging - default: false
|
83
96
|
|
84
|
-
|
85
|
-
default:
|
86
|
-
```
|
97
|
+
-v, --verbose
|
98
|
+
Be Verbose - default: false
|
87
99
|
|
88
|
-
|
100
|
+
--version
|
101
|
+
Print Version - default: false
|
89
102
|
|
90
|
-
|
91
|
-
|
92
|
-
```
|
103
|
+
-h, --help
|
104
|
+
Show Usage - default: false
|
93
105
|
|
94
|
-
|
106
|
+
-s, --search TERM
|
107
|
+
Search for prompts contain TERM - default: nil
|
95
108
|
|
96
|
-
|
109
|
+
-f, --fuzzy`
|
110
|
+
Use Fuzzy Matching when searching for a prompt - default: false
|
97
111
|
|
98
|
-
|
112
|
+
--completion SHELL_NAME
|
113
|
+
|
114
|
+
-o, --[no]-output PATH_TO_OUTPUT_FILE
|
115
|
+
Out FILENAME - default: ./temp.md
|
116
|
+
|
117
|
+
-l, --[no]-log PATH_TO_LOG_FILE
|
118
|
+
Log FILEPATH - default: $HOME/.prompts/prompts.log
|
119
|
+
|
120
|
+
-m, --[no]-markdown
|
121
|
+
Format with Markdown - default: true
|
122
|
+
|
123
|
+
--model NAME
|
124
|
+
Name of the LLM model to use - default: gpt-4-1106-preview
|
125
|
+
|
126
|
+
-p, --prompts PATH_TO_DIRECTORY
|
127
|
+
Directory containing the prompt files - default: ~/.prompts
|
128
|
+
|
129
|
+
-b, --[no]-backend LLM TOOL
|
130
|
+
Specify the backend prompt resolver - default: :mods
|
131
|
+
|
132
|
+
ENVIRONMENT
|
133
|
+
The aia CLI uses the following environment variables:
|
134
|
+
|
135
|
+
• AIA_PROMPTS_DIR: Path to the directory containing prompts
|
136
|
+
files - default: $HOME/.prompts_dir
|
137
|
+
|
138
|
+
• AIA_BACKEND: The AI command-line program used - default: mods
|
139
|
+
|
140
|
+
• EDITOR: The text editor used by the edit option - default:
|
141
|
+
edit
|
99
142
|
|
100
|
-
|
101
|
-
|
143
|
+
• AIA_MODEL: The AI model specification - default:
|
144
|
+
gpt-4-1106-preview
|
102
145
|
|
103
|
-
The
|
104
|
-
|
146
|
+
• AIA_OUTPUT: The default filename for output - default:
|
147
|
+
./temp.md
|
105
148
|
|
106
|
-
|
107
|
-
|
108
|
-
PROMPTS_DIR $HOME/.prompts_dir
|
109
|
-
AI_CLI_PROGRAM mods
|
110
|
-
EDITOR edit
|
111
|
-
MODS_MODEL gpt-4-1106-preview
|
112
|
-
OUTPUT ./temp.md
|
113
|
-
PROMPT_LOG $PROMPTS_DIR/_prompts.log
|
149
|
+
• AIA_PROMPT_LOG: The default filepath for the prompts log -
|
150
|
+
default: $HOME/.prompts/_prompts.log
|
114
151
|
|
115
|
-
|
116
|
-
|
117
|
-
programs use different envar names.
|
152
|
+
Additionally, the program requires an OpenAI access key, which can be
|
153
|
+
specified using one of the following environment variables:
|
118
154
|
|
119
|
-
|
120
|
-
|
121
|
-
|
155
|
+
• OPENAI_ACCESS_TOKEN
|
156
|
+
|
157
|
+
• OPENAI_API_KEY
|
158
|
+
|
159
|
+
Currently there is not specific standard for name of the OpenAI key.
|
160
|
+
Some programs use one name, while others use a different name. Both of
|
161
|
+
the envars listed above mean the same thing. If you use more than one
|
162
|
+
tool to access OpenAI resources, you may have to set several envars to
|
163
|
+
the same key value.
|
164
|
+
|
165
|
+
To acquire an OpenAI access key, first create an account on the OpenAI
|
166
|
+
platform, where further documentation is available.
|
167
|
+
|
168
|
+
USAGE NOTES
|
169
|
+
aia is designed for flexibility, allowing users to pass prompt ids and
|
170
|
+
context files as arguments. Some options change the behavior of the
|
171
|
+
output, such as --output for specifying a file or --no-output for
|
172
|
+
disabling file output in favor of standard output.
|
173
|
+
|
174
|
+
The --completion option displays a script that enables prompt ID
|
175
|
+
auto-completion for bash, zsh, or fish shells. It’s crucial to
|
176
|
+
integrate the script into the shell’s runtime to take effect.
|
177
|
+
|
178
|
+
SEE ALSO
|
179
|
+
|
180
|
+
• OpenAI Platform Documentation
|
181
|
+
<https://platform.openai.com/docs/overview>
|
182
|
+
for more information on obtaining access tokens
|
183
|
+
<https://platform.openai.com/account/api-keys>
|
184
|
+
and working with OpenAI models.
|
185
|
+
|
186
|
+
• mods <https://github.com/charmbracelet/mods>
|
187
|
+
for more information on mods - AI for the command line, built
|
188
|
+
for pipelines. LLM based AI is really good at interpreting
|
189
|
+
the output of commands and returning the results in CLI
|
190
|
+
friendly text formats like Markdown. Mods is a simple tool
|
191
|
+
that makes it super easy to use AI on the command line and in
|
192
|
+
your pipelines. Mods works with OpenAI
|
193
|
+
<https://platform.openai.com/account/api-keys>
|
194
|
+
and LocalAI <https://github.com/go-skynet/LocalAI>
|
195
|
+
|
196
|
+
• sgpt <https://github.com/tbckr/sgpt>
|
197
|
+
(aka shell-gpt) is a powerful command-line interface (CLI)
|
198
|
+
tool designed for seamless interaction with OpenAI models
|
199
|
+
directly from your terminal. Effortlessly run queries,
|
200
|
+
generate shell commands or code, create images from text, and
|
201
|
+
more, using simple commands. Streamline your workflow and
|
202
|
+
enhance productivity with this powerful and user-friendly CLI
|
203
|
+
tool.
|
204
|
+
|
205
|
+
AUTHOR
|
206
|
+
Dewayne VanHoozer <dvanhoozer@gmail.com>
|
207
|
+
|
208
|
+
AIA 2024-01-01 aia(1)
|
122
209
|
|
123
|
-
OPENAI_ACCESS_TOKEN
|
124
|
-
OPENAI_API_KEY
|
125
210
|
```
|
126
211
|
|
212
|
+
## System Environment Variables (envar)
|
213
|
+
|
214
|
+
The `aia` configuration defaults can be over-ridden by envars with the prefix "AIA_" followed by the config item name also in uppercase.
|
215
|
+
|
216
|
+
| Config Item | Default Value | envar key |
|
217
|
+
| ------------- | ------------- | --------- |
|
218
|
+
| backend | mods | AIA_BACKEND |
|
219
|
+
| config_file | nil | AIA_CONFIG_FILE |
|
220
|
+
| debug | false | AIA_DEBUG |
|
221
|
+
| edit | false | AIA_EDIT |
|
222
|
+
| extra | '' | AIA_EXTRA |
|
223
|
+
| fuzzy | false | AIA_FUZZY |
|
224
|
+
| log_file | ~/.prompts/_prompts.log | AIA_LOG_FILE |
|
225
|
+
| markdown | true | AIA_MARKDOWN |
|
226
|
+
| model | gpt-4-1106-preview | AIA_MODEL |
|
227
|
+
| output_file | temp.md | AIA_OUTPUT_FILE |
|
228
|
+
| prompts_dir | ~/.prompts | AIA_PROMPTS_DIR |
|
229
|
+
| VERBOSE | FALSE | AIA_VERBOSE |
|
230
|
+
|
231
|
+
|
232
|
+
See the `@options` hash in the `cli.rb` file for a complete list. There are some config items that do not necessarily make sense for use as an envar over-ride. For example if you set `export AIA_DUMP=yaml` then `aia` would dump a config file in HAML format and exit every time it is ran until you finally did `unset AIA_DUMP`
|
233
|
+
|
127
234
|
## External CLI Tools Used
|
128
235
|
|
129
236
|
From the verbose help text ...
|
@@ -156,10 +263,13 @@ export EDITOR="subl -w"
|
|
156
263
|
|
157
264
|
## Shell Completion
|
158
265
|
|
159
|
-
|
266
|
+
You can setup a completion function in your shell that will complete on the prompt_id saved in your `prompts_dir` - functions for `bash`, `fish` and `zsh` are available. To get a copy of these functions do this:
|
267
|
+
|
268
|
+
> `aia --completion bash`
|
160
269
|
|
161
|
-
|
270
|
+
If you're not a fan of "born again" replace `bash` with one of the others.
|
162
271
|
|
272
|
+
Copy the function to a place where it can be installed in your shell's instance. This might be a `.profile` or `.bashrc` file, etc.
|
163
273
|
|
164
274
|
## Development
|
165
275
|
|
data/Rakefile
CHANGED
data/justfile
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# aia/main.just
|
2
|
+
#
|
3
|
+
# Support man pages with ...
|
4
|
+
# gem install kramdown-man
|
5
|
+
#
|
6
|
+
|
7
|
+
RR := env_var('RR')
|
8
|
+
|
9
|
+
# with ~/.justfile
|
10
|
+
|
11
|
+
# >>> /Users/dewayne/.justfile
|
12
|
+
# ~/.justfile
|
13
|
+
# brew install just
|
14
|
+
# gem install justprep OR brew install justprep for the Crystal version
|
15
|
+
# alias jj='justprep && just'
|
16
|
+
#
|
17
|
+
# See: https://cheatography.com/linux-china/cheat-sheets/justfile/
|
18
|
+
#
|
19
|
+
|
20
|
+
# high-level just directives
|
21
|
+
|
22
|
+
set fallback # search up for recipe name if not found locally.
|
23
|
+
|
24
|
+
set positional-arguments := true
|
25
|
+
set allow-duplicate-recipes := true
|
26
|
+
set dotenv-load := false
|
27
|
+
|
28
|
+
# my common variables
|
29
|
+
|
30
|
+
pwd := env_var('PWD')
|
31
|
+
|
32
|
+
me := justfile()
|
33
|
+
home := env_var('HOME')
|
34
|
+
backup_dir := env_var('JUST_BACKUP_DIR')
|
35
|
+
backup_file := trim_start_match(me, home)
|
36
|
+
my_backup := backup_dir + backup_file
|
37
|
+
project := "`basename $RR`"
|
38
|
+
|
39
|
+
|
40
|
+
# List available recipes
|
41
|
+
@list:
|
42
|
+
echo
|
43
|
+
echo "Available Recipes at"
|
44
|
+
echo "$PWD"
|
45
|
+
echo "are:"
|
46
|
+
echo
|
47
|
+
just -l --list-prefix 'jj ' --list-heading ''
|
48
|
+
echo
|
49
|
+
echo "jj <module_name> to see sub-tasks"
|
50
|
+
echo
|
51
|
+
|
52
|
+
|
53
|
+
# Show help/usage for "just" command
|
54
|
+
@help: list
|
55
|
+
just --help
|
56
|
+
|
57
|
+
|
58
|
+
# Backup .envrc & *.just files
|
59
|
+
@backup_support_files: _backup_all_just_files _backup_all_envrc_files
|
60
|
+
|
61
|
+
|
62
|
+
# Backup all changed just files to $JUST_BACKUP_DIR
|
63
|
+
@_backup_all_just_files:
|
64
|
+
backup_just.rb
|
65
|
+
|
66
|
+
|
67
|
+
# backup all changed envrc files to ENVRC_BACKUP_DIR
|
68
|
+
@_backup_all_envrc_files:
|
69
|
+
backup_envrc.rb
|
70
|
+
|
71
|
+
|
72
|
+
#################################################
|
73
|
+
## Private recipes
|
74
|
+
|
75
|
+
# Show private recipes
|
76
|
+
@show_private: # Show private recipes
|
77
|
+
grep -B 1 "^[@]_" {{justfile()}}
|
78
|
+
|
79
|
+
|
80
|
+
# Show the differences between this justfile and is last backup
|
81
|
+
@_just_diff_my_backup:
|
82
|
+
# echo "me -=> {{me}}"
|
83
|
+
# echo "home -=> {{home}}"
|
84
|
+
# echo "backup_file -=> {{backup_file}}"
|
85
|
+
# echo "my_backup -=> {{my_backup}}"
|
86
|
+
|
87
|
+
@diff {{me}} {{my_backup}}
|
88
|
+
|
89
|
+
|
90
|
+
# Replace current justfile with most recent backup
|
91
|
+
@_just_restore_me_from_backup:
|
92
|
+
echo
|
93
|
+
echo "Do this because I will not ..."
|
94
|
+
echo
|
95
|
+
echo "cp -f {{my_backup}} {{me}}"
|
96
|
+
echo
|
97
|
+
|
98
|
+
|
99
|
+
# Edit the $JUSTPREP_FILENAME_IN file
|
100
|
+
@_just_edit_me:
|
101
|
+
$EDITOR {{me}}
|
102
|
+
# <<< /Users/dewayne/.justfile
|
103
|
+
|
104
|
+
# FIXME: justprep module process still has an issue with ~ and $HOME
|
105
|
+
# FIXME: justprep does not like more than one space between module name and path.
|
106
|
+
|
107
|
+
module_repo := "/Users/dewayne/sandbox/git_repos/repo.just"
|
108
|
+
module_gem := "/Users/dewayne/sandbox/git_repos/gem.just"
|
109
|
+
module_version := "/Users/dewayne/just_modules/version.just"
|
110
|
+
|
111
|
+
|
112
|
+
# Preview man page
|
113
|
+
preview_man_page:
|
114
|
+
kramdown-man {{RR}}/man/aia.1.md
|
115
|
+
|
116
|
+
|
117
|
+
# View man page
|
118
|
+
view_man_page: create_man_page
|
119
|
+
man {{RR}}/man/aia.1
|
120
|
+
|
121
|
+
|
122
|
+
# Create man page
|
123
|
+
create_man_page:
|
124
|
+
rake man
|
125
|
+
|
126
|
+
##########################################
|
127
|
+
|
128
|
+
# Tag the current commit, push it, then bump the version
|
129
|
+
tag_push_and_bump: tag push bump
|
130
|
+
|
131
|
+
|
132
|
+
# Create a git tag for the current version
|
133
|
+
tag:
|
134
|
+
git tag $(semver)
|
135
|
+
|
136
|
+
# Push the git current working directory and all tags
|
137
|
+
push:
|
138
|
+
git push
|
139
|
+
git push origin --tags
|
140
|
+
|
141
|
+
|
142
|
+
alias inc := bump
|
143
|
+
|
144
|
+
# Increament version's level: major.minor.patch
|
145
|
+
@bump level='patch':
|
146
|
+
semver increment {{level}}
|
147
|
+
echo "Now working on: $(semver)"
|
148
|
+
git add {{RR}}/.semver
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
# Module repo
|
153
|
+
@repo what='' args='':
|
154
|
+
just -d . -f {{module_repo}} {{what}} {{args}}
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
# Module gem
|
159
|
+
@gem what='' args='':
|
160
|
+
just -d . -f {{module_gem}} {{what}} {{args}}
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
# Module version
|
165
|
+
@version what='' args='':
|
166
|
+
just -d . -f {{module_version}} {{what}} {{args}}
|
167
|
+
|