From 784c5f8071ad59c84bf2b29a5c4431c3da3a0ba5 Mon Sep 17 00:00:00 2001 From: Andrej Simurka Date: Thu, 27 Aug 2026 14:04:26 +0200 Subject: [PATCH] rename llama_stack config key to ogx with deprecated alias --- .github/workflows/e2e_tests.yaml | 2 +- .../e2e_tests_lightspeed_evaluation.yaml | 2 +- .github/workflows/e2e_tests_providers.yaml | 2 +- docs/basic_info/getting_started.md | 2 +- docs/devel_doc/openapi.json | 26 ++-- docs/user_doc/config.html | 4 +- docs/user_doc/config.json | 6 +- docs/user_doc/config.md | 4 +- docs/user_doc/config.puml | 5 +- docs/user_doc/config.svg | 4 +- examples/lightspeed-stack-a2a-state-pg.yaml | 2 +- .../lightspeed-stack-a2a-state-sqlite.yaml | 2 +- examples/lightspeed-stack-api-key-auth.yaml | 2 +- .../lightspeed-stack-azure-entraid-lib.yaml | 2 +- ...ightspeed-stack-azure-entraid-service.yaml | 2 +- examples/lightspeed-stack-byok-okp-rag.yaml | 2 +- ...ightspeed-stack-conversation-cache-pg.yaml | 2 +- ...speed-stack-conversation-cache-sqlite.yaml | 2 +- examples/lightspeed-stack-lls-external.yaml | 2 +- examples/lightspeed-stack-lls-library.yaml | 2 +- examples/lightspeed-stack-mcp-servers.yaml | 2 +- .../lightspeed-stack-quota-limiter-pg.yaml | 2 +- ...lightspeed-stack-quota-limiter-sqlite.yaml | 2 +- examples/lightspeed-stack-rh-identity.yaml | 2 +- examples/lightspeed-stack-rlsapi-cla.yaml | 2 +- examples/lightspeed-stack-shields.yaml | 2 +- examples/lightspeed-stack-skills.yaml | 2 +- examples/quota-limiter-configuration-pg.yaml | 2 +- .../quota-limiter-configuration-sqlite.yaml | 2 +- lightspeed-stack.yaml | 2 +- scripts/generate_openapi_schema.py | 2 +- src/app/main.py | 4 +- src/configuration.py | 18 +-- src/lightspeed_stack.py | 4 +- src/llama_stack_configuration.py | 45 +++++-- .../api/responses/successful/configuration.py | 2 +- src/models/config.py | 55 ++++++--- src/telemetry/configuration_snapshot.py | 26 ++-- tests/configuration/benchmarks-postgres.yaml | 2 +- tests/configuration/benchmarks-sqlite.yaml | 2 +- .../lightspeed-stack-proper-name.yaml | 2 +- tests/configuration/lightspeed-stack.yaml | 2 +- tests/configuration/rh-identity-config.yaml | 2 +- .../lightspeed-stack-authorized.yaml | 2 +- .../lightspeed-stack-byok-pdf.yaml | 2 +- .../lightspeed-stack-default.yaml | 2 +- .../lightspeed-stack-mcp-api-auth.yaml | 2 +- .../lightspeed-stack-mcp-client-auth.yaml | 2 +- .../lightspeed-stack-mcp-file-auth.yaml | 2 +- .../lightspeed-stack-mcp-invalid.yaml | 2 +- .../lightspeed-stack-mcp-kubernetes-auth.yaml | 2 +- .../lightspeed-stack-mcp-oauth-auth.yaml | 2 +- .../library-mode/lightspeed-stack-mcp.yaml | 2 +- .../lightspeed-stack-negative.yaml | 2 +- .../library-mode/lightspeed-stack-rbac.yaml | 2 +- .../lightspeed-stack-rh-identity.yaml | 2 +- .../lightspeed-stack-skills-directory.yaml | 2 +- .../library-mode/lightspeed-stack-skills.yaml | 2 +- .../library-mode/lightspeed-stack.yaml | 2 +- .../lightspeed-stack-authorized.yaml | 2 +- .../server-mode/lightspeed-stack-default.yaml | 2 +- .../lightspeed-stack-degraded.yaml | 2 +- .../lightspeed-stack-mcp-api-auth.yaml | 2 +- .../lightspeed-stack-mcp-client-auth.yaml | 2 +- .../lightspeed-stack-mcp-file-auth.yaml | 2 +- .../lightspeed-stack-mcp-invalid.yaml | 2 +- .../lightspeed-stack-mcp-kubernetes-auth.yaml | 2 +- .../lightspeed-stack-mcp-oauth-auth.yaml | 2 +- .../server-mode/lightspeed-stack-mcp.yaml | 2 +- .../lightspeed-stack-negative.yaml | 2 +- .../server-mode/lightspeed-stack-rbac.yaml | 2 +- .../lightspeed-stack-rh-identity.yaml | 2 +- .../server-mode/lightspeed-stack-rhelai.yaml | 2 +- .../server-mode/lightspeed-stack-rhoai.yaml | 2 +- .../lightspeed-stack-skills-directory.yaml | 2 +- .../server-mode/lightspeed-stack-skills.yaml | 2 +- .../server-mode/lightspeed-stack-tls.yaml | 2 +- .../server-mode/lightspeed-stack.yaml | 2 +- tests/e2e/features/environment.py | 2 +- tests/e2e/features/steps/health.py | 8 +- tests/integration/test_configuration.py | 4 +- tests/integration/test_unified_synthesis.py | 28 ++--- tests/unit/__init__.py | 2 +- tests/unit/app/endpoints/test_a2a.py | 6 +- .../unit/app/endpoints/test_conversations.py | 2 +- tests/unit/app/endpoints/test_info.py | 8 +- tests/unit/app/endpoints/test_mcp_auth.py | 12 +- tests/unit/app/endpoints/test_mcp_servers.py | 2 +- tests/unit/app/endpoints/test_models.py | 12 +- tests/unit/app/endpoints/test_query.py | 2 +- tests/unit/app/endpoints/test_rags.py | 2 +- tests/unit/app/endpoints/test_responses.py | 6 +- .../unit/app/endpoints/test_responses_otel.py | 2 +- .../app/endpoints/test_responses_splunk.py | 2 +- .../unit/app/endpoints/test_saved_prompts.py | 2 +- tests/unit/app/endpoints/test_shields.py | 2 +- .../app/endpoints/test_streaming_query.py | 2 +- tests/unit/app/endpoints/test_tools.py | 2 +- .../unit/app/endpoints/test_vector_stores.py | 2 +- tests/unit/authentication/test_k8s.py | 10 +- .../unit/authentication/test_trusted_proxy.py | 6 +- tests/unit/conftest.py | 2 +- .../config/test_approvals_configuration.py | 2 +- .../test_authentication_configuration.py | 10 +- .../models/config/test_dump_configuration.py | 70 +++++------ .../config/test_llama_stack_configuration.py | 53 +++++---- .../test_model_context_protocol_server.py | 8 +- .../config/test_rlsapi_v1_configuration.py | 2 +- .../config/test_shields_configuration.py | 2 +- .../responses/test_successful_responses.py | 2 +- .../unit/models/test_saved_prompts_config.py | 2 +- tests/unit/telemetry/conftest.py | 4 +- .../telemetry/test_configuration_snapshot.py | 38 +++--- tests/unit/test_configuration.py | 112 +++++++++++------- tests/unit/test_lightspeed_stack.py | 14 +-- tests/unit/test_llama_stack_configuration.py | 2 +- tests/unit/test_llama_stack_synthesize.py | 74 ++++++------ tests/unit/utils/test_models_dumper.py | 6 +- tests/unit/utils/test_prompts.py | 2 +- tests/unit/utils/test_transcripts.py | 2 +- 120 files changed, 474 insertions(+), 392 deletions(-) diff --git a/.github/workflows/e2e_tests.yaml b/.github/workflows/e2e_tests.yaml index 6a1f464e5..7958843df 100644 --- a/.github/workflows/e2e_tests.yaml +++ b/.github/workflows/e2e_tests.yaml @@ -152,7 +152,7 @@ jobs: echo "Models: $(grep -c "model_id:" run.yaml)" echo "" echo "=== lightspeed-stack.yaml ===" - grep -A 3 "llama_stack:" lightspeed-stack.yaml + grep -A 3 "ogx:" lightspeed-stack.yaml - name: Cache HuggingFace embedding model uses: actions/cache@v4 diff --git a/.github/workflows/e2e_tests_lightspeed_evaluation.yaml b/.github/workflows/e2e_tests_lightspeed_evaluation.yaml index df8b6399c..07b345881 100644 --- a/.github/workflows/e2e_tests_lightspeed_evaluation.yaml +++ b/.github/workflows/e2e_tests_lightspeed_evaluation.yaml @@ -96,7 +96,7 @@ jobs: echo "Models: $(grep -c "model_id:" run.yaml)" echo "" echo "=== lightspeed-stack.yaml ===" - grep -A 3 "llama_stack:" lightspeed-stack.yaml + grep -A 3 "ogx:" lightspeed-stack.yaml - name: Run services (Library Mode) env: diff --git a/.github/workflows/e2e_tests_providers.yaml b/.github/workflows/e2e_tests_providers.yaml index 83d1f5fe9..3d988e2b3 100644 --- a/.github/workflows/e2e_tests_providers.yaml +++ b/.github/workflows/e2e_tests_providers.yaml @@ -204,7 +204,7 @@ jobs: echo "Models: $(grep -c "model_id:" run.yaml)" echo "" echo "=== lightspeed-stack.yaml ===" - grep -A 3 "llama_stack:" lightspeed-stack.yaml + grep -A 3 "ogx:" lightspeed-stack.yaml - name: Cache HuggingFace embedding model uses: actions/cache@v4 diff --git a/docs/basic_info/getting_started.md b/docs/basic_info/getting_started.md index b454fd32e..0b17e6e7f 100644 --- a/docs/basic_info/getting_started.md +++ b/docs/basic_info/getting_started.md @@ -128,7 +128,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode (recommended): the run.yaml created above is consumed as # the synthesis profile. The legacy library_client_config_path setup is diff --git a/docs/devel_doc/openapi.json b/docs/devel_doc/openapi.json index 3acfb04fe..21f1aff51 100644 --- a/docs/devel_doc/openapi.json +++ b/docs/devel_doc/openapi.json @@ -6835,11 +6835,6 @@ "default_model": "gpt-4-turbo", "default_provider": "openai" }, - "llama_stack": { - "api_key": "*****", - "url": "http://localhost:8321", - "use_as_library_client": false - }, "mcp_servers": [ { "name": "server1", @@ -6857,6 +6852,11 @@ "OTEL_SERVICE_NAME": "" } }, + "ogx": { + "api_key": "*****", + "url": "http://localhost:8321", + "use_as_library_client": false + }, "quota_handlers": { "enable_token_history": false, "limiters": [], @@ -13073,14 +13073,14 @@ } ], "title": "Configuration format version", - "description": "Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or a llama_stack.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11)." + "description": "Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or an ogx.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11)." }, "service": { "$ref": "#/components/schemas/ServiceConfiguration", "title": "Service configuration", "description": "This section contains Lightspeed Core Stack service configuration." }, - "llama_stack": { + "ogx": { "$ref": "#/components/schemas/OgxConfiguration", "title": "OGX configuration", "description": "This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server mode." @@ -13254,7 +13254,7 @@ "required": [ "name", "service", - "llama_stack", + "ogx", "user_data_collection" ], "title": "Configuration", @@ -13292,11 +13292,6 @@ "default_model": "gpt-4-turbo", "default_provider": "openai" }, - "llama_stack": { - "api_key": "*****", - "url": "http://localhost:8321", - "use_as_library_client": false - }, "mcp_servers": [ { "name": "server1", @@ -13314,6 +13309,11 @@ "OTEL_SERVICE_NAME": "" } }, + "ogx": { + "api_key": "*****", + "url": "http://localhost:8321", + "use_as_library_client": false + }, "quota_handlers": { "enable_token_history": false, "limiters": [], diff --git a/docs/user_doc/config.html b/docs/user_doc/config.html index aa33ab656..49bc28710 100644 --- a/docs/user_doc/config.html +++ b/docs/user_doc/config.html @@ -629,7 +629,7 @@

Configuration

Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: ‘unified’ requires a synthesis input (a non-empty inference.providers, a -non-empty vector_store.providers, or a llama_stack.config block), +non-empty vector_store.providers, or a ogx.config block), ‘legacy’ requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11). @@ -640,7 +640,7 @@

Configuration

