Multi-model AI Chat at the CLI featuring round-table discussions
Project description
Multi-model AI Chat at the CLI ai featuring round-table discussions
A powerful command-line interface for interacting with multiple AI models, featuring round-table discussions where different AI models can collaborate and critique each other's responses.
๐ Quick Start
Installation
pipx install ai-cli-chat
Basic Setup
Configure API Keys (choose your preferred method):
ai init
This will create ~/.ai-cli/config.toml and ~/.ai-cli/.env template
To get a quick start, fulfill the API key in the ~/.ai-cli/.env file, i.e
OPENAI_API_KEY=xxx
Verify Setup:
ai version
ai chat "Hello there!"
โจ Features
- ๐ค Multi-Model Support: OpenAI GPT-4, Anthropic Claude, Google Gemini, Ollama (local models)
- ๐ฌ Three Interaction Modes:
- Single Chat: Quick one-off conversations
- Interactive Session: Multi-turn conversations with history
- Round-Table Discussions: Multiple AI models discussing topics together
- โก Real-time Streaming: See responses as they're generated
- ๐จ Rich Terminal UI: Beautiful formatting with markdown support
- โ๏ธ Flexible Configuration: Per-model settings, API key management
Usage Examples
Single Chat
# Quick question
ai chat "What is machine learning?"
# Use specific model
ai chat --model anthropic/claude-3-sonnet "Explain quantum computing"
Interactive Session
# Start interactive mode
ai interactive
# Within interactive mode:
# /help - Show available commands
# /model gpt-4 - Switch to different model
# /roundtable - Start round-table discussion
# /exit - Exit session
Round-Table Discussions
The roundtable uses a role-based system where different roles (generator, critic, refiner, evaluator) can be assigned to different models or use a single model for all roles.
[roundtable]
# Enable specific roles (defaults to all roles)
enabled_roles = ["generator", "critic", "refiner"]
# Map roles to specific models
[roundtable.role_model_mapping]
generator = "openai/gpt-4"
critic = "gemini"
...
[models."openai/gpt-4"]
provider = "openai"
model = "gpt-4"
...
[models.gemini]
provider = "gemini"
model = "gemini-2.5-flash"
...
# Multiple AI models discuss a topic
ai chat -rt "give me 3 domain name suggestion for a b2c saas that help user to convert their fav newsletter into podcast"
# Parallel responses (all models respond simultaneously)
ai chat --roundtable --parallel "Compare Python vs JavaScript"
๐ ๏ธ Configuration
Model Management
# List available models
ai config list
# Add a new model
ai config add-model my-gpt4 \
--provider openai \
--model gpt-4 \
--api-key env:OPENAI_API_KEY
# Set default model
ai config set default_model my-gpt4
Round-Table Setup
# Add models to round-table discussions
ai config roundtable --add openai/gpt-4
ai config roundtable --add anthropic/claude-3-5-sonnet
# List round-table participants
ai config roundtable --list
Environment Variables
# Check environment status
ai config env --show
# Create example .env file
ai config env --init
๐ Template Configurations
The project includes several pre-built configuration templates in config-examples/ for common use cases:
Available Templates
- basic-roundtable.toml - Simple two-model collaborative discussion
- multi-model-roundtable.toml - Complex discussions with multiple models and roles
- creative-writing.toml - Optimized for creative writing and storytelling
- code-review.toml - Technical code review and programming discussions
- research-analysis.toml - Academic research and analytical tasks
- debate-format.toml - Structured debates between models
- problem-solving.toml - Collaborative problem-solving sessions
Using Templates
# Method 1: Copy a template to your config directory
cp config-examples/basic-roundtable.toml ~/.ai-cli/config.toml
# Method 2: Initialize base config then customize
ai init
ai config roundtable --add openai/gpt-4
ai config roundtable --add anthropic/claude-3-5-sonnet
Role-based Configuration Example
[roundtable]
# Enable specific roles (defaults to all roles if not specified)
enabled_roles = ["generator", "critic", "refiner", "evaluator"]
# Map roles to specific models
[roundtable.role_model_mapping]
generator = "openai/gpt-4"
critic = "anthropic/claude-3-5-sonnet"
refiner = "gemini"
discussion_rounds = 3
# Optional: Restrict which roles specific models can play
# System uses 4 predefined roles: generator, critic, refiner, evaluator
[roundtable.role_assignments]
"openai/gpt-4" = ["generator", "refiner"] # Best for creative generation
"anthropic/claude-3-5-sonnet" = ["critic", "evaluator"] # Best for analysis
[models."openai/gpt-4"]
provider = "openai"
model = "gpt-4"
api_key = "env:OPENAI_API_KEY"
temperature = 0.8 # Higher creativity for generation tasks
[models."anthropic/claude-3-5-sonnet"]
provider = "anthropic"
model = "claude-3-5-sonnet"
api_key = "env:ANTHROPIC_API_KEY"
temperature = 0.3 # Lower temperature for critical analysis
[models.gemini]
provider = "gemini"
model = "gemini-2.0-flash-thinking-exp"
api_key = "env:GEMINI_API_KEY"
# No role restrictions - can play any of the 4 roles
๐ Supported Models
| Provider | Model | Notes |
|---|---|---|
| OpenAI | gpt-4, gpt-3.5-turbo | Requires OPENAI_API_KEY |
| Anthropic | claude-3-5-sonnet, claude-3-haiku | Requires ANTHROPIC_API_KEY |
| gemini-pro | Requires GEMINI_API_KEY |
|
| Ollama | llama2, codellama, etc. | Local models, no API key needed |
๐ง Advanced Configuration
The CLI stores configuration in ~/.ai-cli/config.toml. You can customize:
- Model Settings: Temperature, max tokens, context window, API endpoints
- Round-Table Behavior: Discussion rounds, role-based prompting, parallel responses
- UI Preferences: Theme, streaming, formatting, model icons
- Role Assignments: Which models can play which of the 4 predefined roles
Complete Configuration Example
default_model = "openai/gpt-4"
# Individual model configurations
[models."openai/gpt-4"]
provider = "openai"
model = "gpt-4"
api_key = "env:OPENAI_API_KEY"
temperature = 0.7
max_tokens = 4000
timeout_seconds = 30
[models."anthropic/claude-3-5-sonnet"]
provider = "anthropic"
model = "claude-3-5-sonnet"
api_key = "env:ANTHROPIC_API_KEY"
temperature = 0.8
max_tokens = 8000
# Additional model configurations
[models."gemini/gemini-pro"]
provider = "gemini"
model = "gemini-pro"
api_key = "env:GEMINI_API_KEY"
temperature = 0.7
max_tokens = 4000
# Round-table configuration
[roundtable]
# All roles enabled by default, or specify which ones to use
enabled_roles = ["generator", "critic", "refiner", "evaluator"]
# Option 1: Map roles to specific models
[roundtable.role_model_mapping]
generator = "openai/gpt-4"
critic = "anthropic/claude-3-5-sonnet"
# Option 2: Use one model for all roles
# solo_model = "openai/gpt-4"
discussion_rounds = 3
parallel_responses = false
use_role_based_prompting = true
role_rotation = true
timeout_seconds = 60
# UI customization
[ui]
theme = "dark"
streaming = true
format = "markdown"
show_model_icons = true
Configuration Sections Explained
Model Settings:
temperature: Creativity level (0.0-2.0)max_tokens: Response length limitprovider: AI provider (openai, anthropic, gemini, ollama)model: Specific model nameapi_key: API key (can use env: prefix)endpoint: Custom API endpoint (optional)
Round-table Options:
use_role_based_prompting: Enable specialized rolesrole_rotation: Models switch roles between roundsdiscussion_rounds: Number of conversation rounds
UI Customization:
show_model_icons: Display model indicators
๐ค Round-Table Discussions Explained
Round-table mode is the unique selling point of AI CLI, featuring advanced role-based prompting that goes beyond simple multi-model chat:
Core Features
- Sequential Mode (default): Models respond one after another, building on previous responses
- Parallel Mode (
--parallel): All models respond to the original prompt simultaneously - Role-based Prompting: Automatic assignment of 4 predefined roles (generator, critic, refiner, evaluator)
- Multiple Rounds: Configurable discussion rounds for deeper exploration
- Role Rotation: Models can switch roles between rounds for diverse perspectives
Role-based Prompting Examples
Two-Model Roundtable (Sequential Roles):
ai chat --roundtable "How can we reduce customer churn in our SaaS product?"
# Round 1: GPT-4 (Generator) creates initial suggestions
# Round 1: Claude (Critic) analyzes and critiques GPT-4's suggestions
# Round 2: Claude (Refiner) improves the suggestions
# Round 2: GPT-4 (Critic) provides final critique
Multi-Model Roundtable (All 4 Roles):
ai chat --roundtable "Design a comprehensive social media strategy"
# Round 1: Models A&B (Generators) create different strategy approaches
# Round 1: Models C&D (Critics) analyze and identify issues
# Round 2: Models A&B (Refiners) improve strategies based on critiques
# Round 3: Model A (Evaluator) ranks all strategies and provides final recommendation
Role Rotation in Action:
ai chat --roundtable "Compare Python vs JavaScript for web development"
# GPT-4 starts as Generator โ becomes Critic in round 2
# Claude starts as Critic โ becomes Refiner in round 2
# System automatically rotates roles to get diverse perspectives
Why Role-based Round-tables?
- Structured Discussions: 4 predefined roles (generator, critic, refiner, evaluator) create organized conversations
- Quality Improvement: Iterative critique and refinement process enhances initial ideas
- Multiple Perspectives: Role rotation ensures models approach problems from different angles
- Automatic Workflow: System handles role assignment and prompt templating automatically
- Reduced Bias: Multiple models and roles minimize single-perspective limitations
This creates structured collaborative discussions where models systematically generate, critique, refine, and evaluate ideas - like having a well-organized brainstorming session with clear roles.
How Role-based Prompting Works
Implementation details:
- Role Templates: Hardcoded prompt templates for the 4 roles (generator, critic, refiner, evaluator)
- Automatic Assignment: System automatically assigns roles to models based on round and model count
- No Custom System Prompts: Individual models cannot have custom system prompts in configuration
- Role Behavior: Each role uses its predefined template from the
RolePromptTemplatesclass
๐งช Development
Setup
# Clone repository
git clone https://github.com/ai-cli/ai-cli.git
cd ai-cli
# Install with uv (recommended)
uv sync --extra dev
# Or with pip
pip install -e ".[dev]"
Testing
# Run tests
uv run pytest
# With coverage
uv run pytest --cov=ai_cli
# Run linting
uv run ruff check src/ai_cli/
uv run ruff format src/ai_cli/
uv run mypy src/ai_cli/
Pre-commit Hooks
uv run pre-commit install
Project Structure
ai-cli/
โโโ src/ai_cli/ # Main package source
โ โโโ __init__.py # Package initialization
โ โโโ cli.py # CLI entry point and commands
โ โโโ config/ # Configuration management
โ โ โโโ manager.py # Config file handling
โ โ โโโ models.py # Pydantic data models
โ โโโ core/ # Core business logic
โ โ โโโ chat.py # Chat engine and round-table logic
โ โ โโโ messages.py # Message data structures
โ โ โโโ roles.py # Role-based prompting system
โ โโโ providers/ # AI provider abstractions
โ โ โโโ base.py # Abstract provider interface
โ โ โโโ factory.py # Provider factory pattern
โ โ โโโ litellm_provider.py # LiteLLM implementation
โ โโโ ui/ # User interface components
โ โ โโโ interactive.py # Interactive chat session
โ โ โโโ streaming.py # Real-time response streaming
โ โโโ utils/ # Utility functions
โ โโโ env.py # Environment variable handling
โโโ tests/ # Test suite
โโโ config-examples/ # Template configurations
โโโ features-doc/ # Feature documentation
โโโ pyproject.toml # Project configuration
โโโ README.md # This file
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
๐ Acknowledgments
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_cli_chat-1.2.0.tar.gz.
File metadata
- Download URL: ai_cli_chat-1.2.0.tar.gz
- Upload date:
- Size: 211.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec6f7b787fdf1c9447821ff1c28e97f75cb8bf99d24087bb8d50b50941da0da3
|
|
| MD5 |
3c593755d42522e5b04b7b6556e2128f
|
|
| BLAKE2b-256 |
e7a14baca9c2d44037a96775e80a8b22b41f0a1f8a56d802f431ec802aef3e8a
|
Provenance
The following attestation bundles were made for ai_cli_chat-1.2.0.tar.gz:
Publisher:
release.yml on YusiZhang/ai-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_cli_chat-1.2.0.tar.gz -
Subject digest:
ec6f7b787fdf1c9447821ff1c28e97f75cb8bf99d24087bb8d50b50941da0da3 - Sigstore transparency entry: 420824289
- Sigstore integration time:
-
Permalink:
YusiZhang/ai-cli@3b69305272e63a1b41b5b6a0d2688a2848d6737b -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/YusiZhang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3b69305272e63a1b41b5b6a0d2688a2848d6737b -
Trigger Event:
push
-
Statement type:
File details
Details for the file ai_cli_chat-1.2.0-py3-none-any.whl.
File metadata
- Download URL: ai_cli_chat-1.2.0-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02ccd43c6c8f299ca3217e402d8846739baaf76dfad96554372b29ac0724a08f
|
|
| MD5 |
cd0dc0751df6f4a673e48bf1fc517e60
|
|
| BLAKE2b-256 |
80bfeda1f925a72f62be5161cb55b68f8fda90d6246c2bba89f301fdcedceeef
|
Provenance
The following attestation bundles were made for ai_cli_chat-1.2.0-py3-none-any.whl:
Publisher:
release.yml on YusiZhang/ai-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_cli_chat-1.2.0-py3-none-any.whl -
Subject digest:
02ccd43c6c8f299ca3217e402d8846739baaf76dfad96554372b29ac0724a08f - Sigstore transparency entry: 420824301
- Sigstore integration time:
-
Permalink:
YusiZhang/ai-cli@3b69305272e63a1b41b5b6a0d2688a2848d6737b -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/YusiZhang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3b69305272e63a1b41b5b6a0d2688a2848d6737b -
Trigger Event:
push
-
Statement type: