Skip to content

Releases: syrin-labs/syrin-python

v0.11.0 - Multi-Agent Swarms

06 Apr 09:54

Choose a tag to compare

[0.11.0] - 2026-04-06

First-class multi-agent orchestration with shared budget control, cross-agent memory, agent-to-agent communication, and enterprise security hardening.

Added

Multi-Agent Swarm System

  • Swarm with 5 topologies: ORCHESTRATOR, PARALLEL, CONSENSUS, REFLECTION, WORKFLOW
  • Shared BudgetPool — hard per-agent caps enforced; no agent can exceed its allocation even if pool has funds
  • MemoryBus — selective cross-agent memory sharing with type filters and custom backends
  • A2ARouter — typed agent-to-agent messaging (direct, broadcast, topic pub/sub) with ack support and audit log
  • SwarmController.topup_budget() / reallocate_budget() — runtime budget reallocation without restarting agents; backed by asyncio.Lock
  • BroadcastBus — pub/sub with wildcard topic patterns ("research.*")
  • MonitorLoop — async supervisor loop: heartbeat polling, quality assessment, bounded interventions with MaxInterventionsExceeded escalation
  • SwarmAuthorityGuard — role-based permission model (ORCHESTRATOR > SUPERVISOR > WORKER); every control action permission-checked and audit-logged
  • AgentRouter — LLM-driven agent selection from a pool (replaces removed DynamicPipeline)
  • Workflow — sequential, parallel, branch, and dynamic fan-out steps with HandoffContext; full play()/pause()/resume()/cancel() lifecycle
  • SwarmResult — unified result: content, cost_breakdown, agent_results, partial_results, budget_report

Budget Intelligence

  • Pre-flight estimation: Budget.estimate() with EstimationPolicy
  • Budget forecasting from run history with Hook.BUDGET_FORECAST
  • Anomaly detection: Budget(anomaly_detection=True) triggers Hook.BUDGET_ANOMALY on p95 breach
  • Cross-run daily/weekly limits with Hook.DAILY_LIMIT_APPROACHING
  • FileBudgetStore for persistent cross-run history

Workflow & Swarm Visualization

  • Workflow.visualize() — Rich ASCII tree
  • Workflow.to_mermaid() — Mermaid graph TD for GitHub/docs
  • Workflow.run(show_graph=True) — live Rich overlay with per-step status and cost
  • GET /graph HTTP endpoint on Swarm.serve() and Workflow.serve()

AgentRegistry

  • AgentRegistry with @registry.register(tags=[...]) — discover and control agents by name or capability tag

Security Hardening

  • PIIGuardrail — detect and redact PII (email, phone, SSN, credit card) in inputs, outputs, and memory writes
  • ToolOutputValidator — schema validation on tool results before the LLM sees them
  • AgentIdentity — Ed25519 cryptographic identity; every A2A message signed and verified
  • Decision provenance: DECISION_MADE hook with DecisionRecord (model, timestamp, hash) for audit trails

Remote Config Control Plane

  • RemoteConfig — live push of any agent field without restart; schema export for dashboard rendering
  • Config versioning and rollback(), per-field allow/deny lists, RemoteConfigValidator
  • Remote lifecycle commands: PAUSE, RESUME, KILL over the wire

Multi-Agent Pry Debugger (TUI)

  • SwarmPryTUI — Rich Live compositor: GraphPanel (per-agent status + cost), BudgetPanel (pool tree), MessagePanel (A2A/MemoryBus timeline), SwarmNav (keyboard navigation)

Changed

  • rich>=13.0 promoted to core dependency
  • requests>=2.33.0 minimum enforced (CVE-2026-25645)
  • ExceedPolicy is now the canonical budget policy enum; on_exceeded= callback pattern deprecated
  • MockResponseMode enum replaces raw strings "lorem"/"custom" in Model.mock()
  • Class-based agent definition is now the canonical pattern in all docs and examples

Fixed

  • @structured decorator now applies @dataclass internally — no manual decoration needed
  • _has_default() helper: fixed broken is not type(None) comparison
  • Swarm context injection: _AgentMeta metaclass compatibility fixed via plain setattr fallback
  • @tool without a description now emits UserWarning at decoration time

Removed

  • DynamicPipeline — removed; use AgentRouter. Importing raises ImportError with migration message.
  • AgentTeam — removed; use Swarm(topology=SwarmTopology.ORCHESTRATOR). Importing raises ImportError.

v0.10.0 - Debug Watch Triggers

30 Mar 19:46

Choose a tag to compare

