Advanced Examples¶
Advanced usage patterns for production applications.
Multi-Turn Conversation¶
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.indoxhub.com/api/v1"
messages = [{"role": "system", "content": "You are a coding tutor."}]
def chat(user_message):
messages.append({"role": "user", "content": user_message})
response = requests.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "anthropic/claude-haiku-4.5",
"messages": messages,
"temperature": 0.7
}
)
reply = response.json()["data"]
messages.append({"role": "assistant", "content": reply})
return reply
print(chat("What is a Python decorator?"))
print(chat("Show me an example with arguments"))
print(chat("How does functools.wraps help?"))
Provider Comparison¶
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.indoxhub.com/api/v1"
models = [
"openai/gpt-4o-mini",
"anthropic/claude-haiku-4.5",
"deepseek/deepseek-chat",
]
prompt = [{"role": "user", "content": "Explain REST APIs in one paragraph."}]
for model in models:
response = requests.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": model, "messages": prompt, "max_tokens": 200}
)
result = response.json()
print(f"\n--- {model} ---")
print(f"Cost: ${result['usage']['cost']:.4f}")
print(f"Latency: {result['duration_ms']:.0f}ms")
print(f"Response: {result['data'][:100]}...")
Streaming with Error Handling¶
import requests
import json
def stream_chat(messages, model="openai/gpt-4o-mini"):
try:
response = requests.post(
"https://api.indoxhub.com/api/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"model": model, "messages": messages, "stream": True},
stream=True,
timeout=60
)
response.raise_for_status()
full_response = ""
for line in response.iter_lines():
if not line:
continue
text = line.decode("utf-8")
if text == "data: [DONE]":
break
if text.startswith("data: "):
chunk = text[6:]
full_response += chunk
print(chunk, end="", flush=True)
print()
return full_response
except requests.exceptions.Timeout:
print("Request timed out")
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
stream_chat([{"role": "user", "content": "Write a haiku about APIs"}])
Batch Embeddings for Search¶
import requests
import numpy as np
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.indoxhub.com/api/v1"
documents = [
"Python is a programming language",
"JavaScript runs in the browser",
"SQL is used for databases",
"Docker containerizes applications",
"Kubernetes orchestrates containers"
]
# Embed all documents at once
response = requests.post(
f"{BASE_URL}/embeddings",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "openai/text-embedding-3-small",
"text": documents
}
)
doc_embeddings = response.json()["data"]
# Embed query
query_resp = requests.post(
f"{BASE_URL}/embeddings",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "openai/text-embedding-3-small",
"text": "container orchestration"
}
)
query_embedding = query_resp.json()["data"][0]
# Find most similar
def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
scores = [cosine_similarity(query_embedding, emb) for emb in doc_embeddings]
best_idx = np.argmax(scores)
print(f"Best match: {documents[best_idx]} (score: {scores[best_idx]:.4f})")
BYOK with Fallback¶
import requests
def chat_with_fallback(messages, byok_key=None):
payload = {
"model": "openai/gpt-4o-mini",
"messages": messages
}
if byok_key:
payload["byok_api_key"] = byok_key
response = requests.post(
"https://api.indoxhub.com/api/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json=payload
)
result = response.json()
if result["success"]:
return result["data"]
# Fallback: retry without BYOK
if byok_key:
del payload["byok_api_key"]
response = requests.post(
"https://api.indoxhub.com/api/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json=payload
)
return response.json()["data"]
return None