Python client for connecting to LocalLab servers - Interact with AI models running on LocalLab
Project description
LocalLab Python Client
Official Python client for LocalLab - A local LLM server.
Features
- 🚀 Async/await API
- 📊 Batch processing
- 🌊 Streaming support
- 💬 Chat completion
- 🔍 Model management
- 📈 System monitoring
- 🔒 Type-safe with Pydantic
- 🌐 WebSocket support
Installation
pip install locallab-client
# or
poetry add locallab-client
Quick Start
import asyncio
from locallab.client import LocalLabClient
async def main():
# Initialize client
client = LocalLabClient({
"base_url": "http://localhost:8000",
"api_key": "your-api-key", # Optional
})
try:
# Basic generation
response = await client.generate("Hello, how are you?")
print(response.response)
finally:
await client.close()
if __name__ == "__main__":
asyncio.run(main())
Usage Examples
Text Generation
# Basic generation
response = await client.generate("Hello, how are you?")
print(response.response)
# Generation with options
response = await client.generate("Hello", {
"temperature": 0.7,
"max_length": 100,
})
# Streaming generation
async for token in client.stream_generate("Tell me a story"):
print(token, end="", flush=True)
Chat Completion
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"},
]
response = await client.chat(messages)
print(response.choices[0].message.content)
Batch Processing
prompts = [
"What is 2+2?",
"Who wrote Romeo and Juliet?",
"What is the speed of light?",
]
response = await client.batch_generate(prompts)
for i, answer in enumerate(response.responses, 1):
print(f"{i}. {answer}")
Model Management
# List available models
models = await client.list_models()
print(models)
# Load a specific model
await client.load_model("mistral-7b")
# Get current model info
current_model = await client.get_current_model()
print(current_model)
System Monitoring
# Get system information
system_info = await client.get_system_info()
print(f"CPU Usage: {system_info.cpu_usage}%")
print(f"Memory Usage: {system_info.memory_usage}%")
if system_info.gpu_info:
print(f"GPU: {system_info.gpu_info.device}")
# Check system health
is_healthy = await client.health_check()
print(is_healthy)
WebSocket Connection
# Connect to WebSocket
await client.connect_ws()
# Subscribe to messages
async def message_handler(data):
print("Received:", data)
await client.on_message(message_handler)
# Disconnect when done
await client.disconnect_ws()
API Reference
Client Configuration
class LocalLabConfig(BaseModel):
base_url: str
api_key: Optional[str] = None
timeout: float = 30.0
retries: int = 3
headers: Dict[str, str] = Field(default_factory=dict)
Generation Options
class GenerateOptions(BaseModel):
model_id: Optional[str] = None
max_length: Optional[int] = None
temperature: Optional[float] = None
top_p: Optional[float] = None
stream: bool = False
Response Types
class GenerateResponse(BaseModel):
response: str
model_id: str
usage: Usage
class ChatResponse(BaseModel):
choices: List[ChatChoice]
usage: Usage
Error Handling
The client throws typed exceptions that you can catch and handle:
try:
await client.generate("Hello")
except ValidationError as e:
print("Validation error:", e.field_errors)
except RateLimitError as e:
print(f"Rate limit exceeded. Retry after {e.retry_after}s")
except LocalLabError as e:
print(f"Error {e.code}: {e.message}")
Development
Installation
# Install dependencies
pip install -e ".[dev]"
Testing
# Run tests
pytest
# Run tests with coverage
pytest --cov=locallab
Linting
# Run linters
flake8 locallab
mypy locallab
Formatting
# Format code
black locallab
isort locallab
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 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 locallab_client-1.0.3.tar.gz.
File metadata
- Download URL: locallab_client-1.0.3.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
502662bd4483b190b6c4affeab0c2b752e3b2b943585aec28cf81efe29e7e987
|
|
| MD5 |
2b7fe09619a76e44a8cc7057a1a60075
|
|
| BLAKE2b-256 |
3d5fd04d5e5f482156bc887545d2276c23b1a8c0cc0ad00585e1914df389c317
|
File details
Details for the file locallab_client-1.0.3-py3-none-any.whl.
File metadata
- Download URL: locallab_client-1.0.3-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fdf35829590cfedc81fdf86b420e386907f15363b8197c0b33ea9b5aceb87a4
|
|
| MD5 |
a6c55d76a0c69160c578444961249308
|
|
| BLAKE2b-256 |
d32c7e5b0887f6dc9ea004b3053636367419d5417313370fbdfd87dff602bd0c
|