AutoGen
OpenAIChatCompletionClient takes base_url, and model_info alongside it whenever the model name is not one OpenAI serves.
OpenAIChatCompletionClient takes base_url, documented as required when the model is not hosted on OpenAI. The part that catches people: any model name the SDK does not recognise also needs model_info, and without it the client raises rather than calling.
pip install "autogen-ext[openai]"from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import ModelFamily
client = OpenAIChatCompletionClient(
model="zen5",
base_url="https://api.hanzo.ai/v1",
api_key="sk-...",
model_info={
"vision": False,
"function_calling": True,
"json_output": True,
"family": ModelFamily.UNKNOWN,
"structured_output": True,
},
)
# ... use the client, then release it
await client.close()Lands on POST /v1/chat/completions.
Where a model's record in GET /v1/models declares supports_vision or supports_tools, those map to vision and function_calling. Most records declare neither, and AutoGen's reference states plainly that this client is not tested against non-OpenAI models — so claim only what you have exercised.
MCP
The URL is the url field of StreamableHttpServerParams.
from autogen_ext.tools.mcp import StreamableHttpMcpToolAdapter, StreamableHttpServerParams
params = StreamableHttpServerParams(
url="https://api.hanzo.ai/v1/mcp",
headers={"Authorization": "Bearer sk-..."},
timeout=30.0,
sse_read_timeout=300.0,
terminate_on_close=True,
)
adapter = await StreamableHttpMcpToolAdapter.from_server_params(params, "describe")StdioServerParams and SseServerParams are the siblings; mcp_server_tools() builds every tool on a server in one call rather than one adapter at a time.
How is this guide?