Spaces:
Sleeping
Sleeping
| # API Reference | |
| Quick reference for the most-used classes and functions in `ace`. | |
| ## Runners | |
| ### ACELiteLLM | |
| Simple self-improving conversational agent. | |
| ```python | |
| from ace import ACELiteLLM | |
| agent = ACELiteLLM.from_model("gpt-4o-mini") | |
| ``` | |
| | Method | Description | | |
| |--------|-------------| | |
| | `ask(question, context="")` | Generate an answer using the current skillbook | | |
| | `learn(samples, environment, epochs=1, *, wait=True)` | Run the full ACE learning pipeline | | |
| | `learn_from_feedback(feedback, ground_truth=None)` | Learn from the last `ask()` interaction | | |
| | `learn_from_traces(traces, epochs=1, *, wait=True)` | Learn from pre-recorded execution traces | | |
| | `save(path)` | Save skillbook to JSON | | |
| | `load(path)` | Load skillbook from JSON | | |
| | `enable_learning()` / `disable_learning()` | Toggle learning on/off | | |
| | `wait_for_background(timeout=None)` | Wait for async learning to finish | | |
| | `learning_stats` | Dict with background learning progress | | |
| | `get_strategies()` | Formatted string of current strategies | | |
| See [LiteLLM Integration](../integrations/litellm.md) for full details. | |
| ### ACE | |
| Full adaptive pipeline (Agent + Reflector + SkillManager + Environment). | |
| ```python | |
| from ace import ACE, Agent, Reflector, SkillManager, Skillbook, SimpleEnvironment | |
| runner = ACE.from_roles( | |
| agent=Agent("gpt-4o-mini"), | |
| reflector=Reflector("gpt-4o-mini"), | |
| skill_manager=SkillManager("gpt-4o-mini"), | |
| environment=SimpleEnvironment(), | |
| skillbook=Skillbook(), | |
| ) | |
| results = runner.run(samples, epochs=3) | |
| ``` | |
| | Method | Description | | |
| |--------|-------------| | |
| | `run(samples, epochs=1, wait=True)` | Run adaptation loop, return `list[SampleResult]` | | |
| | `save(path)` | Save skillbook | | |
| | `wait_for_background(timeout=None)` | Wait for async learning | | |
| | `learning_stats` | Background learning progress | | |
| See [Full Pipeline Guide](../guides/full-pipeline.md). | |
| ### BrowserUse | |
| Browser automation with learning. | |
| ```python | |
| from ace import BrowserUse | |
| runner = BrowserUse.from_model(browser_llm=my_llm, ace_model="gpt-4o-mini") | |
| results = runner.run("Find the top post on Hacker News") | |
| ``` | |
| See [Browser-Use Integration](../integrations/browser-use.md). | |
| ### LangChain | |
| Wrap LangChain Runnables with learning. | |
| ```python | |
| from ace import LangChain | |
| runner = LangChain.from_model(my_chain, ace_model="gpt-4o-mini") | |
| results = runner.run([{"input": "Summarize this document"}]) | |
| ``` | |
| See [LangChain Integration](../integrations/langchain.md). | |
| ### ClaudeCode | |
| Claude Code CLI with learning. | |
| ```python | |
| from ace import ClaudeCode | |
| runner = ClaudeCode.from_model(working_dir="./project", ace_model="gpt-4o-mini") | |
| results = runner.run("Add unit tests for utils.py") | |
| ``` | |
| See [Claude Code Integration](../integrations/claude-code.md). | |
| ### ClaudeSDKExecuteStep / ClaudeSDKToTrace | |
| Direct Anthropic Messages API steps for custom pipelines. | |
| ```python | |
| from ace import Pipeline, Reflector, SkillManager, Skillbook, learning_tail | |
| from ace.integrations import ClaudeSDKExecuteStep, ClaudeSDKToTrace | |
| skillbook = Skillbook() | |
| pipe = Pipeline([ | |
| ClaudeSDKExecuteStep(model="claude-sonnet-4-20250514"), | |
| ClaudeSDKToTrace(), | |
| *learning_tail(Reflector("gpt-4o-mini"), SkillManager("gpt-4o-mini"), skillbook), | |
| ]) | |
| ``` | |
| `ClaudeSDKResult` and `ToolCall` are Pydantic models, so token counts, latency, | |
| tool calls, and serialization are validated before the learning tail consumes | |
| the trace. | |
| See [Claude SDK Integration](../integrations/claude-sdk.md). | |
| --- | |
| ## Roles | |
| ### Agent | |
| Produces answers using the current skillbook. | |
| ```python | |
| from ace import Agent | |
| agent = Agent("gpt-4o-mini") | |
| output = agent.generate( | |
| question="What is 2+2?", | |
| context="", | |
| skillbook=skillbook, | |
| reflection=None, # optional | |
| ) | |
| ``` | |
| **AgentOutput fields:** | |
| | Field | Type | Description | | |
| |-------|------|-------------| | |
| | `final_answer` | `str` | The generated answer | | |
| | `reasoning` | `str` | Step-by-step reasoning | | |
| | `skill_ids` | `list[str]` | Skillbook strategies cited | | |
| | `raw` | `dict` | Raw LLM response | | |
| ### Reflector | |
| Analyzes what worked and what failed. | |
| ```python | |
| from ace import Reflector | |
| reflector = Reflector("gpt-4o-mini") | |
| reflection = reflector.reflect( | |
| question="What is 2+2?", | |
| agent_output=output, | |
| skillbook=skillbook, | |
| ground_truth="4", | |
| feedback="Correct!", | |
| ) | |
| ``` | |
| **ReflectorOutput fields:** | |
| | Field | Type | Description | | |
| |-------|------|-------------| | |
| | `reasoning` | `str` | Analysis of the outcome | | |
| | `error_identification` | `str` | What went wrong | | |
| | `root_cause_analysis` | `str` | Why it went wrong | | |
| | `correct_approach` | `str` | What should have been done | | |
| | `key_insight` | `str` | Main lesson learned | | |
| | `skill_tags` | `list[SkillTag]` | `(skill_id, tag)` pairs — populated in online mode when agent cited skills | | |
| | `raw` | `dict` | Raw LLM response | | |
| ### SkillManager | |
| Transforms reflections into skillbook updates. | |
| ```python | |
| from ace import SkillManager | |
| skill_manager = SkillManager("gpt-4o-mini") | |
| sm_output = skill_manager.update_skills( | |
| reflections=(reflection,), | |
| skillbook=skillbook, | |
| question_context="Math problems", | |
| progress="3/5 correct", | |
| source=source, | |
| ) | |
| # skillbook has already been mutated in place | |
| ``` | |
| Returns a `SkillManagerOutput` with an `.update` field (`UpdateBatch`) and `.raw` field. | |
| See [Roles](../concepts/roles.md) for full details. | |
| --- | |
| ## Skillbook | |
| ```python | |
| from ace import Skillbook | |
| skillbook = Skillbook() | |
| ``` | |
| | Method / Property | Description | | |
| |-------------------|-------------| | |
| | `add_skill(section, issue=None, keywords=None, insight=None, content=None)` | Add a skill | | |
| | `apply_update(update_batch)` | Apply update operations | | |
| | `as_prompt()` | Markdown format for LLM consumption | | |
| | `save_to_file(path)` | Save JSON plus embeddings sidecar | | |
| | `Skillbook.load_from_file(path)` | Load JSON plus embeddings sidecar if present | | |
| | `stats()` | Section count, skill count, active skill totals | | |
| | `skills()` | List of all skills | | |
| See [The Skillbook](../concepts/skillbook.md). | |
| --- | |
| ## Data Types | |
| ### Sample | |
| ```python | |
| from ace import Sample | |
| sample = Sample( | |
| question="What is 2+2?", | |
| context="Show your work", | |
| ground_truth="4", | |
| ) | |
| ``` | |
| ### EnvironmentResult | |
| ```python | |
| from ace import EnvironmentResult | |
| result = EnvironmentResult( | |
| feedback="Correct!", | |
| ground_truth="4", | |
| metrics={"accuracy": 1.0}, | |
| ) | |
| ``` | |
| ### UpdateOperation | |
| ```python | |
| from ace import UpdateOperation | |
| op = UpdateOperation( | |
| type="ADD", | |
| section="context", | |
| keywords=["math", "decomposition"], | |
| issue="Complex arithmetic questions are easier to solve when the work is decomposed into smaller verified steps.", | |
| insight="Break problems into smaller steps before computing.", | |
| reflection_index=0, | |
| reflection_indices=[0, 1], | |
| skill_id="math-00001", | |
| ) | |
| ``` | |
| Operations: `ADD`, `UPDATE`, `TAG`, `REMOVE`. See [Update Operations](../concepts/updates.md). | |
| ### DeduplicationConfig | |
| **Requires:** `uv add ace-framework[deduplication]` | |
| ```python | |
| from ace import DeduplicationConfig | |
| config = DeduplicationConfig( | |
| enabled=True, | |
| embedding_model="text-embedding-3-small", | |
| similarity_threshold=0.85, | |
| ) | |
| ``` | |
| --- | |
| ## Environments | |
| Extend `TaskEnvironment` to provide evaluation feedback: | |
| ```python | |
| from ace import TaskEnvironment, EnvironmentResult | |
| class MyEnvironment(TaskEnvironment): | |
| def evaluate(self, sample, agent_output): | |
| correct = sample.ground_truth.lower() in agent_output.final_answer.lower() | |
| return EnvironmentResult( | |
| feedback="Correct!" if correct else "Incorrect", | |
| ground_truth=sample.ground_truth, | |
| ) | |
| ``` | |
| A built-in `SimpleEnvironment` uses substring matching and is included for quick testing. | |
| --- | |
| ## Providers | |
| ### resolve_model | |
| Resolve a model string to a PydanticAI model instance: | |
| ```python | |
| from ace.providers import resolve_model | |
| model = resolve_model("gpt-4o-mini") | |
| ``` | |
| Supports any [LiteLLM model](https://docs.litellm.ai/) or PydanticAI-native identifier. | |
| ### ACEModelConfig | |
| Configuration for model selection per role: | |
| ```python | |
| from ace.providers import ACEModelConfig | |
| config = ACEModelConfig.from_toml("ace.toml") | |
| agent_model = config.for_role("agent") | |
| ``` | |
| --- | |
| ## Observability | |
| ### OpikStep | |
| Append to any pipeline for automatic tracing and cost tracking: | |
| ```python | |
| from ace import OpikStep | |
| OpikStep(project_name="my-experiment", tags=["training"]) | |
| ``` | |
| ### register_opik_litellm_callback | |
| Standalone LLM cost tracking without pipeline traces: | |
| ```python | |
| from ace import register_opik_litellm_callback | |
| register_opik_litellm_callback(project_name="my-experiment") | |
| ``` | |
| See [Opik Observability](../integrations/opik.md). | |
| --- | |
| ## Recursive Reflector (RR) | |
| PydanticAI agent-based trace analyser with tools for code execution and sub-agent analysis. | |
| ### RRStep | |
| Drop-in replacement for `Reflector` — satisfies both `StepProtocol` and `ReflectorLike`. | |
| ```python | |
| from ace.rr import RRStep, RRConfig | |
| rr = RRStep( | |
| "gpt-4o-mini", # Model string | |
| config=RRConfig(max_requests=20), # Configuration | |
| ) | |
| # As drop-in reflector | |
| ace = ACELiteLLM.from_model("gpt-4o-mini", reflector=rr) | |
| # As pipeline step | |
| pipe = Pipeline([..., rr, ...]) | |
| ``` | |
| ### RRConfig | |
| | Parameter | Default | Description | | |
| |-----------|---------|-------------| | |
| | `timeout` | `30.0` | Per-execution timeout in seconds (Unix only) | | |
| | `max_tokens` | `500_000` | Total token budget (input + output) per agent run | | |
| | `max_requests` | `50` | Safety cap on LLM requests per agent run | | |
| | `context_window` | `128_000` | Model context window; compaction triggers at 85% | | |
| | `max_output_chars` | `20_000` | Per-execution output truncation limit | | |
| | `max_depth` | `2` | Maximum recursion depth (0=root, max_depth=leaf) | | |
| | `child_budget_fraction` | `0.5` | Fraction of remaining token budget for child sessions | | |
| | `max_compactions` | `3` | Safety cap on full summarization rounds | | |
| | `microcompact_keep_recent` | `3` | Recent tool results to preserve during microcompaction | | |
| ### Sandbox Functions | |
| Available inside `execute_code` tool calls: | |
| | Function | Description | | |
| |----------|-------------| | |
| | `FINAL(value)` | Submit final result dict (terminates the loop) | | |
| | `FINAL_VAR(name)` | Submit a named variable as the result | | |
| | `SHOW_VARS()` | Print available variables (debugging) | | |
| | `register_helper(name, source, desc)` | Register a reusable helper function | | |
| | `list_helpers()` | List registered helper names/descriptions | | |
| | `run_helper(name, *args, **kwargs)` | Invoke a registered helper | | |
| | `get_item_messages(item)` | Return message list for a batch item | | |
| | `get_item_question(item)` | Return question string for a batch item | | |
| | `get_message_text(msg)` | Safely render message content as text | | |
| ### TraceContext | |
| Structured trace wrapper with factory methods: | |
| | Factory | Input | | |
| |---------|-------| | |
| | `TraceContext.from_agent_output(output)` | `AgentOutput` | | |
| | `TraceContext.from_conversation_history(msgs)` | `list[dict]` | | |
| | `TraceContext.from_tau_simulation(msgs, system_prompt)` | TAU-bench messages | | |
| | `TraceContext.from_browser_use(history)` | browser-use `AgentHistory` | | |
| | `TraceContext.from_langchain(steps)` | LangChain intermediate steps | | |
| | `TraceContext.from_reasoning_string(text)` | Raw reasoning string | | |
| | `TraceContext.combine(traces)` | Merge multiple traces | | |
| See [RR_DESIGN.md](../RR_DESIGN.md) for the full architecture reference. | |
| --- | |
| ## Prompts | |
| The default prompts are v2.1 (built into `ace`). Pass a custom template via `prompt_template`: | |
| ```python | |
| agent = Agent("gpt-4o-mini", prompt_template="Custom prompt with {skillbook}, {question}, {context}") | |
| reflector = Reflector("gpt-4o-mini", prompt_template="Custom reflector prompt ...") | |
| skill_manager = SkillManager("gpt-4o-mini", prompt_template="Custom skill manager prompt ...") | |
| ``` | |
| See [Prompt Engineering](../guides/prompts.md). | |