feat: OpenRouter as a second provider with admin provider management #39

Merged
alee merged 16 commits from feat/multi-provider-openrouter into main 2026-09-06 14:38:11 +00:00

16 Commits

Author SHA1 Message Date
adlee-was-taken
e582015bfe fix(tests): migrate backoff/modes/gaming fixtures to per-provider refusal state 2026-09-06 02:43:19 -04:00
adlee-was-taken
5f9940305c Merge remote-tracking branch 'origin/main' into docs/refresh-claude-md
# Conflicts:
#	src/admin.py
2026-09-06 02:36:44 -04:00
adlee-was-taken
9b5f67a9db fix(admin): topbar no longer overflows at 800px viewport 2026-09-06 02:22:19 -04:00
adlee-was-taken
1ec4986a41 fix(dispatch): move import-time self-check into ordinary tests 2026-09-06 02:13:21 -04:00
adlee-was-taken
e9ab7453cf docs(notepad): record task 11 final verification and provenance flag fix
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-06 02:03:06 -04:00
adlee-was-taken
ddeebc7fdd fix(admin): return provider provenance flags in list and detail endpoints
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-06 02:02:57 -04:00
adlee-was-taken
60936f0cef test(dispatch): multi-provider pin resolution, telemetry, and refusal tests 2026-09-06 01:43:52 -04:00
adlee-was-taken
120da76670 feat(dispatch): per-provider telemetry and refusal isolation 2026-09-06 01:35:54 -04:00
adlee-was-taken
93e07131da test(poller): OpenRouter fetch, variant handling, and multi-provider isolation tests 2026-09-06 01:35:35 -04:00
adlee-was-taken
55b9e5df87 test(admin): provider CRUD endpoint tests 2026-09-06 01:34:49 -04:00
adlee-was-taken
4e85116963 fix(dispatch): resolve pinned-model provider from catalog instead of default 2026-09-06 01:30:12 -04:00
adlee-was-taken
ec0845a74e feat(poller): multi-provider main loop with failure isolation and tiering 2026-09-06 01:29:15 -04:00
adlee-was-taken
9c5b5e5517 feat(admin): providers management page with create/edit/delete UI 2026-09-06 01:28:06 -04:00
adlee-was-taken
39a2edd6ad feat(admin): provider CRUD endpoints and page-serving route 2026-09-06 01:23:09 -04:00
adlee-was-taken
9e03f2211c feat(poller): fetch and normalize OpenRouter catalog
Add fetch_openrouter() and parse_openrouter_model() to src/poller.py.

OpenRouter virtual routers are excluded, :batch variants map to latency_class='flex',

and per-token USD prices are normalized to cost per 1M tokens.

Add tests/test_openrouter_poller.py with mocked requests.get coverage.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-06 01:16:27 -04:00
adlee-was-taken
0fc3e0ac99 feat(config): add has_energy_telemetry and enabled to DispatchProvider; add OpenRouter config
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-06 01:09:46 -04:00