Python SDK for CMDOP LLM Service - OpenAI-compatible API for 200+ AI models
Project description
CMDOP LLM Python SDK
Python SDK for CMDOP LLM Service - OpenAI-compatible API for 200+ AI models.
Installation
pip install cmdop-llm
Quick Start
from cmdop_llm import CmdopLLM
client = CmdopLLM(api_key="your-api-key")
response = client.chat.completions.create(
model="anthropic/claude-3.5-sonnet",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
Features
- Drop-in OpenAI replacement - Same API, different models
- 200+ Models - GPT-4, Claude, Llama, Mistral, Gemini via single endpoint
- Streaming - Real-time token streaming
- Tool Calling - Function calling support
- Structured Output - Parse responses to Pydantic models
- Embeddings - Text embeddings generation
- Vision & OCR - Image analysis and text extraction
- Image Generation - FLUX, DALL-E and other models
- Async Support - Full async/await support
Environment Variables
export CMDOP_API_KEY="your-api-key"
export CMDOP_BASE_URL="https://llm.cmdop.com/v1" # Optional, default
Usage Examples
Chat Completion
from cmdop_llm import CmdopLLM
client = CmdopLLM()
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing."}
],
temperature=0.7,
max_tokens=1000,
)
print(response.choices[0].message.content)
Streaming
stream = client.chat.completions.create(
model="anthropic/claude-3.5-sonnet",
messages=[{"role": "user", "content": "Write a poem."}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Tool Calling
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}
}]
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
tools=tools,
tool_choice="auto",
)
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
print(f"Function: {tool_call.function.name}")
print(f"Arguments: {tool_call.function.arguments}")
Vision Analysis
result = client.vision.analyze(
image_url="https://example.com/image.jpg",
prompt="Describe this image"
)
print(result.description)
print(result.extracted_text)
OCR Text Extraction
result = client.ocr.extract(
image_url="https://example.com/document.png"
)
print(result.text)
Image Generation
response = client.images.generate(
model="black-forest-labs/FLUX.1-schnell",
prompt="A futuristic cityscape",
size="1024x1024",
)
print(response.data[0].url)
Embeddings
response = client.embeddings.create(
model="openai/text-embedding-3-small",
input="Hello, world!"
)
print(response.data[0].embedding[:5]) # First 5 dimensions
Structured Output with Pydantic
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
city: str
# Parse response directly into Pydantic model
response = client.beta.chat.completions.parse(
model="openai/gpt-4o",
messages=[
{"role": "user", "content": "Extract: John is 30 years old and lives in Tokyo"}
],
response_format=Person,
)
person = response.choices[0].message.parsed
print(f"{person.name}, {person.age}, {person.city}") # John, 30, Tokyo
JSON Schema Response Format
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "List 3 colors"}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "colors",
"schema": {
"type": "object",
"properties": {
"colors": {"type": "array", "items": {"type": "string"}}
},
"required": ["colors"]
}
}
}
)
Async Usage
import asyncio
from cmdop_llm import AsyncCmdopLLM
async def main():
client = AsyncCmdopLLM()
response = await client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
asyncio.run(main())
Available Models
Access 200+ models including:
- OpenAI: gpt-4o, gpt-4o-mini, gpt-4-turbo
- Anthropic: claude-3.5-sonnet, claude-3-opus, claude-3-haiku
- Google: gemini-pro, gemini-1.5-pro
- Meta: llama-3.1-405b, llama-3.1-70b
- Mistral: mistral-large, mixtral-8x22b
- Image: FLUX.1-schnell, FLUX.1-pro, stable-diffusion-xl
Use model format: provider/model-name (e.g., openai/gpt-4o)
API Reference
CmdopLLM
CmdopLLM(
api_key: str = None, # From CMDOP_API_KEY env if not set
base_url: str = None, # Default: https://llm.cmdop.com
timeout: float = None, # Request timeout
max_retries: int = 2, # Retry count
)
Resources
client.chat.completions- Chat completions (OpenAI compatible)client.beta.chat.completions.parse()- Structured output with Pydanticclient.embeddings- Text embeddings (OpenAI compatible)client.images- Image generation (OpenAI compatible)client.models- List available modelsclient.vision- Vision analysis (CMDOP specific)client.ocr- OCR extraction (CMDOP specific)
License
MIT
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
cmdop_llm-0.1.2.tar.gz
(8.8 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
cmdop_llm-0.1.2-py3-none-any.whl
(13.3 kB
view details)
File details
Details for the file cmdop_llm-0.1.2.tar.gz.
File metadata
- Download URL: cmdop_llm-0.1.2.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7981fdaeee8363b0a67782105a7bd67f56917a5f3fdc9b79bb45ed778ae7cee
|
|
| MD5 |
c3dbd1483ac4fb480faa9e41b9fc186a
|
|
| BLAKE2b-256 |
f411adb239ebe001e811e51d5d3c6c12d846122a3e6fd77b3bb84abfda9e7095
|
File details
Details for the file cmdop_llm-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cmdop_llm-0.1.2-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2166b10a638550a319b2374dc3ea80b91120049b186ca0cb41086870462a4eb6
|
|
| MD5 |
9da4ac72cbdce25e8fc7a5fde9e3540b
|
|
| BLAKE2b-256 |
730e4399e975c22f6c323a2644f2fb3510863be1270421a61895222fa43cee4f
|