Releases: AmritaBot/AmritaCore
Release list
V0.13.5
🚨 Breaking Changes
StateContext Deprecation & Removal Notice
StateContext and the chat.state accessor are now formally deprecated and will be removed in v0.14.0.
- Using
StateContextor the.stateproperty now emits aDeprecationWarning - The
ChatObject(context=...)constructor parameter is deprecated - The
chat.stategetter/setter is deprecated
Migration path:
# OLD (deprecated)
state = StateContext(session_id="my-session")
chat = ChatObject(user_input="...", context=state)
# NEW
chat = ChatObject(user_input="...", session_id="my-session")
chat.data = MemoryModel(messages=[...])📝 Configuration Changes
Token Budget Settings
The agent_step_token_budget and memory_abstract_threshold configuration values have changed semantics:
| Setting | Old Default | New Default | New Behavior |
|---|---|---|---|
function_config.agent_step_token_budget |
None (unlimited) |
-1 |
<= 0 = disabled/unlimited |
llm.memory_abstract_threshold |
None (never compress) |
-1 |
<= 0 = disabled/never compress |
Impact: Existing configurations that explicitly set these to None will need to update to -1 (or 0).
Config Validation Added
agent_tool_call_limit: must be>= 1memory_length_limit: must be>= 1max_tokens: must be>= 1session_tokens_windows: must be>= 1llm_timeout: must be>= 1max_retries: must be>= 0(0disables retrying)max_fallbacks: must be>= 1memory_abstract_proportion: must be in(0, 1]loop_reasoning_trigger: must be>= 1
✨ Improvements
Agent Strategy
- Updated decomposition decision prompt to clearly distinguish SIMPLE mode (still ReAct, just not step-driven) from STEP mode (DAG decomposition)
- SIMPLE mode now explicitly covers chitchat, direct questions, single tool calls, summarization, and routine tasks
- STEP mode reserved for complex multi-step requirements
Documentation
- Updated all API reference docs to reflect deprecation warnings
- Added migration examples for
StateContextremoval - Updated Chinese translations to match English documentation
- Clarified SIMPLE vs STEP mode behavior in agent strategy docs
- Fixed MCP server example syntax (now uses tuple format consistently)
Configuration & Code Quality
- Moved coverage configuration from
pytest.initopyproject.toml(modernized) - Added proper
@deprecateddecorators with clear removal version notices - Improved type safety with validation constraints
Testing
- Removed deprecated
StateContextusage from all tests - Added comprehensive tests for token budget thresholds (disabled, zero, very large)
- Added coverage markers (
nocov) for deprecated code paths
PRs
- Clarify token/memory budgets and deprecate StateContext accessors by @JohnRichard4096 in #156
Full Changelog: 0.13.4...0.13.5
V0.13.4
Skipping v0.13.3, this release bundles all fixes and improvements intended for the 0.13.x series.
🔧 Bug Fixes
-
Corrected assistant message field round‑trip for thinking‑mode providers
The built‑in strategies now carry every field from the provider response (reasoning_content,reasoning_signature, and any provider‑specific extra) verbatim on fabricated assistant messages. This fixes HTTP 400 errors with DeepSeek (OpenAI‑compatible) and Anthropic (extended thinking), which require that reasoning fields are passed back unchanged on subsequent requests. -
Fixed tool‑call/result pairing for concurrent tool execution
When a model returns multipletool_callsin one response, the agent now appends one assistant message containing all tool calls, followed by all correspondingToolResultmessages in call order. Previously, some strategies could split concurrent calls into separate assistant messages, leading to API errors (“insufficient tool messages”) and undefined behaviour whenreasoning_contentwas repeated. -
Error‑handling now preserves original tool arguments and reasoning fields
The error branch no longer replaces tool arguments with"{}"and no longer drops reasoning fields. The failure is marked solely by anERR:‑prefixedToolResultcontent, while the fabricated assistant message mirrors the original provider response exactly.
✨ Improvements
-
New helper method
_assistant_fields_from_response
Centralises extraction of assistant‑message fields (excludingrole,content,tool_calls,usage,metadata), making the code more maintainable and ensuring no hard‑coded field names. -
Batch appending for concurrent tool results
Introduced_append_tool_results_batchto ensure that all results from a concurrent round are appended together, preventing partial or out‑of‑order messages. -
Refined error flow for the built‑in ReAct strategy
TheREASONINGtool failure and other errors now consistently use the same batching logic, avoiding duplicate assistant messages.
📚 Documentation
- Updated the troubleshooting guide (English and Chinese) with:
- Clearer explanation of the
reasoning_content/reasoning_signatureround‑trip requirement. - Explicit note that the framework never strips reasoning fields in place and always passes them back verbatim.
- Clarified that one response is never split into multiple assistant messages – the reasoning text appears exactly once.
- Clearer explanation of the
📦 Dependency Updates
anthropicupper bound relaxed to<0.122.0(was<0.121.0), supporting the latest Anthropic client features.
🧪 Testing
- Added comprehensive test coverage for:
- Round‑tripping of
reasoning_signature. - Error branches that preserve original arguments and reasoning fields.
- Concurrent tool calls batched into a single assistant message.
- Single‑pair error appends for
REASONINGfailures.
- Round‑tripping of
PRs
- Preserve provider reasoning metadata and batch concurrent tool results by @JohnRichard4096 in #155
- Build(deps-dev): Bump anthropic from 0.120.2 to 0.121.0 by @dependabot[bot] in #153
Full Changelog: 0.13.2...0.13.4
V0.13.2
Overview
This release clarifies the two workflow models (simple chat vs. step-loop), introduces a run-scoped usage ledger, fixes critical bugs in reasoning propagation and plan revision, and improves documentation across the board.
Key Theme: Step-Loop is Now Explicitly Opt-In
The step-driven ReAct loop (decomposition → Step execution → summarization) is now explicitly enabled by passing workflow=_step_workflow_rendered or SIMPLE_STEP_REACT to get_chatobject(). The default remains the simple chat workflow (one LLM call, no decomposition).
This change makes the framework's behavior more predictable and aligns the code with the documentation.
New Features
1. Run-Scoped Usage Ledger (usage.py)
- Session-scoped token accounting: A new
UsageRegistryandSessionUsageProxytrack per-run token usage. - Step window tracking:
TokenBudget.refresh_window()uses the ledger'sprompt_since()for per-Step budget checks. - Post-run snapshot:
ChatObject.usage_snapshotpreserves run usage after the registry releases it. - Double-ledger separation: Process usage (tool rounds + auxiliary calls) and final completion usage live in separate ledgers, avoiding double-counting.
2. update_step Demo (demo/step_update_demo.py)
A new real-API demonstration shows autonomous plan revision:
- Scenario D1 (broken plan): A tool returns a hard error; the model retries once, then calls
update_step(remove_step)and answers with the partial result. - Scenario D2 (control): All tools succeed; no revision is expected.
Critical Bug Fixes
1. reasoning_content Propagation in Error Paths
Issue: The error-handling branch (_handle_error_append) dropped reasoning_content, causing HTTP 400 on thinking-mode providers (DeepSeek, Anthropic with extended thinking).
Fix: The error branch now carries response_msg.reasoning_content back on the fabricated assistant message, matching the success path.
2. update_step Tool Visibility
Issue: The built-in plan-revision tool (UPDATE_STEP_TOOL) was never exposed to the model because the legacy loop never called intro_step.
Fix: intro_step now calls _ensure_step_tools() (idempotent) to expose update_step exactly when the step-loop workflow is active.
3. Stall Detection Location
Issue: Stall detection was checked only in leave_step, which runs after the loop exits. A model stuck calling the same tool never reached leave_step, so tokens burned without limit.
Fix: Stall detection now runs per-iteration (after_iteration, called after every STEP_EXEC round) inside the loop, with leave_step retaining a backstop check.
4. MCP Concurrent Call Race
Issue: simple_call teardown raced with sibling calls—the first caller to finish closed the connection while others were mid-call.
Fix: Connection teardown is deferred via _active_calls reference counting; the connection survives until the last concurrent call exits.
5. Plan Status Injection
Issue: The model couldn't see the current plan after update_step revisions because the snapshot was never re-injected.
Fix: _inject_plan_status() runs at every Step intro, appending a changed snapshot and instructional guidance on when to call update_step.
6. Tool Failure Guidance
New deterministic behavior: When a tool result starts with ERROR, a framework note is injected:
- First failure: "Retry once, then call update_step."
- Subsequent failures: "Do not retry; call update_step now."
This turns ERROR-prefixed failures into explicit revision instructions.
Documentation Improvements
New / Expanded Sections
- Troubleshooting & Pitfalls (
troubleshooting.md): Added entries 8–11 covering:Undefined protocol adapterModelPreset(model_config=...)silently dropping fields- Test/async traps (wait_for, AnyIO streams, MagicMock, TypedDict, patch.bind)
- Plan revision (
update_step) seeming to do nothing
- Step Loop (
step-loop.md): Clarified opt-in workflow and explicitget_chatobject(workflow=...)usage. - Workflow Engine (
workflow-engine.md): Documented all pre-composed pipelines and how to choose betweenSIMPLE_CHAT,*_ONLY, andSIMPLE_*families. - Model Adapters (
adapters.md): Clarified "adapter + provider" two-layer model;create_agent()has noprotocolparameter. - MCP Server (
mcp-server.md): Documentedstreamable+http(s)://transport syntax and concurrent-safety behavior. - ChatObject (
chat-object.md): Explicitly documented the default simple-chat workflow vs. explicit step-loop.
Updated Demos
All demos now use environment variables for API_BASE_URL and API_MODEL, making them provider-agnostic (DeepSeek remains the default example).
Deprecations & Removals
amrita_core.chatmanager.enumsis deprecated; useamrita_core.enumsinstead.HybridReActAgentStrategyremains deprecated, removed in v0.14.0.
Changelog Summary
Added
amrita_core.usagemodule (UsageRegistry, SessionUsageProxy, UsageLedger, UsageSnapshot)demo/step_update_demo.py(plan revision demonstration)AgentRunState.tool_error_hints(per-Step hard error counter)AgentRunState.step_started_ts(Step window anchor)RespState.usage(run-scoped usage proxy)- Documentation: troubleshooting entries 8–11, workflow pipeline table, MCP transport examples
Changed
- Step-loop is now opt-in: pass
workflow=_step_workflow_renderedorSIMPLE_STEP_REACT - Stall detection moved from
leave_steptoafter_iteration(per-iteration hook) _inject_plan_status()runs at every Step intro (change-detection)_maybe_inject_tool_failure_hint()injects deterministic revision guidance onERRORresults- MCP
simple_calluses reference counting for concurrent-call safety create_agent()documentation: noprotocolparameter; useModelPresetfor non-default adapters- Demos:
API_BASE_URL/API_MODELenvironment variables replace hardcoded DeepSeek URLs
Fixed
reasoning_contentpropagation in error branches (HTTP 400 fix)update_steptool visibility (exposed only when step-loop is active)- Stall detection location (per-iteration, not post-loop)
- MCP concurrent call race (reference counting)
ModelPreset(model_config=...)silently dropping fields (documentation only)Undefined protocol adapterdocumentation- Empty response request-id headers (DeepSeek uses
x-ds-trace-id, notx-request-id)
Removed
amrita_core.chatmanager.enums(deprecated; useamrita_core.enums)
PRs
- Build(deps): Bump nanoid from 3.3.16 to 3.3.18 in /docs by @dependabot[bot] in #149
- Build(deps): Bump dompurify from 3.4.12 to 3.4.13 in /docs by @dependabot[bot] in #148
- Add session usage ledger and refine step-loop plan handling by @JohnRichard4096 in #154
Upgrade Notes
- If you were relying on the step-loop by default, you must now pass
workflow=_step_workflow_renderedexplicitly. StrategyContext.resp_extra_usageis replaced byStrategyContext.usage(aSessionUsageProxy).ReActAgentStrategy.resp_extra_usageis replaced byReActAgentStrategy.usage(read-only property).
Full Changelog: 0.13.1...0.13.2
V0.13.1
✨ New Features
-
Per‑Step Token Budget
Introducedagent_step_token_budgetinFunctionConfig. When set, the built‑in step loop stops as soon as the accumulated prompt tokens for the current Step reach the configured budget. This gives fine‑grained control over token usage per iteration, preventing runaway costs in long-running agent loops.
Default:None(unlimited). -
Between‑Step History Compression
Addedmemory_abstract_thresholdinLLMConfig. When the real API prompt‑token count exceeds this threshold at a Step boundary, the oldest history is automatically folded into a single summary message. The summary is generated by the LLM, preserving tool‑call/result pairs to keep the context well‑formed. If the summary fails or is empty, the history remains untouched and the token baseline is reset (no retry loop).
Default:None(never compress).
🔧 Improvements
- The token budget is now injected into the run state from the configuration, allowing the step loop to query
TokenBudget.exhausteddirectly. - The
TokenBudgetclass gained areset()method to clear accumulated counts while preserving the configured budget, used after compression. - The
anthropicdependency version constraint has been relaxed to<0.121.0to accommodate recent releases.
📚 Documentation
- All architecture diagrams in the guide have been migrated from ASCII art to Mermaid diagrams for better readability.
- The step‑loop documentation now includes a full explanation of between‑step compression and token budget control.
- Configuration tables in the Concepts section have been updated to reflect the new settings and their defaults.
- API references for
FunctionConfigandLLMConfignow document both new parameters.
🧪 Testing
- Extensive new test coverage for token budget exhaustion, budget injection, and all compression scenarios (threshold conditions, empty summaries, tool‑pair preservation, and baseline reset).
⬆️ Dependencies
- Upgraded
mermaidfrom11.15.0to11.16.1in the documentation build.
PRs
- Build(deps-dev): Bump anthropic from 0.118.0 to 0.120.2 by @dependabot[bot] in #143
- Build(deps-dev): Bump mermaid from 11.15.0 to 11.16.1 in /docs by @dependabot[bot] in #145
- Build(deps): Bump js-yaml from 3.15.0 to 3.15.1 in /docs by @dependabot[bot] in #146
- feat: add per-step token budget and between-step history compression by @JohnRichard4096 in #147
Full Changelog: 0.13.0...0.13.1
V0.13.0
We are pleased to announce AmritaCore v0.13.0! This release introduces a native step‑loop architecture for the built‑in ReAct strategy, fundamentally improving the way agents decompose and execute complex tasks. Alongside this, we have completely restructured the documentation to better guide you from your first agent to deep internals.
✨ Major Features
Native Step Loop for ReAct Strategy
The built‑in ReActAgentStrategy now runs on a native instruction‑driven step loop, powered by AmritaSense’s NATIVE_WHILE and NATIVE_DO instructions.
- Task Decomposition – The LLM decides whether to break a task into a semantic DAG (Directed Acyclic Graph).
- Step‑by‑Step Execution – Each DAG node becomes a Step (
intro→execute→leave). - Stall Detection – Repeated identical tool calls within a Step trigger a "give‑up" prompt and stop the loop, preventing token waste.
- Lifecycle Events – New mutable events (
agent.step_intro,agent.step_leave,agent.step_iteration,agent.tool_call,agent.tool_return) allow fine‑grained control and observability. update_stepTool – Agents can revise the plan mid‑run (replan, add/remove steps, mark done).- Peer Message Injection – Use
send_to_producer()to push messages from the consumer side; they are drained at Step boundaries and injected into the agent context.
This architecture makes agent execution more predictable, observable, and efficient—especially for multi‑step tasks.
Documentation Overhaul
We have completely re‑organised the documentation to mirror the natural development journey:
- Getting Started – Minimal and basic examples to run your first agent.
- Tutorials – Step‑by‑step guides for tools, streaming, events, and memory.
- Concepts – Deep dives into ChatObject, Agent Strategy, Data Backend, and the new Step Loop.
- Agent Engineering – Practical craft: prompt engineering, Jinja2 templates, custom strategies, and troubleshooting.
- Advanced – Workflow engine internals, suspend/resume, and the step loop deep‑dive.
- Extensions & Integration – Adapters, MCP servers, custom tokenizers, and advanced tool patterns.
The new structure helps you find exactly what you need at every stage—from first run to deep internals.
🔧 Improvements & Fixes
- Thinking‑mode round‑trip – Assistant messages now correctly carry
reasoning_contentback to providers (fixes HTTP 400 errors on DeepSeek thinking models). - HybridReActAgentStrategy (deprecated) – Maintained with fixes, but will be removed in v0.14.0. Please migrate to
ReActAgentStrategy. - Event filtering – The thinking filter no longer mutates live message objects, ensuring reasoning content is preserved for subsequent requests.
- Stall detection – Now runs inside the iteration loop (
after_iteration), so a stuck agent stops burning tokens immediately. - Better error messages – Empty responses from decomposition/summary now include the provider’s request ID for easier debugging.
📚 Documentation Highlights
New pages added:
- AmritaSense Overview – The execution substrate explained.
- The Step Loop – Full anatomy of the new native step loop.
- Troubleshooting – Common failure modes and fixes.
- Custom Strategy – Step‑by‑step guide to writing your own strategy.
- MCP Servers – Simplified MCP integration guide.
Also updated: configuration, event system, data backend, and security sections.
⚠️ Deprecations & Breaking Changes
- HybridReActAgentStrategy – Deprecated in v0.13.0 and scheduled for removal in v0.14.0. Use
ReActAgentStrategyinstead. StateContext– Marked as legacy; use DI contexts (_di_memory,_di_ability, etc.) directly in new code.chat_objecton StrategyContext – No longer deprecated; it remains the lifecycle‑manager handle. Prefer DI resource fields when available.agent.step_intro/leave/iterationevents – These replace the oldSINGLE_STRATEGY_CALLandREACT_COUNTERcontrol flow for the built‑in ReAct strategy. If you have custom matchers that relied on the old loop internals, please review the new Step Events documentation.
🧹 Dependency Updates
amrita-senseupgraded to>=0.6.0(newNATIVE_WHILE/NATIVE_DOsupport).aiohttp→ 3.14.3openai→ 2.50.0cryptography→ 50.0.0- Plus several dev‑dependency updates (coverage, ruff, etc.).
PRs
- Build(deps): Bump postcss from 8.5.15 to 8.5.23 in /docs by @dependabot[bot] in #132
- Build(deps): Bump amrita-sense from 0.5.0 to 0.5.1 by @dependabot[bot] in #136
- Build(deps): Bump pytz from 2026.2 to 2026.3.post1 by @dependabot[bot] in #134
- Build(deps): Bump openai from 2.47.0 to 2.50.0 by @dependabot[bot] in #137
- Restructure docs and update API/security reference by @JohnRichard4096 in #138
- feat: implement native step loop and restructure docs for v0.13.0 by @JohnRichard4096 in #144
- Build(deps): Bump undici from 7.28.0 to 7.29.0 in /docs by @dependabot[bot] in #139
- Build(deps): Bump aiohttp from 3.14.2 to 3.14.3 by @dependabot[bot] in #133
Thank you to everyone who contributed to this release!
Try it today!
pip install amrita-core==0.13.0Happy building 🚀
Full Changelog: 0.12.7...0.13.0
V0.12.7
Release v0.12.7
New Feature – Literal Type Support in Tools
The @simple_tool decorator now understands Python’s Literal type hints.
Literal["a", "b"], Literal[1, 2, 3] (and homogeneous float / bool literals) are automatically converted to JSON Schema with an enum constraint, making it easy to define allowed values for LLM function calling.
Mixed‑type literals (e.g., Literal["a", 1]) raise a clear TypeError at registration time.
Documentation
- English and Chinese guides have been updated to cover the new
Literalsupport and constraints.
Internal Improvements
- Added Ruff
PERFrule and ignoredRUF036(preview) to maintain code quality. - Several type annotations were refined (e.g.,
get_current_datetime_timestamp,get_tool_meta,get_tool_func,MCPProperty). - Imports were re‑sorted (
isort) and a few formatting inconsistencies fixed.
PRs
- feat(tools): add Literal type support to @simple_tool and update docs by @JohnRichard4096 in #131
- Build(deps): Bump dompurify from 3.4.11 to 3.4.12 in /docs by @dependabot[bot] in #129
- Build(deps): Bump linkify-it from 5.0.1 to 5.0.2 in /docs by @dependabot[bot] in #130
Full Changelog: 0.12.6...0.12.7
V0.12.6
AmritaCore v0.12.6 Release Summary
Overview
AmritaCore v0.12.6 introduces significant improvements to the documentation ecosystem, a new pre-composed workflow system, enhanced Dependency Injection (DI) support for agent strategies, and a comprehensive Prompt Engineering guide. This release also includes a full redesign of the VitePress documentation theme and updates to core dependencies.
New Features
Pre-composed Workflows (amrita_core.builtins.workflows)
A new module provides ready-to-use NodeComposeRendered workflow graphs that can be passed directly to ChatObject(workflow=...), replacing the default execution pipeline without needing to build custom graphs.
Available workflows:
REACT_BLOCK– ReAct loop block without final LLM completionSIMPLE_REACT– Full ReAct pipeline with tool calling and memory commitREACT_ONLY– ReAct pipeline without the final LLM callSIMPLE_CHAT– Plain chat with no agent or tool calling
from amrita_core.builtins.workflows import SIMPLE_REACT
chat = ChatObject(..., workflow=SIMPLE_REACT)DI Resource Fields on StrategyContext
StrategyContext now exposes DI resource fields directly, enabling agent strategies to access services without reaching through ChatObject. The legacy chat_object field is deprecated and will be removed in a future release.
New fields: preset, config, tools_manager, io_stream, train_content, stream_id, resp_extra_usage
_StrategyBase Convenience Properties
Agent strategies extending AgentStrategy or StrategyLikedObject can now use convenience properties that resolve from StrategyContext DI fields with fallback to ChatObject for backward compatibility:
self.preset,self.config,self.io_stream,self.train_content,self.stream_id,self.resp_extra_usage
STRATEGY_INIT Workflow Node
A new node (amrita_core.components.react.STRATEGY_INIT) initializes StrategyContext with DI resource fields before the agent entry point. Used by pre-composed external workflows.
workflow Parameter on ChatObject
ChatObject.__init__() now accepts a workflow parameter for passing pre-rendered workflows. This is mutually exclusive with archived_nodes — providing both raises a ValueError.
Documentation Additions
- New "Prompt Engineering" guide (
/guide/prompt-engineering) – comprehensive coverage of prompt design, execution frameworks, mode-driven instructions, and AmritaCore-specific Jinja2 template usage. - New "Workflow Engine" concept page – detailed documentation of the node graph execution system.
- Updated API references for
ChatObjectandStrategyContextdocumenting the newworkflowparameter and DI fields. - New "Built-in Workflows" section documenting all pre-composed workflows.
Documentation & Theme Overhaul
The VitePress documentation site has been completely redesigned with a new Amrita-branded theme featuring:
- New color palette: Deep navy brand (#0d2b4e) with gold (#e6C17A) accent
- Glass-morphism navigation and sidebar with backdrop blur
- Redesigned home hero with full-viewport immersive layout and subtle ambient glow
- Refined typography, buttons, code blocks, and custom block styling
- Dark mode with carefully tuned colors for readability
- Accessibility improvements: smooth scrolling, focus rings, and selection styling
The theme now integrates the Nolebase Enhanced Readabilities plugin for improved readability controls.
Updated Dependencies
- Added
@nolebase/vitepress-plugin-enhanced-readabilities(v2.18.2) - Updated
amrita-sensedependency to v0.5.0 - Relaxed
anthropicversion constraint to>=0.116.0,<0.119.0
Internal Improvements
Component Node Refactoring
The STRATEGY_INIT node now uses the build_strategy_context() factory function, ensuring all DI fields are consistently populated across both the _run_strategy branch and external workflow paths.
resp_extra_usage Settable via _StrategyBase
The resp_extra_usage property now supports a setter, allowing strategies to update usage tracking directly:
self.resp_extra_usage = gather_usage(self.resp_extra_usage, new_usage)BUILTIN_TOOLS_NAME Lookup
Fixed an issue where built-in tool name lookups could fail in certain scenarios.
Breaking Changes / Migration Notes
-
workflowandarchived_nodesare mutually exclusive – provide only one. If neither is provided, the built-in default pipeline is used. -
chat_objectonStrategyContextis deprecated – update strategies to use DI resource fields and_StrategyBaseconvenience properties.Before:
preset = self.chat_object.preset
After:
preset = self.preset
-
ctx.chat_objectmay beNonein new-style DI workflows – strategies must handle this gracefully (the convenience properties handle the fallback automatically).
Full Changelog
- Added pre-composed workflows module (
amrita_core.builtins.workflows) - Added
workflowparameter toChatObject.__init__() - Added DI resource fields to
StrategyContext - Added
_StrategyBaseconvenience properties for DI access - Added
STRATEGY_INITworkflow node - Added "Prompt Engineering" and "Workflow Engine" documentation
- Completely redesigned VitePress documentation theme
- Integrated Nolebase Enhanced Readabilities plugin
- Updated
amrita-senseto v0.5.0 - Relaxed
anthropicdependency constraint - Fixed built-in tool name resolution issues
Pull Requests
- Add pre-composed workflows and DI-based agent strategy context by @JohnRichard4096 in #128
- Build(deps): Bump amrita-sense from 0.4.5.1 to 0.5.0 by @dependabot[bot] in #124
- Build(deps): Bump openai from 2.45.0 to 2.47.0 by @dependabot[bot] in #127
- Build(deps-dev): Bump anthropic from 0.116.0 to 0.118.0 by @dependabot[bot] in #126
- Build(deps): Bump aiohttp from 3.14.1 to 3.14.2 by @dependabot[bot] in #125
- Build(deps-dev): Bump ruff from 0.15.21 to 0.15.22 by @dependabot[bot] in #123
Upgrade Notes: Existing strategies using self.chat_object will continue to work via fallback, but users are encouraged to migrate to the new convenience properties. The chat_object field will be removed in v0.13.0.
Full Changelog: 0.12.5...0.12.6
V0.12.5
What's Changed
- fix(agent): handle missing keys in tool call response by @JohnRichard4096 in #122
Full Changelog: 0.12.4...0.12.5
V0.12.4
What's Changed
- Fix: adapter type checking by @JohnRichard4096 in #121
Full Changelog: 0.12.3...0.12.4
V0.12.3
Release Summary: amrita_core v0.12.3
Overview
This patch release focuses on dependency updates, stability improvements, and a minor enhancement to error messaging in the REACT loop. The most significant changes include the migration from fastmcp to fastmcp-slim with explicit client features, an update to amrita-sense, and a fix for stream queue termination to prevent timeout-related warnings.
Dependency Updates
Security & Compliance
- fastmcp → fastmcp-slim[client]: Replaced
fastmcpwith the slimmerfastmcp-slim[client]package (v3.4.4). This addresses security advisory GHSA-rww4-4w9c-7733 and reduces the overall dependency footprint by removing server-side components (e.g.,cyclopts,griffelib,uvicorn,websockets, etc.) that are not required for client-side usage. - amrita-sense: Updated from v0.4.3 → v0.4.5.1, bringing minor improvements and bug fixes from the upstream sense library.
Lock File Updates
uv.lockhas been refreshed to reflect the new dependency tree, including the removal of unused transitive dependencies:- Removed:
cyclopts,griffelib,jsonref,jsonschema-path,openapi-pydantic,pathable,pyperclip,pyyaml,uncalled-for,watchfiles,websockets, and others.
- Removed:
coverageupdated from v7.15.0 → v7.15.1 (dev/test dependency).
Bug Fixes
Stream Queue Termination
- Fixed a potential
TimeoutErrorduring queue finalization by adding explicitset_queue_done()handling inchat_object.py. - If a timeout occurs while writing the EOF marker, the system now force-overwrites
_queue_doneto prevent hanging or incomplete stream shutdowns, improving chat session cleanup reliability.
Enhancements & Other Changes
REACT Loop Error Messaging
- Improved error message in
REACT_COUNTERloop: theBreakLoopexception now includes a clear hint to "resetloop.called_countto 0 to continue," making it easier for developers to understand and handle counter limit breaches.
Internal API Refinement
- Updated the
ProcessMessagetool to use the correct internal I/O path:ctx.ctx.chat_object._interpreter.object_io.yield_response()→ ensures proper message handling within the agent's interpreter layer.
What's Changed
- Dependencies:
fastmcpreplaced withfastmcp-slim[client];amrita-senseupdated. - Stability: Improved stream queue termination to avoid timeout warnings.
- Developer Experience: Enhanced REACT counter limit error message for clarity.
Full Changelog
Refer to the commit diff for detailed code changes: [diff link]
Pull Requests
- fix: correct response method reference and enhance BreakLoop by @JohnRichard4096 in #119
- Fix: missed EOF markup by @JohnRichard4096 in #120
Note: This release does not introduce any breaking changes to the public API. Upgrading is recommended for improved security and stability.
Full Changelog: 0.12.2...0.12.3