Releases: syrin-labs/syrin-python
Releases · syrin-labs/syrin-python
v0.10.0 - Debug Watch Triggers
[0.10.0] - 2026-03-31
Added
Syrin Debug — Live Terminal Debugging
- Rich-based live terminal UI activated via
debug=True - Color-coded events: LLM (blue), tools (yellow), errors (red), memory (purple), guardrails (red)
- Multi-agent aware — nested panels for spawned agents
- Keyboard filtering:
eerrors,ttools,mmemory,ffull trace,qquit,ppause
Event-Driven Triggers (agent.watch())
Watchablemixin with swappable protocolsCronProtocol— cron-scheduled triggers using croniterWebhookProtocol— HTTP webhook trigger with HMAC signature validationQueueProtocol— message queue trigger with pluggable backend (Redis, in-memory)- Agents that react to the world, not just API calls
Production Knowledge Pool
GitHubSource— ingest entire GitHub repos (public and private)DocsSource— crawl documentation sites with depth limits and pattern matching- Multi-language code chunking (Python, Go, Rust, TypeScript, Java, etc.)
- Progress events:
KNOWLEDGE_CHUNK_START,KNOWLEDGE_CHUNK_PROGRESS,KNOWLEDGE_EMBED_PROGRESS,KNOWLEDGE_CHUNK_END - Semantic chunking strategy for better retrieval
- Rate limiting for embedding APIs
Prompt Injection Defense
InputNormalization— normalize inputs through defense pipelineSpotlightDefense— clearly label untrusted contentCanaryTokens— hidden tokens that trigger alerts- Secure memory writes — scan before storing
Structured Output Enforcement
result.outputalways returns the typed object (never dict/str)- Automatic retry on validation failure (configurable
validation_retries) - Validation hooks:
Hook.OUTPUT_VALIDATION_RETRY,Hook.OUTPUT_VALIDATION_ERROR - Clear error messages with raw response and validation details
Runtime Model Switching
agent.switch_model()— switch model at runtime without recreating agent- Context, memory, and hooks remain intact
Syrin v0.9.0 - Smart Budget
[0.9.0] - 2026-03-25
Breaking
Budget(run=)renamed toBudget(max_cost=)agent.response()renamed toagent.run()— old method removedper=in rate limits replaced byRateLimit(hour=, day=, month=)
Added
ExceedPolicyenum —STOP | WARN | IGNORE | SWITCHreplaces string policiesresult.cost_estimated— pre-call budget estimate alongsideresult.costresult.cache_savings— cache discount reported per callagent.budget_summary()— dashboard dict: run cost, tokens, hourly/daily totals, percent usedagent.export_costs(format="json")— structured cost history per callBudgetStoreABC — plug in any persistence backend (PostgreSQL, Redis, DynamoDB)Budget(shared=True)— thread-safe shared pool across parallel agents (SQLite WAL)ModelPricingoverride — passpricing=ModelPricing(...)to anyModel()to override built-in rates- Docs — full rewrite with correct APIs, custom observability guide, 375+ fixed internal links
Fixed
- SQLite budget store thread safety under parallel spawns
- Threshold callbacks no longer re-fire on the same percentage within a run
PIIScannerredaction applied before content reaches the LLMMemory.import_from()logging noise removed
v0.8.1 - Grounded Intelligence
[0.8.1] - 2026-03-13
Added
- Batch fact verification — Ground facts in batches of 10 for efficiency
- GroundingConfig.model — Dedicated model for grounding/verification
- YAML frontmatter —
Template.from_file()parses YAML frontmatter
Changed
- PDF extraction — Consolidated to single
doclingdependency - Grounding — Improved claim-to-fact matching with index-based pairing
Fixed
- IPO DRHP example — Working example with Budget, FactVerificationGuardrail
- Test mocks — Fixed output validation failure tests
v0.8.0 - Knowledge Pool
[0.8.0] - 2026-03-11
Added
- Intelligent model routing: Automatic LLM selection based on cost, performance, and context requirements.
- Multi-modality support: Native support for images, video, and audio generation/processing.
- Knowledge integration: RAG (Retrieval-Augmented Generation) with vector stores, document loaders, and semantic search.
Changed
- Simplified installation:
pip install syrinnow includes OpenAI and serving dependencies by default. - Removed CLI:
syrin trace,syrin run, andsyrin doctorcommands removed; usepython my_agent.py --tracefor observability.
Breaking
- CLI removal: Command-line interface deprecated; use direct Python execution with
--traceflag.
v0.7.0 - Context Management
[0.7.0] - 2026-03-07
Breaking
- Context:
Context.budgetremoved. UseContext.token_limits(TokenLimits).ContextWindowBudget→ContextWindowCapacity.Context.get_budget(model)→Context.get_capacity(model). ContextManager.prepare() takescapacityinstead ofbudget.
Added
- Context management — Snapshot (provenance, why_included, context_rot_risk), breakdown, custom compaction prompt,
auto_compact_at, runtime injection,context_mode(full/focused), formation_mode (push/pull), stored output chunks, persistent context map, pluggable RelevanceScorer. - Memory–context — Memory on by default;
memory=Noneturns off. No extra field. - Handoff/spawn — Context visibility in events (
handoff_context,context_inherited,initial_context_tokens).
Fixed
- Examples:
Output(type=...)→Output(MyModel);Agent(dependencies=...)→Agent(config=AgentConfig(dependencies=...)).
v0.6.0 — CC
[0.6.0] - 2026-03-05
Added
- Remote config —
syrin.init(api_key=...)orSYRIN_API_KEYenables real-time config overrides from Syrin Cloud or self-hosted backend. Overrides (budget, memory, temperature, etc.) via SSE; zero overhead when not enabled. - Config routes —
GET /config,PATCH /config,GET /config/streamadded toagent.serve(). Baseline + overrides + revert; works with or withoutsyrin.init(). syrin.remote— Types:AgentSchema,ConfigOverride,OverridePayload,SyncRequest/SyncResponse.ConfigRegistry,ConfigResolver,extract_schema(). Transports:SSETransport,ServeTransport,PollingTransport.- Hooks —
Hook.REMOTE_CONFIG_UPDATE,Hook.REMOTE_CONFIG_ERROR.
Changed
- Agent registers with remote config on init when
syrin.init()was called.
v0.5.0 - Remember Smarter
[0.5.0] - 2026-03-04
Added
- C5 fix — Memory.remember/recall/forget use configured backend (SQLite, Qdrant, Chroma) instead of in-memory dict when backend != MEMORY.
- QdrantConfig —
Memory(qdrant=QdrantConfig(url=..., api_key=..., collection=..., namespace=...))for Qdrant Cloud or local. - ChromaConfig —
Memory(chroma=ChromaConfig(path=..., collection=...))for Chroma vector backend. - Namespace isolation —
QdrantConfig.namespacescopes all operations; payload filter on search/list. - WriteMode —
WriteMode.SYNC(block until complete) vsWriteMode.ASYNC(fire-and-forget, default). - Memory export/import —
Memory.export()returnsMemorySnapshot;Memory.import_from(snapshot)appends memories. JSON-serializable for GDPR export. - Examples —
examples/04_memory/qdrant_memory.py,chroma_memory.py,async_memory.py,export_import_memory.py.
Changed
- Agent and Memory handoff now use
memory._backend_kwargs()for backend config. syrin[qdrant]andsyrin[chroma]optional dependencies added to pyproject.toml.
v0.4.1
[0.4.1] - 2026-03-01
Added
- API additions:
Response.raw_response,GuardrailCheckResult.guardrail_name,CircuitBreaker.state,EventBus.on,GlobalConfig.debug,TokenLimits.per_hour,RateLimit.window,agent.checkpointer.
Fixed
- Model fallback and response transformer now use
model.acomplete()when model has fallbacks/transformers. Model.with_middleware()preservesprovider.- Provider availability checks use
importlib.util.find_spec()instead of import.
Changed
- Strict typing:
TypedDict+Unpackfor memory kwargs,ServeConfig, agent specs. Pyright config added. - Replaced
Anywithobject/TypedDictacross core modules. - Docs:
docs/TYPING.mdfor typing standards; updated API references.
v0.3.0
[0.3.0] - 2026-02-27
Added
- Sub-agents & handoff —
spawn(task=...),handoff(AgentClass, task)with optional memory transfer and budget inheritance. - Handoff interception —
events.before(Hook.HANDOFF_START, fn); raiseHandoffBlockedErrorto block;HandoffRetryRequestedfor retry. - Audit logging —
AuditLog,JsonlAuditBackend;Agent(audit=...),Pipeline(audit=...),DynamicPipeline(audit=...). - HITL —
@syrin.tool(requires_approval=True);ApprovalGateprotocol; hooks: HITL_PENDING, HITL_APPROVED, HITL_REJECTED. - Circuit breaker —
CircuitBreakerfor LLM/provider failures; CLOSED → OPEN → HALF_OPEN; configurable fallback. - Budget-aware context — Context tier selection by budget percent remaining.
- Dependency Injection —
Agent(deps=...),RunContext[Deps]; tools receivectx.deps(excluded from LLM schema). - Dynamic Pipeline — Improved hooks and events API; flow diagram in docs/dynamic-pipeline.md.
Changed
- API validation — Agent, Model, Memory, Loop validate inputs at construction; clear errors for wrong types.
- agent.response(user_input) — Validates
user_inputisstr; friendly error forNone/int/dict. - Example paths — Fixed run instructions (
08_streaming,07_multi_agent).
Fixed
- Chaos stress test fixes: Agent/Loop validation; Loop
max_iterations < 1no longer causes UnboundLocalError. Model_provider_kwargspassed to provider.
v0.2.0
[0.2.0] - 2026-02-26
Added
- Almock (LLM Mock) —
Model.Almock()for development and testing without an API key. Configurable pricing tiers (LOW, MEDIUM, HIGH, ULTRA_HIGH), latency (default 1–3s or custom), and response (Lorem Ipsum or custom text). Examples and docs use Almock by default; swap to a real model with one line. - Memory decay and consolidation — Decay strategies with configurable min importance and optional reinforcement on access.
Memory.consolidate()for content deduplication with optional budget. Entries without IDs receive auto-generated IDs. - Checkpoint triggers — Auto-save on STEP, TOOL, ERROR, or BUDGET in addition to MANUAL. Loop strategy comparison (REACT, SINGLE_SHOT, PLAN_EXECUTE, CODE_ACTION) documented in advanced topics.
- Provider resolution —
ProviderNotFoundErrorwhen using an unknown provider, with a message listing known providers. Strict resolution available viaget_provider(name, strict=True). - Observability — Agent runs emit a root span plus child spans for each LLM call and tool execution. Session ID propagates to all spans. Optional OTLP exporter (
syrin.observability.otlp) for OpenTelemetry. - Documentation — Architecture guide, code quality guidelines, CONTRIBUTING.md. Community links (Discord, X) and corrected doc links.
Changed
- Model resolution — Agent construction with an invalid
providerinModelConfignow raisesProviderNotFoundErrorinstead of falling back (breaking for callers relying on LiteLLM fallback). - API —
syrin.run()return type andtoolsparameter typing clarified. Duplicate symbols removed from public API exports. - Docs — README and guides use lowercase
syrinimports. Guardrails and rate-limit docs: fixed imports and references.
Fixed
- Response and recall contract; spawn return type and budget inheritance. Rate limit thresholds fully controlled by user action callback. Guardrail input block skips LLM; output block returns GUARDRAIL response. Checkpoint trigger behavior (STEP, MANUAL). Session span count when exporting. Edge cases: empty tools, no budget, unknown provider.