Skip to content

Releases: AmritaBot/AmritaCore

V0.13.5

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 16 Aug 11:27
8061e6a

🚨 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 StateContext or the .state property now emits a DeprecationWarning
  • The ChatObject(context=...) constructor parameter is deprecated
  • The chat.state getter/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 >= 1
  • memory_length_limit: must be >= 1
  • max_tokens: must be >= 1
  • session_tokens_windows: must be >= 1
  • llm_timeout: must be >= 1
  • max_retries: must be >= 0 (0 disables retrying)
  • max_fallbacks: must be >= 1
  • memory_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 StateContext removal
  • 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.ini to pyproject.toml (modernized)
  • Added proper @deprecated decorators with clear removal version notices
  • Improved type safety with validation constraints

Testing

  • Removed deprecated StateContext usage from all tests
  • Added comprehensive tests for token budget thresholds (disabled, zero, very large)
  • Added coverage markers (nocov) for deprecated code paths

PRs

Full Changelog: 0.13.4...0.13.5

V0.13.4

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 15 Aug 08:23
e7c9f87

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 multiple tool_calls in one response, the agent now appends one assistant message containing all tool calls, followed by all corresponding ToolResult messages in call order. Previously, some strategies could split concurrent calls into separate assistant messages, leading to API errors (“insufficient tool messages”) and undefined behaviour when reasoning_content was 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 an ERR:‑prefixed ToolResult content, 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 (excluding role, 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_batch to 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
    The REASONING tool 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_signature round‑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.

📦 Dependency Updates

  • anthropic upper 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 REASONING failures.

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

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 15 Aug 06:32
63b893d

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 UsageRegistry and SessionUsageProxy track per-run token usage.
  • Step window tracking: TokenBudget.refresh_window() uses the ledger's prompt_since() for per-Step budget checks.
  • Post-run snapshot: ChatObject.usage_snapshot preserves 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 adapter
    • ModelPreset(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 explicit get_chatobject(workflow=...) usage.
  • Workflow Engine (workflow-engine.md): Documented all pre-composed pipelines and how to choose between SIMPLE_CHAT, *_ONLY, and SIMPLE_* families.
  • Model Adapters (adapters.md): Clarified "adapter + provider" two-layer model; create_agent() has no protocol parameter.
  • MCP Server (mcp-server.md): Documented streamable+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.enums is deprecated; use amrita_core.enums instead.
  • HybridReActAgentStrategy remains deprecated, removed in v0.14.0.

Changelog Summary

Added

  • amrita_core.usage module (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_rendered or SIMPLE_STEP_REACT
  • Stall detection moved from leave_step to after_iteration (per-iteration hook)
  • _inject_plan_status() runs at every Step intro (change-detection)
  • _maybe_inject_tool_failure_hint() injects deterministic revision guidance on ERROR results
  • MCP simple_call uses reference counting for concurrent-call safety
  • create_agent() documentation: no protocol parameter; use ModelPreset for non-default adapters
  • Demos: API_BASE_URL/API_MODEL environment variables replace hardcoded DeepSeek URLs

Fixed

  • reasoning_content propagation in error branches (HTTP 400 fix)
  • update_step tool 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 adapter documentation
  • Empty response request-id headers (DeepSeek uses x-ds-trace-id, not x-request-id)

Removed

  • amrita_core.chatmanager.enums (deprecated; use amrita_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_rendered explicitly.
  • StrategyContext.resp_extra_usage is replaced by StrategyContext.usage (a SessionUsageProxy).
  • ReActAgentStrategy.resp_extra_usage is replaced by ReActAgentStrategy.usage (read-only property).

Full Changelog: 0.13.1...0.13.2

V0.13.1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 08 Aug 08:04
2d6456c

✨ New Features

  • Per‑Step Token Budget
    Introduced agent_step_token_budget in FunctionConfig. 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
    Added memory_abstract_threshold in LLMConfig. 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.exhausted directly.
  • The TokenBudget class gained a reset() method to clear accumulated counts while preserving the configured budget, used after compression.
  • The anthropic dependency version constraint has been relaxed to <0.121.0 to 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 FunctionConfig and LLMConfig now 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 mermaid from 11.15.0 to 11.16.1 in 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

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 07 Aug 06:23
cbb83b4

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 (introexecuteleave).
  • 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_step Tool – 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_content back 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:

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 ReActAgentStrategy instead.
  • StateContext – Marked as legacy; use DI contexts (_di_memory, _di_ability, etc.) directly in new code.
  • chat_object on StrategyContext – No longer deprecated; it remains the lifecycle‑manager handle. Prefer DI resource fields when available.
  • agent.step_intro/leave/iteration events – These replace the old SINGLE_STRATEGY_CALL and REACT_COUNTER control 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-sense upgraded to >=0.6.0 (new NATIVE_WHILE/NATIVE_DO support).
  • aiohttp → 3.14.3
  • openai → 2.50.0
  • cryptography → 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.0

Happy building 🚀

Full Changelog: 0.12.7...0.13.0

V0.12.7

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 26 Jul 02:46
dcc1b82

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 Literal support and constraints.

Internal Improvements

  • Added Ruff PERF rule and ignored RUF036 (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

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 23 Jul 04:36
ca75a21

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 completion
  • SIMPLE_REACT – Full ReAct pipeline with tool calling and memory commit
  • REACT_ONLY – ReAct pipeline without the final LLM call
  • SIMPLE_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 ChatObject and StrategyContext documenting the new workflow parameter 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-sense dependency to v0.5.0
  • Relaxed anthropic version 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

  1. workflow and archived_nodes are mutually exclusive – provide only one. If neither is provided, the built-in default pipeline is used.

  2. chat_object on StrategyContext is deprecated – update strategies to use DI resource fields and _StrategyBase convenience properties.

    Before:

    preset = self.chat_object.preset

    After:

    preset = self.preset
  3. ctx.chat_object may be None in 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 workflow parameter to ChatObject.__init__()
  • Added DI resource fields to StrategyContext
  • Added _StrategyBase convenience properties for DI access
  • Added STRATEGY_INIT workflow node
  • Added "Prompt Engineering" and "Workflow Engine" documentation
  • Completely redesigned VitePress documentation theme
  • Integrated Nolebase Enhanced Readabilities plugin
  • Updated amrita-sense to v0.5.0
  • Relaxed anthropic dependency 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

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 15 Jul 06:52
20d3ee0

What's Changed

Full Changelog: 0.12.4...0.12.5

V0.12.4

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 14 Jul 08:09
2412b82

What's Changed

Full Changelog: 0.12.3...0.12.4

V0.12.3

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 13 Jul 14:13
192f904

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 fastmcp with the slimmer fastmcp-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.lock has 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.
  • coverage updated from v7.15.0 → v7.15.1 (dev/test dependency).

Bug Fixes

Stream Queue Termination

  • Fixed a potential TimeoutError during queue finalization by adding explicit set_queue_done() handling in chat_object.py.
  • If a timeout occurs while writing the EOF marker, the system now force-overwrites _queue_done to prevent hanging or incomplete stream shutdowns, improving chat session cleanup reliability.

Enhancements & Other Changes

REACT Loop Error Messaging

  • Improved error message in REACT_COUNTER loop: the BreakLoop exception now includes a clear hint to "reset loop.called_count to 0 to continue," making it easier for developers to understand and handle counter limit breaches.

Internal API Refinement

  • Updated the ProcessMessage tool 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: fastmcp replaced with fastmcp-slim[client]; amrita-sense updated.
  • 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


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