{"repo":"johnnichev/selectools","free":true,"listed":false,"github":"https://github.com/johnnichev/selectools","clone":"git clone https://github.com/johnnichev/selectools.git","description":"Production-ready Python framework for AI agents with built-in guardrails, audit logging, cost tracking, and hybrid RAG. Supports OpenAI, Anthropic, Gemini, Ollama. By NichevLabs.","language":"Python","stars":11,"topics":["ai-agents","ai-safety","anthropic","enterprise-ai","gemini","guardrails","llm","ollama","openai","python"],"license":"Apache-2.0","category":"ai-agents","readme_excerpt":"An open-source project from NichevLabs . Multi-agent orchestration in plain Python. Build agent graphs, compose pipelines with , deploy with one command. No DSL, no compile step, no paid debugger. Works with OpenAI, Anthropic, Gemini, and Ollama. 🎉 selectools is 1.0 — stable. The public API is frozen; @stable symbols carry a 2-minor compatibility promise. Python 3.10+. Latest: v1.3 — tested public streaming contracts for structured-output chat agents. 3 Ways to Build What's New in v1.3 v1.3.0 — Streaming Contracts Makes final turn only structured output safe to rely on in streaming chat agents. Behaviors that integrators previously had to learn from the source are now documented, tested public contracts — enforced on every consumption surface: astream() chunks, the stream handler callback, and the selectools.serve SSE stream. - The synthesis turn never streams — its JSON arrives only on the terminal AgentResult ( .content / .parsed ), never as chunks or through stream handler . StreamChunk(event=\"structured synthesis start\") fires once when the synthesis turn begins so clients can show a pending state. - single pass no longer streams the structured answer ( Changed , @beta surface) — content is suppressed since it's the JSON envelope by construction; tool-call chunks still stream for activity display. Read the answer from AgentResult.parsed . - New StreamChunk(event=\"structured reuse\") — when the converged loop answer validates and is reused, the just-streamed chunks WERE th","default_branch":null,"files":null,"tree":[],"storefront":"/r/johnnichev","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/johnnichev/selectools/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}