Compare commits

...

2 Commits

Author SHA1 Message Date
f899ce7f27 Update README.md 2024-06-23 20:37:00 +00:00
3a0d70db86 Update TODO 2024-06-23 20:06:59 +00:00
2 changed files with 113 additions and 42 deletions

153
README.md
View File

@ -1,59 +1,128 @@
# lmcli
# lmcli - Large Language Model CLI
`lmcli` is a (Large) Language Model CLI.
`lmcli` is a versatile command-line interface for interacting with LLMs and LMMs.
Current features:
- Perform one-shot prompts with `lmcli prompt <message>`
- Manage persistent conversations with the `new`, `reply`, `view`, `rm`,
`edit`, `retry`, `continue` sub-commands.
- Syntax highlighted output
- Tool calling, see the [Tools](#tools) section.
## Features
Maybe features:
- Chat-like interface (`lmcli chat`) for rapid back-and-forth conversations
- Support for additional models/APIs besides just OpenAI
- Multiple model backends (Ollama, OpenAI, Anthropic, Google)
- Customizable agents with tool calling
- Persistent conversation management
- Interactive terminal interface for seamless chat experiences
- Syntax highlighting!
## Tools
Tools must be explicitly enabled by adding the tool's name to the
`openai.enabledTools` array in `config.yaml`.
## Screenshots
Note: all filesystem related tools operate relative to the current directory
only. They do not accept absolute paths, and efforts are made to ensure they
cannot escape above the working directory). **Close attention must be paid to
where you are running `lmcli`, as the model could at any time decide to use one
of these tools to discover and read potentially sensitive information from your
filesystem.**
[TODO: Add screenshots of the TUI in action, showing different views and features]
It's best to only have tools enabled in `config.yaml` when you intend to be
using them, since their descriptions (see `pkg/cli/functions.go`) count towards
context usage.
## Installation
Available tools:
To install `lmcli`, make sure you have Go installed on your system, then run:
- `read_dir` - Read the contents of a directory.
- `read_file` - Read the contents of a file.
- `write_file` - Write contents to a file.
- `file_insert_lines` - Insert lines at a position within a file. Tricky for
the model to use, but can potentially save tokens.
- `file_replace_lines` - Remove or replace a range of lines within a file. Even
trickier for the model to use.
## Install
```shell
$ go install git.mlow.ca/mlow/lmcli@latest
```sh
go install git.mlow.ca/mlow/lmcli@latest
```
## Configuration
`lmcli` uses a YAML configuration file located at `~/.config/lmcli/config.yaml`. Here's a sample configuration:
```yaml
defaults:
model: claude-3-5-sonnet-20240620
maxTokens: 3072
temperature: 0.2
conversations:
titleGenerationModel: claude-3-haiku-20240307
chroma:
style: onedark
formatter: terminal16m
agents:
- name: code-helper
tools:
- dir_tree
- read_file
#- write_file
systemPrompt: |
You are an experienced software engineer...
# ...
providers:
- kind: ollama
models:
- phi3:instruct
- llama3:8b
- kind: anthropic
apiKey: your-api-key-here
models:
- claude-3-5-sonnet-20240620
- claude-3-opus-20240229
- claude-3-haiku-20240307
- kind: openai
apiKey: your-api-key-here
models:
- gpt-4o
- gpt-4-turbo
- name: openrouter
kind: openai
apiKey: your-api-key-here
baseUrl: https://openrouter.ai/api/
models:
- qwen/qwen-2-72b-instruct
# ...
```
Customize this file to add your own providers, agents, and models.
## Usage
Invoke `lmcli` at least once:
Here's the default help output for `lmcli`:
```shell
$ lmcli help
```
[TODO: Insert the output of `lmcli help` here]
```
Edit `~/.config/lmcli/config.yaml` and set `openai.apiKey` to your API key.
### Examples
Refer back to the output of `lmcli help` for usage.
Start a new chat:
```sh
lmcli chat --agent code-helper
```
Enjoy!
Send a one-shot prompt:
```sh
lmcli prompt "Explain the theory of everything"
```
## Agents
Agents in `lmcli` are configurations that combine a system prompt with a set of available tools. You can define agents in the `config.yaml` file and switch between them using the `--agent` or `-a` flag.
Example:
```sh
lmcli chat -a financier
```
## Tools
`lmcli` supports various tool calling. Currently built-in tools are:
- `dir_tree`: Display a directory structure
- `read_file`: Read the contents of a file
- `write_file`: Write content to a file
- `file_insert_lines`: Insert lines at a specific position in a file
- `file_replace_lines`: Replace a range of lines in a file
Obviously, some of these tools carry significant risk. Use wisely :)
## Contributing
Contributions to `lmcli` are welcome! Feel free to open issues or submit pull requests on the project repository.
For a full list of planned features and improvements, check out the [TODO.md](TODO.md) file.
## License
MIT
## Acknowledgements
`lmcli` is just a hobby project. Special thanks to the Go community and the creators of the libraries used in this project.

View File

@ -19,6 +19,8 @@
the conversation we had six months ago about X")
- [ ] Conversation categorization - model driven category creation and
conversation classification
- [ ] Image input
- [ ] Image output (sixel support?)
## UI
- [x] Prettify/normalize tool_call and tool_result outputs so they can be