configuration. - llama_stack + ogx This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server diff --git a/docs/user_doc/config.json b/docs/user_doc/config.json index d678147b8..aeab6b3bf 100644 --- a/docs/user_doc/config.json +++ b/docs/user_doc/config.json @@ -440,7 +440,7 @@ "type": "string", "nullable": true, "default": null, - "description": "Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or a llama_stack.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11).", + "description": "Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or an ogx.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11).", "title": "Configuration format version" }, "service": { @@ -448,7 +448,7 @@ "description": "This section contains Lightspeed Core Stack service configuration.", "title": "Service configuration" }, - "llama_stack": { + "ogx": { "$ref": "`#/components/schemas/`LlamaStackConfiguration", "description": "This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server mode.", "title": "OGX configuration" @@ -625,7 +625,7 @@ "required": [ "name", "service", - "llama_stack", + "ogx", "user_data_collection" ], "title": "Configuration", diff --git a/docs/user_doc/config.md b/docs/user_doc/config.md index c53d079ac..936247f5d 100644 --- a/docs/user_doc/config.md +++ b/docs/user_doc/config.md @@ -224,9 +224,9 @@ Global service configuration. | Field | Type | Description | |------------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | name | string | Name of the service. That value will be used in REST API endpoints. | -| config_format_version | string | Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or a llama_stack.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11). | +| config_format_version | string | Optional explicit marker of the configuration format. When set, it must agree with the shape detected from the configuration body: 'unified' requires a synthesis input (a non-empty inference.providers, a non-empty vector_store.providers, or a ogx.config block), 'legacy' requires no synthesis input. Reserved as the lever for a future breaking change of the unified schema (R11). | | service | | This section contains Lightspeed Core Stack service configuration. | -| llama_stack | | This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server mode. | +| ogx | | This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server mode. | | user_data_collection | | This section contains configuration for subsystem that collects user data(transcription history and feedbacks). | | database | | Configuration for database to store conversation IDs and other runtime data | | mcp_servers | array | MCP (Model Context Protocol) servers provide tools and capabilities to the AI agents. These are configured in this section. Only MCP servers defined in the lightspeed-stack.yaml configuration are available to the agents. Tools configured in the OGX run.yaml are not accessible to lightspeed-core agents. | diff --git a/docs/user_doc/config.puml b/docs/user_doc/config.puml index 8e941855b..22ff4d458 100644 --- a/docs/user_doc/config.puml +++ b/docs/user_doc/config.puml @@ -94,7 +94,7 @@ class "Configuration" as src.models.config.Configuration { database deployment_environment : str inference - llama_stack + ogx mcp_servers : list[ModelContextProtocolServer] name : str okp @@ -106,6 +106,7 @@ class "Configuration" as src.models.config.Configuration { skills : Optional[SkillsConfiguration] splunk : Optional[SplunkConfiguration] user_data_collection + accept_llama_stack_section_alias(data: Any) -> Any check_unified_vs_legacy() -> Self dump(filename: str | Path) -> None validate_mcp_auth_headers() -> Self @@ -370,7 +371,7 @@ src.models.config.DatabaseConfiguration --* src.models.config.Configuration : da src.models.config.InferenceConfiguration --* src.models.config.Configuration : inference src.models.config.JsonPathOperator --* src.models.config.JwtRoleRule : operator src.models.config.JwtConfiguration --* src.models.config.JwkConfiguration : jwt_configuration -src.models.config.LlamaStackConfiguration --* src.models.config.Configuration : llama_stack +src.models.config.LlamaStackConfiguration --* src.models.config.Configuration : ogx src.models.config.OkpConfiguration --* src.models.config.Configuration : okp src.models.config.QuotaHandlersConfiguration --* src.models.config.Configuration : quota_handlers src.models.config.QuotaSchedulerConfiguration --* src.models.config.QuotaHandlersConfiguration : scheduler diff --git a/docs/user_doc/config.svg b/docs/user_doc/config.svg index 7755e9f3b..9b0884399 100644 --- a/docs/user_doc/config.svg +++ b/docs/user_doc/config.svg @@ -186,7 +186,7 @@ database deployment_environment : str inference - llama_stack + ogx mcp_servers : list[ModelContextProtocolServer] name : str okp @@ -909,7 +909,7 @@ - llama_stack + ogx diff --git a/examples/lightspeed-stack-a2a-state-pg.yaml b/examples/lightspeed-stack-a2a-state-pg.yaml index 0c003a670..6a6bfa7f4 100644 --- a/examples/lightspeed-stack-a2a-state-pg.yaml +++ b/examples/lightspeed-stack-a2a-state-pg.yaml @@ -7,7 +7,7 @@ service: workers: 4 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/lightspeed-stack-a2a-state-sqlite.yaml b/examples/lightspeed-stack-a2a-state-sqlite.yaml index fd800f966..adff530ba 100644 --- a/examples/lightspeed-stack-a2a-state-sqlite.yaml +++ b/examples/lightspeed-stack-a2a-state-sqlite.yaml @@ -7,7 +7,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/lightspeed-stack-api-key-auth.yaml b/examples/lightspeed-stack-api-key-auth.yaml index 29efd001c..dbb9d2b45 100644 --- a/examples/lightspeed-stack-api-key-auth.yaml +++ b/examples/lightspeed-stack-api-key-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 authentication: diff --git a/examples/lightspeed-stack-azure-entraid-lib.yaml b/examples/lightspeed-stack-azure-entraid-lib.yaml index a18fba97a..7256cb035 100644 --- a/examples/lightspeed-stack-azure-entraid-lib.yaml +++ b/examples/lightspeed-stack-azure-entraid-lib.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with an `ogx-run.yaml` file # use_as_library_client: false diff --git a/examples/lightspeed-stack-azure-entraid-service.yaml b/examples/lightspeed-stack-azure-entraid-service.yaml index a2fef23e8..f3f1a3186 100644 --- a/examples/lightspeed-stack-azure-entraid-service.yaml +++ b/examples/lightspeed-stack-azure-entraid-service.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with an `ogx-run.yaml` file use_as_library_client: false diff --git a/examples/lightspeed-stack-byok-okp-rag.yaml b/examples/lightspeed-stack-byok-okp-rag.yaml index e764e87b2..156038dba 100644 --- a/examples/lightspeed-stack-byok-okp-rag.yaml +++ b/examples/lightspeed-stack-byok-okp-rag.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/examples/lightspeed-stack-conversation-cache-pg.yaml b/examples/lightspeed-stack-conversation-cache-pg.yaml index 4ad044341..aecbe728b 100644 --- a/examples/lightspeed-stack-conversation-cache-pg.yaml +++ b/examples/lightspeed-stack-conversation-cache-pg.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/lightspeed-stack-conversation-cache-sqlite.yaml b/examples/lightspeed-stack-conversation-cache-sqlite.yaml index 20f16c89a..1e766febd 100644 --- a/examples/lightspeed-stack-conversation-cache-sqlite.yaml +++ b/examples/lightspeed-stack-conversation-cache-sqlite.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/lightspeed-stack-lls-external.yaml b/examples/lightspeed-stack-lls-external.yaml index e38f2dd62..67306669b 100644 --- a/examples/lightspeed-stack-lls-external.yaml +++ b/examples/lightspeed-stack-lls-external.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/examples/lightspeed-stack-lls-library.yaml b/examples/lightspeed-stack-lls-library.yaml index 331d23183..89dab69fc 100644 --- a/examples/lightspeed-stack-lls-library.yaml +++ b/examples/lightspeed-stack-lls-library.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: the run.yaml next to this file is consumed as the # synthesis profile (legacy library_client_config_path is deprecated, diff --git a/examples/lightspeed-stack-mcp-servers.yaml b/examples/lightspeed-stack-mcp-servers.yaml index 34c39c777..c1ad21321 100644 --- a/examples/lightspeed-stack-mcp-servers.yaml +++ b/examples/lightspeed-stack-mcp-servers.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/examples/lightspeed-stack-quota-limiter-pg.yaml b/examples/lightspeed-stack-quota-limiter-pg.yaml index 889f1ce44..437641d4a 100644 --- a/examples/lightspeed-stack-quota-limiter-pg.yaml +++ b/examples/lightspeed-stack-quota-limiter-pg.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/examples/lightspeed-stack-quota-limiter-sqlite.yaml b/examples/lightspeed-stack-quota-limiter-sqlite.yaml index f222ab43f..c06a27620 100644 --- a/examples/lightspeed-stack-quota-limiter-sqlite.yaml +++ b/examples/lightspeed-stack-quota-limiter-sqlite.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/examples/lightspeed-stack-rh-identity.yaml b/examples/lightspeed-stack-rh-identity.yaml index 5d1fecb90..15b5cd809 100644 --- a/examples/lightspeed-stack-rh-identity.yaml +++ b/examples/lightspeed-stack-rh-identity.yaml @@ -22,7 +22,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 authentication: diff --git a/examples/lightspeed-stack-rlsapi-cla.yaml b/examples/lightspeed-stack-rlsapi-cla.yaml index 0a62ae35d..5a969df5e 100644 --- a/examples/lightspeed-stack-rlsapi-cla.yaml +++ b/examples/lightspeed-stack-rlsapi-cla.yaml @@ -11,7 +11,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 inference: diff --git a/examples/lightspeed-stack-shields.yaml b/examples/lightspeed-stack-shields.yaml index fd671fc55..f626d7709 100644 --- a/examples/lightspeed-stack-shields.yaml +++ b/examples/lightspeed-stack-shields.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/lightspeed-stack-skills.yaml b/examples/lightspeed-stack-skills.yaml index 3f33488b2..f40fd1b2f 100644 --- a/examples/lightspeed-stack-skills.yaml +++ b/examples/lightspeed-stack-skills.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true library_client_config_path: run.yaml user_data_collection: diff --git a/examples/quota-limiter-configuration-pg.yaml b/examples/quota-limiter-configuration-pg.yaml index 147728aad..dfe7e8502 100644 --- a/examples/quota-limiter-configuration-pg.yaml +++ b/examples/quota-limiter-configuration-pg.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/examples/quota-limiter-configuration-sqlite.yaml b/examples/quota-limiter-configuration-sqlite.yaml index a30f07978..757182436 100644 --- a/examples/quota-limiter-configuration-sqlite.yaml +++ b/examples/quota-limiter-configuration-sqlite.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/lightspeed-stack.yaml b/lightspeed-stack.yaml index 834ec8b31..62af987bb 100644 --- a/lightspeed-stack.yaml +++ b/lightspeed-stack.yaml @@ -12,7 +12,7 @@ service: # This llama_stack section controls where lightspeed-core connects to OGX. # To use a different port: override with 'make run LLAMA_STACK_PORT=' and update the url below, # or run ogx manually and don't use 'make run'. -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 # api_key: custom-key # Uncomment if your OGX requires authentication diff --git a/scripts/generate_openapi_schema.py b/scripts/generate_openapi_schema.py index 9af01289c..c518ee5c3 100644 --- a/scripts/generate_openapi_schema.py +++ b/scripts/generate_openapi_schema.py @@ -18,7 +18,7 @@ # OGX client needs to be loaded before REST API is fully initialized import asyncio # noqa: E402 pylint: disable=C0411,C0413 -asyncio.run(AsyncOgxClientHolder().load(configuration.configuration.llama_stack)) +asyncio.run(AsyncOgxClientHolder().load(configuration.configuration.ogx)) from app.main import app # noqa: E402 pylint: disable=C0413 diff --git a/src/app/main.py b/src/app/main.py index ee58a6ea9..ef0d05f69 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -83,7 +83,7 @@ async def lifespan(_app: FastAPI) -> AsyncIterator[None]: initialize_sentry() - ogx_config = configuration.configuration.llama_stack + ogx_config = configuration.configuration.ogx await AsyncOgxClientHolder().load(ogx_config) client: AsyncOgxClient = AsyncOgxClientHolder().get_client() logger.debug("OGX client initialized, trying to connect to OGX") @@ -105,7 +105,7 @@ async def lifespan(_app: FastAPI) -> AsyncIterator[None]: ogx_url = ogx_config.url logger.error( "Failed to connect to OGX at '%s'. " - "Please verify that the 'llama_stack.url' configuration is correct " + "Please verify that the 'ogx.url' configuration is correct " "and that the OGX service is running and accessible. " "Original error: %s", ogx_url, diff --git a/src/configuration.py b/src/configuration.py index ce55fc1b2..23498e7cb 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -51,7 +51,7 @@ def replace_env_vars_preserving_native_override( LCORE resolves environment-variable references throughout lightspeed-stack.yaml so typed fields receive concrete values. But - ``llama_stack.config.native_override`` is raw OGX schema that OGX + ``ogx.config.native_override`` is raw OGX schema that OGX resolves itself, in memory, at its own startup. Resolving it eagerly here would (a) defeat the ${env.*} pattern LCORE recommends for secrets and (b) pull resolved secrets into the loaded Configuration model, which is @@ -70,8 +70,10 @@ def replace_env_vars_preserving_native_override( if not isinstance(config_dict, dict): return replace_env_vars(config_dict) - llama_stack = config_dict.get("llama_stack") - ls_config = llama_stack.get("config") if isinstance(llama_stack, dict) else None + ogx_section = config_dict.get("ogx") + if ogx_section is None: + ogx_section = config_dict.get("llama_stack") + ls_config = ogx_section.get("config") if isinstance(ogx_section, dict) else None if not (isinstance(ls_config, dict) and "native_override" in ls_config): return replace_env_vars(config_dict) @@ -79,9 +81,11 @@ def replace_env_vars_preserving_native_override( ls_config["native_override"] = {} # keep secrets out of env resolution resolved = replace_env_vars(config_dict) ls_config["native_override"] = raw_override # restore source dict if reused - resolved_ls = (resolved.get("llama_stack") or {}).get("config") - if isinstance(resolved_ls, dict): - resolved_ls["native_override"] = raw_override + resolved_ogx = (resolved.get("ogx") or resolved.get("llama_stack") or {}).get( + "config" + ) + if isinstance(resolved_ogx, dict): + resolved_ogx["native_override"] = raw_override return resolved @@ -184,7 +188,7 @@ def ogx_configuration(self) -> OgxConfiguration: """ if self._configuration is None: raise LogicError("logic error: configuration is not loaded") - return self._configuration.llama_stack + return self._configuration.ogx @property def user_data_collection_configuration(self) -> UserDataCollection: diff --git a/src/lightspeed_stack.py b/src/lightspeed_stack.py index aefe6defa..937369c58 100644 --- a/src/lightspeed_stack.py +++ b/src/lightspeed_stack.py @@ -110,7 +110,7 @@ def create_argument_parser() -> ArgumentParser: dest="migrate_config", help="migrate a legacy two-file config to a unified single file and " "exit. Lifts the run.yaml given by --run-yaml into the " - "llama_stack.config.native_override of the -c lightspeed-stack.yaml " + "ogx.config.native_override of the -c lightspeed-stack.yaml " "and writes the result to --migrate-output. Replace literal secrets " "with ${env.VAR} references before or after migrating.", action="store_true", @@ -193,7 +193,7 @@ def main() -> None: if configuration.ogx_configuration.library_client_config_path is not None: logger.warning( "DEPRECATED: the two-file configuration " - "(llama_stack.library_client_config_path + external run.yaml) is " + "(ogx.library_client_config_path + external run.yaml) is " "deprecated and will be removed in release 0.8. Migrate to the " "unified lightspeed-stack.yaml: https://lightspeed-core.github.io" "/lightspeed-stack/design/llama-stack-config-merge" diff --git a/src/llama_stack_configuration.py b/src/llama_stack_configuration.py index df62ae97d..c4b7f882c 100644 --- a/src/llama_stack_configuration.py +++ b/src/llama_stack_configuration.py @@ -34,6 +34,27 @@ logger = get_logger(__name__) + +def ogx_config_section(lcs_config: dict[str, Any]) -> dict[str, Any]: + """Return the OGX section from a raw lightspeed-stack.yaml dict. + + Accepts the canonical ``ogx`` key and the deprecated ``llama_stack`` alias. + + Parameters: + lcs_config: Parsed lightspeed-stack.yaml contents. + + Returns: + The OGX configuration mapping, or an empty dict when absent. + """ + ogx = lcs_config.get("ogx") + if isinstance(ogx, dict): + return ogx + llama_stack = lcs_config.get("llama_stack") + if isinstance(llama_stack, dict): + return llama_stack + return {} + + # Maps a UnifiedInferenceProvider.type (canonical, backend-agnostic vocabulary) # to the OGX provider_type emitted by apply_high_level_inference. The # completeness of this map against UnifiedInferenceProvider.type is asserted by @@ -1226,7 +1247,7 @@ def synthesize_configuration( # pylint: disable=too-many-locals Returns: dict[str, Any]: The synthesized OGX configuration. """ - unified = (lcs_config.get("llama_stack") or {}).get("config") + unified = ogx_config_section(lcs_config).get("config") # 1-2. Select the baseline. baseline_was_empty = False @@ -1264,7 +1285,7 @@ def synthesize_configuration( # pylint: disable=too-many-locals else: logger.warning( "DEPRECATED: the built-in OpenAI inference provider in " - "llama_stack.config.baseline 'default' is deprecated and will " + "ogx.config.baseline 'default' is deprecated and will " "be removed in release 0.8. Set baseline to 'byo-llm' and " "declare your LLM providers under inference.providers: " "https://lightspeed-core.github.io/lightspeed-stack/design" @@ -1362,7 +1383,7 @@ def migrate_config_dumb( """Migrate a legacy two-file config to a unified single file (dumb mode). "Dumb" lift-and-shift: the operator's ``lightspeed-stack.yaml`` is kept - verbatim except for its ``llama_stack`` section, where + verbatim except for its ``ogx`` section, where ``library_client_config_path`` is dropped and replaced by a unified ``config`` block that lifts the *entire* legacy ``run.yaml`` body into ``native_override`` with ``baseline: empty``. Synthesizing the result then @@ -1404,15 +1425,15 @@ def migrate_config_dumb( if not isinstance(run_yaml, dict): raise ValueError(f"{run_yaml_path} did not parse to a mapping; cannot migrate.") - # Preserve the whole lightspeed-stack.yaml; only rewrite the llama_stack - # section: drop the legacy path, add the unified config block. - llama_stack = dict(lcs_config.get("llama_stack") or {}) - llama_stack.pop("library_client_config_path", None) - llama_stack["config"] = { + # Preserve the whole lightspeed-stack.yaml; only rewrite the ogx section. + ogx_section = dict(ogx_config_section(lcs_config)) + ogx_section.pop("library_client_config_path", None) + ogx_section["config"] = { "baseline": "empty", "native_override": run_yaml, } - lcs_config["llama_stack"] = llama_stack + lcs_config.pop("llama_stack", None) + lcs_config["ogx"] = ogx_section logger.info( "Migrating legacy config (%s + %s) to unified %s", @@ -1489,7 +1510,7 @@ def has_synthesis_input(lcs_config: dict[str, Any]) -> bool: Mirrors the unified-vs-legacy detection of the root ``Configuration`` model (``check_unified_vs_legacy``) for callers that work with the raw YAML dict, such as the CLI: a non-empty top-level ``inference.providers``, - a non-empty ``vector_store.providers``, or a ``llama_stack.config`` block + a non-empty ``vector_store.providers``, or an ``ogx.config`` block signal unified mode (R11). Parameters: @@ -1500,11 +1521,11 @@ def has_synthesis_input(lcs_config: dict[str, Any]) -> bool: """ inference = lcs_config.get("inference") or {} vector_store = lcs_config.get("vector_store") or {} - llama_stack = lcs_config.get("llama_stack") or {} + ogx_section = ogx_config_section(lcs_config) return ( bool(inference.get("providers")) or bool(vector_store.get("providers")) - or llama_stack.get("config") is not None + or ogx_section.get("config") is not None ) diff --git a/src/models/api/responses/successful/configuration.py b/src/models/api/responses/successful/configuration.py index d33d1a4bc..c97374a6b 100644 --- a/src/models/api/responses/successful/configuration.py +++ b/src/models/api/responses/successful/configuration.py @@ -40,7 +40,7 @@ class ConfigurationResponse(AbstractSuccessfulResponse): "allow_headers": ["*"], }, }, - "llama_stack": { + "ogx": { "url": "http://localhost:8321", "api_key": "*****", "use_as_library_client": False, diff --git a/src/models/config.py b/src/models/config.py index 0dda225eb..86c272c87 100644 --- a/src/models/config.py +++ b/src/models/config.py @@ -3123,6 +3123,33 @@ class RedactionShieldConfiguration(ConfigurationBase): class Configuration(ConfigurationBase): """Global service configuration.""" + @model_validator(mode="before") + @classmethod + def accept_llama_stack_section_alias(cls, data: Any) -> Any: + """Map deprecated ``llama_stack`` YAML key to ``ogx``. + + Parameters: + data: Raw configuration mapping from YAML/JSON. + + Returns: + Normalized mapping with the OGX section under ``ogx``. + """ + if not isinstance(data, dict): + return data + if data.get("ogx") is not None: + return data + llama_stack = data.get("llama_stack") + if llama_stack is None: + return data + logger.warning( + "The 'llama_stack' configuration key is deprecated and will be " + "removed in a future release; use 'ogx' instead." + ) + data = dict(data) + data["ogx"] = llama_stack + data.pop("llama_stack") + return data + name: str = Field( ..., title="Service name", @@ -3136,7 +3163,7 @@ class Configuration(ConfigurationBase): "When set, it must agree with the shape detected from the " "configuration body: 'unified' requires a synthesis input (a " "non-empty inference.providers, a non-empty vector_store.providers, " - "or a llama_stack.config block), 'legacy' requires no synthesis " + "or an ogx.config block), 'legacy' requires no synthesis " "input. Reserved as the lever for a future breaking change of the " "unified schema (R11).", ) @@ -3147,7 +3174,7 @@ class Configuration(ConfigurationBase): description="This section contains Lightspeed Core Stack service configuration.", ) - llama_stack: OgxConfiguration = Field( + ogx: OgxConfiguration = Field( ..., title="OGX configuration", description="This section contains OGX configuration. Lightspeed Core Stack service can " @@ -3455,8 +3482,8 @@ def check_unified_vs_legacy(self) -> Self: Unified-mode *synthesis inputs* span the configuration root: a non-empty top-level ``inference.providers`` (Decision S5), a non-empty - ``vector_store.providers``, and/or a ``llama_stack.config`` block. The - legacy path is ``llama_stack.library_client_config_path`` pointing at an + ``vector_store.providers``, and/or an ``ogx.config`` block. The + legacy path is ``ogx.library_client_config_path`` pointing at an external run.yaml. Both checks live here on the root model rather than on ``OgxConfiguration`` (which cannot see root-level provider lists): @@ -3465,7 +3492,7 @@ def check_unified_vs_legacy(self) -> Self: single file must pick one shape. - Library mode needs *some* run source — a synthesis input or the legacy path. ``inference.providers`` or ``vector_store.providers`` - alone is sufficient; no ``llama_stack.config`` block is required. + alone is sufficient; no ``ogx.config`` block is required. - An explicit ``config_format_version``, when set, must agree with the detected shape (R11): ``unified`` requires a synthesis input, ``legacy`` requires its absence (remote-only configs count as @@ -3484,28 +3511,24 @@ def check_unified_vs_legacy(self) -> Self: synthesis_input = ( bool(self.inference.providers) or bool(self.vector_store.providers) - or self.llama_stack.config is not None + or self.ogx.config is not None ) - legacy_input = self.llama_stack.library_client_config_path is not None + legacy_input = self.ogx.library_client_config_path is not None if synthesis_input and legacy_input: raise ValueError( "OGX configuration is ambiguous: unified synthesis " "inputs (a non-empty inference.providers, a non-empty " - "vector_store.providers, or a llama_stack.config block) are " + "vector_store.providers, or an ogx.config block) are " "mutually exclusive with the legacy " - "llama_stack.library_client_config_path. Use one or the other. " + "ogx.library_client_config_path. Use one or the other. " "To convert a legacy two-file setup to unified mode, run " "`lightspeed-stack --migrate-config`." ) - if ( - self.llama_stack.use_as_library_client - and not synthesis_input - and not legacy_input - ): + if self.ogx.use_as_library_client and not synthesis_input and not legacy_input: raise ValueError( "OGX library mode requires a run-configuration source: " "set a non-empty inference.providers, a non-empty " - "vector_store.providers, a llama_stack.config block, or " + "vector_store.providers, an ogx.config block, or " "library_client_config_path." ) if self.config_format_version is not None: @@ -3516,7 +3539,7 @@ def check_unified_vs_legacy(self) -> Self: f"but the configuration body is {detected}-shaped: a " "unified configuration carries a synthesis input (a " "non-empty inference.providers, a non-empty " - "vector_store.providers, or a llama_stack.config block), " + "vector_store.providers, or an ogx.config block), " "a legacy one does not. Fix config_format_version or the " "configuration body." ) diff --git a/src/telemetry/configuration_snapshot.py b/src/telemetry/configuration_snapshot.py index 537edb9bd..fe647e984 100644 --- a/src/telemetry/configuration_snapshot.py +++ b/src/telemetry/configuration_snapshot.py @@ -100,17 +100,17 @@ class ListFieldSpec: FieldSpec("service.cors.allow_methods", MaskingType.PASSTHROUGH), FieldSpec("service.cors.allow_headers", MaskingType.PASSTHROUGH), # LLM Integration Architecture - FieldSpec("llama_stack.use_as_library_client", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.url", MaskingType.SENSITIVE), - FieldSpec("llama_stack.api_key", MaskingType.SENSITIVE), - FieldSpec("llama_stack.library_client_config_path", MaskingType.SENSITIVE), - FieldSpec("llama_stack.timeout", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.max_retries", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.retry_delay", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.allow_degraded_mode", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.config.baseline", MaskingType.PASSTHROUGH), - FieldSpec("llama_stack.config.profile", MaskingType.SENSITIVE), - FieldSpec("llama_stack.config.native_override", MaskingType.SENSITIVE), + FieldSpec("ogx.use_as_library_client", MaskingType.PASSTHROUGH), + FieldSpec("ogx.url", MaskingType.SENSITIVE), + FieldSpec("ogx.api_key", MaskingType.SENSITIVE), + FieldSpec("ogx.library_client_config_path", MaskingType.SENSITIVE), + FieldSpec("ogx.timeout", MaskingType.PASSTHROUGH), + FieldSpec("ogx.max_retries", MaskingType.PASSTHROUGH), + FieldSpec("ogx.retry_delay", MaskingType.PASSTHROUGH), + FieldSpec("ogx.allow_degraded_mode", MaskingType.PASSTHROUGH), + FieldSpec("ogx.config.baseline", MaskingType.PASSTHROUGH), + FieldSpec("ogx.config.profile", MaskingType.SENSITIVE), + FieldSpec("ogx.config.native_override", MaskingType.SENSITIVE), FieldSpec("inference.default_model", MaskingType.PASSTHROUGH), FieldSpec("inference.default_provider", MaskingType.PASSTHROUGH), FieldSpec("inference.context_windows", MaskingType.PASSTHROUGH), @@ -781,10 +781,10 @@ async def build_configuration_snapshot( Returns: ------- - A dict with 'lightspeed_stack' and 'llama_stack' keys containing + A dict with 'lightspeed_stack' and 'ogx' keys containing the respective masked snapshots, ready for JSON serialization. """ return { "lightspeed_stack": build_lightspeed_stack_snapshot(config), - "llama_stack": await build_llama_stack_snapshot(llama_stack_config_path), + "ogx": await build_llama_stack_snapshot(llama_stack_config_path), } diff --git a/tests/configuration/benchmarks-postgres.yaml b/tests/configuration/benchmarks-postgres.yaml index c50956ac3..ab94a7d59 100644 --- a/tests/configuration/benchmarks-postgres.yaml +++ b/tests/configuration/benchmarks-postgres.yaml @@ -7,7 +7,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/configuration/benchmarks-sqlite.yaml b/tests/configuration/benchmarks-sqlite.yaml index de5c648b8..63ea9d925 100644 --- a/tests/configuration/benchmarks-sqlite.yaml +++ b/tests/configuration/benchmarks-sqlite.yaml @@ -7,7 +7,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/configuration/lightspeed-stack-proper-name.yaml b/tests/configuration/lightspeed-stack-proper-name.yaml index ec5c642ae..60add8957 100644 --- a/tests/configuration/lightspeed-stack-proper-name.yaml +++ b/tests/configuration/lightspeed-stack-proper-name.yaml @@ -20,7 +20,7 @@ service: - foo_header - bar_header - baz_header -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/configuration/lightspeed-stack.yaml b/tests/configuration/lightspeed-stack.yaml index 6653fd514..b548c96fe 100644 --- a/tests/configuration/lightspeed-stack.yaml +++ b/tests/configuration/lightspeed-stack.yaml @@ -20,7 +20,7 @@ service: - foo_header - bar_header - baz_header -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/configuration/rh-identity-config.yaml b/tests/configuration/rh-identity-config.yaml index 368b69f90..d28ea3034 100644 --- a/tests/configuration/rh-identity-config.yaml +++ b/tests/configuration/rh-identity-config.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 user_data_collection: diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml index eff7078a6..8702c2b5b 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml @@ -14,7 +14,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml index 6f7eee72a..2ee300367 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml @@ -9,7 +9,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml index e04b72c87..778c04d94 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml @@ -11,7 +11,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-api-auth.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-api-auth.yaml index 149d3ed37..83b0a2097 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-api-auth.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-api-auth.yaml @@ -10,7 +10,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml index 70e8f2e45..c366d41cd 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml index eb01ca8ba..f0af0e665 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-invalid.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-invalid.yaml index ac0b3df25..4a23e546e 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-invalid.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-invalid.yaml @@ -9,7 +9,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml index 429ac3301..e849cbeb6 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml index e440e20e8..9bbf19f55 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml index e2c22aef8..d814048de 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml @@ -12,7 +12,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-negative.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-negative.yaml index c8fb98607..ce88d0eb2 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-negative.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-negative.yaml @@ -11,7 +11,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml index 0352e842d..ba03b7329 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml @@ -9,7 +9,7 @@ service: color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-rh-identity.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-rh-identity.yaml index ba4ebd482..ddfa68794 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-rh-identity.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-rh-identity.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) # is consumed as the synthesis profile instead of the legacy two-file path. diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml index 06aad9fcc..e7cd3668e 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml index 0c8c53fd3..cf6dd64b0 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml @@ -9,7 +9,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/library-mode/lightspeed-stack.yaml b/tests/e2e/configuration/library-mode/lightspeed-stack.yaml index 12c2ca2f3..a6e135306 100644 --- a/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +++ b/tests/e2e/configuration/library-mode/lightspeed-stack.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Library mode - embeds OGX as library use_as_library_client: true # Unified mode: run.yaml (materialized per provider by CI/the harness) diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml index 91f192988..b39110c29 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml @@ -10,7 +10,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml index 2bef27d11..12ff8fcca 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml @@ -11,7 +11,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 api_key: xyzzy diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml index 291055df1..11d276e5d 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-api-auth.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-api-auth.yaml index f9842f40c..373717732 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-api-auth.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-api-auth.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml index 2ac49bb46..25cbdf836 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml index d37ef83b2..ca60006c9 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-invalid.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-invalid.yaml index f0888db59..976a51853 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-invalid.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-invalid.yaml @@ -9,7 +9,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml index 3a4ff7b32..39b61ef3a 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml index b544b840b..9237b6019 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml index c79d8861d..837d44aab 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml @@ -12,7 +12,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-negative.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-negative.yaml index f83778144..d7a22b5ee 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-negative.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-negative.yaml @@ -11,7 +11,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Uses a remote OGX service # The instance would have already been started with a llama-stack-run.yaml file use_as_library_client: false diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml index 8cfae52ee..7135cd05f 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml @@ -9,7 +9,7 @@ service: color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 api_key: xyzzy diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-rh-identity.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-rh-identity.yaml index 0853969fe..f6959cd97 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-rh-identity.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-rh-identity.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 api_key: xyzzy diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-rhelai.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-rhelai.yaml index ba69f6049..c1294a5b0 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-rhelai.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-rhelai.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-rhoai.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-rhoai.yaml index ba69f6049..c1294a5b0 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-rhoai.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-rhoai.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml index ac805e937..02da39f40 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml @@ -7,7 +7,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml index 0a8cae923..93f100ebe 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml @@ -7,7 +7,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml index a1e73fe77..24a0817b8 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml @@ -8,7 +8,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 api_key: xyzzy diff --git a/tests/e2e/configuration/server-mode/lightspeed-stack.yaml b/tests/e2e/configuration/server-mode/lightspeed-stack.yaml index be687c613..680552574 100644 --- a/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +++ b/tests/e2e/configuration/server-mode/lightspeed-stack.yaml @@ -6,7 +6,7 @@ service: workers: 1 color_log: true access_log: true -llama_stack: +ogx: # Server mode - connects to separate OGX service use_as_library_client: false url: http://${env.E2E_LLAMA_HOSTNAME}:8321 diff --git a/tests/e2e/features/environment.py b/tests/e2e/features/environment.py index 273d80ec9..79f820731 100644 --- a/tests/e2e/features/environment.py +++ b/tests/e2e/features/environment.py @@ -508,7 +508,7 @@ def after_feature(context: Context, feature: Feature) -> None: """ # Restore OGX FIRST (before any lightspeed-stack restart). # Read from module-level state — Behave clears custom context attributes - # between scenarios, so context.llama_stack_was_running is unreliable here. + # between scenarios, so context.ogx_was_running is unreliable here. if get_llama_stack_was_running(): _restore_llama_stack() reset_llama_stack_was_running() diff --git a/tests/e2e/features/steps/health.py b/tests/e2e/features/steps/health.py index 76413182b..2930e1d7a 100644 --- a/tests/e2e/features/steps/health.py +++ b/tests/e2e/features/steps/health.py @@ -57,7 +57,7 @@ def llama_stack_connection_broken(context: Context) -> None: Checks whether the Docker container named "llama-stack" is running; if it is, stops the container, waits briefly for the disruption to take effect, - and sets `context.llama_stack_was_running` to True so callers can restore + and sets `context.ogx_was_running` to True so callers can restore state later. If the container is not running, the flag remains False. On failure to run Docker commands, prints a warning message describing the error. @@ -75,14 +75,14 @@ def llama_stack_connection_broken(context: Context) -> None: # Store original state for restoration (only on the real disruption path). # Write to both context (backward compat) and module-level dict (survives # Behave's per-scenario context clearing). - context.llama_stack_was_running = False + context.ogx_was_running = False _llama_stack_was_running["value"] = False if is_prow_environment(): from tests.e2e.utils.prow_utils import disrupt_llama_stack_pod was_running = disrupt_llama_stack_pod() - context.llama_stack_was_running = was_running + context.ogx_was_running = was_running _llama_stack_was_running["value"] = was_running _llama_stack_disrupt_once["applied"] = True _force_lightspeed_restart_after_llama_disrupt(context) @@ -98,7 +98,7 @@ def llama_stack_connection_broken(context: Context) -> None: ) if result.stdout.strip(): - context.llama_stack_was_running = True + context.ogx_was_running = True _llama_stack_was_running["value"] = True subprocess.run( ["docker", "stop", "llama-stack"], check=True, capture_output=True diff --git a/tests/integration/test_configuration.py b/tests/integration/test_configuration.py index 46e8ab38b..0dc5a6365 100644 --- a/tests/integration/test_configuration.py +++ b/tests/integration/test_configuration.py @@ -26,7 +26,7 @@ def test_loading_proper_configuration(configuration_filename: str) -> None: Validate that loading the given configuration YAML populates all expected sections and values. Loads configuration from the provided file and asserts presence and - correctness of top-level sections (configuration, service, llama_stack, + correctness of top-level sections (configuration, service, ogx, user_data_collection, mcp_servers) and selected field values including service host and flags, CORS settings, OGX URL and API key secret, user data collection settings, and three MCP server entries. @@ -67,7 +67,7 @@ def test_loading_proper_configuration(configuration_filename: str) -> None: assert cors_config.allow_methods == ["foo_method", "bar_method", "baz_method"] assert cors_config.allow_headers == ["foo_header", "bar_header", "baz_header"] - # check 'llama_stack' section + # check 'ogx' section ls_config = cfg.ogx_configuration assert ls_config.use_as_library_client is False assert str(ls_config.url) == "http://localhost:8321/" diff --git a/tests/integration/test_unified_synthesis.py b/tests/integration/test_unified_synthesis.py index 277d97fba..f8e0d685e 100644 --- a/tests/integration/test_unified_synthesis.py +++ b/tests/integration/test_unified_synthesis.py @@ -219,7 +219,7 @@ def test_synthesis_parity_with_legacy_enrichment( run_path = tmp_path / "run.yaml" # written by _legacy_enriched unified_cfg: dict[str, Any] = { - "llama_stack": { + "ogx": { "use_as_library_client": True, "config": {"profile": str(run_path)}, }, @@ -240,7 +240,7 @@ def test_synthesis_parity_holds_through_real_config_load(tmp_path: Path) -> None legacy = _legacy_enriched(tmp_path, _BYOK_INPUTS) lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": {"profile": "run.yaml"}, # relative to the config file dir } @@ -258,7 +258,7 @@ def test_synthesis_parity_holds_through_real_config_load(tmp_path: Path) -> None def test_default_baseline_through_real_load(tmp_path: Path) -> None: """baseline: default synthesizes from the shipped src/data/default_run.yaml.""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": {"baseline": "default"}, } @@ -274,7 +274,7 @@ def test_default_baseline_through_real_load(tmp_path: Path) -> None: def test_byo_llm_baseline_through_real_load(tmp_path: Path) -> None: """baseline: byo-llm synthesizes from default_run.yaml without the OpenAI row.""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": {"baseline": "byo-llm"}, } @@ -305,7 +305,7 @@ def test_empty_baseline_with_native_override_through_real_load( ) -> None: """baseline: empty + native_override reproduces the override exactly (T7).""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": { "baseline": "empty", @@ -329,7 +329,7 @@ def test_profile_baseline_through_real_load_gets_mcp_ensured( _write_yaml(tmp_path / "my-profile.yaml", profile) lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": {"profile": "my-profile.yaml"}, } @@ -362,7 +362,7 @@ def test_native_override_deep_merge_through_real_load(tmp_path: Path) -> None: _write_yaml(tmp_path / "my-profile.yaml", profile) lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": { "profile": "my-profile.yaml", @@ -395,7 +395,7 @@ def test_native_override_deep_merge_through_real_load(tmp_path: Path) -> None: def test_synthesized_file_written_owner_only(tmp_path: Path) -> None: """The synthesized run.yaml lands on disk with mode 0600 (R10).""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "config": {"baseline": "empty", "native_override": {"version": 2}}, } @@ -418,7 +418,7 @@ def _migrate_then_synthesize( """ run_path = _write_yaml(tmp_path / "run.yaml", run_yaml) lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": str(run_path), } @@ -482,7 +482,7 @@ def test_load_rejects_config_block_and_legacy_path_together( ) -> None: """A llama_stack.config block plus a legacy path fails the real load (R3).""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", "config": {"baseline": "default"}, @@ -497,7 +497,7 @@ def test_load_rejects_inference_providers_and_legacy_path_together( ) -> None: """Top-level inference.providers plus a legacy path fails the real load.""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = { + lcs_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", } @@ -512,7 +512,7 @@ def test_load_rejects_inference_providers_and_legacy_path_together( def test_load_rejects_library_mode_without_run_source(tmp_path: Path) -> None: """Library mode with neither synthesis input nor legacy path fails.""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = {"use_as_library_client": True} + lcs_dict["ogx"] = {"use_as_library_client": True} cfg_path = _write_yaml(tmp_path / "lightspeed-stack.yaml", lcs_dict) with pytest.raises(ValidationError, match="requires a run-configuration source"): configuration.load_configuration(str(cfg_path)) @@ -521,7 +521,7 @@ def test_load_rejects_library_mode_without_run_source(tmp_path: Path) -> None: def test_load_accepts_minimal_unified_config(tmp_path: Path) -> None: """A minimal unified config (inference.providers only) loads cleanly.""" lcs_dict = _base_config_dict() - lcs_dict["llama_stack"] = {"use_as_library_client": True} + lcs_dict["ogx"] = {"use_as_library_client": True} lcs_dict["inference"] = { "providers": [{"type": "openai", "api_key_env": "OPENAI_API_KEY"}] } @@ -529,5 +529,5 @@ def test_load_accepts_minimal_unified_config(tmp_path: Path) -> None: configuration.load_configuration(str(cfg_path)) loaded = configuration.configuration - assert loaded.llama_stack.config is None + assert loaded.ogx.config is None assert loaded.inference.providers[0].type == "openai" diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py index 0801a7c25..835b0cd3b 100644 --- a/tests/unit/__init__.py +++ b/tests/unit/__init__.py @@ -14,7 +14,7 @@ "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_a2a.py b/tests/unit/app/endpoints/test_a2a.py index ce3bd4ab7..b6c919ee2 100644 --- a/tests/unit/app/endpoints/test_a2a.py +++ b/tests/unit/app/endpoints/test_a2a.py @@ -87,7 +87,7 @@ def setup_configuration_fixture(mocker: MockerFixture) -> AppConfig: "auth_enabled": False, "base_url": "http://localhost:8080", }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -138,7 +138,7 @@ def setup_minimal_configuration_fixture(mocker: MockerFixture) -> AppConfig: "host": "localhost", "port": 8080, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -407,7 +407,7 @@ def test_get_agent_card_with_custom_protocol_version( "auth_enabled": False, "base_url": "http://localhost:8080", }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_conversations.py b/tests/unit/app/endpoints/test_conversations.py index b3639d1d4..877070905 100644 --- a/tests/unit/app/endpoints/test_conversations.py +++ b/tests/unit/app/endpoints/test_conversations.py @@ -269,7 +269,7 @@ def setup_configuration_fixture() -> AppConfig: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_info.py b/tests/unit/app/endpoints/test_info.py index b501c2bc9..25adfa3bc 100644 --- a/tests/unit/app/endpoints/test_info.py +++ b/tests/unit/app/endpoints/test_info.py @@ -34,7 +34,7 @@ async def test_info_endpoint(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -106,7 +106,7 @@ async def test_info_endpoint_connection_error(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -170,7 +170,7 @@ async def test_emits_span_on_success( { "name": "test-service", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://x:1234", "use_as_library_client": False, @@ -215,7 +215,7 @@ async def test_span_records_error_on_connection_failure( { "name": "test-service", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://x:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_mcp_auth.py b/tests/unit/app/endpoints/test_mcp_auth.py index 41132a415..5cc34f451 100644 --- a/tests/unit/app/endpoints/test_mcp_auth.py +++ b/tests/unit/app/endpoints/test_mcp_auth.py @@ -29,7 +29,7 @@ def mock_configuration_with_client_auth() -> Configuration: return Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[ ModelContextProtocolServer( @@ -57,7 +57,7 @@ def mock_configuration_mixed_auth() -> Configuration: return Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[ ModelContextProtocolServer( @@ -88,7 +88,7 @@ def mock_configuration_no_client_auth() -> Configuration: return Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[ ModelContextProtocolServer( @@ -215,7 +215,7 @@ async def test_get_mcp_client_auth_options_empty_config( mock_config = Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[], ) # type: ignore[call-arg] @@ -249,7 +249,7 @@ async def test_get_mcp_client_auth_options_whitespace_handling( mock_config = Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[ ModelContextProtocolServer( @@ -297,7 +297,7 @@ async def test_get_mcp_client_auth_options_multiple_headers_single_server( mock_config = Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] + ogx=OgxConfiguration(url="http://localhost:8321"), # type: ignore[call-arg] user_data_collection=UserDataCollection(feedback_enabled=False), # type: ignore[call-arg] mcp_servers=[ ModelContextProtocolServer( diff --git a/tests/unit/app/endpoints/test_mcp_servers.py b/tests/unit/app/endpoints/test_mcp_servers.py index 3fd244530..937ba531e 100644 --- a/tests/unit/app/endpoints/test_mcp_servers.py +++ b/tests/unit/app/endpoints/test_mcp_servers.py @@ -58,7 +58,7 @@ def mock_configuration() -> Configuration: access_log=True, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( url=AnyHttpUrl("http://localhost:8321"), api_key=SecretStr("xyzzy"), use_as_library_client=False, diff --git a/tests/unit/app/endpoints/test_models.py b/tests/unit/app/endpoints/test_models.py index 4a0ad7903..3daab509c 100644 --- a/tests/unit/app/endpoints/test_models.py +++ b/tests/unit/app/endpoints/test_models.py @@ -92,7 +92,7 @@ async def test_models_endpoint_handler_configuration_loaded( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -149,7 +149,7 @@ async def test_models_endpoint_handler_unable_to_retrieve_models_list( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -206,7 +206,7 @@ async def test_models_endpoint_handler_model_type_query_parameter( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -262,7 +262,7 @@ async def test_models_endpoint_handler_model_list_retrieved( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -336,7 +336,7 @@ async def test_models_endpoint_handler_model_list_retrieved_with_query_parameter "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -431,7 +431,7 @@ async def test_models_endpoint_llama_stack_connection_error( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_query.py b/tests/unit/app/endpoints/test_query.py index 7af630713..6fbd731d0 100644 --- a/tests/unit/app/endpoints/test_query.py +++ b/tests/unit/app/endpoints/test_query.py @@ -72,7 +72,7 @@ def setup_configuration_fixture() -> AppConfig: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_rags.py b/tests/unit/app/endpoints/test_rags.py index d32243853..ed2b89119 100644 --- a/tests/unit/app/endpoints/test_rags.py +++ b/tests/unit/app/endpoints/test_rags.py @@ -265,7 +265,7 @@ def _make_byok_config(tmp_path: Any) -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_responses.py b/tests/unit/app/endpoints/test_responses.py index 9b1e60368..f1a0f04a3 100644 --- a/tests/unit/app/endpoints/test_responses.py +++ b/tests/unit/app/endpoints/test_responses.py @@ -273,7 +273,7 @@ def minimal_config_fixture() -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1754,7 +1754,7 @@ async def test_configured_system_prompt_used_when_no_client_instructions( { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1817,7 +1817,7 @@ async def test_client_instructions_rejected_when_disabled( { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_responses_otel.py b/tests/unit/app/endpoints/test_responses_otel.py index 256d68502..d0b816c6e 100644 --- a/tests/unit/app/endpoints/test_responses_otel.py +++ b/tests/unit/app/endpoints/test_responses_otel.py @@ -55,7 +55,7 @@ def minimal_config_fixture() -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_responses_splunk.py b/tests/unit/app/endpoints/test_responses_splunk.py index d89364b87..7ee15dcf2 100644 --- a/tests/unit/app/endpoints/test_responses_splunk.py +++ b/tests/unit/app/endpoints/test_responses_splunk.py @@ -81,7 +81,7 @@ def minimal_config_fixture() -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_saved_prompts.py b/tests/unit/app/endpoints/test_saved_prompts.py index b746d56a6..5f23f3ce4 100644 --- a/tests/unit/app/endpoints/test_saved_prompts.py +++ b/tests/unit/app/endpoints/test_saved_prompts.py @@ -59,7 +59,7 @@ def config_with_custom_saved_prompts_fixture() -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_shields.py b/tests/unit/app/endpoints/test_shields.py index da535725e..d3869d188 100644 --- a/tests/unit/app/endpoints/test_shields.py +++ b/tests/unit/app/endpoints/test_shields.py @@ -29,7 +29,7 @@ def _base_config_dict() -> dict[str, Any]: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_streaming_query.py b/tests/unit/app/endpoints/test_streaming_query.py index 990772194..4335edb60 100644 --- a/tests/unit/app/endpoints/test_streaming_query.py +++ b/tests/unit/app/endpoints/test_streaming_query.py @@ -57,7 +57,7 @@ def setup_configuration_fixture() -> AppConfig: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/app/endpoints/test_tools.py b/tests/unit/app/endpoints/test_tools.py index a9da0e598..1a0e9ff41 100644 --- a/tests/unit/app/endpoints/test_tools.py +++ b/tests/unit/app/endpoints/test_tools.py @@ -84,7 +84,7 @@ def mock_configuration() -> Configuration: access_log=True, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( url=AnyHttpUrl("http://localhost:8321"), api_key=SecretStr("xyzzy"), use_as_library_client=False, diff --git a/tests/unit/app/endpoints/test_vector_stores.py b/tests/unit/app/endpoints/test_vector_stores.py index ffd9e0e6a..de20e8901 100644 --- a/tests/unit/app/endpoints/test_vector_stores.py +++ b/tests/unit/app/endpoints/test_vector_stores.py @@ -119,7 +119,7 @@ def get_test_config() -> dict[str, Any]: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, diff --git a/tests/unit/authentication/test_k8s.py b/tests/unit/authentication/test_k8s.py index 94e0eb633..0f98488e7 100644 --- a/tests/unit/authentication/test_k8s.py +++ b/tests/unit/authentication/test_k8s.py @@ -260,7 +260,7 @@ async def test_auth_dependency_no_token_readiness_liveness_endpoints_1( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -335,7 +335,7 @@ async def test_auth_dependency_no_token_readiness_liveness_endpoints_2( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -421,7 +421,7 @@ async def test_auth_dependency_no_token_normal_endpoints( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -499,7 +499,7 @@ async def test_auth_dependency_no_token_metrics_endpoint_skip_enabled( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -567,7 +567,7 @@ async def test_auth_dependency_no_token_metrics_endpoint_skip_disabled( "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/authentication/test_trusted_proxy.py b/tests/unit/authentication/test_trusted_proxy.py index e3d374d2d..f4e1dff3a 100644 --- a/tests/unit/authentication/test_trusted_proxy.py +++ b/tests/unit/authentication/test_trusted_proxy.py @@ -329,7 +329,7 @@ async def test_health_probe_skip_enabled(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -385,7 +385,7 @@ async def test_health_probe_skip_disabled(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, @@ -438,7 +438,7 @@ async def test_metrics_skip_enabled(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index caee1967a..f0da40648 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -133,7 +133,7 @@ def minimal_config_fixture() -> AppConfig: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/models/config/test_approvals_configuration.py b/tests/unit/models/config/test_approvals_configuration.py index 94f753cc0..80a6e00d8 100644 --- a/tests/unit/models/config/test_approvals_configuration.py +++ b/tests/unit/models/config/test_approvals_configuration.py @@ -107,7 +107,7 @@ def test_root_configuration_default_includes_approvals() -> None: cfg = Configuration( name="test", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), diff --git a/tests/unit/models/config/test_authentication_configuration.py b/tests/unit/models/config/test_authentication_configuration.py index 0e8c80c99..b20c1028b 100644 --- a/tests/unit/models/config/test_authentication_configuration.py +++ b/tests/unit/models/config/test_authentication_configuration.py @@ -307,7 +307,7 @@ def test_authentication_configuration_in_config_noop() -> None: workers=1, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", url=AnyHttpUrl("http://localhost"), @@ -347,7 +347,7 @@ def test_authentication_configuration_skip_readiness_probe() -> None: workers=1, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", url=AnyHttpUrl("http://localhost"), @@ -403,7 +403,7 @@ def test_authentication_configuration_in_config_k8s() -> None: workers=1, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", url=AnyHttpUrl("http://localhost"), @@ -461,7 +461,7 @@ def test_authentication_configuration_in_config_rh_identity() -> None: workers=1, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", url=AnyHttpUrl("http://localhost"), @@ -509,7 +509,7 @@ def test_authentication_configuration_in_config_jwktoken() -> None: workers=1, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", url=AnyHttpUrl("http://localhost"), diff --git a/tests/unit/models/config/test_dump_configuration.py b/tests/unit/models/config/test_dump_configuration.py index ce5d6fe0f..2751378e5 100644 --- a/tests/unit/models/config/test_dump_configuration.py +++ b/tests/unit/models/config/test_dump_configuration.py @@ -97,7 +97,7 @@ def test_dump_configuration_minimal_cfg(tmp_path: Path) -> None: ), cors=CORSConfiguration(), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -118,7 +118,7 @@ def test_dump_configuration_minimal_cfg(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -162,7 +162,7 @@ def test_dump_configuration_minimal_cfg(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -302,7 +302,7 @@ def test_dump_configuration_valid_values(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -341,7 +341,7 @@ def test_dump_configuration_valid_values(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -391,7 +391,7 @@ def test_dump_configuration_valid_values(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -532,7 +532,7 @@ def test_dump_configuration_with_one_mcp_server(tmp_path: Path) -> None: cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), @@ -584,7 +584,7 @@ def test_dump_configuration_with_more_mcp_servers(tmp_path: Path) -> None: cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), @@ -658,7 +658,7 @@ def test_dump_configuration_with_quota_limiters(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -717,7 +717,7 @@ def test_dump_configuration_with_quota_limiters(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -767,7 +767,7 @@ def test_dump_configuration_with_quota_limiters(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -931,7 +931,7 @@ def test_dump_configuration_with_quota_limiters_different_values( allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -994,7 +994,7 @@ def test_dump_configuration_with_quota_limiters_different_values( # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -1042,7 +1042,7 @@ def test_dump_configuration_with_quota_limiters_different_values( ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -1194,7 +1194,7 @@ def test_dump_configuration_with_vector_store(tmp_path: Path) -> None: ), cors=CORSConfiguration(), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, config=UnifiedOgxConfig(baseline="default"), api_key=SecretStr("whatever"), @@ -1255,7 +1255,7 @@ def test_dump_configuration_byok(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -1306,7 +1306,7 @@ def test_dump_configuration_byok(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -1354,7 +1354,7 @@ def test_dump_configuration_byok(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -1519,7 +1519,7 @@ def test_dump_configuration_pg_namespace(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -1559,7 +1559,7 @@ def test_dump_configuration_pg_namespace(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -1607,7 +1607,7 @@ def test_dump_configuration_pg_namespace(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -1753,7 +1753,7 @@ def test_dump_configuration_with_one_skill(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -1828,7 +1828,7 @@ def test_dump_configuration_with_skills(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -1912,7 +1912,7 @@ def test_dump_configuration_allow_degraded_mode(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=False, url="http://localhost", api_key=SecretStr("whatever"), @@ -1952,7 +1952,7 @@ def test_dump_configuration_allow_degraded_mode(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -2002,7 +2002,7 @@ def test_dump_configuration_allow_degraded_mode(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "http://localhost/", "use_as_library_client": False, "api_key": "**********", @@ -2153,7 +2153,7 @@ def test_dump_configuration_max_retries_settings(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -2193,7 +2193,7 @@ def test_dump_configuration_max_retries_settings(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -2243,7 +2243,7 @@ def test_dump_configuration_max_retries_settings(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -2394,7 +2394,7 @@ def test_dump_configuration_retry_count_settings(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -2434,7 +2434,7 @@ def test_dump_configuration_retry_count_settings(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -2484,7 +2484,7 @@ def test_dump_configuration_retry_count_settings(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", @@ -2635,7 +2635,7 @@ def test_dump_configuration_specific_compaction_values(tmp_path: Path) -> None: allow_headers=["foo_header", "bar_header", "baz_header"], ), ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", api_key=SecretStr("whatever"), @@ -2681,7 +2681,7 @@ def test_dump_configuration_specific_compaction_values(tmp_path: Path) -> None: # all sections must exists assert "name" in content assert "service" in content - assert "llama_stack" in content + assert "ogx" in content assert "user_data_collection" in content assert "mcp_servers" in content assert "authentication" in content @@ -2732,7 +2732,7 @@ def test_dump_configuration_specific_compaction_values(tmp_path: Path) -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "use_as_library_client": True, "api_key": "**********", diff --git a/tests/unit/models/config/test_llama_stack_configuration.py b/tests/unit/models/config/test_llama_stack_configuration.py index 9d62a50d6..93183f77b 100644 --- a/tests/unit/models/config/test_llama_stack_configuration.py +++ b/tests/unit/models/config/test_llama_stack_configuration.py @@ -238,7 +238,7 @@ def test_unified_config_accepts_byo_llm_baseline() -> None: def test_root_rejects_config_and_legacy_path_together() -> None: """A llama_stack.config block and a legacy path in one file fail at load (R3).""" config_dict = _base_config_dict() - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", "config": {"baseline": "default"}, @@ -250,7 +250,7 @@ def test_root_rejects_config_and_legacy_path_together() -> None: def test_root_rejects_inference_providers_and_legacy_path_together() -> None: """Top-level inference.providers plus a legacy path fail at load (R3).""" config_dict = _base_config_dict() - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", } @@ -264,7 +264,7 @@ def test_root_rejects_inference_providers_and_legacy_path_together() -> None: def test_root_rejects_vector_store_providers_and_legacy_path_together() -> None: """Non-empty vector_store.providers plus a legacy path fail at load.""" config_dict = _base_config_dict() - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", } @@ -287,7 +287,7 @@ def test_root_rejects_vector_store_providers_and_legacy_path_together() -> None: def test_root_accepts_vector_store_providers_only_no_config_block() -> None: """Library mode driven by vector_store.providers alone is valid.""" config_dict = _base_config_dict() - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["inference"] = {"providers": []} config_dict["vector_store"] = { "default_provider": "notebooks", @@ -303,7 +303,7 @@ def test_root_accepts_vector_store_providers_only_no_config_block() -> None: } cfg = Configuration(**config_dict) # pylint: disable=no-member - assert cfg.llama_stack.config is None + assert cfg.ogx.config is None assert cfg.vector_store.default_provider == "notebooks" assert len(cfg.vector_store.providers) == 1 @@ -311,7 +311,7 @@ def test_root_accepts_vector_store_providers_only_no_config_block() -> None: def test_root_accepts_unified_library_config() -> None: """A unified library-mode config (no legacy path) loads cleanly (R1).""" config_dict = _base_config_dict() - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "config": {"baseline": "default"}, } @@ -320,7 +320,7 @@ def test_root_accepts_unified_library_config() -> None: } cfg = Configuration(**config_dict) # pylint: disable=no-member - assert cfg.llama_stack.config is not None + assert cfg.ogx.config is not None assert cfg.inference.providers[0].type == "openai" @@ -331,20 +331,20 @@ def test_root_accepts_inference_providers_only_no_config_block() -> None: non-empty top-level inference.providers is a sufficient synthesis input. """ config_dict = _base_config_dict() - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["inference"] = { "providers": [{"type": "openai", "api_key_env": "OPENAI_API_KEY"}] } cfg = Configuration(**config_dict) # pylint: disable=no-member - assert cfg.llama_stack.config is None + assert cfg.ogx.config is None assert cfg.inference.providers[0].type == "openai" def test_root_rejects_library_mode_without_run_source() -> None: """Library mode with no synthesis input and no legacy path fails at load.""" config_dict = _base_config_dict() - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["inference"] = {"providers": []} with pytest.raises(ValidationError, match="requires a run-configuration source"): Configuration(**config_dict) @@ -353,13 +353,13 @@ def test_root_rejects_library_mode_without_run_source() -> None: def test_root_accepts_remote_url_with_unified_config() -> None: """url + unified config (server mode) is allowed — url is orthogonal (R11).""" config_dict = _base_config_dict() - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": False, "url": "http://localhost:8321", "config": {"baseline": "default"}, } cfg = Configuration(**config_dict) - assert cfg.llama_stack.config is not None # pylint: disable=no-member + assert cfg.ogx.config is not None # pylint: disable=no-member # --------------------------------------------------------------------------- @@ -369,7 +369,7 @@ def test_root_accepts_remote_url_with_unified_config() -> None: def _unified_body(config_dict: dict[str, Any]) -> dict[str, Any]: """Give the base config a unified shape (synthesis input present).""" - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["inference"] = { "providers": [{"type": "openai", "api_key_env": "OPENAI_API_KEY"}] } @@ -390,7 +390,7 @@ def _clear_synthesis_inputs(config_dict: dict[str, Any]) -> dict[str, Any]: def _legacy_body(config_dict: dict[str, Any]) -> dict[str, Any]: """Give the base config a legacy shape (external run.yaml path).""" config_dict = _clear_synthesis_inputs(config_dict) - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "library_client_config_path": "tests/configuration/run.yaml", } @@ -400,7 +400,7 @@ def _legacy_body(config_dict: dict[str, Any]) -> dict[str, Any]: def _remote_body(config_dict: dict[str, Any]) -> dict[str, Any]: """Give the base config a remote shape (url only, no synthesis input).""" config_dict = _clear_synthesis_inputs(config_dict) - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": False, "url": "http://localhost:8321", } @@ -472,7 +472,7 @@ def test_root_rejects_unknown_config_format_version_value() -> None: def test_root_accepts_unified_marker_with_vector_store_providers_body() -> None: """'unified' agrees with a body whose only synthesis input is vector_store.""" config_dict = _base_config_dict() - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["inference"] = {"providers": []} config_dict["vector_store"] = { "default_provider": "notebooks", @@ -494,7 +494,7 @@ def test_root_accepts_unified_marker_with_vector_store_providers_body() -> None: def test_root_accepts_unified_marker_with_config_block_body() -> None: """'unified' agrees with a body whose only synthesis input is llama_stack.config.""" config_dict = _clear_synthesis_inputs(_base_config_dict()) - config_dict["llama_stack"] = { + config_dict["ogx"] = { "use_as_library_client": True, "config": {"baseline": "default"}, } @@ -510,7 +510,7 @@ def test_missing_run_source_error_precedes_marker_check() -> None: but the missing-run-source check runs first and its error must win. """ config_dict = _clear_synthesis_inputs(_base_config_dict()) - config_dict["llama_stack"] = {"use_as_library_client": True} + config_dict["ogx"] = {"use_as_library_client": True} config_dict["config_format_version"] = "unified" with pytest.raises(ValidationError, match="requires a run-configuration source"): Configuration(**config_dict) @@ -524,9 +524,20 @@ def test_mutual_exclusion_error_precedes_marker_check() -> None: --migrate-config guidance must win. """ config_dict = _unified_body(_base_config_dict()) - config_dict["llama_stack"][ - "library_client_config_path" - ] = "tests/configuration/run.yaml" + config_dict["ogx"]["library_client_config_path"] = "tests/configuration/run.yaml" config_dict["config_format_version"] = "legacy" with pytest.raises(ValidationError, match="mutually exclusive"): Configuration(**config_dict) + + +def test_root_accepts_deprecated_llama_stack_yaml_key( + caplog: pytest.LogCaptureFixture, +) -> None: + """Deprecated ``llama_stack`` top-level key loads as ``ogx`` with a warning.""" + config_dict = _remote_body(_base_config_dict()) + ogx_section = config_dict.pop("ogx") + config_dict["llama_stack"] = ogx_section + with caplog.at_level("WARNING"): + cfg = Configuration(**config_dict) + assert "deprecated" in caplog.text.lower() + assert str(cfg.ogx.url) == "http://localhost:8321/" # pylint: disable=no-member diff --git a/tests/unit/models/config/test_model_context_protocol_server.py b/tests/unit/models/config/test_model_context_protocol_server.py index 1dd01dfbc..0ac0e7366 100644 --- a/tests/unit/models/config/test_model_context_protocol_server.py +++ b/tests/unit/models/config/test_model_context_protocol_server.py @@ -106,7 +106,7 @@ def test_configuration_empty_mcp_servers() -> None: cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), @@ -131,7 +131,7 @@ def test_configuration_single_mcp_server() -> None: cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), @@ -163,7 +163,7 @@ def test_configuration_multiple_mcp_servers() -> None: cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), @@ -283,7 +283,7 @@ def test_configuration_mcp_servers_with_mixed_auth_headers(tmp_path: Path) -> No cfg = Configuration( name="test_name", service=ServiceConfiguration(), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), diff --git a/tests/unit/models/config/test_rlsapi_v1_configuration.py b/tests/unit/models/config/test_rlsapi_v1_configuration.py index f6edef64e..235600781 100644 --- a/tests/unit/models/config/test_rlsapi_v1_configuration.py +++ b/tests/unit/models/config/test_rlsapi_v1_configuration.py @@ -66,7 +66,7 @@ def _build_config_dict(**overrides: Any) -> dict[str, Any]: base: dict[str, Any] = { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/models/config/test_shields_configuration.py b/tests/unit/models/config/test_shields_configuration.py index 5859f2caf..6cfa857d5 100644 --- a/tests/unit/models/config/test_shields_configuration.py +++ b/tests/unit/models/config/test_shields_configuration.py @@ -103,7 +103,7 @@ def _minimal_configuration_kwargs() -> dict: return { "name": "test", "service": ServiceConfiguration(), - "llama_stack": OgxConfiguration( + "ogx": OgxConfiguration( use_as_library_client=True, library_client_config_path="tests/configuration/run.yaml", ), diff --git a/tests/unit/models/responses/test_successful_responses.py b/tests/unit/models/responses/test_successful_responses.py index a29ab2fdd..b80801382 100644 --- a/tests/unit/models/responses/test_successful_responses.py +++ b/tests/unit/models/responses/test_successful_responses.py @@ -1102,7 +1102,7 @@ def test_constructor(self) -> None: access_log=True, root_path="/.", ), - llama_stack=OgxConfiguration( + ogx=OgxConfiguration( url=AnyHttpUrl("http://localhost:8321"), use_as_library_client=False, api_key=None, diff --git a/tests/unit/models/test_saved_prompts_config.py b/tests/unit/models/test_saved_prompts_config.py index c97664678..7e0687fdc 100644 --- a/tests/unit/models/test_saved_prompts_config.py +++ b/tests/unit/models/test_saved_prompts_config.py @@ -170,7 +170,7 @@ def _build_config_dict(**overrides: Any) -> dict[str, Any]: base: dict[str, Any] = { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/telemetry/conftest.py b/tests/unit/telemetry/conftest.py index 7f7f04cbb..8e971dfc7 100644 --- a/tests/unit/telemetry/conftest.py +++ b/tests/unit/telemetry/conftest.py @@ -336,7 +336,7 @@ def build_fully_populated_config() -> Configuration: allow_headers=["Authorization", "Content-Type"], ), ), - llama_stack=OgxConfiguration.model_construct( + ogx=OgxConfiguration.model_construct( url=PII_LLAMA_URL, api_key=SecretStr(PII_API_KEY), use_as_library_client=False, @@ -685,7 +685,7 @@ def build_minimal_config() -> Configuration: allow_headers=["*"], ), ), - llama_stack=OgxConfiguration.model_construct( + ogx=OgxConfiguration.model_construct( url=None, api_key=None, use_as_library_client=True, diff --git a/tests/unit/telemetry/test_configuration_snapshot.py b/tests/unit/telemetry/test_configuration_snapshot.py index 9985cafb1..4b9a1c29f 100644 --- a/tests/unit/telemetry/test_configuration_snapshot.py +++ b/tests/unit/telemetry/test_configuration_snapshot.py @@ -436,9 +436,9 @@ def test_sensitive_fields_masked(self) -> None: assert snapshot["service"]["tls_config"]["tls_key_path"] == CONFIGURED assert snapshot["service"]["tls_config"]["tls_key_password"] == CONFIGURED assert snapshot["service"]["cors"]["allow_origins"] == CONFIGURED - assert snapshot["llama_stack"]["url"] == CONFIGURED - assert snapshot["llama_stack"]["api_key"] == CONFIGURED - assert snapshot["llama_stack"]["library_client_config_path"] == CONFIGURED + assert snapshot["ogx"]["url"] == CONFIGURED + assert snapshot["ogx"]["api_key"] == CONFIGURED + assert snapshot["ogx"]["library_client_config_path"] == CONFIGURED assert snapshot["authentication"]["k8s_cluster_api"] == CONFIGURED assert snapshot["authentication"]["k8s_ca_cert_path"] == CONFIGURED assert snapshot["authentication"]["jwk_config"]["url"] == CONFIGURED @@ -464,7 +464,7 @@ def test_passthrough_fields_preserved(self) -> None: assert snapshot["service"]["access_log"] is False assert snapshot["service"]["cors"]["allow_credentials"] is True assert snapshot["service"]["cors"]["allow_methods"] == ["GET", "POST"] - assert snapshot["llama_stack"]["use_as_library_client"] is False + assert snapshot["ogx"]["use_as_library_client"] is False assert snapshot["inference"]["default_model"] == "gpt-4o-mini" assert snapshot["inference"]["default_provider"] == "openai" assert snapshot["authentication"]["module"] == "jwk_token" @@ -477,8 +477,8 @@ def test_optional_none_fields(self) -> None: snapshot["service"]["tls_config"]["tls_certificate_path"] == NOT_CONFIGURED ) assert snapshot["service"]["tls_config"]["tls_key_path"] == NOT_CONFIGURED - assert snapshot["llama_stack"]["url"] == NOT_CONFIGURED - assert snapshot["llama_stack"]["api_key"] == NOT_CONFIGURED + assert snapshot["ogx"]["url"] == NOT_CONFIGURED + assert snapshot["ogx"]["api_key"] == NOT_CONFIGURED assert snapshot["authentication"]["jwk_config"]["url"] == NOT_CONFIGURED assert snapshot["customization"]["system_prompt"] == NOT_CONFIGURED assert snapshot["database"]["postgres"]["host"] == NOT_CONFIGURED @@ -556,44 +556,44 @@ def test_service_root_path_masked(self) -> None: def test_llama_stack_timeout_passthrough(self) -> None: """Test llama_stack timeout passes through.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["timeout"] == 180 + assert snapshot["ogx"]["timeout"] == 180 def test_llama_stack_max_retries_passthrough(self) -> None: """Test llama_stack max_retries passes through.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["max_retries"] == 5 + assert snapshot["ogx"]["max_retries"] == 5 def test_llama_stack_retry_delay_passthrough(self) -> None: """Test llama_stack retry_delay passes through.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["retry_delay"] == 2 + assert snapshot["ogx"]["retry_delay"] == 2 def test_llama_stack_allow_degraded_mode_passthrough(self) -> None: """Test llama_stack allow_degraded_mode passes through.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["allow_degraded_mode"] is True + assert snapshot["ogx"]["allow_degraded_mode"] is True def test_llama_stack_config_baseline_passthrough(self) -> None: """Test llama_stack config baseline passes through.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["config"]["baseline"] == "default" + assert snapshot["ogx"]["config"]["baseline"] == "default" def test_llama_stack_config_profile_masked(self) -> None: """Test llama_stack config profile is masked as sensitive.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["config"]["profile"] == CONFIGURED + assert snapshot["ogx"]["config"]["profile"] == CONFIGURED def test_llama_stack_config_native_override_masked(self) -> None: """Test llama_stack config native_override is masked as sensitive.""" snapshot = build_lightspeed_stack_snapshot(build_fully_populated_config()) - assert snapshot["llama_stack"]["config"]["native_override"] == CONFIGURED + assert snapshot["ogx"]["config"]["native_override"] == CONFIGURED def test_llama_stack_config_none(self) -> None: """Test llama_stack config fields when config is None.""" snapshot = build_lightspeed_stack_snapshot(build_minimal_config()) - assert snapshot["llama_stack"]["config"]["baseline"] is None - assert snapshot["llama_stack"]["config"]["profile"] == NOT_CONFIGURED - assert snapshot["llama_stack"]["config"]["native_override"] == NOT_CONFIGURED + assert snapshot["ogx"]["config"]["baseline"] is None + assert snapshot["ogx"]["config"]["profile"] == NOT_CONFIGURED + assert snapshot["ogx"]["config"]["native_override"] == NOT_CONFIGURED def test_inference_context_windows_passthrough(self) -> None: """Test inference context_windows passes through.""" @@ -1161,8 +1161,8 @@ async def test_combines_both_sources(self) -> None: """Test that snapshot contains both lightspeed_stack and llama_stack.""" result = await build_configuration_snapshot(build_minimal_config(), None) assert "lightspeed_stack" in result - assert "llama_stack" in result - assert result["llama_stack"] == {"status": NOT_AVAILABLE} + assert "ogx" in result + assert result["ogx"] == {"status": NOT_AVAILABLE} assert result["lightspeed_stack"]["name"] == "minimal" @pytest.mark.asyncio @@ -1172,7 +1172,7 @@ async def test_with_llama_stack_config(self, llama_stack_config_file: str) -> No build_minimal_config(), llama_stack_config_file ) assert result["lightspeed_stack"]["name"] == "minimal" - assert result["llama_stack"]["version"] == 2 + assert result["ogx"]["version"] == 2 # ============================================================================= diff --git a/tests/unit/test_configuration.py b/tests/unit/test_configuration.py index 659401e6f..f9977893e 100644 --- a/tests/unit/test_configuration.py +++ b/tests/unit/test_configuration.py @@ -154,7 +154,7 @@ def test_init_from_dict() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -262,7 +262,7 @@ def test_init_from_dict_with_shields() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -323,7 +323,7 @@ def test_init_from_dict_with_mcp_servers() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -376,7 +376,7 @@ def test_init_from_dict_with_authorization_configuration() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "xyzzy", "url": "http://x.y.com:1234", "use_as_library_client": False, @@ -414,7 +414,7 @@ def test_load_proper_configuration(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy @@ -444,7 +444,7 @@ def test_load_configuration_with_mcp_servers(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -482,7 +482,7 @@ def test_mcp_servers_property_empty() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://localhost:8321", "use_as_library_client": False, @@ -513,7 +513,7 @@ def test_mcp_servers_property_with_servers() -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://localhost:8321", "use_as_library_client": False, @@ -613,7 +613,7 @@ def test_load_configuration_with_customization_system_prompt_path(tmpdir: Path) workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -651,7 +651,7 @@ def test_load_configuration_with_customization_system_prompt(tmpdir: Path) -> No workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -694,7 +694,7 @@ def test_configuration_with_profile_customization(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -735,7 +735,7 @@ def test_configuration_with_all_customizations(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -772,7 +772,7 @@ def test_configuration_with_sqlite_conversation_cache(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -809,7 +809,7 @@ def test_configuration_with_in_memory_conversation_cache(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -846,7 +846,7 @@ def test_configuration_with_quota_handlers_no_storage(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -898,7 +898,7 @@ def test_configuration_with_token_history_no_storage(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -936,7 +936,7 @@ def test_configuration_with_quota_handlers(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: test-key @@ -1001,7 +1001,7 @@ def test_load_configuration_with_azure_entra_id(tmpdir: Path) -> None: workers: 1 color_log: true access_log: true -llama_stack: +ogx: api_key: test-key url: http://localhost:8321 use_as_library_client: false @@ -1036,7 +1036,7 @@ def test_load_configuration_with_incomplete_azure_entra_id_raises(tmpdir: Path) workers: 1 color_log: true access_log: true -llama_stack: +ogx: api_key: test-key url: http://localhost:8321 use_as_library_client: false @@ -1066,7 +1066,7 @@ def test_rag_id_mapping_includes_solr_when_okp_in_inline() -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1094,7 +1094,7 @@ def test_rag_id_mapping_includes_solr_when_okp_in_tool() -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1124,7 +1124,7 @@ def test_rag_id_mapping_with_byok(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1156,7 +1156,7 @@ def test_rag_id_mapping_with_byok_and_okp(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1221,7 +1221,7 @@ def test_score_multiplier_mapping_with_byok_defaults(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1255,7 +1255,7 @@ def test_score_multiplier_mapping_with_custom_values(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1307,7 +1307,7 @@ def test_relevance_cutoff_mapping_with_byok_defaults(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1343,7 +1343,7 @@ def test_relevance_cutoff_mapping_with_custom_values(tmp_path: Path) -> None: { "name": "test", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "api_key": "k", "url": "http://test.com:1234", "use_as_library_client": False, @@ -1412,7 +1412,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "https://www.west.com/", "api_key": "api_key", "use_as_library_client": False, @@ -1638,7 +1638,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: "allow_headers": ["At professor seek hospital eat."], }, }, - "llama_stack": { + "ogx": { "url": None, "api_key": None, "use_as_library_client": None, @@ -1930,7 +1930,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "http://www.cameron.com/", "api_key": "xyzzy", "use_as_library_client": False, @@ -2123,7 +2123,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: "allow_headers": ["Experience east herself outside."], }, }, - "llama_stack": { + "ogx": { "url": "https://www.savage.com/", "api_key": "xyzzy", "use_as_library_client": False, @@ -2357,7 +2357,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "api_key": "xyzzy", "use_as_library_client": True, @@ -2570,7 +2570,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "api_key": "xyzzy", "use_as_library_client": None, @@ -2850,7 +2850,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "http://fowler-webb.com/", "api_key": "xyzzy", "use_as_library_client": None, @@ -3093,7 +3093,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": None, "api_key": "xyzzy", "use_as_library_client": True, @@ -3307,7 +3307,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: "allow_headers": ["Form figure letter far."], }, }, - "llama_stack": { + "ogx": { "url": "https://murphy-thomas.com/", "api_key": None, "use_as_library_client": False, @@ -3515,7 +3515,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: "allow_headers": ["Site build professor affect consider."], }, }, - "llama_stack": { + "ogx": { "url": None, "api_key": "xyzzy", "use_as_library_client": False, @@ -3750,7 +3750,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "http://willis-jensen.com/", "api_key": "xyzzy", "use_as_library_client": None, @@ -3984,7 +3984,7 @@ def test_relevance_cutoff_mapping_not_loaded() -> None: ], }, }, - "llama_stack": { + "ogx": { "url": "https://carroll.com/", "api_key": "/", "use_as_library_client": None, @@ -4189,7 +4189,7 @@ def test_native_override_env_refs_not_resolved( monkeypatch.setenv("LCORE_TEST_MODEL", "gpt-4o-mini") config_dict = { "inference": {"default_model": "${env.LCORE_TEST_MODEL}"}, - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": { @@ -4206,13 +4206,41 @@ def test_native_override_env_refs_not_resolved( resolved = replace_env_vars_preserving_native_override(config_dict) # native_override keeps the reference verbatim — the secret never resolved + override_api_key = resolved["ogx"]["config"]["native_override"]["providers"][ + "inference" + ][0]["config"]["api_key"] + assert override_api_key == "${env.LCORE_TEST_SECRET}" + assert "supersecret" not in str(resolved["ogx"]) + # everything outside native_override still resolves + assert resolved["inference"]["default_model"] == "gpt-4o-mini" + + +def test_replace_env_vars_preserves_native_override_under_deprecated_llama_stack_key( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Deprecated ``llama_stack`` key is treated like ``ogx`` for env resolution.""" + monkeypatch.setenv("LCORE_TEST_SECRET", "supersecret") + config_dict = { + "llama_stack": { + "config": { + "native_override": { + "providers": { + "inference": [ + {"config": {"api_key": "${env.LCORE_TEST_SECRET}"}} + ] + } + } + } + } + } + + resolved = replace_env_vars_preserving_native_override(config_dict) + override_api_key = resolved["llama_stack"]["config"]["native_override"][ "providers" ]["inference"][0]["config"]["api_key"] assert override_api_key == "${env.LCORE_TEST_SECRET}" assert "supersecret" not in str(resolved["llama_stack"]) - # everything outside native_override still resolves - assert resolved["inference"]["default_model"] == "gpt-4o-mini" def test_replace_env_vars_without_native_override_resolves_all( diff --git a/tests/unit/test_lightspeed_stack.py b/tests/unit/test_lightspeed_stack.py index ae8a31445..e2da56084 100644 --- a/tests/unit/test_lightspeed_stack.py +++ b/tests/unit/test_lightspeed_stack.py @@ -72,7 +72,7 @@ def test_main_migrate_config_writes_unified_file( yaml.dump( { "name": "LCS", - "llama_stack": { + "ogx": { "use_as_library_client": True, "library_client_config_path": "run.yaml", }, @@ -98,9 +98,9 @@ def test_main_migrate_config_writes_unified_file( main() # returns early, never starts uvicorn migrated = yaml.safe_load(out_path.read_text(encoding="utf-8")) - assert "library_client_config_path" not in migrated["llama_stack"] - assert migrated["llama_stack"]["config"]["baseline"] == "empty" - assert migrated["llama_stack"]["config"]["native_override"] == { + assert "library_client_config_path" not in migrated["ogx"] + assert migrated["ogx"]["config"]["baseline"] == "empty" + assert migrated["ogx"]["config"]["native_override"] == { "version": 2, "apis": ["inference"], } @@ -148,7 +148,7 @@ def test_main_warns_on_legacy_two_file_config( run_yaml = tmp_path / "run.yaml" run_yaml.write_text("version: 2\n", encoding="utf-8") config_yaml = COMMON_CONFIG_SECTIONS + f""" -llama_stack: +ogx: use_as_library_client: true library_client_config_path: {run_yaml} """ @@ -170,7 +170,7 @@ def test_main_does_not_warn_in_unified_mode( ) -> None: """A unified-mode config (llama_stack.config) emits no deprecation WARN.""" config_yaml = COMMON_CONFIG_SECTIONS + """ -llama_stack: +ogx: use_as_library_client: true config: baseline: default @@ -187,7 +187,7 @@ def test_main_does_not_warn_in_server_mode( ) -> None: """A server-mode config (url, no legacy fields) emits no deprecation WARN.""" config_yaml = COMMON_CONFIG_SECTIONS + """ -llama_stack: +ogx: use_as_library_client: false url: http://localhost:8321 api_key: xyzzy diff --git a/tests/unit/test_llama_stack_configuration.py b/tests/unit/test_llama_stack_configuration.py index 27c1137db..947a076e5 100644 --- a/tests/unit/test_llama_stack_configuration.py +++ b/tests/unit/test_llama_stack_configuration.py @@ -713,7 +713,7 @@ def test_generate_configuration_with_pydantic_model(tmp_path: Path) -> None: cfg = Configuration( # type: ignore[call-arg] name="test", service=ServiceConfiguration(), # type: ignore[call-arg] - llama_stack=OgxConfiguration( # type: ignore[call-arg] + ogx=OgxConfiguration( # type: ignore[call-arg] use_as_library_client=True, library_client_config_path="run.yaml", ), diff --git a/tests/unit/test_llama_stack_synthesize.py b/tests/unit/test_llama_stack_synthesize.py index a59672df2..e94efa828 100644 --- a/tests/unit/test_llama_stack_synthesize.py +++ b/tests/unit/test_llama_stack_synthesize.py @@ -560,7 +560,7 @@ def test_synthesize_default_baseline_ensures_mcp() -> None: }, } lcs_config = { - "llama_stack": {"config": {"baseline": "default"}}, + "ogx": {"config": {"baseline": "default"}}, "inference": {"providers": []}, } result = synthesize_configuration(lcs_config, default_baseline=default_baseline) @@ -571,7 +571,7 @@ def test_synthesize_default_baseline_ensures_mcp() -> None: def test_synthesize_empty_baseline_skips_mcp_ensure() -> None: """baseline: empty must not assume MCP.""" lcs_config = { - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": { @@ -590,7 +590,7 @@ def test_synthesize_empty_baseline_skips_mcp_ensure() -> None: def test_synthesize_empty_baseline_keeps_mcp_from_override() -> None: """MCP already in native_override is preserved when ensure is skipped.""" lcs_config = { - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": { @@ -618,7 +618,7 @@ def test_synthesize_native_override_can_opt_out_of_mcp() -> None: "providers": {"tool_runtime": []}, } lcs_config = { - "llama_stack": { + "ogx": { "config": { "baseline": "default", "native_override": { @@ -654,7 +654,7 @@ def test_synthesize_profile_missing_mcp_gets_ensure( encoding="utf-8", ) lcs_config = { - "llama_stack": {"config": {"profile": str(profile)}}, + "ogx": {"config": {"profile": str(profile)}}, } result = synthesize_configuration(lcs_config) assert "tool_runtime" in result["apis"] @@ -666,7 +666,7 @@ def test_synthesize_empty_profile_still_ensures_mcp(tmp_path: Path) -> None: profile = tmp_path / "empty-profile.yaml" profile.write_text("{}\n", encoding="utf-8") lcs_config = { - "llama_stack": {"config": {"profile": str(profile)}}, + "ogx": {"config": {"profile": str(profile)}}, } result = synthesize_configuration(lcs_config) assert "tool_runtime" in result["apis"] @@ -676,7 +676,7 @@ def test_synthesize_empty_profile_still_ensures_mcp(tmp_path: Path) -> None: def test_synthesize_from_empty_baseline_only_native_override() -> None: """baseline: empty starts from {} so native_override is the whole output.""" lcs = { - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": {"version": 2, "apis": ["inference"]}, @@ -690,7 +690,7 @@ def test_synthesize_from_empty_baseline_only_native_override() -> None: def test_synthesize_from_default_baseline_applies_inference_and_override() -> None: """Default baseline + high-level inference + native_override compose (R1/R5).""" lcs = { - "llama_stack": { + "ogx": { "config": { "baseline": "default", "native_override": {"safety": {"default_shield_id": "custom"}}, @@ -717,7 +717,7 @@ def test_synthesize_vllm_appends_and_keeps_conditional_openai( monkeypatch.delenv("OPENAI_API_KEY", raising=False) monkeypatch.setenv("VLLM_API_KEY", "vllm-test-key") lcs = { - "llama_stack": {"config": {"baseline": "default"}}, + "ogx": {"config": {"baseline": "default"}}, "inference": { "providers": [ { @@ -756,8 +756,8 @@ def _byo_llm_deprecation_warnings(caplog: pytest.LogCaptureFixture) -> list[str] @pytest.mark.parametrize( "lcs", [ - {"llama_stack": {"config": {"baseline": "default"}}}, - {"llama_stack": {"config": {}}}, + {"ogx": {"config": {"baseline": "default"}}}, + {"ogx": {"config": {}}}, {}, ], ) @@ -781,7 +781,7 @@ def test_synthesize_default_path_keeps_conditional_openai( def test_synthesize_byo_llm_strips_openai(caplog: pytest.LogCaptureFixture) -> None: """byo-llm drops the OpenAI row, keeps the embedder, and does not warn.""" - lcs = {"llama_stack": {"config": {"baseline": "byo-llm"}}} + lcs = {"ogx": {"config": {"baseline": "byo-llm"}}} with caplog.at_level( "WARNING", logger="lightspeed_stack.llama_stack_configuration" ): @@ -796,7 +796,7 @@ def test_synthesize_byo_llm_strips_openai(caplog: pytest.LogCaptureFixture) -> N def test_synthesize_byo_llm_with_vllm_appends_without_openai() -> None: """byo-llm + high-level vLLM appends vLLM and does not restore OpenAI.""" lcs = { - "llama_stack": {"config": {"baseline": "byo-llm"}}, + "ogx": {"config": {"baseline": "byo-llm"}}, "inference": { "providers": [ { @@ -821,7 +821,7 @@ def test_synthesize_byo_llm_with_vllm_appends_without_openai() -> None: def test_synthesize_byo_llm_with_openai_appends_one_row() -> None: """byo-llm + high-level openai appends a single openai row.""" lcs = { - "llama_stack": {"config": {"baseline": "byo-llm"}}, + "ogx": {"config": {"baseline": "byo-llm"}}, "inference": { "providers": [{"type": "openai", "api_key_env": "OPENAI_API_KEY"}] }, @@ -838,7 +838,7 @@ def test_synthesize_empty_baseline_does_not_strip_openai( ) -> None: """baseline: empty is unchanged: no OpenAI strip and no deprecation WARN.""" lcs = { - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": {"version": 2, "apis": ["inference"]}, @@ -873,7 +873,7 @@ def test_synthesize_profile_ignores_byo_llm( } (tmp_path / "my-profile.yaml").write_text(yaml.dump(profile), encoding="utf-8") lcs = { - "llama_stack": { + "ogx": { "config": { "profile": "my-profile.yaml", "baseline": "byo-llm", @@ -895,14 +895,14 @@ def test_synthesize_loads_profile_relative_to_config_dir(tmp_path: Path) -> None """A relative profile: resolves against the config file's directory (R8).""" profile = {"version": 2, "apis": ["inference"], "marker": "from-profile"} (tmp_path / "my-profile.yaml").write_text(yaml.dump(profile), encoding="utf-8") - lcs = {"llama_stack": {"config": {"profile": "my-profile.yaml"}}} + lcs = {"ogx": {"config": {"profile": "my-profile.yaml"}}} result = synthesize_configuration(lcs, config_file_dir=str(tmp_path)) assert result["marker"] == "from-profile" def test_synthesize_uses_provided_default_baseline() -> None: """An explicit default_baseline arg is used without touching the shipped one.""" - lcs: dict[str, Any] = {"llama_stack": {"config": {"baseline": "default"}}} + lcs: dict[str, Any] = {"ogx": {"config": {"baseline": "default"}}} result = synthesize_configuration(lcs, default_baseline={"marker": "injected"}) assert result["marker"] == "injected" @@ -910,7 +910,7 @@ def test_synthesize_uses_provided_default_baseline() -> None: def test_synthesize_enriches_byok_rag_like_legacy() -> None: """BYOK RAG enrichment runs during synthesis for legacy parity (R7).""" lcs = { - "llama_stack": {"config": {"baseline": "empty"}}, + "ogx": {"config": {"baseline": "empty"}}, "rag": { "byok": { "stores": [ @@ -933,7 +933,7 @@ def test_synthesize_enriches_byok_rag_like_legacy() -> None: def test_synthesize_includes_vector_store() -> None: """vector_store enrichment runs during unified synthesis.""" lcs_config = { - "llama_stack": { + "ogx": { "use_as_library_client": True, "config": {"baseline": "default"}, }, @@ -967,9 +967,7 @@ def test_synthesize_includes_vector_store() -> None: def test_synthesize_to_file_writes_mode_0600(tmp_path: Path) -> None: """The synthesized file is written owner-only (R10) and round-trips.""" out = tmp_path / "nested" / "run.yaml" - lcs = { - "llama_stack": {"config": {"baseline": "empty", "native_override": {"v": 2}}} - } + lcs = {"ogx": {"config": {"baseline": "empty", "native_override": {"v": 2}}}} synthesize_to_file(lcs, str(out), str(tmp_path)) assert out.exists() assert stat.S_IMODE(os.stat(out).st_mode) == 0o600 @@ -981,9 +979,7 @@ def test_synthesize_to_file_tightens_perms_on_overwrite(tmp_path: Path) -> None: out = tmp_path / "run.yaml" out.write_text("stale", encoding="utf-8") os.chmod(out, 0o644) - lcs = { - "llama_stack": {"config": {"baseline": "empty", "native_override": {"v": 3}}} - } + lcs = {"ogx": {"config": {"baseline": "empty", "native_override": {"v": 3}}}} synthesize_to_file(lcs, str(out), str(tmp_path)) assert stat.S_IMODE(os.stat(out).st_mode) == 0o600 assert yaml.safe_load(out.read_text(encoding="utf-8")) == {"v": 3} @@ -1025,7 +1021,7 @@ def _write_legacy_pair(tmp_path: Path) -> tuple[str, str]: lcs = { "name": "LCS", "service": {"host": "localhost", "port": 8080}, - "llama_stack": { + "ogx": { "use_as_library_client": True, "library_client_config_path": "run.yaml", }, @@ -1046,11 +1042,11 @@ def test_migrate_config_dumb_structure(tmp_path: Path) -> None: assert migrated["name"] == "LCS" assert migrated["service"] == {"host": "localhost", "port": 8080} # legacy path dropped; use_as_library_client preserved - assert "library_client_config_path" not in migrated["llama_stack"] - assert migrated["llama_stack"]["use_as_library_client"] is True + assert "library_client_config_path" not in migrated["ogx"] + assert migrated["ogx"]["use_as_library_client"] is True # whole run.yaml lifted into native_override with an empty baseline - assert migrated["llama_stack"]["config"]["baseline"] == "empty" - assert migrated["llama_stack"]["config"]["native_override"] == _LEGACY_RUN_YAML + assert migrated["ogx"]["config"]["baseline"] == "empty" + assert migrated["ogx"]["config"]["native_override"] == _LEGACY_RUN_YAML def test_migrate_then_synthesize_reproduces_run_yaml(tmp_path: Path) -> None: @@ -1105,7 +1101,7 @@ def test_reference_profiles_exist() -> None: @pytest.mark.parametrize("profile_path", REFERENCE_PROFILES, ids=lambda p: p.name) def test_reference_profile_loads_via_synthesizer(profile_path: Path) -> None: """Every examples/profiles/*.yaml loads cleanly as a synthesis baseline.""" - lcs = {"llama_stack": {"config": {"profile": profile_path.name}}} + lcs = {"ogx": {"config": {"profile": profile_path.name}}} result = synthesize_configuration(lcs, config_file_dir=str(profile_path.parent)) # The profile drives the baseline: run.yaml-shaped keys survive synthesis. assert result["version"] == 2 @@ -1120,16 +1116,14 @@ def test_reference_profile_loads_via_synthesizer(profile_path: Path) -> None: def test_has_synthesis_input_detection() -> None: """The raw-dict detection mirrors the root-model synthesis-input check.""" - assert has_synthesis_input({"llama_stack": {"config": {"baseline": "default"}}}) + assert has_synthesis_input({"ogx": {"config": {"baseline": "default"}}}) assert has_synthesis_input({"inference": {"providers": [{"type": "openai"}]}}) assert has_synthesis_input({"vector_store": {"providers": [{"id": "nb"}]}}) assert not has_synthesis_input({}) - assert not has_synthesis_input( - {"llama_stack": {"library_client_config_path": "run.yaml"}} - ) + assert not has_synthesis_input({"ogx": {"library_client_config_path": "run.yaml"}}) # empty provider lists and null sections are not synthesis inputs assert not has_synthesis_input({"inference": {"providers": []}}) - assert not has_synthesis_input({"inference": None, "llama_stack": None}) + assert not has_synthesis_input({"inference": None, "ogx": None}) def _run_main(monkeypatch: pytest.MonkeyPatch, argv: list[str]) -> None: @@ -1148,7 +1142,7 @@ def test_main_unified_config_synthesizes_without_input_file( to exist. """ lcs = { - "llama_stack": { + "ogx": { "config": { "baseline": "empty", "native_override": {"version": 2, "marker": "synthesized"}, @@ -1185,7 +1179,7 @@ def test_main_unified_config_resolves_relative_profile( """A relative profile: in the config resolves against the config's dir (R8).""" profile = {"version": 2, "apis": ["inference"], "marker": "from-profile"} (tmp_path / "my-profile.yaml").write_text(yaml.dump(profile), encoding="utf-8") - lcs = {"llama_stack": {"config": {"profile": "my-profile.yaml"}}} + lcs = {"ogx": {"config": {"profile": "my-profile.yaml"}}} cfg_path = tmp_path / "lightspeed-stack.yaml" cfg_path.write_text(yaml.dump(lcs), encoding="utf-8") out_path = tmp_path / "generated-run.yaml" @@ -1205,7 +1199,7 @@ def test_main_legacy_config_enriches_input_file( run_path = tmp_path / "run.yaml" run_path.write_text(yaml.dump(run_yaml), encoding="utf-8") lcs = { - "llama_stack": {"library_client_config_path": str(run_path)}, + "ogx": {"library_client_config_path": str(run_path)}, "rag": { "byok": { "stores": [ diff --git a/tests/unit/utils/test_models_dumper.py b/tests/unit/utils/test_models_dumper.py index 77d55530f..124134943 100644 --- a/tests/unit/utils/test_models_dumper.py +++ b/tests/unit/utils/test_models_dumper.py @@ -871,7 +871,7 @@ def test_dump_models(tmpdir: Path) -> None: "description": "This section contains Lightspeed Core Stack service configuration.", "title": "Service configuration" }, - "llama_stack": { + "ogx": { "$ref": "`#/components/schemas/`OgxConfiguration", "description": "This section contains OGX configuration. Lightspeed Core Stack service can call OGX in library mode or in server mode.", "title": "OGX configuration" @@ -1066,7 +1066,7 @@ def test_dump_models(tmpdir: Path) -> None: "required": [ "name", "service", - "llama_stack", + "ogx", "user_data_collection" ], "title": "Configuration", @@ -1102,7 +1102,7 @@ def test_dump_models(tmpdir: Path) -> None: "default_model": "gpt-4-turbo", "default_provider": "openai" }, - "llama_stack": { + "ogx": { "api_key": "*****", "library_client_config_path": null, "url": "http://localhost:8321", diff --git a/tests/unit/utils/test_prompts.py b/tests/unit/utils/test_prompts.py index 6b25f7055..e7f45dab1 100644 --- a/tests/unit/utils/test_prompts.py +++ b/tests/unit/utils/test_prompts.py @@ -130,7 +130,7 @@ def setup_configuration_fixture() -> AppConfig: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False, diff --git a/tests/unit/utils/test_transcripts.py b/tests/unit/utils/test_transcripts.py index 767503752..fced39ace 100644 --- a/tests/unit/utils/test_transcripts.py +++ b/tests/unit/utils/test_transcripts.py @@ -27,7 +27,7 @@ def test_construct_transcripts_path(mocker: MockerFixture) -> None: "color_log": True, "access_log": True, }, - "llama_stack": { + "ogx": { "api_key": "test-key", "url": "http://test.com:1234", "use_as_library_client": False,