Skip to main content

route66 Python SDK

Project description

route66

Intelligent Tool Router for LLM Agents — a catalog-in library that, given a query and a large tool catalog, returns only the relevant tools, deduplicated, in an ordered execution plan, with policy-aware defaults.

Built against the router-testkit hackathon grading contract (single-tool routing, ordered multi-tool plans, near-duplicate resolution, capability-based fallback widening, deprecation policy, out-of-scope refusal, and clarify-on-vague-destructive).

Layout

route66/
├── tool_router/          # The POC library (facade + retrievers + dedup)
├── testkit_adapter.py    # Bridges tool_router to the harness contract
├── demo.py               # Toy 60-tool catalog demo of the POC
├── metrics.py            # Recall/precision/token-savings eval on the toy set
├── router-testkit/       # Hackathon input kit — DO NOT MODIFY
│   ├── catalog/          #   64 mock tools · 13 clusters · dup/version metadata
│   ├── test_cases/       #   29 scored cases across 11 categories
│   ├── registry_guardrail/#  Intake validator fixtures
│   └── harness/          #   run_benchmark.py (scorer) + baseline_router.py
├── bench/                # Additional benchmarks (baseline, mutations, guardrail)
├── specs/                # Spec-driven-development plan (SPEC-001..011)
├── docs/                 # PRDs and the hackathon problem statement
└── tests/                # Unit tests (populated as specs are executed)

Baseline

Router Cases passed Token savings
Testkit reference baseline_router 7 / 29 (24%) 94%
tool_router (this repo, current) 5 / 29 (17%) 90%

The gap is deliberate and mapped in specs/. See specs/README.md for the priority-ordered plan (P0 → P1 → P2) with acceptance criteria pinned to specific TC-* cases. Target after P0: ≥ 20/29. After P1: ≥ 24/29.

Quick start

# Install (uv-managed)
uv sync

# Score the reference baseline
cd router-testkit/harness
python run_benchmark.py --verbose

# Score this project's router
python run_benchmark.py --router testkit_adapter:MyRouter --verbose

The harness has no third-party dependencies; standard-library only. The router itself can run on HashingEmbedder (zero deps) or opt-in SentenceTransformerEmbedder via uv sync --extra semantic.

Where to read next

  1. docs/architecture/query-flow.md — sequence diagram of a single route() call end-to-end. Every arrow points at a function you can grep for. Read this before touching the pipeline.
  2. docs/architecture/components.md — module dependency graph, per-module code-map, and extension-point cheat-sheet. Read this when picking up the codebase cold.
  3. specs/README.md — the executable plan. Every spec is pickable independently and has acceptance criteria tied to testkit case IDs.
  4. router-testkit/README.md — the grading contract (authoritative).
  5. docs/hackathon-definition.md — the problem statement.
  6. docs/PRD.md — the initial PRD.

Toolchain

  • Python ≥ 3.14 (pinned in .python-version, managed by uv)
  • Ruff for lint + format
  • Pytest for unit tests (see pyproject.toml's [dev] extra)

Dev

uv run ruff check .
uv run ruff format .
uv run pytest

Release

Releases are published to PyPI via a GitLab CI child pipeline. To trigger a release:

  1. Go to CI/CD → Pipelines → Run pipeline on the master branch.
  2. The trigger:release job starts automatically and spawns the release child pipeline.
  3. Set any of the following pipeline variables before running:
Variable Default Meaning
BUMP patch patch / minor / major — controls auto-increment.
VERSION empty Explicit x.y.z — overrides BUMP when set.
RELEASE_NOTES empty Free-form notes shown on the PyPI page, git tag, and GitLab Release.

The pipeline will:

  • Bump src/route66/_version.py and rebuild the package
  • Inject release notes into the PyPI long description (visible on pypi.org)
  • Publish the wheel + sdist via twine
  • Commit the version bump and push an annotated git tag vX.Y.Z
  • Create a GitLab Release under Deployments → Releases
  • Update release/CHANGELOG.md and release/versions/pypi.json

See release/README.md for full pipeline and variable documentation.

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

route66-2.0.0.tar.gz (38.6 kB view details)

Uploaded Source

Built Distribution

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

route66-2.0.0-py3-none-any.whl (49.6 kB view details)

Uploaded Python 3

File details

Details for the file route66-2.0.0.tar.gz.

File metadata

  • Download URL: route66-2.0.0.tar.gz
  • Upload date:
  • Size: 38.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for route66-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ee5c76136a5ef9820dc0f52d2542f4fecbe53dd0e522ce1e31b51a20e0790343
MD5 b5f455e8828606dfcc1475e577a65e3c
BLAKE2b-256 93962a42fe236dae89a2a0d669b6002ff3ba0984571bd3bfa9442a764df4ff2f

See more details on using hashes here.

File details

Details for the file route66-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: route66-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 49.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for route66-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 027f302ab333c2ea3f5d3592abbcc1df711ee1ebdc1a87c0471a769c378ad474
MD5 8dcb21433bc955e19593637699803b56
BLAKE2b-256 61bf5f9ff1c442094d0920d72d4cb1def51f70c5a4a042ec93b1cfb38ce7b852

See more details on using hashes here.

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