lmcli
is a (Large) Language Model CLI
pkg | ||
.gitignore | ||
go.mod | ||
go.sum | ||
main.go | ||
README.md | ||
TODO.md |
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
- Utilizes
$EDITOR
, write and edit prompts from the comfort of your own editor :) vi
-like bindings- 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:
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:
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: coder
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.
Syntax highlighting
Syntax highlighting is performed by Chroma.
Refer to Chroma/styles
for available styles (TODO: add support for custom Chroma styles).
Available formatters:
terminal
- 8 colorsterminal16
- 16 colorsterminal256
- 256 colorsterminal16m
- true color (default)
Agents
Agents in lmcli
combine a system prompt with a set of available tools. Agents are defined in config.yaml
and are called upon with the -a
/--agent
flag.
Agent functionality is expected to be expanded on, bringing them to close parity with something like OpenAI's "Assistants" feature.
Tools
Tools are used by agents to acquire information from and interact with external systems. The following built-in tools are available:
dir_tree
: Display a directory structureread_file
: Read the contents of a filewrite_file
: Write content to a filefile_insert_lines
: Insert lines at a specific position in a filefile_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 ability to define arbitrary tools which call out to external scripts, tools to spawn sub-agents, perform web searches, etc.
Usage
$ 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 coder
agent:
$ lmcli chat --agent coder
Start a new conversation, imperative style (no tui):
$ lmcli new "Help me plan meals for the next week"
Send a one-shot prompt (no persistence):
$ lmcli prompt "What is the answer to life, the universe, and everything?"
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 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.