Python client for LocalLab - A local LLM server
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
locallab_client-1.0.4.tar.gz
(5.3 kB
view details)
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.4.tar.gz.
File metadata
- Download URL: locallab_client-1.0.4.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d12deacae231a52a91004aabe55f89589f3dadb21d687db667a31fd27364c2c6
|
|
| MD5 |
dd31099c60a2d4ebb34a52fcca59d250
|
|
| BLAKE2b-256 |
f2e69285aec0033d0b7680b3fe42d3d6e7733fe8ea46ebd2bc0642f66808b992
|
File details
Details for the file locallab_client-1.0.4-py3-none-any.whl.
File metadata
- Download URL: locallab_client-1.0.4-py3-none-any.whl
- Upload date:
- Size: 3.2 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 |
4bdd325ecb0fc0ec6db659cc9c8be54fed36c203657819fe8913647f7754a155
|
|
| MD5 |
fbdcdc34f31efae1a7e933f30680b6fe
|
|
| BLAKE2b-256 |
283720db6715245c284e534dd0c06a0ce3d21d1e0b3fe6607dc211f46bd43c24
|