Changelog¶
Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Breaking Changes¶
a2a-sdk upgraded to 1.0+ —
AgentCardis now protobuf (was pydantic). If you have a customconfig.pythat doesAgentCard(**data), replace it with:from abi_core.common.agent_card_loader import load_agent_card card, meta = load_agent_card("path/to/card.json")
The
metadict contains ABI-specific fields (auth,id,supportedTasks,llmConfig). Access URL viacard.supported_interfaces[0].urlorget_agent_url(card).Docker image stays on a2a-sdk 0.3.25 — existing projects running on the base image are unaffected. Only projects that install
abi-core-aidirectly from PyPI get the new SDK.
Added¶
abi_core.common.agent_card_loader— new module that separates A2A protocol fields from ABI metadata when loading agent cardsload_agent_card(path)→ returns(AgentCard, abi_metadata_dict)build_agent_card(dict)→ same but from a dict instead of fileget_agent_url(card)→ extracts URL fromsupported_interfaces[0]
Changed¶
a2a_server.py— usescreate_jsonrpc_routes+create_agent_card_routes(replaces removedA2AStarletteApplication)agent_executor.py— rewritten for protobuf types (Part,TaskState.TASK_STATE_WORKING)abi_a2a.py— usesClientFactory.connect()andClient.send_message()(replacesA2AClient)workflow.py— updated event handling for new client response formatsemantic_tools.py—tool_find_agent/tool_list_agentsusebuild_agent_card()All agent
config.pyfiles — useload_agent_card()instead ofAgentCard(**data)CLI scaffolding templates updated for new pattern
Added¶
AbiCore Application Runner: FastAPI-style
agent = AbiCore()with auto-config importAuto-imports
configandAGENT_CARDfrom the localconfigpackageagent.run(MyAgent())starts the A2A server with zero boilerplateSupports
web_interface_clsandinterface_namefor web interfaces
Decorator-Based Task/Tool Registration:
@agent.step(name, depends_on, input_map)— deterministic DAG step@agent.tool(name, depends_on, input_map)— DAG step + LangChain tool for LLM@agent.mcp_tool(name, input_map)— remote MCP tool via MCPToolkit with HMAC authinput_mapsupports$references(e.g.$clean_data.result,$input.query)Tasks/tools are wired into
ToolExecutionGraphDAG automatically onagent.run()
AbiAgent Base Class Enhancements:
Default
stream()with SSE heartbeat (15s keepalive for CloudFront)self.tool_graph— injected by AbiCore when decorators are usedself.extra_tools— LangChain tools from@agent.tool()decoratorsAgentResponsetyped responses:.success(),.error(),.status(),.empty(),.input_required()
LLM Provider:
create_llm(llm_config)supporting Ollama, OpenAI, Anthropic, Bedrock, Azure, Vertex AI, GrokAgent Factory:
agent_factory()encapsulates all startup boilerplate (logging, web interface, A2A server)Dual Transport Support for MCP Client: Added support for both SSE and Streamable HTTP transports
abi_core.abi_mcp.client.init_session()now supportstransport='sse'ortransport='streamable-http'SSE transport uses
/sseendpoint (default, unidirectional streaming)Streamable HTTP transport uses
/mcpendpoint (bidirectional streaming)Environment variable
MCP_TRANSPORTfor dynamic transport selectionBackward compatible - SSE remains the default transport
Transport Documentation: Added comprehensive guide at
docs/user-guide/mcp-transports.mdTransport Examples: Added
examples/mcp_transport_examples.pydemonstrating both transportsTransport Tests: Added unit tests for both transport protocols
Session Management Guide: Added
docs/SESSION_MANAGEMENT.mdwith best practicesSolutions for “Session terminated” errors
Proper session lifecycle management
Retry logic patterns
Connection pooling examples
Debugging and monitoring techniques
ToolExecutionGraph: Deterministic tool execution graph built on LangGraph
DAG-based execution with topological ordering
$-referenceresolution between nodes (e.g.$input.user_query,$step1.result)Retry with exponential backoff per node
Checkpoint/resume on failures
Construction from JSON config or programmatic API
Dual execution mode: MCP tools (
toolparam) and local functions (fnparam, sync or async)register_fn("name", callable)for JSON-defined graphs with local functions
Automatic Agent Card Creation:
abi-core add agentnow includes interactive skills sessionPrompts for supported tasks/skills during agent creation
Generates signed agent card automatically
Saves card to agent directory and semantic layer (if exists)
Registers card in
runtime.yamland updates docker-composeNo need to run
add agent-cardseparately
Changed¶
MCP Client: Enhanced
init_session()to automatically select correct endpoint based on transportDefault MCP Transport: Changed from
ssetostreamable-httpacross all componentsEnv var
MCP_TRANSPORT=ssestill works for override
Logging: Migrated all
logger.*calls toabi_logging()across the frameworkWorkflow Classes: Renamed for clarity
WorkflowGraph→AgentInteractionFlow(backward-compatible aliases maintained)WorkflowNode→InteractionFlowNodeWorkflowState→InteractionFlowState
ServerConfig: Updated documentation to clarify supported transports (‘sse’ and ‘streamable-http’)
Utils: Updated
get_mcp_server_config()to support both transports via environment variablesSession Cleanup: Improved resource cleanup in Streamable HTTP transport
Added explicit cleanup in finally blocks
Better logging for debugging session lifecycle
Prevents “Session terminated” errors from unclosed streams
MCPToolkit: Enhanced error handling and added retry logic
Improved error handling with session-level error catching
Added
call_with_retry()method for automatic retry on transient errorsExponential backoff for retry attempts
Automatic detection of retryable errors (session terminated, connection issues)
Fixed¶
Transport Validation: Added proper validation for unsupported transport types
Streamable HTTP API: Corrected implementation based on official MCP SDK documentation
streamable_http_clientreturns 3 elements:(read_stream, write_stream, connection_metadata)sse_clientreturns 2 elements:(read_stream, write_stream)Updated
init_session()to properly unpack 3 elements for Streamable HTTPThird element (connection metadata) is ignored with
_placeholderReference: MCP Python SDK README
FastMCP API Update: Updated all MCP server templates to use new FastMCP API
FastMCP()constructor no longer acceptshostandportparametersHost and port now passed to
mcp.run(transport=transport, host=host, port=port)Updated templates:
service_semantic_layer/layer/mcp_server/server.py.j2Updated scaffolding:
abi-cli/scaffolding/service_semantic_layer/layer/mcp_server/server.py.j2Updated testproject:
testproject/services/semantic_layer/layer/mcp_server/server.py
[1.5.8] - 2024-12-20¶
Fixed¶
Version Synchronization: Updated all version references to 1.5.8 for next PyPI release
Package Dependencies: All requirements.txt files now correctly reference
abi-core-ai>=1.12.0Documentation: Updated version references across all documentation files to 1.5.8
[1.5.7] - 2024-12-20¶
Fixed¶
Version Synchronization: Updated all version references to match PyPI published version 1.5.7
Package Dependencies: All requirements.txt files now correctly reference
abi-core-ai>=1.5.7Documentation: Updated version references across all documentation files to 1.5.7
[1.5.6] - 2024-12-20¶
Added¶
AbiAgent Base Class: Restored missing
abi_core.agent.agent.AbiAgentbase classFixed
ModuleNotFoundError: No module named 'abi_core.agent'errorsAdded proper abstract base class with
stream()methodIncludes lazy imports in
abi_core.__init__.py
Semantic Module Exports: Enhanced
abi_core.semanticmodule exportsAdded
validate_semantic_accessfunction exportImproved module structure for better accessibility
Fixed¶
Import Dependencies: Resolved missing module imports after monorepo migration
Template Consistency: Updated all requirements.txt templates to use version 1.5.8
Documentation Version: Updated Sphinx configuration to reflect current version
Changed¶
Version Alignment: All package requirements now point to
abi-core-ai>=1.12.0Documentation: Updated version references across all documentation files
[1.4.0] - 2024-12-16¶
Added¶
Monorepo Modular Architecture: Complete migration to modular package structure
packages/abi-core/- Core libraries (common/, security/, opa/, abi_mcp/)packages/abi-agents/- Agent implementations (orchestrator/, planner/)packages/abi-services/- Services (semantic-layer/, guardian/)packages/abi-cli/- CLI and scaffolding toolspackages/abi-framework/- Umbrella package with unified APIMaintains full backward compatibility with existing imports
Symlinks ensure seamless transition during development
Enhanced Open WebUI Compatibility: Improved web interface for agents
Fixed
Unclosed client sessionerrors in streaming responsesCorrected media types from
application/x-ndjsontotext/plainAdded proper
Connection: closeheaders for Open WebUIFixed newline escaping in streaming responses (
\\n→\n)Enhanced CORS headers for better browser compatibility
Changed¶
Project Structure: Reorganized codebase into modular packages for better maintainability
Web Interface Templates: Updated all agent web interfaces for Open WebUI compatibility
Import Paths: Maintained backward compatibility while enabling new modular imports
Documentation: Updated to reflect v1.5.2 architecture and features
Fixed¶
Web Interface Streaming: Resolved connection leaks in Open WebUI integration
Template Synchronization: Ensured consistency between orchestrator and agent templates
URL Parsing: Fixed malformed URLs in service communication
Connection Management: Improved HTTP connection cleanup in streaming responses
Technical Improvements¶
Modular Development: Each package can be developed and tested independently
Community Collaboration: Easier contribution workflow with focused packages
Deployment Flexibility: Granular control over which components to deploy
Maintenance: Simplified dependency management and version control
Added¶
Agentic Orchestration Layer: New
abi-core add agentic-orchestration-layercommandAdds Planner Agent for task decomposition and agent assignment
Adds Orchestrator Agent for multi-agent workflow coordination
Automatic agent card generation with cryptographic signing
Agent cards include unique authentication tokens (HMAC-SHA256)
Cards automatically copied to semantic layer for discovery
Planner uses semantic search to find and assign agents
Orchestrator performs health checks with exponential backoff retries
Workflow execution with LangGraph state machine
Result synthesis using LLM for coherent output
Web interface for Orchestrator (HTTP/SSE endpoints)
Q&A flow between Planner and Orchestrator
Prerequisites validation (Guardian + Semantic Layer required)
Dynamic port assignment to avoid conflicts
Signed Agent Cards: Agent cards now include authentication credentials
Generated at build time with
token_urlsafe(32)Include
@context,@type,id, andauthfieldsHMAC-SHA256 authentication method
Unique
key_idandshared_secretper agentCards are immutable and signed during project setup
No runtime initialization needed
Semantic layer recognizes cards automatically
Model Provisioning Command: New
abi-core provision-modelscommand for automated model managementSupports both centralized and distributed model serving modes
Automatically starts required Docker services (Ollama and agents)
Automatically downloads LLM and embedding models
Progress tracking and error handling
Updates runtime.yaml with provisioning status
Idempotent operation (skips already downloaded models)
In centralized mode: starts Ollama service automatically
In distributed mode: starts agent services (with Ollama) automatically
Always-Present Ollama Service: Ollama service now included in all projects
Centralized mode: Single Ollama serves all agents
Distributed mode: Ollama serves embeddings, agents have own Ollama
Semantic layer always connects to main Ollama service
Advanced Guardian Security Service (Guardial): Complete security and policy enforcement system
Emergency response system with cryptographic signing
Real-time security dashboard (web interface)
Advanced alerting system with configurable thresholds
Comprehensive metrics collection and Prometheus integration
Audit persistence with retention policies
Secure policy engine with immutable core policies
OPA integration with healthchecks and auto-configuration
Domain-specific compliance (finance, healthcare)
Multi-layer policy evaluation (core + custom policies)
Risk scoring with contextual modifiers
Automatic Weaviate Integration: Weaviate vector database now automatically added when using semantic layer
Automatically included when creating project with
--with-semantic-layerAutomatically added when running
abi-core add semantic-layerProper healthchecks and dependencies configured
Persistent volume for vector data
No manual configuration required
Model Serving Options: New
--model-servingflag forcreate projectcommandcentralized: Single shared Ollama service for all agents (recommended for production)distributed: Each agent has its own Ollama instance (default, current behavior)
Centralized Ollama service template in
compose.yaml.j2with healthcheckmodel_servingconfiguration field inruntime.yamlfor persistent project settingsDynamic agent configuration in
add agentcommand based on project’s model serving modeAutomatic detection and configuration of Ollama connectivity per agent
Weaviate service tracking in
runtime.yamlwith configuration details
Changed¶
Default LLM Model: Changed from
llama3.2:3btoqwen2.5:3bfor better tool calling supportExcellent function/tool calling capabilities (required for agents)
Similar size (~2 GB)
Better performance for agent workflows
Strong reasoning and instruction following
Users can still specify any other model via
--modelflag
add agentcommand now readsmodel_servingfromruntime.yamlto configure agents appropriatelyAgent Docker Compose configuration adapts automatically to centralized/distributed mode
Improved feedback messages showing which model serving mode is being used
Removed¶
abi_mcp module: Removed unused MCP client wrapper (not integrated in codebase)
agents_d directory: Removed duplicate scripts (real scripts are in abi-image Docker base)
Fixed¶
Cleaned up unused code and duplicate files in package structure
[1.0.0] - 2025-01-XX¶
Added¶
Initial beta release
Project scaffolding with
create projectcommandAgent creation with
add agentcommandSemantic layer service support
Guardian security service support
OPA policy integration
A2A protocol support
MCP server integration
Docker Compose orchestration
Agent cards for semantic discovery
Documentation¶
Comprehensive README with examples
CLI command documentation
Architecture overview
Quick start guide
Migration Guide¶
Upgrading from 0.1.0b28 to 1.0.0¶
No breaking changes - All existing projects will continue to work as before.
New Projects¶
When creating new projects, you can now choose the model serving strategy:
# Centralized mode (recommended for production)
abi-core create project my-app --model-serving centralized
# Distributed mode (default, same as before)
abi-core create project my-app --model-serving distributed
# or simply
abi-core create project my-app
Existing Projects¶
Existing projects without model_serving in their runtime.yaml will automatically use distributed mode (current behavior). No changes needed.
To migrate an existing project to centralized mode:
Edit
.abi/runtime.yamland add:project: # ... existing fields model_serving: "centralized"
Add the centralized Ollama service to your
compose.yaml:services: myproject-ollama: image: ollama/ollama:latest container_name: myproject-ollama ports: - "11434:11434" volumes: - ollama_data:/root/.ollama environment: - OLLAMA_HOST=0.0.0.0 networks: - myproject-network restart: unless-stopped volumes: ollama_data: driver: local
Update existing agents to use the centralized service (optional, but recommended):
Remove individual Ollama ports (e.g.,
11435:11434)Change
OLLAMA_HOSTtohttp://myproject-ollama:11434Set
START_OLLAMA=falseandLOAD_MODELS=falseAdd
depends_on: [myproject-ollama]Remove individual
ollama_datavolumes
Model Serving Comparison¶
Feature |
Centralized |
Distributed |
|---|---|---|
Ollama instances |
1 shared |
1 per agent |
Resource usage |
Lower |
Higher |
Model management |
Centralized |
Per-agent |
Isolation |
Shared |
Complete |
Recommended for |
Production |
Development |
Port conflicts |
None |
Possible |
Startup time |
Faster (agents) |
Slower |
Note: Guardian service always maintains its own Ollama instance for security isolation, regardless of the chosen mode.