166 lines
4.2 KiB
Markdown
166 lines
4.2 KiB
Markdown
# lmcli - Large Language Model CLI
|
|
|
|
`lmcli` is a versatile command-line interface for interacting with LLMs and LMMs.
|
|
|
|
## Features
|
|
|
|
- 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!
|
|
|
|
## 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
|
|
# ...
|
|
```
|
|
|
|
Customize this file to add your own providers, agents, and models.
|
|
|
|
## Usage
|
|
|
|
Here's the default help output for `lmcli`:
|
|
|
|
```console
|
|
$ lmcli help
|
|
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
|
|
|
|
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 tool calling. The following built-in tools are currently available:
|
|
|
|
- `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
|
|
|
|
## Acknowledgements
|
|
|
|
`lmcli` is just a hobby project. Special thanks to the Go community and the creators of the libraries used in this project.
|