A Python library for interfacing with various LLM inference endpoints
Project description
SimpleModelRouter
A Python library for interfacing with various Large Language Model (LLM) inference endpoints, including OpenAI, Anthropic, and Ollama. The library provides a unified, async-first interface for interacting with different LLM providers.
Features
- Support for multiple LLM providers:
- OpenAI (GPT-3.5, GPT-4)
- Anthropic (Claude)
- Ollama (Local models)
- Async HTTP support using httpx
- Streaming responses for real-time text generation
- Unified interface across providers
- Type hints and comprehensive documentation
- Configurable API endpoints and models
- Error handling and retries
- Resource cleanup and connection management
Installation
Using pip
pip install simplemodelrouter
Using Poetry (recommended)
poetry add simplemodelrouter
For development:
# Clone the repository
git clone https://github.com/yourusername/simplemodelrouter.git
cd simplemodelrouter
# Install Poetry if you haven't already
curl -sSL https://install.python-poetry.org | python3 -
# Install dependencies including development tools
poetry install
Quick Start
import asyncio
from simplemodelrouter import OpenAIProvider, Message
async def main():
provider = OpenAIProvider(api_key="your-api-key")
messages = [Message(role="user", content="Hello!")]
response = await provider.chat(messages)
print(response.message.content)
await provider.close()
asyncio.run(main())
Detailed Usage
Provider Configuration
Each provider can be configured with:
- API key (required for OpenAI and Anthropic)
- Base URL (optional, for custom deployments)
- Default model (optional)
# OpenAI with custom configuration
openai = OpenAIProvider(
api_key="your-api-key",
base_url="https://api.custom-deployment.com/v1",
default_model="gpt-4"
)
# Anthropic with default configuration
anthropic = AnthropicProvider(
api_key="your-api-key"
)
# Ollama for local deployment
ollama = OllamaProvider(
base_url="http://localhost:11434",
default_model="llama2"
)
Chat Interface
The chat interface supports conversations with multiple messages:
messages = [
Message(role="system", content="You are a helpful assistant."),
Message(role="user", content="What's the weather like?"),
Message(role="assistant", content="I don't have access to current weather data."),
Message(role="user", content="What can you help me with?")
]
response = await provider.chat(
messages=messages,
temperature=0.7,
stream=False
)
Streaming Responses
All providers support streaming for both chat and completion endpoints:
async for chunk in await provider.chat(messages, stream=True):
print(chunk.message.content, end="", flush=True)
async for chunk in await provider.complete(prompt, stream=True):
print(chunk.text, end="", flush=True)
Error Handling
The library provides consistent error handling across providers:
try:
response = await provider.chat(messages)
except httpx.HTTPStatusError as e:
print(f"API error: {e.response.status_code}")
except httpx.RequestError as e:
print(f"Network error: {str(e)}")
finally:
await provider.close()
Resource Management
Always close providers when done to clean up resources:
try:
provider = OpenAIProvider(api_key="your-api-key")
# ... use provider ...
finally:
await provider.close()
Or use async context managers (coming soon):
async with OpenAIProvider(api_key="your-api-key") as provider:
response = await provider.chat(messages)
Examples
Check out the examples/ directory for more detailed examples:
chat_comparison.py: Compare responses from different providersstreaming_example.py: Demonstrate streaming capabilitieserror_handling.py: Show error handling scenarios
Development
-
Clone the repository:
git clone https://github.com/yourusername/simplemodelrouter.git cd simplemodelrouter
-
Install Poetry:
curl -sSL https://install.python-poetry.org | python3 -
-
Install dependencies:
poetry install -
Activate the virtual environment:
poetry shell -
Run tests:
poetry run pytest
-
Format code:
poetry run black simplemodelrouter poetry run isort simplemodelrouter
-
Type check:
poetry run mypy simplemodelrouter
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License
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 simplemodelrouter-0.1.2.tar.gz.
File metadata
- Download URL: simplemodelrouter-0.1.2.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.11.3 Darwin/23.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff573085204aeb773b09ad89eff2ef98c59ccf9b8f5189ddf85531ac931f268d
|
|
| MD5 |
c0ba22b2bf99e5c324e9290c86fe6e98
|
|
| BLAKE2b-256 |
f1e954e57bf04594ecb3039fc087733f63ffc98bf91abd969254b56eddf309b7
|
File details
Details for the file simplemodelrouter-0.1.2-py3-none-any.whl.
File metadata
- Download URL: simplemodelrouter-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.11.3 Darwin/23.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae38fd3471d73dc8dea09668ecafb6ed6bffd0d826dcf7045a1e9414d3a343c6
|
|
| MD5 |
2ab6ce0706f360b82c20b49dc92d4349
|
|
| BLAKE2b-256 |
c9186ed65682a9359b963dd07400eb51fa23c4e57a4438f2ffb33dede6fd5a89
|