2024-06-23 14:37:00 -06:00
# lmcli - Large Language Model CLI
2023-11-05 02:18:06 -07:00
2024-06-23 14:37:00 -06:00
`lmcli` is a versatile command-line interface for interacting with LLMs and LMMs.
2023-11-05 02:18:06 -07:00
2024-06-23 14:37:00 -06:00
## Features
2023-11-13 21:33:24 -07:00
2024-06-23 14:37:00 -06:00
- Multiple model backends (Ollama, OpenAI, Anthropic, Google)
- Customizable agents with tool calling
- Persistent conversation management
- Message branching (edit and re-prompt to your heart's desire)
- Interactive terminal interface for seamless chat experiences
- Syntax highlighting!
2023-11-05 02:18:06 -07:00
2024-06-23 14:37:00 -06:00
## Screenshots
[TODO: Add screenshots of the TUI in action, showing different views and features]
## Installation
To install `lmcli` , make sure you have Go installed on your system, then run:
```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
# ...
2023-11-05 02:18:06 -07:00
```
2024-06-23 14:37:00 -06:00
Customize this file to add your own providers, agents, and models.
2024-06-23 15:15:03 -06:00
### Syntax highlighting
Syntax highlighting is performed by [Chroma ](https://github.com/alecthomas/chroma ).
Refer to [`Chroma/styles` ](https://github.com/alecthomas/chroma/tree/master/styles ) for available styles (TODO: add support for custom Chroma styles).
Available formatters:
- `terminal` - 8 colors
- `terminal16` - 16 colors
- `terminal256` - 256 colors
- `terminal16m` - true color (default)
2023-11-05 02:18:06 -07:00
## Usage
2024-06-23 14:37:00 -06:00
```console
2023-11-05 02:18:06 -07:00
$ lmcli help
2024-06-23 14:37:00 -06:00
lmcli - Large Language Model CLI
Usage:
lmcli < command > [flags]
lmcli [command]
Available Commands:
chat Open the chat interface
clone Clone conversations
completion Generate the autocompletion script for the specified shell
continue Continue a conversation from the last message
edit Edit the last user reply in a conversation
help Help about any command
list List conversations
new Start a new conversation
prompt Do a one-shot prompt
rename Rename a conversation
reply Reply to a conversation
retry Retry the last user reply in a conversation
rm Remove conversations
view View messages in a conversation
Flags:
-h, --help help for lmcli
Use "lmcli [command] --help" for more information about a command.
```
### Examples
Start a new chat with the `code-helper` agent:
```console
$ lmcli chat --agent code-helper
```
Start a new conversation, imperative style (no tui):
```console
$ lmcli new "Help me plan meals for the next week"
```
Send a one-shot prompt (no persistence):
```console
$ lmcli prompt "What is the answer to life, the universe, and everything?"
```
## Agents
2024-06-23 15:19:34 -06:00
Agents in `lmcli` combine a system prompt with a set of available tools. Agents are defined in`config.yaml` and you use them with the `-a` /`--agent` flag.
2024-06-23 14:37:00 -06:00
Example:
2024-06-23 15:19:34 -06:00
```console
$ lmcli chat -a financier
2023-11-05 02:18:06 -07:00
```
2024-06-23 15:19:34 -06:00
Agent functionality is expected to be expanded on, bringing them to close parity with something like OpenAI's "Assistants" feature.
2024-06-23 14:37:00 -06:00
## Tools
2024-06-23 15:19:34 -06:00
Tools in `lmcli` are used by agents to to acquire information from and interact with external systems. The following built-in tools are available:
2024-06-23 14:37:00 -06:00
- `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 :)
More tool features are planned, including the to define arbitrary tools which call out to external scripts, tools to spawn sub-agents, perform web searches, etc.
## 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
To be determined
2023-11-05 02:18:06 -07:00
2024-06-23 14:37:00 -06:00
## Acknowledgements
2023-11-05 02:18:06 -07:00
2024-06-23 14:37:00 -06:00
`lmcli` is just a hobby project. Special thanks to the Go community and the creators of the libraries used in this project.