Basic Concepts¶
The terms you’ll see everywhere in ABI-Core, explained simply.
The building blocks¶
Step¶
A function that does one thing. Runs in a fixed order you define — the AI doesn’t decide when it runs.
@agent.step(name="classify")
async def classify(text):
result = await invoke(config.LLM_CONFIG, f"Classify: {text}")
return {"category": result}
Task¶
Runs multiple steps in sequence. Can send progress updates to the user while working.
@agent.task(name="process", task_id="task-main")
async def process(query):
yield AgentResponse.status("Classifying...")
classification = await agent.execute_step("classify", text=query)
yield AgentResponse.result(classification)
Tool¶
A function the AI can decide to call on its own. Useful for things like searching the web or calling APIs.
@agent.tool(name="search_web")
async def search_web(query: str):
"""Search the web for information."""
return requests.get(f"https://api.search.com?q={query}").json()
Agent¶
A Python class that wraps everything together. Has an identity, an AI model config, and runs as a service.
class MyAgent(AbiAgent):
def __init__(self):
super().__init__(
agent_name="my-agent",
description="Does useful things",
llm_config={"provider": "ollama", "model": "qwen2.5:3b"},
system_prompt="You are a helpful assistant.",
)
The infrastructure¶
Agent Card¶
A JSON file that describes what an agent can do. Other agents use it to find yours and talk to it.
{
"name": "my-agent",
"description": "Does useful things",
"url": "http://my-agent:8000",
"supportedTasks": ["classify", "summarize"]
}
Semantic Layer¶
Stores agent cards and lets you search agents by what they do, not by name or address. “Find me someone who can write reports” → returns the writer agent.
A2A Protocol¶
The way agents send messages to each other. A standard format so any agent can talk to any other agent.
Guardian + OPA¶
Security. Guardian is the gate that checks every request. OPA holds the rules. Together they decide if something is allowed to run.
AI Model Provider¶
ABI-Core supports multiple AI model providers through one config dict:
Provider |
Config |
|---|---|
Ollama (local) |
|
OpenAI |
|
Gemini |
|
Grok |
|
Anthropic |
|
Bedrock |
|
Switch providers by changing the dict. No code changes.
How they fit together¶
You write: ABI handles:
───────── ────────────
steps.py → Runs them in order
tasks.py → Streams progress to the user
tools.py → Lets the AI call them
config.py → Connects to any AI model
agent_card → Makes your agent discoverable
→ Messaging server (automatic)
→ Docker container (automatic)
→ Health checks (automatic)
Quick glossary¶
Term |
One-line explanation |
|---|---|
Step |
A function that runs in a fixed order. |
Task |
Runs steps and streams progress. |
Tool |
A function the AI can call. |
Agent Card |
Describes what an agent can do (JSON file). |
Semantic Layer |
Finds agents by what they do. |
A2A |
How agents send messages to each other. |
Guardian |
Checks if a request is allowed. |
OPA |
Holds the security rules. |
invoke() |
Calls any AI model with one function. |
MCPToolkit |
Calls tools on the Semantic Layer. |