Skip to content
Open
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,6 @@ local-run.yaml
.sisyphus/
# Per-developer feature design overrides (see docs/contributing/feature-design.config)
.feature-design.config.local

# Generated at e2e test time by the unified-mode --migrate-config step
tests/e2e/configuration/unified-mode/**/lightspeed-stack-unified-migrated.yaml
48 changes: 48 additions & 0 deletions tests/e2e/configuration/library-mode/lightspeed-stack-legacy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Legacy two-file shape (R2 deprecation window): external run.yaml consumed
# via library_client_config_path; no unified synthesis input. Kept as a
# dedicated fixture because the standard library-mode baseline migrated to
# unified mode in LCORE-2342, which silently removed legacy boot coverage.
use_as_library_client: true
library_client_config_path: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
rag:
byok:
stores:
- rag_id: e2e-test-docs
backend: faiss
embedding_model: sentence-transformers/all-mpnet-base-v2
embedding_dimension: 768
vector_db_id: ${env.FAISS_VECTOR_STORE_ID}
db_path: ${env.KV_RAG_PATH:=~/.llama/storage/rag/kv_store.db}
score_multiplier: 1.0
retrieval:
tool:
sources:
- e2e-test-docs

shields:
- name: pii-redaction
provider_id: redaction
config:
rules:
- pattern: '\d+'
replacement: '[NUM]'

24 changes: 24 additions & 0 deletions tests/e2e/configuration/unified-mode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Unified-mode e2e configuration fixtures

Fixtures for the five `unified-mode-*.feature` files (LCORE-2341/LCORE-2343).
Same layout as the parent directory: `library-mode/` and `server-mode/`
variants differing only in the `llama_stack` block; the harness resolves
`<dir>/<mode>/<file>` via the standard `configure_service` logic.

All profile-based fixtures reference `run.yaml` — the repo-root copy the CI
harness materializes from `tests/e2e/configs/run-<env>.yaml` — so they stay
provider-agnostic across the providers matrix.

| Fixture | Purpose |
|---|---|
| `lightspeed-stack-unified-providers.yaml` | Minimal unified config driven only by top-level `inference.providers` (default baseline, R1/S5). openai-specific — used by `@openai-only` scenarios. |
| `lightspeed-stack-unified-config-only.yaml` | Unified config driven only by `llama_stack.config` (`profile: run.yaml`, R1). |
| `lightspeed-stack-unified-relative-profile.yaml` | Same shape as config-only; exists to pin R8 (relative `profile:` resolves against the config file's directory) as a distinct intent. |
| `lightspeed-stack-unified-absolute-profile.yaml` | `profile:` as a container-absolute path (differs per mode subdir). |
| `lightspeed-stack-unified-native-override-scalar.yaml` | `native_override` replaces an overlapping scalar key (R5). Synthesis-only; never booted. |
| `lightspeed-stack-unified-native-override-list.yaml` | `native_override` replaces an overlapping list wholesale (R5). Synthesis-only; never booted. |
| `lightspeed-stack-invalid-providers-and-legacy.yaml` | INVALID: `inference.providers` + `library_client_config_path` (mutual exclusion, R3). Validation-only. |
| `lightspeed-stack-invalid-config-and-legacy.yaml` | INVALID: `llama_stack.config` + `library_client_config_path` (R3). Validation-only. |
| `lightspeed-stack-invalid-version-legacy-unified-body.yaml` | INVALID: `config_format_version: legacy` on a unified-shaped body (R11, LCORE-2872). Validation-only. |
| `lightspeed-stack-legacy-for-migration.yaml` | Legacy half of "the legacy migration fixture pair"; paired with the repo-root `run.yaml`. Deliberately free of enrichment sections so migrate→synthesize round-trips losslessly (see LCORE-3370). |
| `lightspeed-stack-unified-migrated.yaml` | Generated at test time by the `--migrate-config` step; gitignored and cleaned up after each scenario. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
profile: run.yaml
# INVALID: config block plus the legacy path (mutual exclusion, R3)
library_client_config_path: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
# INVALID: synthesis input plus the legacy path (mutual exclusion, R3)
library_client_config_path: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
# Unified synthesis input (Decision S5): the high-level provider entry
# replaces the default baseline's openai provider by id at synthesis time.
providers:
- type: openai
id: openai
api_key_env: OPENAI_API_KEY
allowed_models:
- ${env.E2E_OPENAI_MODEL:=gpt-4o-mini}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
# Unified synthesis input (Decision S5): the high-level provider entry
# replaces the default baseline's openai provider by id at synthesis time.
providers:
- type: openai
id: openai
api_key_env: OPENAI_API_KEY
allowed_models:
- ${env.E2E_OPENAI_MODEL:=gpt-4o-mini}
# INVALID: explicit legacy marker on a unified-shaped body (R11, LCORE-2872)
config_format_version: legacy
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
# Legacy two-file shape: external run.yaml, no synthesis input
library_client_config_path: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
# Absolute path as mounted in the library-mode container
profile: /app-root/run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
# Synthesis baseline: the CI-materialized run.yaml (provider-agnostic)
profile: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
profile: run.yaml
# R5: lists replace wholesale - the synthesized apis must equal exactly
# this list, not a merge with the baseline's (never booted - synthesis only)
native_override:
apis:
- inference
- tool_runtime
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
profile: run.yaml
# R5: the raw escape hatch wins; this scalar replaces the baseline's
# safety.excluded_categories value wholesale (never booted - synthesis only)
native_override:
safety:
excluded_categories: unified-override-marker
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
# Unified synthesis input (Decision S5): the high-level provider entry
# replaces the default baseline's openai provider by id at synthesis time.
providers:
- type: openai
id: openai
api_key_env: OPENAI_API_KEY
allowed_models:
- ${env.E2E_OPENAI_MODEL:=gpt-4o-mini}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Library mode - embeds the stack in-process
use_as_library_client: true
config:
# R8: relative profile resolves against this file's loaded location
profile: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Lightspeed Core Service (LCS)
service:
host: 0.0.0.0
port: 8080
auth_enabled: false
workers: 1
color_log: true
access_log: true
llama_stack:
# Server mode - connects to the separate llama-stack service
use_as_library_client: false
url: http://${env.E2E_LLAMA_HOSTNAME}:8321
api_key: xyzzy
config:
profile: run.yaml
# INVALID: config block plus the legacy path (mutual exclusion, R3)
library_client_config_path: run.yaml
user_data_collection:
feedback_enabled: true
feedback_storage: "/tmp/data/feedback"
transcripts_enabled: true
transcripts_storage: "/tmp/data/transcripts"
authentication:
module: "noop"
inference:
default_provider: openai
default_model: gpt-4o-mini
Loading
Loading