Skip to main content

Graph-based agent framework powered by oauth-codex

Project description

Fabrix

Language: English | 한국어
API Guides: English | 한국어

Overview

Fabrix is a graph-based agent framework built on top of oauth-codex>=2.2.0. It provides a structured execution graph with streaming events for tool-driven workflows.

Key Features

  • Graph-based 4-state execution: reasoning, tool_call, response, finish
  • Structured state outputs powered by Pydantic models
  • Sequential tool execution with strict payload validation
  • Async streaming event API for step-by-step observability

Installation

pip install fabrix-ai

Quickstart

import asyncio

from pydantic import BaseModel

from fabrix import Agent
from fabrix.events import (
    ReasoningEvent,
    ResponseEvent,
    TaskFailedEvent,
    TaskFinishedEvent,
    ToolEvent,
)


class AddInput(BaseModel):
    a: int
    b: int


def add_numbers(payload: AddInput) -> int:
    return payload.a + payload.b


async def main() -> None:
    agent = Agent(
        instructions="You are a precise assistant.",
        model="gpt-5.3-codex",
        tools=[add_numbers],
    )

    async for event in agent.run_task_stream("Use add_numbers to compute 3 + 9"):
        print(f"[step={event.step}] {event.event_type}")

        if isinstance(event, ReasoningEvent):
            print("reasoning:", event.reasoning)
            print("focus:", event.focus)
        elif isinstance(event, ToolEvent):
            if event.phase == "start":
                print("tool call:", event.tool_name, event.arguments)
            elif event.result is not None:
                print("tool result:", event.result.model_dump())
        elif isinstance(event, ResponseEvent):
            print("response:", event.response)
        elif isinstance(event, TaskFinishedEvent):
            print("completion reason:", event.completion_reason)
            print("final:", event.final_output)
        elif isinstance(event, TaskFailedEvent):
            print("failed:", event.error_code, event.message)


asyncio.run(main())

Tool Contract

Fabrix accepts tools in this shape:

def tool(payload: BaseModel) -> Any: ...
  • The tool must accept exactly one parameter.
  • The parameter type must be a Pydantic BaseModel.
  • Runtime arguments must be a JSON object matching payload fields.
  • Extra argument keys are rejected.
  • Both sync and async tools are supported.

Event Stream

run_task_stream(...) yields these event types:

  • reasoning
  • tool (phase="start" / phase="finish")
  • response
  • task_finished
  • task_failed

reasoning is a step-level decision trace / plan summary, not raw internal chain-of-thought.

Typical flow:

  1. reasoning
  2. zero or more tool start/finish pairs
  3. optional response
  4. task_finished or task_failed

Documentation

Examples

Notes

  • Public runtime entry point is fabrix.Agent.
  • Execution defaults are fixed internally: max_steps=128 and no public per-tool timeout option.
  • If max_steps is reached and at least one response was emitted, the stream ends with task_finished (completion_reason="max_steps_reached") using the last response.
  • If max_steps is reached before any response/final output, the stream ends with task_failed (error_code="max_steps_reached").

Project details


Download files

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

Source Distribution

fabrix_ai-1.0.0.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

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

fabrix_ai-1.0.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file fabrix_ai-1.0.0.tar.gz.

File metadata

  • Download URL: fabrix_ai-1.0.0.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fabrix_ai-1.0.0.tar.gz
Algorithm Hash digest
SHA256 35d9ccf2e0d085094ce7506aecb3412af12019ec510f87a3bc1811015897dd4a
MD5 795952805ce6590ea0b9915c254ab8db
BLAKE2b-256 b78d9ca006044404551627c4b25d3f44ee775d84330e2689fd8a9600826a3ae9

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabrix_ai-1.0.0.tar.gz:

Publisher: publish-pypi.yml on smturtle2/fabrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fabrix_ai-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: fabrix_ai-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fabrix_ai-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 95899933c650d4a10d6827c316525b1e99fd798127071f836a96cf258a6875cd
MD5 2846206d50529355bdfdc7f6e6247b82
BLAKE2b-256 23ac8302550114ba653539af418ff03eb91d4295728d91c784ed08336f64540e

See more details on using hashes here.

Provenance

The following attestation bundles were made for fabrix_ai-1.0.0-py3-none-any.whl:

Publisher: publish-pypi.yml on smturtle2/fabrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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