Metadata-Version: 2.4
Name: llmkit-cli
Version: 0.1.0
Summary: Run any LLM with one config file. No framework lock-in.
License: MIT
Project-URL: Homepage, https://github.com/abinzagr/llmkit
Project-URL: Repository, https://github.com/abinzagr/llmkit
Keywords: llm,ai,openai,anthropic,groq,cli
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: pyyaml
Requires-Dist: python-dotenv
Requires-Dist: requests
Requires-Dist: openai
Requires-Dist: anthropic
Requires-Dist: groq
Provides-Extra: all
Requires-Dist: together; extra == "all"
Requires-Dist: mistralai; extra == "all"
Requires-Dist: chromadb; extra == "all"
Requires-Dist: mcp; extra == "all"

# llmkit

Run any LLM — local or via API — with one config file. No framework lock-in. Works on Windows, Mac, Linux.

```bash
llmkit run "explain this codebase in one sentence"
```

## Install

```bash
# Linux
bash install.sh

# Mac
bash install.mac.sh

# Windows (PowerShell as admin)
./install.ps1
```

Each script installs deps, sets up Ollama if needed, and adds `llmkit` to your PATH.

## Configure

Edit `llm.yaml` (or run `llmkit init` for a guided setup):

```yaml
provider: groq          # local | openai | anthropic | groq | together | deepseek | mistral
model: llama-3.3-70b-versatile
mode: chat
```

For API providers, copy `.env.example` to `.env` and add your key.

## Commands

```bash
# One-shot prompt
llmkit run "explain this codebase in one sentence"

# Validate config + check provider reachability
llmkit check

# Interactive wizard to create llm.yaml
llmkit init

# Pin current model to llm.lock (commit this file)
llmkit lock

# Generate a commit message from staged changes
llmkit commit

# Generate a PR title + body vs main/master
llmkit pr

# Review staged/unstaged diff for bugs
llmkit review

# Run a coding agent on a task
llmkit agent "refactor this module to use dataclasses"

# Plan only — no tools executed, just a numbered plan
llmkit agent --plan "add pagination to the API"

# Approve mode — confirm each shell command before it runs
llmkit agent --approve "run the test suite and fix any failures"
```

## Examples

```bash
# Chat
python examples/chat.py
node examples/chat.js          # all providers including Anthropic

# Streaming
python examples/stream.py
node examples/stream.js        # all providers including Anthropic

# Function calling / tools
python examples/tools.py

# Vision (image input)
python examples/vision.py

# Multi-round conversation
python examples/multiround.py

# Embeddings + cosine similarity
python examples/embed.py

# Coding agent
python examples/agent.py

# MCP agent (connects to MCP servers defined in llm.yaml)
python examples/mcp_agent.py
```

## Local models (via Ollama)

| Model | Config |
|---|---|
| Llama 4 | `model: llama4` |
| Qwen 3 | `model: qwen3` |
| DeepSeek R1 | `model: deepseek-r1` |
| Mistral | `model: mistral` |
| Phi-4 | `model: phi4` |
| Gemma 3 | `model: gemma3` |

## API providers

| Provider | Env key | Fast cheap model |
|---|---|---|
| OpenAI | `OPENAI_API_KEY` | `gpt-4o-mini` |
| Anthropic | `ANTHROPIC_API_KEY` | `claude-3-5-haiku-20241022` |
| Groq | `GROQ_API_KEY` | `llama-3.1-8b-instant` |
| Together | `TOGETHER_API_KEY` | `meta-llama/Llama-3.3-70B-Instruct-Turbo` |
| DeepSeek | `DEEPSEEK_API_KEY` | `deepseek-chat` |
| Mistral | `MISTRAL_API_KEY` | `mistral-small-latest` |

## 5-minute team setup

```bash
# 1 — clone
git clone https://github.com/your-org/llmkit
cd llmkit

# 2 — install deps + register llmkit command
bash install.sh          # Mac: bash install.mac.sh  |  Windows: ./install.ps1

# 3 — set one API key (Groq free tier works)
echo "GROQ_API_KEY=your_key_here" > .env

# 4 — verify everything is wired up
llmkit check

# 5 — run your first prompt
llmkit run "explain this codebase in one sentence"
```

No server. No IDE extension. No code to write. Switch providers by editing one line in `llm.yaml`.

## llm.lock

Run `llmkit lock` to pin your model runtime. Commit `llm.lock` alongside your code:

```yaml
# Auto-generated — commit this file to pin your model runtime
locked_at: "2026-06-26T12:00:00Z"
provider: groq
model: llama-3.3-70b-versatile
mode: chat
```

Same idea as `package-lock.json` — reproducible environments, no surprise model swaps between teammates.

## Switch providers

Change one line in `llm.yaml`, run `llmkit check`, done:

```yaml
# was: provider: groq
provider: anthropic
model: claude-3-5-haiku-20241022
```

No code changes. No redeploy. Works in CI too.
