Orchestrata Ultimate / RTM / 028-llm-client

RTM: 028-llm-client

Requirement to symbol to test rows for 028-llm-client: LLM Client Facade.

At a glance

Item Value
Requirement IDs 56
Traced from src/ 34 (60.7%)
Untraced 22
Cited from tests/ 1 (1.8%)
Traced in src/ but not cited from tests/ 33

Reading this matrix

This matrix lists each of the 56 requirement IDs of spec 028-llm-client with the src/ symbols that cite it and the tests that cite it. 34 of them (60.7%) have at least one citing symbol and 22 have none.

1 requirement is also cited from tests/, and 33 are traced in code but never named by a test. A test citation is a @traces on a test function; it shows intent to cover, not that the test runs or reaches the symbol.

Rows showing none in the symbols column are the gaps to close first. The densest untraced groups are REQ-028-* (22).

Requirement to symbols to tests

Requirement Symbols in src/ Tests citing it
REQ-028-001 call_llm is an async function with signature `call_llm(volk_id: str, messages:... none none
REQ-028-002 call_llm resolves the effective provider via get_volk_provider(volk_id) unless... none none
REQ-028-003 call_llm resolves the effective model via `get_volk_model(volk_id,... orchestrata_ultimate/llm/client call_llm L807 none
REQ-028-004 call_llm delegates the resolved request to `ProviderManager.complete(provider,... none none
REQ-028-005 call_llm injects graph context into the first user message before dispatching when... orchestrata_ultimate/llm/client call_llm L807 none
REQ-028-006 call_llm validates graph context compliance on the response and retries up to... orchestrata_ultimate/knowledge_graph/graph_context_validator compliance_ratio L53
orchestrata_ultimate/knowledge_graph/graph_context_validator entities_found L61
orchestrata_ultimate/knowledge_graph/graph_context_validator entities_missing L67
+7 more
none
REQ-028-007 call_llm returns the plain assistant response text as a str none none
REQ-028-008 call_llm raises LLMClientError for permanent provider errors (HTTP 400, 401, 403, 404) none none
REQ-028-009 call_llm raises LLMProviderUnavailableError after exhausting all retry attempts on... none none
REQ-028-010 call_llm logs each attempt at DEBUG level and each retry at WARNING level with... none none
REQ-028-011 call_reasoner is an async function with the same signature as call_llm minus the... orchestrata_ultimate/llm/client call_reasoner L980 none
REQ-028-012 call_reasoner delegates to call_llm with reasoning=True orchestrata_ultimate/llm/client call_reasoner L980 none
REQ-028-013 Volks in REASONING_VOLKS calling call_reasoner receive the reasoning_model from... orchestrata_ultimate/llm/client call_reasoner L980 none
REQ-028-014 Volks not in REASONING_VOLKS calling call_reasoner receive their standard model... orchestrata_ultimate/llm/client call_reasoner L980 none
REQ-028-015 REASONING_VOLKS is defined as the frozen set {"U:Ar", "U:SD"} orchestrata_ultimate/llm/client call_reasoner L980 none
REQ-028-016 VolkConfig is a dataclass with fields provider: str, model: str,... none none
REQ-028-017 Default assignments are defined for U:Cx → claude/claude-sonnet-4-5 none none
REQ-028-018 Default assignments are defined for U:Ar → claude/claude-opus-4-5 (standard) and... none none
REQ-028-019 Default assignments are defined for J:Junior → claude/claude-sonnet-4-5 none none
REQ-028-020 Default assignments are defined for U:Ox, U:PS, U:Cd, U:Ux, U:PM, U:Qa,... none none
REQ-028-021 A sentinel default key in VolkConfig map applies to any unrecognised volk_id orchestrata_ultimate/drivers/deepseek_coder_driver _recover_missing_files L445
orchestrata_ultimate/drivers/deepseek_coder_driver _retry_on_empty L397
orchestrata_ultimate/drivers/deepseek_coder_driver execute L298
+5 more
tests/llm/test_config.py::test_get_volk_model_none_falls_back_to_default_sentinel
tests/llm/test_config.py::test_known_agents_excludes_default_sentinel
tests/llm/test_config.py::test_unknown_agent_falls_back_to_default_sentinel
REQ-028-022 ORCHESTRATA_LLM_PROVIDER env var globally overrides the provider field for all Volks orchestrata_ultimate/core/infra_config get_volk_provider L326 none
REQ-028-023 ORCHESTRATA_LLM_MODEL env var globally overrides the model field for all Volks orchestrata_ultimate/core/infra_config get_volk_model L333 none
REQ-028-024 ORCHESTRATA_LLM_REASONING_MODEL env var globally overrides the reasoning_model... none none
REQ-028-025 Per-volk env var overrides (pattern ORCHESTRATA_LLM_MODEL_<VOLK_SANITISED>) take... none none
REQ-028-026 get_volk_provider(volk_id: str) -> str returns the effective provider after applying... orchestrata_ultimate/core/infra_config get_volk_provider L326 none
REQ-028-027 get_volk_model(volk_id: str, reasoning: bool = False) -> str returns... none none
REQ-028-028 Both functions fall back to the default config entry when volk_id is not in the map orchestrata_ultimate/llm/config get_model L270
orchestrata_ultimate/llm/config get_provider L242
orchestrata_ultimate/llm/config get_volk_model L341
+1 more
none
REQ-028-029 HTTP status codes 429, 500, 502, 503 are classified as transient errors orchestrata_ultimate/llm/client _is_transient L515 none
REQ-028-030 asyncio.TimeoutError and concurrent.futures.TimeoutError are classified as... orchestrata_ultimate/llm/client _is_transient L515 none
REQ-028-031 ConnectionRefusedError, ConnectionResetError, and aiohttp.ClientConnectorError... orchestrata_ultimate/llm/client _is_transient L515 none
REQ-028-032 HTTP status codes 400, 401, 403, 404 are classified as permanent errors orchestrata_ultimate/llm/client _is_transient L515 none
REQ-028-033 A helper is_transient(exc) -> bool function encapsulates all transient error... orchestrata_ultimate/llm/client _is_transient L515 none
REQ-028-034 Maximum retry attempts is MAX_RETRIES = 5 (6 total attempts including the first) orchestrata_ultimate/llm/client _execute_with_retry L566
orchestrata_ultimate/llm/client _is_rate_limit_error L551
none
REQ-028-035 Backoff delay formula is `min(base_delay * 2 ** attempt + random.uniform(0, jitter),... orchestrata_ultimate/llm/client _execute_with_retry L566
orchestrata_ultimate/llm/client _is_rate_limit_error L551
none
REQ-028-036 Default base_delay = 1.0 second, jitter = 0.5 seconds, max_delay = 60.0 seconds orchestrata_ultimate/llm/client _execute_with_retry L566
orchestrata_ultimate/llm/client _is_rate_limit_error L551
none
REQ-028-037 On permanent error, the exception is re-raised immediately without any retry orchestrata_ultimate/llm/client _execute_with_retry L566
orchestrata_ultimate/llm/client _is_rate_limit_error L551
none
REQ-028-038 After MAX_RETRIES transient failures, LLMProviderUnavailableError is raised with... orchestrata_ultimate/llm/client _execute_with_retry L566
orchestrata_ultimate/llm/client _is_rate_limit_error L551
none
REQ-028-039 When graph_context is a non-empty dict, its content is serialised to a... none none
REQ-028-040 The serialised block is prepended to the content of the first message where `role ==... orchestrata_ultimate/llm/client call_llm L807 none
REQ-028-041 The injected block is delimited by ### Knowledge Graph Context ### header and `###... none none
REQ-028-042 The original user message content follows the injected block verbatim without modification orchestrata_ultimate/llm/client call_llm L807 none
REQ-028-043 When graph_context is None or an empty dict, no prefix is added and the messages... orchestrata_ultimate/llm/client call_llm L807 none
REQ-028-044 After receiving a response, the facade extracts entity names from graph_context none none
REQ-028-045 Compliance passes if at least one entity name appears (case-insensitive substring... none none
REQ-028-046 On compliance failure, a nudge message `"Please reference the provided graph context... none none
REQ-028-047 Maximum validation retries is MAX_VALIDATION_RETRIES = 3 none none
REQ-028-048 After MAX_VALIDATION_RETRIES compliance failures, the last response is returned with... none none
REQ-028-049 Compliance validation is entirely skipped when graph_context is None or empty orchestrata_ultimate/knowledge_graph/graph_context_validator has_entities L406
orchestrata_ultimate/llm/client call_llm L807
none
REQ-028-050 ProviderManager is accessed via a module-level get_provider_manager() function... orchestrata_ultimate/llm/client _get_provider_manager L481 none
REQ-028-051 Default adapter registration covers claude_cli, anthropic, deepseek,... orchestrata_ultimate/llm/client _get_provider_manager L481 none
REQ-028-052 Each adapter is lazily initialised on first use (constructor not called at import time) orchestrata_ultimate/llm/client _get_provider_manager L481 none
REQ-028-053 Registering a provider name that already exists silently replaces the previous adapter orchestrata_ultimate/llm/client _get_provider_manager L481 none
REQ-028-054 LLMClientError(Exception) is the base exception for all LLM client failures orchestrata_ultimate/llm/exceptions LLMClientError L7 none
REQ-028-055 LLMProviderUnavailableError(LLMClientError) signals exhausted retries or no... orchestrata_ultimate/llm/exceptions LLMProviderUnavailableError L16 none
REQ-028-056 Both exception classes are importable from the orchestrata_llm package top-level... orchestrata_ultimate/llm/exceptions LLMClientError L7 none