Python Integration
Also available in: PHP · Node.js · Go
The "gateway base URL" is the address of your Observra Gateway (https://gateway.observra.in) - you send requests here instead of directly to OpenAI, Anthropic, or whichever provider you use. The "gateway key" is a per-Application credential you generate in the Observra Dashboard; it authenticates your app to the gateway and is separate from your provider's own API key, which you still keep and send yourself. See Quickstart and Gateway Authentication if you haven't set these up yet. Every example below only changes a base_url/headers - your actual Python code and provider SDKs stay the same.
Try it now
Paste in a gateway URL, your gateway key, and a provider key to send a real request straight from this page - no code required yet.
Raw HTTP requests
Install:
pip install httpx opentelemetry-api opentelemetry-sdk
Every raw HTTP call follows the same shape: build one headers dict, add X-Gateway-Key, add the provider's own auth header, then POST to the gateway route.
OpenAI
- Gateway Integration
- With trace (optional)
import os
import httpx
headers = {
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
resp = httpx.post(
"https://gateway.observra.in/openai/v1/chat/completions",
headers=headers,
json={
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.openai")
with tracer.start_as_current_span("openai-chat-completions"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/openai/v1/chat/completions",
headers=headers,
json={
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
Anthropic
- Gateway Integration
- With trace (optional)
import os
import httpx
headers = {
"x-api-key": os.environ["ANTHROPIC_API_KEY"],
"anthropic-version": "2023-06-01",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
resp = httpx.post(
"https://gateway.observra.in/anthropic/v1/messages",
headers=headers,
json={
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"x-api-key": os.environ["ANTHROPIC_API_KEY"],
"anthropic-version": "2023-06-01",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.anthropic")
with tracer.start_as_current_span("anthropic-messages"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/anthropic/v1/messages",
headers=headers,
json={
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
Gemini
- Gateway Integration
- With trace (optional)
import os
import httpx
headers = {
"x-goog-api-key": os.environ["GEMINI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
resp = httpx.post(
"https://gateway.observra.in/gemini/v1beta/models/gemini-3.1-flash-lite:generateContent",
headers=headers,
json={
"contents": [
{"role": "user", "parts": [{"text": "Say hello in one line."}]}
],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"x-goog-api-key": os.environ["GEMINI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.gemini")
with tracer.start_as_current_span("gemini-generate-content"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/gemini/v1beta/models/gemini-3.1-flash-lite:generateContent",
headers=headers,
json={
"contents": [
{"role": "user", "parts": [{"text": "Say hello in one line."}]}
],
},
timeout=60,
)
Groq
- Gateway Integration
- With trace (optional)
import os
import httpx
resp = httpx.post(
"https://gateway.observra.in/groq/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['GROQ_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
json={
"model": "llama-3.3-70b-versatile",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"Authorization": f"Bearer {os.environ['GROQ_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.groq")
with tracer.start_as_current_span("groq-chat-completions"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/groq/v1/chat/completions",
headers=headers,
json={
"model": "llama-3.3-70b-versatile",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
Ollama
- Gateway Integration
- With trace (optional)
import os
import httpx
resp = httpx.post(
"https://gateway.observra.in/ollama/api/chat",
headers={
"Authorization": f"Bearer {os.environ['OLLAMA_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
json={
"model": "gpt-oss:120b-cloud",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"Authorization": f"Bearer {os.environ['OLLAMA_API_KEY']}",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.ollama")
with tracer.start_as_current_span("ollama-chat"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/ollama/api/chat",
headers=headers,
json={
"model": "gpt-oss:120b-cloud",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
OpenRouter
- Gateway Integration
- With trace (optional)
import os
import httpx
resp = httpx.post(
"https://gateway.observra.in/openrouter/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
"HTTP-Referer": "https://docs.observra.in",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
json={
"model": "tencent/hy3:free",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
"HTTP-Referer": "https://docs.observra.in",
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
tracer = trace.get_tracer("observra.http.openrouter")
with tracer.start_as_current_span("openrouter-chat-completions"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/openrouter/v1/chat/completions",
headers=headers,
json={
"model": "tencent/hy3:free",
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
Azure OpenAI
- Gateway Integration
- With trace (optional)
import os
import httpx
resp = httpx.post(
"https://gateway.observra.in/azure/v1/chat/completions",
headers={
"api-key": os.environ["AZURE_OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
"X-Azure-Endpoint": os.environ["AZURE_OPENAI_ENDPOINT"],
"X-Azure-Api-Version": os.environ.get("AZURE_OPENAI_API_VERSION", "2024-02-15-preview"),
},
json={
"model": os.environ["AZURE_OPENAI_DEPLOYMENT"],
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
from opentelemetry import trace
from opentelemetry.propagate import inject
headers = {
"api-key": os.environ["AZURE_OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
"X-Azure-Endpoint": os.environ["AZURE_OPENAI_ENDPOINT"],
"X-Azure-Api-Version": os.environ.get("AZURE_OPENAI_API_VERSION", "2024-02-15-preview"),
}
tracer = trace.get_tracer("observra.http.azure")
with tracer.start_as_current_span("azure-chat-completions"):
inject(headers)
resp = httpx.post(
"https://gateway.observra.in/azure/v1/chat/completions",
headers=headers,
json={
"model": os.environ["AZURE_OPENAI_DEPLOYMENT"],
"messages": [{"role": "user", "content": "Say hello in one line."}],
},
timeout=60,
)
Native SDKs
Point each provider's own SDK at the gateway route as its base_url, use your Observra gateway key as the SDK's api_key field (most SDKs require one, even though the gateway is what checks it), and forward your real provider key with X-Provider-Key.
Install:
pip install openai anthropic google-genai httpx opentelemetry-api opentelemetry-sdk
import os
from opentelemetry import trace
from opentelemetry.propagate import inject
tracer = trace.get_tracer("observra.native-sdk")
OpenAI SDK
- Gateway Integration
- With trace (optional)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/openai",
default_headers={
"X-Provider-Key": os.environ["OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
print(response.choices[0].message.content)
from openai import OpenAI
from opentelemetry.propagate import inject
headers = {
"X-Provider-Key": os.environ["OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
with tracer.start_as_current_span("openai-sdk-chat"):
inject(headers)
client = OpenAI(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/openai",
default_headers=headers,
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
Anthropic SDK
- Gateway Integration
- With trace (optional)
import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/anthropic",
default_headers={
"X-Provider-Key": os.environ["ANTHROPIC_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": "Say hello in one line."}],
)
print(response.content[0].text)
import anthropic
from opentelemetry.propagate import inject
headers = {
"X-Provider-Key": os.environ["ANTHROPIC_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
with tracer.start_as_current_span("anthropic-sdk-messages"):
inject(headers)
client = anthropic.Anthropic(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/anthropic",
default_headers=headers,
)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": "Say hello in one line."}],
)
Google GenAI SDK
- Gateway Integration
- With trace (optional)
import os
from google import genai
from google.genai import types
client = genai.Client(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
http_options=types.HttpOptions(
base_url="https://gateway.observra.in/gemini",
headers={
"X-Provider-Key": os.environ["GEMINI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
),
)
response = client.models.generate_content(
model="gemini-3.1-flash-lite",
contents="Say hello in one line.",
)
print(response.text)
from google import genai
from google.genai import types
from opentelemetry.propagate import inject
headers = {
"X-Provider-Key": os.environ["GEMINI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
}
with tracer.start_as_current_span("google-genai-generate-content"):
inject(headers)
client = genai.Client(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
http_options=types.HttpOptions(
base_url="https://gateway.observra.in/gemini",
headers=headers,
),
)
response = client.models.generate_content(
model="gemini-3.1-flash-lite",
contents="Say hello in one line.",
)
Groq, Ollama, OpenRouter
These are OpenAI-compatible through the gateway, so reuse the OpenAI SDK with a different base_url and provider key.
- Groq
- Ollama
- OpenRouter
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/groq",
default_headers={
"X-Provider-Key": os.environ["GROQ_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
)
response = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/ollama",
default_headers={
"X-Provider-Key": os.environ["OLLAMA_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
)
response = client.chat.completions.create(
model="gpt-oss:120b-cloud",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OBSERVRA_GATEWAY_KEY"],
base_url="https://gateway.observra.in/openrouter",
default_headers={
"X-Provider-Key": os.environ["OPENROUTER_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
},
)
response = client.chat.completions.create(
model="cohere/north-mini-code:free",
messages=[{"role": "user", "content": "Say hello in one line."}],
)
Azure OpenAI SDK
- Gateway Integration
- With trace (optional)
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_endpoint="https://gateway.observra.in/azure",
api_version=os.environ.get("AZURE_OPENAI_API_VERSION", "2024-02-01"),
default_headers={
"X-Provider-Key": os.environ["AZURE_OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
"X-Azure-Endpoint": os.environ["AZURE_OPENAI_ENDPOINT"],
},
)
response = client.chat.completions.create(
model=os.environ["AZURE_OPENAI_DEPLOYMENT"],
messages=[{"role": "user", "content": "Say hello in one line."}],
)
from openai import AzureOpenAI
from opentelemetry.propagate import inject
headers = {
"X-Provider-Key": os.environ["AZURE_OPENAI_API_KEY"],
"X-Gateway-Key": os.environ["OBSERVRA_GATEWAY_KEY"],
"X-Azure-Endpoint": os.environ["AZURE_OPENAI_ENDPOINT"],
}
with tracer.start_as_current_span("azure-openai-sdk-chat"):
inject(headers)
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_endpoint="https://gateway.observra.in/azure",
api_version=os.environ.get("AZURE_OPENAI_API_VERSION", "2024-02-01"),
default_headers=headers,
)
response = client.chat.completions.create(
model=os.environ["AZURE_OPENAI_DEPLOYMENT"],
messages=[{"role": "user", "content": "Say hello in one line."}],
)
Agent frameworks & SDKs
More advanced: these frameworks wrap one or more of the SDKs above. Each still points its underlying client at the gateway route and forwards X-Provider-Key/X-Gateway-Key.
- LangChain
- LlamaIndex
- CrewAI
- Semantic Kernel
Install:
pip install langchain langchain-openai langchain-anthropic langchain-google-genai langchain-groq httpx opentelemetry-api opentelemetry-sdk openinference-instrumentation-langchain python-dotenv
import os
from dotenv import load_dotenv
from opentelemetry import trace
from opentelemetry.propagate import inject
load_dotenv()
proxy_base_url = os.environ.get("PROXY_BASE_URL", "https://gateway.observra.in").rstrip("/")
gateway_key = os.environ["OBSERVRA_GATEWAY_KEY"]
tracer = trace.get_tracer("observra.langchain")
OpenAI model + agent:
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
provider = "openai"
model_id = "gpt-4o-mini"
base_url = f"{proxy_base_url}/{provider}"
chat_model = ChatOpenAI(
model=model_id,
base_url=base_url,
api_key=gateway_key,
default_headers={
"X-Provider-Key": os.environ["OPENAI_API_KEY"],
"X-Gateway-Key": gateway_key,
},
)
user_prompt = "Say hello in one line."
agent = create_agent(model=chat_model, tools=[])
result = agent.invoke({"messages": [{"role": "user", "content": user_prompt}]})
Anthropic, Gemini, Groq, Ollama, OpenRouter, and Azure use the same pattern with their own LangChain chat classes - see the equivalent raw HTTP sections above for the exact header/URL shape each provider needs. To pass traceparent on every outbound call (LangChain's provider packages issue their own HTTP requests), patch httpx once before your app starts:
import httpx
from opentelemetry.propagate import inject
_original_send = httpx.Client.send
def _traced_send(self, request, **kwargs):
inject(request.headers)
return _original_send(self, request, **kwargs)
httpx.Client.send = _traced_send
_original_asend = httpx.AsyncClient.send
async def _traced_asend(self, request, **kwargs):
inject(request.headers)
return await _original_asend(self, request, **kwargs)
httpx.AsyncClient.send = _traced_asend
Then run the agent inside a span: with tracer.start_as_current_span("langchain-agent-run"): agent.invoke(...).
Install:
pip install llama-index llama-index-llms-openai llama-index-llms-anthropic llama-index-llms-google-genai llama-index-llms-groq llama-index-llms-ollama llama-index-llms-openrouter llama-index-llms-azure-openai httpx aiohttp requests opentelemetry-api opentelemetry-sdk python-dotenv
import os
from dotenv import load_dotenv
load_dotenv()
proxy_base_url = os.environ.get("PROXY_BASE_URL", "https://gateway.observra.in").rstrip("/")
gateway_key = os.environ["OBSERVRA_GATEWAY_KEY"]
from llama_index.llms.openai import OpenAI
provider = "openai"
model_id = "gpt-4o-mini"
base_url = f"{proxy_base_url}/{provider}"
llm = OpenAI(
model=model_id,
api_key=gateway_key,
api_base=base_url,
default_headers={
"X-Provider-Key": os.environ["OPENAI_API_KEY"],
"X-Gateway-Key": gateway_key,
},
)
response = llm.complete("Say hello in one line.")
Anthropic, Gemini, Groq, Ollama, OpenRouter, and Azure use the equivalent llama_index.llms.* class pointed at their own gateway route (see the raw HTTP section above for exact paths). LlamaIndex provider packages may use httpx, aiohttp, or requests internally - patch all three if you want traceparent propagated:
import aiohttp
import httpx
import requests
from opentelemetry.propagate import inject
_original_send = httpx.Client.send
def _traced_send(self, request, **kwargs):
inject(request.headers)
return _original_send(self, request, **kwargs)
httpx.Client.send = _traced_send
_original_asend = httpx.AsyncClient.send
async def _traced_asend(self, request, **kwargs):
inject(request.headers)
return await _original_asend(self, request, **kwargs)
httpx.AsyncClient.send = _traced_asend
_original_aio_request = aiohttp.ClientSession._request
async def _traced_aio_request(self, method, url, **kwargs):
headers = kwargs.get("headers") or {}
inject(headers)
kwargs["headers"] = headers
return await _original_aio_request(self, method, url, **kwargs)
aiohttp.ClientSession._request = _traced_aio_request
_original_requests_send = requests.Session.send
def _traced_requests_send(self, request, **kwargs):
inject(request.headers)
return _original_requests_send(self, request, **kwargs)
requests.Session.send = _traced_requests_send
Install:
pip install crewai httpx opentelemetry-api opentelemetry-sdk python-dotenv
import os
from crewai import Agent, Crew, LLM, Process, Task
from crewai.tools import tool
from dotenv import load_dotenv
load_dotenv()
proxy_base_url = os.environ.get("PROXY_BASE_URL", "https://gateway.observra.in").rstrip("/")
gateway_key = os.environ["OBSERVRA_GATEWAY_KEY"]
provider = "openai"
model_id = "gpt-4o-mini"
base_url = f"{proxy_base_url}/{provider}"
llm = LLM(
model=f"openai/{model_id}",
temperature=0.7,
api_key=gateway_key,
base_url=base_url,
additional_params={
"extra_headers": {
"X-Provider-Key": os.environ["OPENAI_API_KEY"],
"X-Gateway-Key": gateway_key,
},
},
)
@tool("get_weather")
def get_weather(location: str) -> str:
"""Get the current weather for a city."""
return f"It is 31C and partly cloudy in {location}."
agent = Agent(
role="Weather Specialist",
goal="Answer weather questions using tools when needed.",
backstory="You provide concise weather answers.",
tools=[get_weather],
llm=llm,
allow_delegation=False,
)
task = Task(
description="What is the current weather in New York?",
expected_output="A concise weather answer.",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task], process=Process.sequential)
result = crew.kickoff()
Anthropic, Gemini, Groq, Ollama, OpenRouter, and Azure all use LLM(model=f"{provider}/{model_id}", ...) with is_litellm=True for non-OpenAI providers and the matching base_url/extra_headers - see the raw HTTP section above for exact routes. CrewAI (via LiteLLM) also issues its own httpx requests, so use the same httpx.Client.send/httpx.AsyncClient.send patch shown under LlamaIndex above if you want traceparent propagated.
Install:
pip install semantic-kernel openai anthropic google-generativeai httpx requests opentelemetry-api opentelemetry-sdk python-dotenv
import os
from dotenv import load_dotenv
from semantic_kernel import Kernel
from semantic_kernel.contents import ChatHistory
from semantic_kernel.connectors.ai import PromptExecutionSettings
load_dotenv()
proxy_base_url = os.environ.get("PROXY_BASE_URL", "https://gateway.observra.in").rstrip("/")
gateway_key = os.environ["OBSERVRA_GATEWAY_KEY"]
from openai import AsyncOpenAI
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
kernel = Kernel()
provider_key = os.environ["OPENAI_API_KEY"]
client = AsyncOpenAI(
api_key=gateway_key,
base_url=f"{proxy_base_url}/openai",
default_headers={
"X-Provider-Key": provider_key,
"X-Gateway-Key": gateway_key,
},
)
kernel.add_service(OpenAIChatCompletion(
ai_model_id="gpt-4o-mini",
async_client=client,
service_id="chat",
))
history = ChatHistory()
history.add_user_message("Say hello in one line.")
settings = PromptExecutionSettings()
chat_service = kernel.get_service("chat")
response = await chat_service.get_chat_message_content(history, settings)
text = str(response)
Anthropic, Gemini, Groq, Ollama, OpenRouter, and Azure follow the same kernel.add_service(...) pattern with their own connector class and gateway route - see the raw HTTP section above for the exact URL each provider needs. Gemini's connector uses google-generativeai's REST transport (requests), so patch requests.Session.send (shown under LlamaIndex above) instead of httpx if you need traceparent on Gemini calls.
Next steps
- OpenAI SDK Integration - the reference JavaScript/TypeScript walkthrough.
- Other Providers - full provider/URL-segment reference.
- Gateway Authentication - key precedence and header details.
- Trace Context - how
traceparentcorrelates observations across services.