Examples
Python
Use CanalAPI from Python with the official OpenAI SDK.
The official openai Python package works directly against CanalAPI by overriding base_url and api_key.
Install
pip install openaiHello world
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["CANALAPI_API_KEY"],
base_url=os.environ["CANALAPI_BASE_URL"],
)
r = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)Streaming
stream = client.chat.completions.create(
model="gpt-4o-mini",
stream=True,
messages=[{"role": "user", "content": "Stream a poem."}],
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta and delta.content:
print(delta.content, end="", flush=True)
print()Retry with backoff
import random, time
from openai import OpenAI, APIError, RateLimitError
client = OpenAI(
api_key=os.environ["CANALAPI_API_KEY"],
base_url=os.environ["CANALAPI_BASE_URL"],
)
def ask(prompt: str, attempt: int = 0) -> str:
try:
r = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
)
return r.choices[0].message.content or ""
except (RateLimitError, APIError) as e:
status = getattr(e, "status_code", None) or getattr(e, "status", None)
if status in (429, 500, 502, 503, 504) and attempt < 4:
delay = min(2 ** attempt, 8) * (0.75 + random.random() * 0.5)
time.sleep(delay)
return ask(prompt, attempt + 1)
raiseAsync
import asyncio
from openai import AsyncOpenAI
import os
async def main():
client = AsyncOpenAI(
api_key=os.environ["CANALAPI_API_KEY"],
base_url=os.environ["CANALAPI_BASE_URL"],
)
r = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)
asyncio.run(main())