Skip to main content

Agent-Based Infrastructure Core - Runtime and CLI

Project description

ABI-Core AI 🤖

PyPI version Python License Documentation

Build AI agents with deterministic DAG execution, semantic discovery, and governed autonomy.

ABI-Core is a Python framework for creating agents that run as containerized services with structured execution graphs, inter-agent communication, and policy-driven security. One pip install, one CLI command, and you have a running agent system.

pip install abi-core-ai
abi-core create swarm --name my-system
abi-core run

⚠️ Beta — Pipeline is functional end-to-end. APIs may change between minor versions.


Create an Agent in 3 Files

1. Define the DAG (app.py)

from abi_core.agent import AbiCore
from .my_agent import MyAgent

agent = AbiCore()

@agent.step(name="parse_input")
async def parse_input(raw_input: str) -> dict:
    return {"query": raw_input.strip(), "timestamp": time.time()}

@agent.step(name="process", depends_on=["parse_input"], input_map={"data": "$parse_input.result"})
async def process(data: dict) -> dict:
    result = await invoke(config.LLM_CONFIG, data["query"])
    return {"output": result}

@agent.step(name="respond", depends_on=["process"], input_map={"result": "$process.result"})
async def respond(result: dict) -> dict:
    return {"response": result["output"]}

agent.run(MyAgent())

2. Define the Agent Class (my_agent.py)

from abi_core.agent import AbiAgent

class MyAgent(AbiAgent):
    def __init__(self):
        super().__init__(
            agent_name="my-agent",
            description="Processes user queries with structured reasoning",
            llm_config={"provider": "ollama", "model": "qwen3:8b", "temperature": 0.3},
            system_prompt="You are a helpful assistant that...",
        )

3. Configure Identity (config/config.py)

import os

AGENT_NAME = "my-agent"
DESCRIPTION = "Processes user queries with structured reasoning"
LLM_CONFIG = {"provider": "ollama", "model": "qwen3:8b", "temperature": 0.3}
OLLAMA_HOST = os.getenv("OLLAMA_HOST", "http://localhost:11434")

That's it. abi-core run containerizes and starts your agent with A2A protocol, health checks, and semantic registration.


Key Concepts

Decorator API

Decorator Purpose
@agent.step(name, depends_on, input_map) Deterministic DAG node — compiled at init, executed per request
@agent.tool(name) DAG node + LangChain tool — LLM can invoke on demand
@agent.mcp_tool(name) Remote tool via MCP protocol with HMAC auth
@agent.task(name, tools) Programmatic orchestrator — manual step execution with branching

DAG Execution

Steps registered with @agent.step() compile into a ToolExecutionGraph (LangGraph). Nodes at the same dependency level run in parallel. The LLM never decides execution order — the graph does.

# These two run in parallel (no dependencies between them)
@agent.step(name="classify")
async def classify(raw_input): ...

@agent.step(name="validate")
async def validate(raw_input): ...

# This waits for both
@agent.step(name="decide", depends_on=["classify", "validate"],
            input_map={"cls": "$classify.result", "valid": "$validate.result"})
async def decide(cls, valid): ...

invoke() — Unified LLM Calls

from abi_core.agent import invoke

# Simple LLM call
result = await invoke(config.LLM_CONFIG, "Classify this query...")

# With conversation memory
result = await invoke(config.LLM_CONFIG, "Follow up...", thread_id=session_id)

# With tools
result = await invoke(config.LLM_CONFIG, "Find...", tools=[search_tool, write_tool])

Inter-Agent Communication

Agents talk to each other via A2A protocol using AgentInteractionFlow:

from abi_core.common.workflow import AgentInteractionFlow

flow = AgentInteractionFlow(source_agent="my-agent", target_agent="planner", host=planner_url)
async for event in flow.stream(query="Decompose this task"):
    process(event)

CLI

# Scaffold
abi-core create swarm --name <name>          # Full system: agents + services + compose
abi-core create project <name>               # Project only
abi-core add agent <name> --description "…"  # Add agent to existing project
abi-core add semantic-layer                  # Add Weaviate semantic discovery
abi-core add service guardian-native         # Add OPA security gate

# Run
abi-core run                # Detached (status table)
abi-core run --logs         # With container output
abi-core run --build        # Rebuild containers first

Built-in Agents

When you create swarm, you get these out of the box:

Agent Role
Orchestrator Entry point. Triage + Guardian gate + routes to Planner
Planner Decomposes queries into structured task plans
Builder Spawns ephemeral containers from task specs
Zombie Ephemeral executor — runs task, uploads artifacts, self-destructs

The pipeline: User → Orchestrator → Planner → Builder → Zombie → Artifact → Done.


Multi-Provider LLM

# Ollama (local, default)
{"provider": "ollama", "model": "qwen3:8b"}

# OpenAI
{"provider": "openai", "model": "gpt-4o", "api_key": "..."}

# Anthropic
{"provider": "anthropic", "model": "claude-sonnet-4-20250514"}

# AWS Bedrock
{"provider": "bedrock", "model": "anthropic.claude-3-sonnet"}

# Azure OpenAI
{"provider": "azure", "model": "gpt-4o", "endpoint": "..."}

Security & Governance

  • Guardian Agent — validates every request against OPA policies before execution
  • HMAC Authentication — inter-agent calls are signed and verified
  • Semantic Access Validation — agents can only call tools within their access_scope
  • Audit Trail — all decisions logged with risk scores
  • Human Veto — Plan Confirmation allows blocking execution before it starts

Project Structure

my-swarm/
├── agents/
│   ├── orchestrator/     # Triage + routing
│   ├── planner/          # Task decomposition
│   ├── builder/          # Container spawning
│   └── my-agent/         # Your custom agents
├── services/
│   ├── semantic_layer/   # Weaviate + MCP tools
│   └── guardian/         # OPA policies
├── compose.yaml
└── .abi/runtime.yaml

Documentation

Full docs: https://abi-core.readthedocs.io


Contributing

git clone https://github.com/Joselo-zn/abi-core
cd abi-core-ai
uv sync --dev
uv run pytest

License

Apache 2.0 — see LICENSE


Built by José Luis Martínez

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abi_core_ai-1.11.2.tar.gz (300.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

abi_core_ai-1.11.2-py3-none-any.whl (360.3 kB view details)

Uploaded Python 3

File details

Details for the file abi_core_ai-1.11.2.tar.gz.

File metadata

  • Download URL: abi_core_ai-1.11.2.tar.gz
  • Upload date:
  • Size: 300.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for abi_core_ai-1.11.2.tar.gz
Algorithm Hash digest
SHA256 564ebf00001f814ca0b117639ea47c2641b0e5931c35adaff1f5ef6dd2ed0dbb
MD5 6d77e6d6c96232f4b276f77f37da11e0
BLAKE2b-256 c1f45a8a65f9aa2395aa86cd07dbcda2a5859ac70c34156e1352d8aaf82dfea3

See more details on using hashes here.

File details

Details for the file abi_core_ai-1.11.2-py3-none-any.whl.

File metadata

File hashes

Hashes for abi_core_ai-1.11.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8772a5048bed6564b7de57b0cbda25fdce5d7206c102bc155d799a938a24051e
MD5 56b13c67b8dbaba8055e9dcd345d6893
BLAKE2b-256 8da9f77e103956dd7b3cb84f2834801c7ef73522b6ab2f62777d1ca4fa7f8108

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page