Skip to main content

Registry-driven LLM routing: build classifier prompts from agent descriptions, validate decisions, and dispatch.

Project description

agent-registry-router

CI PyPI Python License

Registry-driven LLM routing: build classifier prompts from agent descriptions, validate decisions, and dispatch to other agents.

What is this? Why use it?

agent-registry-router helps you route LLM traffic to the right agent by:

  • Keeping a registry of agents
  • Building classifier prompts from that registry
  • Validating classifier decisions with clear, typed errors
  • Dispatching to runtime agents with optional observability hooks (on_event) for logging/metrics.

Use it when you need:

  • A stable contract between your classifier and execution layer
  • Deterministic, size-aware prompt construction
  • Lightweight integration with frameworks like PydanticAI
  • Extensibility: plug your own classifier/agents, add hooks for monitoring, and keep routing logic decoupled from business logic

Features

  • Registry-driven classifier prompts (deterministic order, routable-only, size-aware)
  • Fail-fast validation with typed errors (no silent fallbacks)
  • PydanticAI dispatcher with pinned bypass and observability hooks (on_event); supports text streaming (stream_text) and response streaming (stream_responses)
  • Typed package (py.typed) and CI gates (ruff/black/mypy/pytest-cov)
  • FastAPI demo with pinned bypass: examples/fastapi_pinned_bypass/README.md

Scope

  • Routing, validation, observability; bring your own LLM clients/agents.
  • Adapters are opt-in; core stays lightweight.

Status

  • v0.2.3 — fail-fast by default; adapters namespaced; PydanticAI adapter supports streaming dispatch.

Install (uv)

From PyPI:

uv pip install agent-registry-router

From a checkout of this repo (dev/editable):

uv venv
source .venv/bin/activate
uv pip install -e .

Core usage

from agent_registry_router.core import (
    AgentRegistration,
    AgentRegistry,
    RouteDecision,
    build_classifier_system_prompt,
    validate_route_decision,
)

registry = AgentRegistry()
registry.register(AgentRegistration(name="general", description="General help."))
registry.register(AgentRegistration(name="special", description="Special help."))

prompt = build_classifier_system_prompt(
    registry,
    preamble="You are a query classifier that routes user messages to the appropriate agent.",
    default_agent="general",
)

decision = RouteDecision(agent="special", confidence=0.9, reasoning="Clear match.")
validated = validate_route_decision(decision, registry=registry, default_agent="general")

Behavior & errors

  • Default agent must be routable; unknown agents or empty registries raise.
  • Classifier selecting a non-routable agent raises InvalidRouteDecision.
  • Missing default or no routable agents raises InvalidFallback.
  • Dispatcher raises AgentNotFound if the chosen agent cannot be resolved.
  • Registry validation uses RegistryError; routing errors derive from RoutingError.
  • Confidence adjustment on invalid routes is unchanged; pinned invalid falls back to the classifier.
  • Prompt listing preserves registration order; only routable agents are included.
  • Agent descriptions are capped at 512 characters; prompts cannot be built without routable agents. Optional max_prompt_chars can bound the generated prompt.
  • Observability: PydanticAIDispatcher accepts on_event callback (receives RoutingEvent) and optional logger; emits events for classifier run, validation, pinned bypass, agent resolution, and agent run.

API contracts

  • Public imports (agent_registry_router.core): AgentRegistry, AgentRegistration, RouteDecision, ValidatedRouteDecision, validate_route_decision, build_classifier_system_prompt, exceptions (AgentRegistryRouterError, RegistryError, RoutingError, InvalidRouteDecision, InvalidFallback, AgentNotFound), and RoutingEvent.
  • Adapter: agent_registry_router.adapters.pydantic_ai exposes PydanticAIDispatcher, DispatchResult, AgentStreamChunk, AgentResponseStreamItem, ResponseStreamSession. Adapters stay namespaced (not re-exported at package root).
  • Routing invariants: default agent must be routable; empty registry errors; non-routable selections error; pinned invalid falls back to classifier; classifier output must include agent and confidence or InvalidRouteDecision is raised.
  • Prompt determinism: preserves registration order; only routable agents; optional max_prompt_chars; description cap 512 chars.
  • Hooks: on_event receives RoutingEvent(kind, payload, error); hook failures are swallowed; logger is optional.

Adapters

  • PydanticAI dispatcher: src/agent_registry_router/adapters/pydantic_ai/README.md

Tests (uv)

uv pip install -e ".[dev]"
ruff check .
black --check .
mypy --config-file pyproject.mypy.ini .
pytest --cov=agent_registry_router --cov-fail-under=85

Example: FastAPI pinned bypass

See examples/fastapi_pinned_bypass/.

License

Apache-2.0 (see LICENSE).

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

agent_registry_router-0.2.4.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

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

agent_registry_router-0.2.4-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file agent_registry_router-0.2.4.tar.gz.

File metadata

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

File hashes

Hashes for agent_registry_router-0.2.4.tar.gz
Algorithm Hash digest
SHA256 ac4fe83a19cc8d6169798cfdba5f930f906297a951d40353dd3135dbb9b486ee
MD5 8d37f3e5d5e334182543bb45c84aed92
BLAKE2b-256 86bfde6e7107c79f40a98f992235c6a1beb325a6a6240cbbf16f81266887a5db

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_registry_router-0.2.4.tar.gz:

Publisher: publish-pypi.yml on agibson22/agent-registry-router

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

File details

Details for the file agent_registry_router-0.2.4-py3-none-any.whl.

File metadata

File hashes

Hashes for agent_registry_router-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 73d832703782ef0f56d079e7dae10321c4225952b442be1a6b58fe3bff317a18
MD5 8640527f2f6fc7c3217b83a5493d6a3b
BLAKE2b-256 607e3246301794abfcd9bccc4ea8e7210d6d34fae6c2896e874a698257333190

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_registry_router-0.2.4-py3-none-any.whl:

Publisher: publish-pypi.yml on agibson22/agent-registry-router

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