Metadata-Version: 2.4
Name: model-router-policy-py
Version: 0.1.0
Summary: Policy-based model routing by capability, cost, latency, and privacy. Python port of @mukundakatta/model-router-policy.
Project-URL: Homepage, https://github.com/MukundaKatta/model-router-policy-py
Project-URL: Issues, https://github.com/MukundaKatta/model-router-policy-py/issues
Project-URL: Source, https://github.com/MukundaKatta/model-router-policy-py
Project-URL: JS sibling, https://www.npmjs.com/package/@mukundakatta/model-router-policy
Author-email: Mukunda Katta <mukunda.vjcs6@gmail.com>
License: MIT
License-File: LICENSE
Keywords: cost,llm,models,policy,routing
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Description-Content-Type: text/markdown

# model-router-policy-py

Policy-based model routing by capability, cost, latency, and privacy. Pure Python, zero deps. Python port of [`@mukundakatta/model-router-policy`](https://www.npmjs.com/package/@mukundakatta/model-router-policy).

```bash
pip install model-router-policy-py
```

```python
from model_router_policy import route_model

models = [
    {"name": "haiku",  "capabilities": ["chat"],          "quality": 0.7,  "cost_per_1k_tokens": 0.5,  "p50_latency_ms": 400,  "allows_private_data": True},
    {"name": "sonnet", "capabilities": ["chat", "tools"], "quality": 0.9,  "cost_per_1k_tokens": 3,    "p50_latency_ms": 800,  "allows_private_data": True},
    {"name": "opus",   "capabilities": ["chat", "tools", "vision"], "quality": 0.95, "cost_per_1k_tokens": 15, "p50_latency_ms": 1500, "allows_private_data": False},
]

route_model({"required_capabilities": ["vision"], "private_data": True}, models)
# RoutingDecision(model=None, reason='no_model_satisfies_policy', ...)  # opus excluded by privacy
```

Score weighting: `quality 0.55 + cost 0.25 + latency 0.20 + preferred-cap fit 0.10/cap`.

## License

MIT
