Choose a stack¶
Use a preset when it expresses the same product shape, even if one provider or
interface will change. Use custom when the workload itself or several layers
differ.
Stay simple¶
- Choose
python-libraryfor reusable importable behavior. - Choose
typer-clifor commands, automation, and local developer tools. - Choose
fastapi-apifor a JSON service. Custom API projects can select Flask.
These presets intentionally set AI capabilities to none.
Expose tools to models¶
Choose fastmcp-server when the product boundary is MCP tools and resources.
It generates a FastMCP server and a tested local tool rather than wrapping an
agent around the server unnecessarily.
Build an agent¶
Start with Pydantic AI, Google ADK, Strands Agents, LangGraph, or the local Lingo recipe. Select the model provider separately. Pydantic AI can add selected Pydantic AI Harness capabilities without making Harness mandatory.
Build RAG¶
Choose the orchestration framework, model provider, embedding provider, vector store, and user interface independently. Test ingestion and empty retrieval as well as the successful answer path.
Train or serve models¶
Training projects choose a framework plus optional datasets, acceleration,
fine-tuning, and experiment tooling. Hybrid projects use a uv workspace to
keep training and service dependencies separate. Serving can target BentoML,
LiteLLM, vLLM, Ollama, or Ray Serve.
Finish with operations¶
Add only the evaluation, telemetry, orchestration, deployment, and IaC layers the project will operate. An unused observability SDK is maintenance cost, not production readiness.