| name | ai-python-basics |
| description | Use for AI SDK for Python basics. Configure a model, make messages, stream, declare tools, build a basic agent. |
| metadata | {"sdk-version":"0.2.1"} |
ai-python-basics
Requires Python 3.12 or later. Install with uv add ai.
Use import ai.
For gateway-routed model IDs, set AI_GATEWAY_API_KEY.
Core pieces:
Model selects the provider and model.
- Messages are typed Python objects.
ai.stream makes one model call and returns one assistant message.
ai.Agent wraps ai.stream in a loop that executes Python tools and manages
history.
Use gateway model IDs unless you need a direct provider:
model = ai.get_model("anthropic/claude-sonnet-4")
Direct providers need extras:
uv add "ai[openai]"
uv add "ai[anthropic]"
Messages are typed Python objects:
messages = [
ai.system_message("Be concise."),
ai.user_message("Write a haiku about rain."),
]
Minimal agent happy path:
import asyncio
import ai
@ai.tool
async def get_weather(city: str) -> str:
"""Get the weather for a city."""
return "Sunny"
async def main() -> None:
model = ai.get_model("anthropic/claude-sonnet-4")
agent = ai.Agent(tools=[get_weather])
messages = [
ai.system_message("Use tools when useful."),
ai.user_message("What is the weather in San Francisco?"),
]
async with agent.run(model, messages) as run:
async for event in run:
if isinstance(event, ai.events.TextDelta):
print(event.chunk, end="", flush=True)
answer = run.output
history = run.messages
if __name__ == "__main__":
asyncio.run(main())
For one model call without Python tool execution, use ai.stream:
async with ai.stream(model, messages) as stream:
async for event in stream:
if isinstance(event, ai.events.TextDelta):
print(event.chunk, end="", flush=True)
answer = stream.output
messages.append(stream.message)
Use ai-python-custom-loop, ai-python-subagents,
ai-python-streaming-tools, ai-python-serverless-execution,
ai-python-durable-execution, ai-python-ui-adapter, and
ai-python-custom-provider for advanced patterns.