A unified framework for accessing multiple LLM providers
Project description
MonoLLM
A powerful framework that provides a unified interface for multiple LLM providers, allowing developers to seamlessly switch between different AI models while maintaining consistent API interactions.
๐ Key Features
- ๐ Unified Interface: Access multiple LLM providers through a single, consistent API
- ๐ Proxy Support: Configure HTTP/SOCKS5 proxies for all LLM calls
- ๐บ Streaming: Real-time streaming responses for better user experience
- ๐ง Reasoning Models: Special support for reasoning models with thinking steps
- ๐ก๏ธ Temperature Control: Fine-tune creativity and randomness when supported
- ๐ข Token Management: Control costs with maximum output token limits
- ๐ง MCP Integration: Model Context Protocol support when available
- ๐ฏ OpenAI Protocol: Prefer OpenAI-compatible APIs for consistency
- โ๏ธ JSON Configuration: Easy configuration management through JSON files
๐ Supported Providers
| Provider | Status | Streaming | Reasoning | MCP | OpenAI Protocol |
|---|---|---|---|---|---|
| OpenAI | โ Ready | โ Yes | โ Yes | โ Yes | โ Yes |
| Anthropic | โ Ready | โ Yes | โ No | โ Yes | โ No |
| Google Gemini | ๐ง Planned | โ Yes | โ No | โ No | โ No |
| Qwen (DashScope) | โ Ready | โ Yes | โ Yes | โ No | โ Yes |
| DeepSeek | โ Ready | โ Yes | โ Yes | โ No | โ Yes |
| Volcengine | ๐ง Planned | โ Yes | โ No | โ No | โ Yes |
๐ ๏ธ Installation
Prerequisites
- Python 3.13+ (required)
- uv (recommended) or pip
Quick Install
# Clone the repository
git clone https://github.com/cyborgoat/unified-llm.git
cd unified-llm
# Install with uv (recommended)
uv sync
uv pip install -e .
# Or install with pip
pip install -e .
Verify Installation
# Check CLI is working
unified-llm --help
# List available providers
unified-llm list-providers
โก Quick Start
1. Set up API Keys
# Set API keys for the providers you want to use
export DASHSCOPE_API_KEY="your-dashscope-api-key" # For Qwen
export ANTHROPIC_API_KEY="your-anthropic-api-key" # For Claude
export OPENAI_API_KEY="your-openai-api-key" # For GPT models
2. Basic Python Usage
import asyncio
from monollm import UnifiedLLMClient, RequestConfig
async def main():
async with UnifiedLLMClient() as client:
config = RequestConfig(
model="qwq-32b", # Qwen's reasoning model
temperature=0.7,
max_tokens=1000,
)
response = await client.generate(
"Explain quantum computing in simple terms.",
config
)
print(response.content)
if response.usage:
print(f"Tokens used: {response.usage.total_tokens}")
asyncio.run(main())
3. CLI Usage
# Generate text with streaming
unified-llm generate "What is artificial intelligence?" --model qwen-plus --stream
# Use reasoning model with thinking steps
unified-llm generate "Solve: 2x + 5 = 13" --model qwq-32b --thinking
# List available models
unified-llm list-models --provider qwen
๐ Documentation
- ๐ Full Documentation - Comprehensive guides and API reference
- ๐ Quick Start Guide - Get up and running in minutes
- โ๏ธ Configuration Guide - Advanced configuration options
- ๐ป CLI Documentation - Command-line interface guide
- ๐ง Examples - Practical usage examples
๐ฏ Use Cases
Content Generation
config = RequestConfig(model="qwen-plus", temperature=0.8, max_tokens=1000)
response = await client.generate("Write a blog post about renewable energy", config)
Code Assistance
config = RequestConfig(model="qwq-32b", temperature=0.2)
response = await client.generate("Explain this Python function: def fibonacci(n):", config)
Reasoning & Analysis
config = RequestConfig(model="qwq-32b", show_thinking=True)
response = await client.generate("Analyze this data and find trends", config)
Creative Writing
config = RequestConfig(model="qwen-plus", temperature=1.0, max_tokens=2000)
response = await client.generate("Write a science fiction short story", config)
๐ง Advanced Features
Streaming Responses
async for chunk in await client.generate_stream(prompt, config):
if chunk.content:
print(chunk.content, end="", flush=True)
Multi-turn Conversations
messages = [
Message(role="system", content="You are a helpful assistant."),
Message(role="user", content="Hello!"),
]
response = await client.generate(messages, config)
Error Handling
from monollm.core.exceptions import UnifiedLLMError, ProviderError
try:
response = await client.generate(prompt, config)
except ProviderError as e:
print(f"Provider error: {e}")
except UnifiedLLMError as e:
print(f"UnifiedLLM error: {e}")
๐ Proxy Support
Configure HTTP/SOCKS5 proxies:
export PROXY_ENABLED=true
export PROXY_TYPE=http
export PROXY_HOST=127.0.0.1
export PROXY_PORT=7890
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Setup
# Clone and install in development mode
git clone https://github.com/cyborgoat/unified-llm.git
cd unified-llm
uv sync --dev
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
# Build documentation
cd docs && make html
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Links
- GitHub: https://github.com/cyborgoat/unified-llm
- Documentation: https://cyborgoat.github.io/unified-llm/
- Issues: https://github.com/cyborgoat/unified-llm/issues
- Discussions: https://github.com/cyborgoat/unified-llm/discussions
๐ Acknowledgments
- Thanks to all the LLM providers for their amazing APIs
- Inspired by the need for a unified interface across multiple AI providers
- Built with modern Python async/await patterns for optimal performance
๐จโ๐ป Author
Created and maintained by cyborgoat
Made with โค๏ธ by cyborgoat
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 monollm-0.1.1-py3-none-any.whl.
File metadata
- Download URL: monollm-0.1.1-py3-none-any.whl
- Upload date:
- Size: 41.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7668cb44302001c79deb145bba3c2e5418441efd0de8f03e6e0b831910f580d1
|
|
| MD5 |
40c7f3811487e58da64dd87fda1802aa
|
|
| BLAKE2b-256 |
e71b5b01372e02e53c95f4c6fb67dd228cf5e6858cc58953f1b6a04cac755818
|