跳转至

PRAXO-CORE Python Core

Python implementation of the PRAXO-CORE contract. The normative contract is spec/; Go remains the reference implementation.

Status: Core plus streaming, context management, middleware, and an OpenAI-compatible adapter. The package passes all eleven conformance vector groups. VFS and plugin hosts are not yet implemented. Wheel and sdist are published to PyPI.

Package version: 0.2.2; source tag python/v0.2.2. Supported contract: SPEC_VERSION 0.2.0 (praxo.SPEC_VERSION).

Requirements

  • Python 3.11 or newer
  • No runtime dependencies

Install

pip install praxo-core==0.2.2

For a source checkout:

pip install ./language/python

Usage

import asyncio

from praxo.agent import Agent, AgentOptions, Session
from praxo.event import Event
from praxo.model import Message, Response, Usage
from praxo.tool import FuncTool, Registry


class EchoModel:
    async def generate(self, request):
        return Response(message=Message(role="assistant", content="hello"))


class LogSink:
    async def emit(self, event: Event) -> None:
        print(event.to_wire())


async def main() -> None:
    tools = Registry()
    tools.register(FuncTool("echo", "Echo input", lambda args: args))
    agent = Agent(
        AgentOptions(model=EchoModel(), tools=tools, events=LogSink())
    )
    result = await agent.run(Session(id="session-1"), "hi")
    print(result.output, result.steps, result.usage)


asyncio.run(main())

Contract Surface

Module Contract
praxo.model Model, Request, Response, messages, tool specs, usage
praxo.tool Tool, Registry, FuncTool
praxo.event Event, Sink, MultiSink, FilterSink
praxo.policy Hook, Action, Decision, PathChecker
praxo.memory Store, Record, MemoryStore, ContextAssembler
praxo.checkpoint Checkpoint, Allowlist
praxo.agent Agent, AgentOptions, Session, Result
praxo.context ContextBudget, ModelSummarizer, Offloader, load_agents_md
praxo.middleware call limits, fallback, PII, structured output, tool selection
praxo.toolcall parse_tool_call, strip_tool_call_markup
praxo.jsonschema Schema, ValidationError
praxo.plugin Manifest v1 parsing and validation

Wire codecs preserve the Go names, including image_url, runId, contentBlocks, and plugin plugin_id.

Conformance

From this directory:

python conformance/run.py
python -m unittest discover -s tests -v

Both commands read ../../spec/vectors/*.json. A released Core implementation must pass every vector and keep spec/parity.md current.

API Reference and Build

See API.md. Refresh the checked-in symbol snapshot after a public API change:

python api-snapshot.py
python api-snapshot.py --check
python api-signatures.py --check
python -m build --wheel --sdist .

The name snapshot and signature snapshot are checked independently. The signature baseline covers class constructors, dataclass fields/defaults, methods, properties, functions, and exported constants. Both are source-API gates, not runtime or ABI guarantees.

CI installs the built wheel and sdist into separate clean virtual environments and runs tests/installed_smoke.py from outside the source tree. This verifies the packaged artifacts, not the checkout. It does not prove PyPI publication or installation from a package registry.

License

MIT. See LICENSE.