[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: e errors, t tools, m memory, f full trace, q quit, p pause

Event-Driven Triggers (agent.watch())

  • Watchable mixin with swappable protocols
  • CronProtocol — cron-scheduled triggers using croniter
  • WebhookProtocol — HTTP webhook trigger with HMAC signature validation
  • QueueProtocol — 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 pipeline
  • SpotlightDefense — clearly label untrusted content
  • CanaryTokens — hidden tokens that trigger alerts
  • Secure memory writes — scan before storing

Structured Output Enforcement

  • result.output always 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

25 Mar 12:45

Choose a tag to compare

[0.9.0] - 2026-03-25

Breaking

  • Budget(run=) renamed to Budget(max_cost=)
  • agent.response() renamed to agent.run() — old method removed
  • per= in rate limits replaced by RateLimit(hour=, day=, month=)

Added

  • ExceedPolicy enumSTOP | WARN | IGNORE | SWITCH replaces string policies
  • result.cost_estimated — pre-call budget estimate alongside result.cost
  • result.cache_savings — cache discount reported per call
  • agent.budget_summary() — dashboard dict: run cost, tokens, hourly/daily totals, percent used
  • agent.export_costs(format="json") — structured cost history per call
  • BudgetStore ABC — plug in any persistence backend (PostgreSQL, Redis, DynamoDB)
  • Budget(shared=True) — thread-safe shared pool across parallel agents (SQLite WAL)
  • ModelPricing override — pass pricing=ModelPricing(...) to any Model() 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
  • PIIScanner redaction applied before content reaches the LLM
  • Memory.import_from() logging noise removed

v0.8.1 - Grounded Intelligence

13 Mar 10:16

Choose a tag to compare

[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 frontmatterTemplate.from_file() parses YAML frontmatter

Changed

  • PDF extraction — Consolidated to single docling dependency
  • 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

11 Mar 11:43

Choose a tag to compare

[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 syrin now includes OpenAI and serving dependencies by default.
  • Removed CLI: syrin trace, syrin run, and syrin doctor commands removed; use python my_agent.py --trace for observability.

Breaking

  • CLI removal: Command-line interface deprecated; use direct Python execution with --trace flag.

v0.7.0 - Context Management

07 Mar 16:09

Choose a tag to compare

[0.7.0] - 2026-03-07

Breaking

  • Context: Context.budget removed. Use Context.token_limits (TokenLimits). ContextWindowBudgetContextWindowCapacity. Context.get_budget(model)Context.get_capacity(model). ContextManager.prepare() takes capacity instead of budget.

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=None turns 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

05 Mar 20:05

Choose a tag to compare

[0.6.0] - 2026-03-05

Added

  • Remote configsyrin.init(api_key=...) or SYRIN_API_KEY enables real-time config overrides from Syrin Cloud or self-hosted backend. Overrides (budget, memory, temperature, etc.) via SSE; zero overhead when not enabled.
  • Config routesGET /config, PATCH /config, GET /config/stream added to agent.serve(). Baseline + overrides + revert; works with or without syrin.init().
  • syrin.remote — Types: AgentSchema, ConfigOverride, OverridePayload, SyncRequest/SyncResponse. ConfigRegistry, ConfigResolver, extract_schema(). Transports: SSETransport, ServeTransport, PollingTransport.
  • HooksHook.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

04 Mar 04:53

Choose a tag to compare

[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.
  • QdrantConfigMemory(qdrant=QdrantConfig(url=..., api_key=..., collection=..., namespace=...)) for Qdrant Cloud or local.
  • ChromaConfigMemory(chroma=ChromaConfig(path=..., collection=...)) for Chroma vector backend.
  • Namespace isolationQdrantConfig.namespace scopes all operations; payload filter on search/list.
  • WriteModeWriteMode.SYNC (block until complete) vs WriteMode.ASYNC (fire-and-forget, default).
  • Memory export/importMemory.export() returns MemorySnapshot; Memory.import_from(snapshot) appends memories. JSON-serializable for GDPR export.
  • Examplesexamples/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] and syrin[chroma] optional dependencies added to pyproject.toml.

v0.4.1

01 Mar 18:26

Choose a tag to compare

[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() preserves provider.
  • Provider availability checks use importlib.util.find_spec() instead of import.

Changed

  • Strict typing: TypedDict + Unpack for memory kwargs, ServeConfig, agent specs. Pyright config added.
  • Replaced Any with object / TypedDict across core modules.
  • Docs: docs/TYPING.md for typing standards; updated API references.

v0.3.0

27 Feb 12:26

Choose a tag to compare

[0.3.0] - 2026-02-27

Added

  • Sub-agents & handoffspawn(task=...), handoff(AgentClass, task) with optional memory transfer and budget inheritance.
  • Handoff interceptionevents.before(Hook.HANDOFF_START, fn); raise HandoffBlockedError to block; HandoffRetryRequested for retry.
  • Audit loggingAuditLog, JsonlAuditBackend; Agent(audit=...), Pipeline(audit=...), DynamicPipeline(audit=...).
  • HITL@syrin.tool(requires_approval=True); ApprovalGate protocol; hooks: HITL_PENDING, HITL_APPROVED, HITL_REJECTED.
  • Circuit breakerCircuitBreaker for LLM/provider failures; CLOSED → OPEN → HALF_OPEN; configurable fallback.
  • Budget-aware context — Context tier selection by budget percent remaining.
  • Dependency InjectionAgent(deps=...), RunContext[Deps]; tools receive ctx.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_input is str; friendly error for None/int/dict.
  • Example paths — Fixed run instructions (08_streaming, 07_multi_agent).

Fixed

  • Chaos stress test fixes: Agent/Loop validation; Loop max_iterations < 1 no longer causes UnboundLocalError. Model _provider_kwargs passed to provider.