Metadata-Version: 2.5
Name: antron-model-router
Version: 0.1.0
Summary: A single interface for routing text, vision, image, audio, and video queries across model providers (Anthropic, OpenAI, Gemini, Together, Runware, ElevenLabs, Tripo) and local models.
Project-URL: Repository, https://github.com/antronai/model-router
Author: Antron, Inc.
License-Expression: MIT
License-File: LICENSE
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Requires-Dist: anthropic
Requires-Dist: elevenlabs
Requires-Dist: google-genai
Requires-Dist: json-repair
Requires-Dist: numpy
Requires-Dist: openai
Requires-Dist: pillow
Requires-Dist: requests
Requires-Dist: runware
Requires-Dist: tenacity
Requires-Dist: together
Provides-Extra: local
Requires-Dist: qwen-vl-utils; extra == 'local'
Requires-Dist: sam3; extra == 'local'
Requires-Dist: torch; extra == 'local'
Requires-Dist: transformers>=4.51.3; extra == 'local'
Provides-Extra: qwen
Requires-Dist: qwen-vl-utils; extra == 'qwen'
Requires-Dist: torch; extra == 'qwen'
Requires-Dist: transformers>=4.51.3; extra == 'qwen'
Provides-Extra: sam
Requires-Dist: sam3; extra == 'sam'
Requires-Dist: torch; extra == 'sam'
Description-Content-Type: text/markdown

# model-router

A single interface for sending text, vision, image, audio, and video queries to many model providers (Anthropic, OpenAI, Gemini, Together, Runware, ElevenLabs, Tripo), plus local models (Qwen2.5-VL, SAM 3).

## Install

```bash
uv add antron-model-router
# with local models
uv add "antron-model-router[local]"   # or [qwen] / [sam]
```

The import name is `model_router`.

## Usage

```python
from model_router.router import ModelRouter
from model_router.model_interface import Capability
from model_router.query import Query

router = ModelRouter()
response = router.get_response(
    query=Query(query_text="Hello!"),
    capability=Capability.TEXT,
    interface_type="anthropic_sonnet45",  # or None to let the router choose
)
```

See `src/model_router/demo.py` (`python -m model_router.demo`) for an interactive tour of every interface.

## API keys

Keys are read from environment variables when an interface is first used:

| Provider   | Variable             |
|------------|----------------------|
| Anthropic  | `ANTHROPIC_API_KEY`  |
| OpenAI     | `OPENAI_API_KEY`     |
| Gemini     | `GEMINI_API_KEY`     |
| Together   | `TOGETHER_API_KEY`   |
| Runware    | `RUNWARE_API_KEY`    |
| ElevenLabs | `ELEVENLABS_API_KEY` |
| Tripo      | `TRIPO_API_KEY`      |

## Mesh generation

`Capability.MESH_GEN` routes to Tripo H3.1 (`tripo_h31`) by default. Pass a `MeshGenQuery` with text only (text-to-mesh), one image (image-to-mesh), or front/left/back/right views (multiview):

```python
from model_router.model_interface import Capability, MeshGenQuery

response = router.get_response(
    query=MeshGenQuery(images={"front": "front.png", "right": "right.png"}, texture=True, pbr=True),
    capability=Capability.MESH_GEN,
    interface_type=None,
)
glb_url = response["output"]["model_url"]
```

## Local models

SAM 3 looks for `sam3.pt` in `$MODEL_ROUTER_PRETRAINED_DIR/sam3` (default `./pretrained_models/sam3`), otherwise it downloads from HuggingFace (`facebook/sam3`, gated — run `hf auth login`).

## Development

```bash
uv sync
uv run pytest
```

## License

MIT
