Files
odysseus/docs/discovery/domains/model.md
T
2026-07-28 03:14:56 +01:00

178 lines
7.7 KiB
Markdown

# Model
Features in this document are generated from [`../feature-catalog.json`](../feature-catalog.json), the canonical inventory.
## MODEL-001 — Multi-Provider LLM Model Discovery & Metadata Management
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Discovers models from OpenAI, Anthropic, Ollama, vLLM, LMStudio, OpenRouter, and Google AI Studio endpoints.
### Evidence summary
- `routes/model_routes.py``@router.get('/api/models')` — Returns unified list of available models across providers.
- `src/model_discovery.py``ModelDiscovery.discover_all` — Queries connected provider endpoints for available model IDs.
### Unknowns
- Remote endpoint timeouts may slow down full discovery refresh.
## MODEL-002 — Model Capability & Context Limits Detection
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Detects vision, tool calling, reasoning, and context window limits for connected model endpoints.
### Evidence summary
- `src/model_capabilities.py``get_model_capabilities` — Maps model names to vision and tool support flags.
- `src/endpoint_resolver.py``resolve_endpoint_headers` — Resolves auth headers and target URLs for model endpoints.
### Unknowns
- Incorrect context limit metadata for unlisted custom fine-tunes.
## MODEL-003 — LLM Core Provider Communication & Fallback Routing
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: pending — Provider dispatch, header injection and fallback advancement are only observable against a reachable LLM provider endpoint; not exercised in this documentation pass.
### Purpose
Manages HTTP request dispatching, authorization header injection, and fallback provider routing for LLM calls.
### Evidence summary
- `src/llm_core.py``llm_call_async` — Non-streaming provider request dispatcher: resolves the endpoint, injects authorization headers and executes the HTTP call.
- `src/llm_core.py``llm_call_async_with_fallback` — Ordered fallback wrapper that retries llm_call_async across the configured candidate endpoints.
- `src/llm_core.py``stream_llm_with_fallback` — Ordered fallback wrapper for the streaming path; advances to the next candidate when a provider yields an empty completion.
### Unknowns
- Unexpected API changes in upstream third-party model providers.
## MODEL-004 — Model Selection & Display Ordering Preferences
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Allows pinning, sorting, and hiding specific models in the UI selection dropdown.
### Evidence summary
- `routes/model_routes.py``@router.post('/order')` — Saves custom model display order preference.
### Unknowns
- Stale model IDs in custom order lists after model endpoints are removed.
## MODEL-005 — Side-by-Side Model Comparison (A/B Testing)
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Enables dual-model side-by-side response evaluation, arena scoring, and latency comparison.
### Evidence summary
- `routes/compare/compare_routes.py``@router.post('/start')` — Starts a parallel dual-model comparison stream.
- `static/js/compare/index.js``initCompareView` — Renders side-by-side model chat panes.
### Unknowns
- High memory and network usage when streaming two model responses simultaneously.
## MODEL-006 — GitHub Copilot Device Flow Authentication
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E2`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: pending — Requires an interactive GitHub Copilot OAuth device-flow account.
### Purpose
Authenticates with GitHub Copilot via OAuth device flow to use Copilot models directly.
### Evidence summary
- `routes/copilot_routes.py``setup_copilot_routes` — Builds the Copilot device-flow router at prefix /api/copilot, wiring _start_device_flow and _poll_device_flow.
- `routes/device_flow.py``create_device_flow_router` — Shared factory registering POST /device/start and POST /device/poll under the caller-supplied prefix.
- `src/copilot.py``request_device_code` — Issues the GitHub device-code request that begins the Copilot OAuth device flow.
- `src/copilot.py``poll_access_token` — Polls GitHub for the access token once the user has authorized the device code.
- `tests/test_provider_device_flow_js.py``test_copilot_success_uses_complete_verification_uri` — Inspected unit test asserting the Copilot device-flow runner surfaces the complete verification URI returned by the backend.
### Unknowns
- Token expiration requires manual device re-authentication.
## MODEL-007 — ChatGPT Subscription Device Flow Authentication
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E2`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: pending — Requires an interactive ChatGPT subscription OAuth flow.
### Purpose
Authenticates with ChatGPT Pro/Plus subscription tokens via device login flow.
### Evidence summary
- `routes/chatgpt_subscription_routes.py``setup_chatgpt_subscription_routes` — Builds the ChatGPT subscription device-flow router at prefix /api/chatgpt-subscription.
- `routes/device_flow.py``create_device_flow_router` — Shared factory registering POST /device/start and POST /device/poll under the caller-supplied prefix.
- `src/chatgpt_subscription.py``request_device_code` — Issues the ChatGPT device-authorization request that begins the subscription OAuth device flow.
- `src/chatgpt_subscription.py``poll_device_auth` — Polls the ChatGPT device-authorization endpoint for completion using the stored device_auth_id and user_code.
- `tests/test_provider_device_flow_js.py``test_chatgpt_success_uses_plain_verification_uri` — Inspected unit test asserting the ChatGPT device-flow runner uses the plain verification URI rather than the Copilot complete-URI form.
### Unknowns
- Changes in OpenAI auth endpoint security challenges.
## MODEL-008 — Embedding Model Lane & Vector Provider Setup
- **Domain**: `model`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Configures local sentence-transformers, FastEmbed, or remote OpenAI embedding model lanes.
### Evidence summary
- `routes/embedding_routes.py``setup_embedding_routes` — Provides embedding provider configuration endpoints.
- `src/embeddings.py``EmbeddingManager` — Generates dense vector embeddings for RAG and memory.
### Unknowns
- First-time download of heavy PyTorch model weights on CPU-only machines.