lightspeed-stack 0.4.0__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/PKG-INFO +305 -107
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/README.md +298 -103
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/pyproject.toml +30 -8
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/in_memory_context_store.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/postgres_context_store.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/sqlite_context_store.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/storage_factory.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/database.py +77 -8
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/README.md +6 -12
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/a2a.py +70 -57
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/authorized.py +4 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/config.py +4 -2
- lightspeed_stack-0.4.0/src/app/endpoints/conversations_v3.py → lightspeed_stack-0.4.2/src/app/endpoints/conversations_v1.py +54 -132
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/conversations_v2.py +51 -26
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/feedback.py +5 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/health.py +20 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/info.py +8 -2
- lightspeed_stack-0.4.2/src/app/endpoints/mcp_auth.py +92 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/metrics.py +4 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/models.py +67 -8
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/providers.py +3 -3
- lightspeed_stack-0.4.2/src/app/endpoints/query.py +338 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/rags.py +52 -11
- lightspeed_stack-0.4.2/src/app/endpoints/rlsapi_v1.py +501 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/root.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/shields.py +2 -2
- lightspeed_stack-0.4.2/src/app/endpoints/stream_interrupt.py +91 -0
- lightspeed_stack-0.4.2/src/app/endpoints/streaming_query.py +950 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/tools.py +73 -4
- lightspeed_stack-0.4.2/src/app/main.py +233 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/routers.py +20 -14
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/__init__.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/jwk_token.py +4 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/k8s.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/noop.py +3 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/noop_with_token.py +3 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/rh_identity.py +49 -22
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authorization/README.md +3 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authorization/azure_token_manager.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authorization/middleware.py +5 -4
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authorization/resolvers.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/cache_factory.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/in_memory_cache.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/noop_cache.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/postgres_cache.py +3 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/sqlite_cache.py +3 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/metrics/__init__.py +3 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/metrics/utils.py +7 -43
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/cache_entry.py +1 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/config.py +285 -28
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/context.py +10 -10
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/database/conversations.py +31 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/requests.py +214 -20
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/responses.py +332 -69
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/rlsapi/requests.py +37 -3
- lightspeed_stack-0.4.2/src/observability/README.md +97 -0
- lightspeed_stack-0.4.2/src/observability/__init__.py +14 -0
- lightspeed_stack-0.4.2/src/observability/formats/README.md +8 -0
- lightspeed_stack-0.4.2/src/observability/formats/__init__.py +9 -0
- lightspeed_stack-0.4.2/src/observability/formats/rlsapi.py +57 -0
- lightspeed_stack-0.4.2/src/observability/splunk.py +90 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/quota_exceed_error.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/quota_limiter.py +7 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/sql.py +4 -4
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/runners/uvicorn.py +5 -6
- lightspeed_stack-0.4.2/src/telemetry/README.md +8 -0
- lightspeed_stack-0.4.2/src/telemetry/__init__.py +7 -0
- lightspeed_stack-0.4.2/src/telemetry/configuration_snapshot.py +525 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/README.md +21 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/common.py +4 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/connection_decorator.py +2 -1
- lightspeed_stack-0.4.2/src/utils/conversations.py +425 -0
- lightspeed_stack-0.4.2/src/utils/endpoints.py +460 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/llama_stack_version.py +2 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/mcp_auth_headers.py +20 -8
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/mcp_headers.py +37 -6
- lightspeed_stack-0.4.2/src/utils/mcp_oauth_probe.py +101 -0
- lightspeed_stack-0.4.2/src/utils/prompts.py +95 -0
- lightspeed_stack-0.4.2/src/utils/query.py +524 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/quota.py +12 -3
- lightspeed_stack-0.4.2/src/utils/responses.py +1170 -0
- lightspeed_stack-0.4.2/src/utils/schema_dumper.py +85 -0
- lightspeed_stack-0.4.2/src/utils/shields.py +272 -0
- lightspeed_stack-0.4.2/src/utils/stream_interrupts.py +141 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/suid.py +5 -1
- lightspeed_stack-0.4.2/src/utils/token_counter.py +39 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/tool_formatter.py +2 -2
- lightspeed_stack-0.4.2/src/utils/transcripts.py +161 -0
- lightspeed_stack-0.4.2/src/utils/types.py +362 -0
- lightspeed_stack-0.4.2/src/utils/vector_search.py +627 -0
- lightspeed_stack-0.4.2/tests/benchmarks/README.md +1 -0
- lightspeed_stack-0.4.2/tests/benchmarks/conftest.py +119 -0
- lightspeed_stack-0.4.2/tests/benchmarks/data_generators.py +159 -0
- lightspeed_stack-0.4.2/tests/benchmarks/db_benchmarks.py +333 -0
- lightspeed_stack-0.4.2/tests/benchmarks/test_app_database.py +761 -0
- lightspeed_stack-0.4.2/tests/benchmarks/test_app_database_comparison.py +132 -0
- lightspeed_stack-0.4.2/tests/configuration/benchmarks-postgres.yaml +47 -0
- lightspeed_stack-0.4.2/tests/configuration/benchmarks-sqlite.yaml +42 -0
- lightspeed_stack-0.4.2/tests/configuration/run.yaml +150 -0
- lightspeed_stack-0.4.2/tests/e2e/README.md +9 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-azure.yaml +17 -15
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-ci.yaml +17 -22
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-rhaiis.yaml +22 -21
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-rhelai.yaml +17 -15
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-vertexai.yaml +18 -16
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/run-watsonx.yaml +20 -18
- lightspeed_stack-0.4.2/tests/e2e/configuration/README.md +32 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/library-mode/lightspeed-stack-auth-noop-token.yaml +3 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/library-mode/lightspeed-stack-auth-rh-identity.yaml +24 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml +25 -0
- lightspeed_stack-0.4.0/tests/e2e/configuration/library-mode/lightspeed-stack.yaml → lightspeed_stack-0.4.2/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml +6 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml +95 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +39 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack-auth-noop-token.yaml +34 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack-auth-rh-identity.yaml +25 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml +26 -0
- lightspeed_stack-0.4.0/tests/e2e/configuration/server-mode/lightspeed-stack.yaml → lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml +6 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml +96 -0
- lightspeed_stack-0.4.2/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +40 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/authorized_noop.feature +3 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/authorized_noop_token.feature +3 -3
- lightspeed_stack-0.4.2/tests/e2e/features/authorized_rh_identity.feature +163 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/conversation_cache_v2.feature +9 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/conversations.feature +12 -1
- lightspeed_stack-0.4.2/tests/e2e/features/environment.py +432 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/faiss.feature +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/feedback.feature +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/info.feature +14 -22
- lightspeed_stack-0.4.2/tests/e2e/features/mcp.feature +168 -0
- lightspeed_stack-0.4.2/tests/e2e/features/mcp_file_auth.feature +20 -0
- lightspeed_stack-0.4.2/tests/e2e/features/models.feature +40 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/query.feature +76 -16
- lightspeed_stack-0.4.2/tests/e2e/features/rbac.feature +155 -0
- lightspeed_stack-0.4.2/tests/e2e/features/rlsapi_v1.feature +89 -0
- lightspeed_stack-0.4.2/tests/e2e/features/rlsapi_v1_errors.feature +49 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/README.md +6 -0
- lightspeed_stack-0.4.2/tests/e2e/features/steps/auth.py +191 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/common_http.py +27 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/conversation.py +1 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/health.py +9 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/info.py +62 -51
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/llm_query_response.py +78 -8
- lightspeed_stack-0.4.2/tests/e2e/features/steps/models.py +115 -0
- lightspeed_stack-0.4.2/tests/e2e/features/steps/rbac.py +43 -0
- lightspeed_stack-0.4.2/tests/e2e/features/steps/rlsapi_v1.py +65 -0
- lightspeed_stack-0.4.2/tests/e2e/features/steps/token_counters.py +206 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/streaming_query.feature +66 -18
- lightspeed_stack-0.4.2/tests/e2e/mock_jwks_server/Dockerfile +5 -0
- lightspeed_stack-0.4.2/tests/e2e/mock_jwks_server/README.md +8 -0
- lightspeed_stack-0.4.2/tests/e2e/mock_jwks_server/generate_tokens.py +85 -0
- lightspeed_stack-0.4.2/tests/e2e/mock_jwks_server/server.py +66 -0
- lightspeed_stack-0.4.2/tests/e2e/mock_mcp_server/Dockerfile +5 -0
- lightspeed_stack-0.4.2/tests/e2e/mock_mcp_server/server.py +117 -0
- lightspeed_stack-0.4.2/tests/e2e/rag/README.md +2 -0
- lightspeed_stack-0.4.2/tests/e2e/rag/kv_store.db +0 -0
- lightspeed_stack-0.4.2/tests/e2e/secrets/mcp-token +1 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/test_list.txt +7 -0
- lightspeed_stack-0.4.2/tests/e2e/utils/llama_stack_shields.py +104 -0
- lightspeed_stack-0.4.2/tests/e2e/utils/prow_utils.py +217 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/utils/utils.py +35 -1
- {lightspeed_stack-0.4.0/tests/e2e/configuration/server-mode → lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs}/lightspeed-stack-auth-noop-token.yaml +1 -1
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs/lightspeed-stack-auth-rh-identity.yaml +25 -0
- lightspeed_stack-0.4.0/tests/e2e-prow/rhoai/configs/lightspeed-stack.yaml → lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs/lightspeed-stack-invalid-feedback-storage.yaml +2 -2
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs/lightspeed-stack-no-cache.yaml +27 -0
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs/lightspeed-stack-rbac.yaml +94 -0
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/configs/lightspeed-stack.yaml +43 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/configs/run.yaml +47 -40
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/lightspeed/llama-stack.yaml +27 -0
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/manifests/lightspeed/mcp-mock-server.yaml +50 -0
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/manifests/lightspeed/mock-jwks.yaml +46 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-cpu.yaml +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-gpu.yaml +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/pipeline-services.sh +4 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/pipeline.sh +152 -57
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/run-tests.sh +50 -0
- lightspeed_stack-0.4.2/tests/e2e-prow/rhoai/scripts/e2e-ops.sh +234 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/conftest.py +33 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/README.md +4 -1
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_authorized_endpoint.py +35 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/test_config_integration.py +5 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/test_health_integration.py +8 -7
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/test_info_integration.py +2 -1
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_model_list.py +256 -0
- lightspeed_stack-0.4.0/tests/integration/endpoints/test_query_v2_integration.py → lightspeed_stack-0.4.2/tests/integration/endpoints/test_query_integration.py +374 -48
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/test_rlsapi_v1_integration.py +198 -10
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_root_endpoint.py +72 -0
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_stream_interrupt_integration.py +66 -0
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_streaming_query_integration.py +350 -0
- lightspeed_stack-0.4.2/tests/integration/endpoints/test_tools_integration.py +112 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/test_configuration.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/test_openapi_json.py +17 -4
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/test_rh_identity_integration.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/test_version.py +2 -2
- lightspeed_stack-0.4.2/tests/profiles/empty.py +1 -0
- lightspeed_stack-0.4.2/tests/profiles/syntax_error.py +3 -0
- lightspeed_stack-0.4.2/tests/profiles/test_four/profile.py +49 -0
- lightspeed_stack-0.4.2/tests/test_results/.coverage.integration +0 -0
- lightspeed_stack-0.4.2/tests/test_results/.coverage.unit +0 -0
- lightspeed_stack-0.4.2/tests/test_results/coverage_integration.json +1 -0
- lightspeed_stack-0.4.2/tests/test_results/coverage_unit.json +1 -0
- lightspeed_stack-0.4.2/tests/test_results/junit_integration.xml +1 -0
- lightspeed_stack-0.4.2/tests/test_results/junit_unit.xml +1 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/README.md +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/__init__.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/a2a_storage/test_storage_factory.py +18 -11
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/README.md +3 -6
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_a2a.py +94 -87
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_conversations.py +964 -387
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_conversations_v2.py +268 -176
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_feedback.py +18 -6
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_health.py +1 -1
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_mcp_auth.py +339 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_metrics.py +0 -1
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_models.py +474 -0
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_query.py +715 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_rags.py +146 -3
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_rlsapi_v1.py +868 -0
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_stream_interrupt.py +150 -0
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_streaming_query.py +2476 -0
- lightspeed_stack-0.4.2/tests/unit/app/endpoints/test_tools.py +1143 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/test_database.py +2 -2
- lightspeed_stack-0.4.2/tests/unit/app/test_main_middleware.py +177 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/test_routers.py +21 -18
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_api_key_token.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_jwk_token.py +3 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_noop.py +18 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_noop_with_token.py +23 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_rh_identity.py +178 -32
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authorization/README.md +3 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authorization/test_azure_token_manager.py +14 -5
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authorization/test_middleware.py +1 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authorization/test_resolvers.py +10 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/test_cache_factory.py +13 -9
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/test_postgres_cache.py +11 -13
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/test_sqlite_cache.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/conftest.py +1 -1
- lightspeed_stack-0.4.2/tests/unit/metrics/test_utis.py +74 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/README.md +3 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_a2a_state_configuration.py +19 -4
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_authentication_configuration.py +130 -20
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_byok_rag.py +36 -12
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_conversation_history.py +31 -21
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_cors.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_customization.py +8 -4
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_database_configuration.py +7 -5
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_dump_configuration.py +65 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_inference_configuration.py +3 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_jwt_role_rule.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_llama_stack_configuration.py +55 -7
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_model_context_protocol_server.py +58 -3
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_postgresql_database_configuration.py +9 -7
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_quota_handlers_config.py +5 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_quota_limiter_config.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_quota_scheduler_config.py +15 -7
- lightspeed_stack-0.4.2/tests/unit/models/config/test_rag_configuration.py +93 -0
- lightspeed_stack-0.4.2/tests/unit/models/config/test_service_configuration.py +61 -0
- lightspeed_stack-0.4.2/tests/unit/models/config/test_splunk_configuration.py +115 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_tls_configuration.py +9 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/test_user_data_collection.py +20 -6
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/test_feedback_request.py +15 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/test_query_request.py +15 -77
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/README.md +6 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/test_error_responses.py +2 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/test_query_response.py +2 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/test_rag_chunk.py +85 -3
- lightspeed_stack-0.4.2/tests/unit/models/responses/test_response_types.py +83 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/test_successful_responses.py +166 -18
- lightspeed_stack-0.4.2/tests/unit/models/responses/test_types.py +83 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/rlsapi/test_requests.py +201 -38
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/rlsapi/test_responses.py +3 -1
- lightspeed_stack-0.4.2/tests/unit/observability/README.md +8 -0
- lightspeed_stack-0.4.2/tests/unit/observability/__init__.py +1 -0
- lightspeed_stack-0.4.2/tests/unit/observability/formats/README.md +8 -0
- lightspeed_stack-0.4.2/tests/unit/observability/formats/__init__.py +1 -0
- lightspeed_stack-0.4.2/tests/unit/observability/formats/test_rlsapi.py +75 -0
- lightspeed_stack-0.4.2/tests/unit/observability/test_splunk.py +163 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_cluster_quota_limiter.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_connect_pg.py +13 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_quota_limiter_factory.py +54 -20
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_user_quota_limiter.py +1 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/runners/test_uvicorn_runner.py +88 -5
- lightspeed_stack-0.4.2/tests/unit/telemetry/README.md +11 -0
- lightspeed_stack-0.4.2/tests/unit/telemetry/__init__.py +1 -0
- lightspeed_stack-0.4.2/tests/unit/telemetry/conftest.py +388 -0
- lightspeed_stack-0.4.2/tests/unit/telemetry/test_configuration_snapshot.py +711 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/test_client.py +10 -2
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/test_configuration.py +240 -16
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/test_configuration_unknown_fields.py +3 -1
- lightspeed_stack-0.4.2/tests/unit/test_llama_stack_configuration.py +495 -0
- lightspeed_stack-0.4.2/tests/unit/test_log.py +155 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/README.md +13 -1
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_checks.py +73 -7
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_common.py +144 -28
- lightspeed_stack-0.4.2/tests/unit/utils/test_conversations.py +722 -0
- lightspeed_stack-0.4.2/tests/unit/utils/test_endpoints.py +453 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_mcp_auth_headers.py +9 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_mcp_headers.py +99 -0
- lightspeed_stack-0.4.2/tests/unit/utils/test_prompts.py +335 -0
- lightspeed_stack-0.4.2/tests/unit/utils/test_query.py +852 -0
- lightspeed_stack-0.4.2/tests/unit/utils/test_responses.py +2394 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_shields.py +203 -27
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_suid.py +25 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_transcripts.py +45 -55
- lightspeed_stack-0.4.2/tests/unit/utils/test_types.py +328 -0
- lightspeed_stack-0.4.2/tests/unit/utils/test_vector_search.py +504 -0
- lightspeed_stack-0.4.0/src/app/endpoints/conversations.py +0 -390
- lightspeed_stack-0.4.0/src/app/endpoints/query.py +0 -912
- lightspeed_stack-0.4.0/src/app/endpoints/query_v2.py +0 -895
- lightspeed_stack-0.4.0/src/app/endpoints/rlsapi_v1.py +0 -224
- lightspeed_stack-0.4.0/src/app/endpoints/streaming_query.py +0 -1155
- lightspeed_stack-0.4.0/src/app/endpoints/streaming_query_v2.py +0 -478
- lightspeed_stack-0.4.0/src/app/main.py +0 -155
- lightspeed_stack-0.4.0/src/utils/endpoints.py +0 -828
- lightspeed_stack-0.4.0/src/utils/query.py +0 -122
- lightspeed_stack-0.4.0/src/utils/responses.py +0 -56
- lightspeed_stack-0.4.0/src/utils/shields.py +0 -157
- lightspeed_stack-0.4.0/src/utils/token_counter.py +0 -136
- lightspeed_stack-0.4.0/src/utils/transcripts.py +0 -122
- lightspeed_stack-0.4.0/src/utils/types.py +0 -263
- lightspeed_stack-0.4.0/tests/configuration/run.yaml +0 -125
- lightspeed_stack-0.4.0/tests/e2e/README.md +0 -11
- lightspeed_stack-0.4.0/tests/e2e/configuration/README.md +0 -2
- lightspeed_stack-0.4.0/tests/e2e/features/environment.py +0 -267
- lightspeed_stack-0.4.0/tests/e2e/features/steps/auth.py +0 -75
- lightspeed_stack-0.4.0/tests/e2e/rag/kv_store.db +0 -0
- lightspeed_stack-0.4.0/tests/e2e-prow/rhoai/manifests/test-pod/spin-up.yaml +0 -30
- lightspeed_stack-0.4.0/tests/e2e-prow/rhoai/run-tests.sh +0 -17
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_models.py +0 -224
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_query.py +0 -2557
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_query_v2.py +0 -1005
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_rlsapi_v1.py +0 -329
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_streaming_query.py +0 -2468
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_streaming_query_v2.py +0 -627
- lightspeed_stack-0.4.0/tests/unit/app/endpoints/test_tools.py +0 -630
- lightspeed_stack-0.4.0/tests/unit/app/test_main_middleware.py +0 -74
- lightspeed_stack-0.4.0/tests/unit/metrics/test_utis.py +0 -134
- lightspeed_stack-0.4.0/tests/unit/models/config/test_service_configuration.py +0 -39
- lightspeed_stack-0.4.0/tests/unit/test_llama_stack_configuration.py +0 -182
- lightspeed_stack-0.4.0/tests/unit/test_log.py +0 -14
- lightspeed_stack-0.4.0/tests/unit/utils/test_endpoints.py +0 -1143
- lightspeed_stack-0.4.0/tests/unit/utils/test_responses.py +0 -260
- lightspeed_stack-0.4.0/tests/unit/utils/test_types.py +0 -57
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/LICENSE +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/a2a_storage/context_store.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/app/endpoints/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/api_key_token.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/interface.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authentication/utils.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/authorization/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/cache.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/cache/cache_error.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/metrics/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/database/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/database/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/database/base.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/rlsapi/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/rlsapi/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/models/rlsapi/responses.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/cluster_quota_limiter.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/connect_pg.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/connect_sqlite.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/quota_limiter_factory.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/revokable_quota_limiter.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/token_usage_history.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/quota/user_quota_limiter.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/runners/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/runners/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/runners/quota_scheduler.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/src/utils/checks.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/lightspeed-stack-proper-name.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/lightspeed-stack.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/minimal-stack.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/multiline_system_prompt.txt +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/password +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/rag.txt +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/rh-identity-config.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/server.crt +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/server.key +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/configuration/system_prompt.txt +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/.pdm-python +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configs/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/library-mode/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/library-mode/lightspeed-stack-invalid-feedback-storage.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/library-mode/lightspeed-stack-no-cache.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/server-mode/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/server-mode/lightspeed-stack-invalid-feedback-storage.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/configuration/server-mode/lightspeed-stack-no-cache.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/health.feature +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/rest_api.feature +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/smoketests.feature +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/common.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/features/steps/feedback.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/gen_scenario_list.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/test_api.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e/utils/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/gpu/cluster-policy.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/gpu/create-nfd.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/lightspeed/lightspeed-stack.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/namespaces/nfd.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/namespaces/nvidia-operator.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/operators/ds-cluster.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/operators/operatorgroup.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/operators/operators.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-cpu.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-gpu.yaml +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/pipeline-test-pod.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/pipeline-vllm.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/scripts/bootstrap.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/scripts/deploy-vllm.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/scripts/fetch-vllm-image.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/scripts/get-vllm-pod-info.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/e2e-prow/rhoai/scripts/gpu-setup.sh +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/endpoints/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/integration/test_middleware_integration.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/profiles/test/profile.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/profiles/test_three/profile.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/profiles/test_two/test.txt +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/a2a_storage/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/a2a_storage/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/a2a_storage/test_in_memory_context_store.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/a2a_storage/test_sqlite_context_store.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_authorized.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_config.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_info.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_providers.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_root.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/app/endpoints/test_shields.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_auth.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_k8s.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authentication/test_utils.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/authorization/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/cache/test_noop_cache.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/metrics/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/metrics/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/config/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/test_attachment.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/requests/test_feedback_status_update_request.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/responses/test_authorized_response.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/rlsapi/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/models/rlsapi/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_connect_sqlite.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/quota/test_quota_exceed_error.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/runners/README.md +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/runners/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/test_lightspeed_stack.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/__init__.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/auth_helpers.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_connection_decorator.py +0 -0
- {lightspeed_stack-0.4.0 → lightspeed_stack-0.4.2}/tests/unit/utils/test_llama_stack_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lightspeed-stack
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: LLM tooling stack
|
|
5
5
|
Keywords: LLM,RAG
|
|
6
6
|
Maintainer-Email: =?utf-8?b?UGF2ZWwgVGnFoW5vdnNrw70=?= <tisnik@centrum.cz>
|
|
@@ -218,8 +218,9 @@ Requires-Python: <3.14,>=3.12
|
|
|
218
218
|
Requires-Dist: fastapi>=0.115.12
|
|
219
219
|
Requires-Dist: uvicorn>=0.34.3
|
|
220
220
|
Requires-Dist: kubernetes>=30.1.0
|
|
221
|
-
Requires-Dist: llama-stack==0.3
|
|
222
|
-
Requires-Dist: llama-stack-client==0.3
|
|
221
|
+
Requires-Dist: llama-stack==0.4.3
|
|
222
|
+
Requires-Dist: llama-stack-client==0.4.3
|
|
223
|
+
Requires-Dist: llama-stack-api==0.4.4
|
|
223
224
|
Requires-Dist: rich>=14.0.0
|
|
224
225
|
Requires-Dist: cachetools>=6.1.0
|
|
225
226
|
Requires-Dist: prometheus-client>=0.22.1
|
|
@@ -240,7 +241,9 @@ Requires-Dist: urllib3==2.6.3
|
|
|
240
241
|
Requires-Dist: PyYAML>=6.0.0
|
|
241
242
|
Requires-Dist: einops>=0.8.1
|
|
242
243
|
Requires-Dist: azure-core>=1.38.0
|
|
243
|
-
Requires-Dist: azure-identity
|
|
244
|
+
Requires-Dist: azure-identity>=1.21.0
|
|
245
|
+
Requires-Dist: pyasn1>=0.6.2
|
|
246
|
+
Requires-Dist: jinja2>=3.1.0
|
|
244
247
|
Description-Content-Type: text/markdown
|
|
245
248
|
|
|
246
249
|
# lightspeed-stack
|
|
@@ -251,7 +254,7 @@ Description-Content-Type: text/markdown
|
|
|
251
254
|
[](https://github.com/lightspeed-core/lightspeed-stack/blob/main/LICENSE)
|
|
252
255
|
[](https://www.python.org/)
|
|
253
256
|
[](https://www.python.org/)
|
|
254
|
-
[](https://github.com/lightspeed-core/lightspeed-stack/releases/tag/0.4.
|
|
257
|
+
[](https://github.com/lightspeed-core/lightspeed-stack/releases/tag/0.4.2)
|
|
255
258
|
|
|
256
259
|
Lightspeed Core Stack (LCS) is an AI-powered assistant that provides answers to product questions using backend LLM services, agents, and RAG databases.
|
|
257
260
|
|
|
@@ -260,94 +263,98 @@ The service includes comprehensive user data collection capabilities for various
|
|
|
260
263
|
|
|
261
264
|
<!-- vim-markdown-toc GFM -->
|
|
262
265
|
|
|
263
|
-
* [lightspeed-stack](#lightspeed-stack)
|
|
264
|
-
* [About The Project](#about-the-project)
|
|
265
266
|
* [Architecture](#architecture)
|
|
266
267
|
* [Prerequisites](#prerequisites)
|
|
267
268
|
* [Installation](#installation)
|
|
268
269
|
* [Run LCS locally](#run-lcs-locally)
|
|
269
270
|
* [Configuration](#configuration)
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
* [
|
|
294
|
-
* [System
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
* [
|
|
301
|
-
|
|
271
|
+
* [LLM Compatibility](#llm-compatibility)
|
|
272
|
+
* [Set LLM provider and model](#set-llm-provider-and-model)
|
|
273
|
+
* [Selecting provider and model](#selecting-provider-and-model)
|
|
274
|
+
* [Provider and model selection in REST API request](#provider-and-model-selection-in-rest-api-request)
|
|
275
|
+
* [Default provider and model](#default-provider-and-model)
|
|
276
|
+
* [Supported providers](#supported-providers)
|
|
277
|
+
* [Integration with Llama Stack](#integration-with-llama-stack)
|
|
278
|
+
* [Llama Stack as separate server](#llama-stack-as-separate-server)
|
|
279
|
+
* [MCP Server and Tool Configuration](#mcp-server-and-tool-configuration)
|
|
280
|
+
* [Configuring MCP Servers](#configuring-mcp-servers)
|
|
281
|
+
* [Configuring MCP Server Authentication](#configuring-mcp-server-authentication)
|
|
282
|
+
* [1. Static Tokens from Files (Recommended for Service Credentials)](#1-static-tokens-from-files-recommended-for-service-credentials)
|
|
283
|
+
* [2. Kubernetes Service Account Tokens (For K8s Deployments)](#2-kubernetes-service-account-tokens-for-k8s-deployments)
|
|
284
|
+
* [3. Client-Provided Tokens (For Per-User Authentication)](#3-client-provided-tokens-for-per-user-authentication)
|
|
285
|
+
* [4. OAuth (For MCP Servers Requiring OAuth)](#4-oauth-for-mcp-servers-requiring-oauth)
|
|
286
|
+
* [Client-Authenticated MCP Servers Discovery](#client-authenticated-mcp-servers-discovery)
|
|
287
|
+
* [Combining Authentication Methods](#combining-authentication-methods)
|
|
288
|
+
* [Authentication Method Comparison](#authentication-method-comparison)
|
|
289
|
+
* [Important: Automatic Server Skipping](#important-automatic-server-skipping)
|
|
290
|
+
* [Llama Stack project and configuration](#llama-stack-project-and-configuration)
|
|
291
|
+
* [Check connection to Llama Stack](#check-connection-to-llama-stack)
|
|
292
|
+
* [Llama Stack as client library](#llama-stack-as-client-library)
|
|
293
|
+
* [Llama Stack version check](#llama-stack-version-check)
|
|
294
|
+
* [User data collection](#user-data-collection)
|
|
295
|
+
* [System prompt](#system-prompt)
|
|
296
|
+
* [System Prompt Path](#system-prompt-path)
|
|
297
|
+
* [System Prompt Literal](#system-prompt-literal)
|
|
298
|
+
* [Custom Profile](#custom-profile)
|
|
299
|
+
* [Control model/provider overrides via authorization](#control-modelprovider-overrides-via-authorization)
|
|
300
|
+
* [Safety Shields](#safety-shields)
|
|
301
|
+
* [Authentication](#authentication)
|
|
302
|
+
* [CORS](#cors)
|
|
303
|
+
* [Default values](#default-values)
|
|
304
|
+
* [Allow credentials](#allow-credentials)
|
|
302
305
|
* [RAG Configuration](#rag-configuration)
|
|
303
|
-
|
|
306
|
+
* [Example configurations for inference](#example-configurations-for-inference)
|
|
304
307
|
* [Usage](#usage)
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
* [
|
|
309
|
-
|
|
310
|
-
* [
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
308
|
+
* [CLI options](#cli-options)
|
|
309
|
+
* [Dumping configuration](#dumping-configuration)
|
|
310
|
+
* [Dumping configuration schema](#dumping-configuration-schema)
|
|
311
|
+
* [Make targets](#make-targets)
|
|
312
|
+
* [Running Linux container image](#running-linux-container-image)
|
|
313
|
+
* [Building Container Images](#building-container-images)
|
|
314
|
+
* [Llama-Stack as Separate Service (Server Mode)](#llama-stack-as-separate-service-server-mode)
|
|
315
|
+
* [macOS (arm64)](#macos-arm64)
|
|
316
|
+
* [Llama-Stack as Library (Library Mode)](#llama-stack-as-library-library-mode)
|
|
317
|
+
* [macOS](#macos)
|
|
318
|
+
* [Verify it's running properly](#verify-its-running-properly)
|
|
319
|
+
* [Custom Container Image](#custom-container-image)
|
|
314
320
|
* [Endpoints](#endpoints)
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
321
|
+
* [OpenAPI specification](#openapi-specification)
|
|
322
|
+
* [Readiness Endpoint](#readiness-endpoint)
|
|
323
|
+
* [Liveness Endpoint](#liveness-endpoint)
|
|
324
|
+
* [Models endpoint](#models-endpoint)
|
|
318
325
|
* [Database structure](#database-structure)
|
|
319
326
|
* [Publish the service as Python package on PyPI](#publish-the-service-as-python-package-on-pypi)
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
327
|
+
* [Generate distribution archives to be uploaded into Python registry](#generate-distribution-archives-to-be-uploaded-into-python-registry)
|
|
328
|
+
* [Upload distribution archives into selected Python registry](#upload-distribution-archives-into-selected-python-registry)
|
|
329
|
+
* [Packages on PyPI and Test PyPI](#packages-on-pypi-and-test-pypi)
|
|
323
330
|
* [Contributing](#contributing)
|
|
324
331
|
* [Testing](#testing)
|
|
325
332
|
* [License](#license)
|
|
326
333
|
* [Additional tools](#additional-tools)
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
+
* [Utility to generate OpenAPI schema](#utility-to-generate-openapi-schema)
|
|
335
|
+
* [Path](#path)
|
|
336
|
+
* [Usage](#usage-1)
|
|
337
|
+
* [Makefile target to generate OpenAPI specification](#makefile-target-to-generate-openapi-specification)
|
|
338
|
+
* [Utility to generate documentation from source code](#utility-to-generate-documentation-from-source-code)
|
|
339
|
+
* [Path](#path-1)
|
|
340
|
+
* [Usage](#usage-2)
|
|
334
341
|
* [Data Export Integration](#data-export-integration)
|
|
335
|
-
|
|
336
|
-
|
|
342
|
+
* [Quick Integration](#quick-integration)
|
|
343
|
+
* [Documentation](#documentation)
|
|
337
344
|
* [Project structure](#project-structure)
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
345
|
+
* [Configuration classes](#configuration-classes)
|
|
346
|
+
* [REST API](#rest-api)
|
|
347
|
+
* [Sequence diagrams](#sequence-diagrams)
|
|
348
|
+
* [Query endpoint REST API handler](#query-endpoint-rest-api-handler)
|
|
349
|
+
* [Streaming query endpoint REST API handler](#streaming-query-endpoint-rest-api-handler)
|
|
350
|
+
* [Versioning](#versioning)
|
|
344
351
|
* [Development Tools](#development-tools)
|
|
345
|
-
|
|
352
|
+
* [MCP Mock Server](#mcp-mock-server)
|
|
346
353
|
* [Konflux](#konflux)
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
354
|
+
* [Updating Dependencies for Hermetic Builds](#updating-dependencies-for-hermetic-builds)
|
|
355
|
+
* [When to Update Dependency Files](#when-to-update-dependency-files)
|
|
356
|
+
* [Updating Python Dependencies](#updating-python-dependencies)
|
|
357
|
+
* [Updating RPM Dependencies](#updating-rpm-dependencies)
|
|
351
358
|
|
|
352
359
|
<!-- vim-markdown-toc -->
|
|
353
360
|
|
|
@@ -371,14 +378,14 @@ Lightspeed Core Stack is based on the FastAPI framework (Uvicorn). The service i
|
|
|
371
378
|
|
|
372
379
|
Lightspeed Stack supports multiple LLM providers.
|
|
373
380
|
|
|
374
|
-
| Provider
|
|
375
|
-
|
|
376
|
-
| OpenAI
|
|
377
|
-
| Azure OpenAI
|
|
378
|
-
| Google VertexAI| https://cloud.google.com/vertex-ai
|
|
379
|
-
| IBM WatsonX
|
|
380
|
-
| RHOAI (vLLM)
|
|
381
|
-
| RHEL AI (vLLM)
|
|
381
|
+
| Provider | Setup Documentation |
|
|
382
|
+
|-----------------|-----------------------------------------------------------------------|
|
|
383
|
+
| OpenAI | https://platform.openai.com |
|
|
384
|
+
| Azure OpenAI | https://azure.microsoft.com/en-us/products/ai-services/openai-service |
|
|
385
|
+
| Google VertexAI | https://cloud.google.com/vertex-ai |
|
|
386
|
+
| IBM WatsonX | https://www.ibm.com/products/watsonx |
|
|
387
|
+
| RHOAI (vLLM) | See tests/e2e-prow/rhoai/configs/run.yaml |
|
|
388
|
+
| RHEL AI (vLLM) | See tests/e2e/configs/run-rhelai.yaml |
|
|
382
389
|
|
|
383
390
|
See `docs/providers.md` for configuration details.
|
|
384
391
|
|
|
@@ -441,17 +448,17 @@ To quickly get hands on LCS, we can run it using the default configurations prov
|
|
|
441
448
|
Lightspeed Core Stack (LCS) provides support for Large Language Model providers. The models listed in the table below represent specific examples that have been tested within LCS.
|
|
442
449
|
__Note__: Support for individual models is dependent on the specific inference provider's implementation within the currently supported version of Llama Stack.
|
|
443
450
|
|
|
444
|
-
| Provider
|
|
445
|
-
|
|
446
|
-
| OpenAI
|
|
447
|
-
| OpenAI
|
|
448
|
-
| RHOAI (vLLM)| meta-llama/Llama-3.2-1B-Instruct
|
|
449
|
-
| RHAIIS (vLLM)| meta-llama/Llama-3.1-8B-Instruct
|
|
450
|
-
| RHEL AI (vLLM)| meta-llama/Llama-3.1-8B-Instruct
|
|
451
|
-
| Azure
|
|
452
|
-
| Azure
|
|
453
|
-
| VertexAI
|
|
454
|
-
| WatsonX
|
|
451
|
+
| Provider | Model | Tool Calling | provider_type | Example |
|
|
452
|
+
|----------------|------------------------------------------------------------------------------|---------------|------------------|----------------------------------------------------------------------------|
|
|
453
|
+
| OpenAI | gpt-5, gpt-4o, gpt-4-turbo, gpt-4.1, o1, o3, o4 | Yes | remote::openai | [1](examples/openai-faiss-run.yaml) [2](examples/openai-pgvector-run.yaml) |
|
|
454
|
+
| OpenAI | gpt-3.5-turbo, gpt-4 | No | remote::openai | |
|
|
455
|
+
| RHOAI (vLLM) | meta-llama/Llama-3.2-1B-Instruct | Yes | remote::vllm | [1](tests/e2e-prow/rhoai/configs/run.yaml) |
|
|
456
|
+
| RHAIIS (vLLM) | meta-llama/Llama-3.1-8B-Instruct | Yes | remote::vllm | [1](tests/e2e/configs/run-rhaiis.yaml) |
|
|
457
|
+
| RHEL AI (vLLM) | meta-llama/Llama-3.1-8B-Instruct | Yes | remote::vllm | [1](tests/e2e/configs/run-rhelai.yaml) |
|
|
458
|
+
| Azure | gpt-5, gpt-5-mini, gpt-5-nano, gpt-4o-mini, o3-mini, o4-mini, o1 | Yes | remote::azure | [1](examples/azure-run.yaml) |
|
|
459
|
+
| Azure | gpt-5-chat, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1-mini | No or limited | remote::azure | |
|
|
460
|
+
| VertexAI | google/gemini-2.0-flash, google/gemini-2.5-flash, google/gemini-2.5-pro [^1] | Yes | remote::vertexai | [1](examples/vertexai-run.yaml) |
|
|
461
|
+
| WatsonX | meta-llama/llama-3-3-70b-instruct | Yes | remote::watsonx | [1](examples/watsonx-run.yaml) |
|
|
455
462
|
|
|
456
463
|
[^1]: List of models is limited by design in llama-stack, future versions will probably allow to use more models (see [here](https://github.com/llamastack/llama-stack/blob/release-0.3.x/llama_stack/providers/remote/inference/vertexai/vertexai.py#L54))
|
|
457
464
|
|
|
@@ -571,6 +578,15 @@ user_data_collection:
|
|
|
571
578
|
|
|
572
579
|
**Important**: Only MCP servers defined in the `lightspeed-stack.yaml` configuration are available to the agents. Tools configured in the llama-stack `run.yaml` are not accessible to lightspeed-core agents.
|
|
573
580
|
|
|
581
|
+
Besides configuring the MCP Servers in `lightspeed-stack.yaml` we also need to enable the appropriate tool in llama-stack's `run.yaml` file under the `tool_runtime` section. Here's an example using the default `provider_id` name used by lightspeed-stack for MCPs:
|
|
582
|
+
|
|
583
|
+
```yaml
|
|
584
|
+
tool_runtime:
|
|
585
|
+
- provider_id: model-context-protocol
|
|
586
|
+
provider_type: remote::model-context-protocol
|
|
587
|
+
config: {}
|
|
588
|
+
```
|
|
589
|
+
|
|
574
590
|
#### Configuring MCP Servers
|
|
575
591
|
|
|
576
592
|
MCP (Model Context Protocol) servers provide tools and capabilities to the AI agents. These are configured in the `mcp_servers` section of your `lightspeed-stack.yaml`.
|
|
@@ -581,8 +597,9 @@ Each MCP server requires two fields:
|
|
|
581
597
|
- `name`: Unique identifier for the MCP server
|
|
582
598
|
- `url`: The endpoint where the MCP server is running
|
|
583
599
|
|
|
584
|
-
And
|
|
600
|
+
And optional fields:
|
|
585
601
|
- `provider_id`: MCP provider identification (defaults to `"model-context-protocol"`)
|
|
602
|
+
- `headers`: List of HTTP header names to automatically forward from the incoming request to this MCP server (see [Automatic Header Propagation](#5-automatic-header-propagation-for-gateway-injected-headers))
|
|
586
603
|
|
|
587
604
|
**Minimal Example:**
|
|
588
605
|
|
|
@@ -598,7 +615,7 @@ In addition to the basic configuration above, you can configure authentication h
|
|
|
598
615
|
|
|
599
616
|
#### Configuring MCP Server Authentication
|
|
600
617
|
|
|
601
|
-
Lightspeed Core Stack supports
|
|
618
|
+
Lightspeed Core Stack supports four methods for authenticating with MCP servers, each suited for different use cases:
|
|
602
619
|
|
|
603
620
|
##### 1. Static Tokens from Files (Recommended for Service Credentials)
|
|
604
621
|
|
|
@@ -617,7 +634,7 @@ The secret files should contain only the header value (tokens are automatically
|
|
|
617
634
|
|
|
618
635
|
```bash
|
|
619
636
|
# /var/secrets/api-token
|
|
620
|
-
|
|
637
|
+
sk-abc123def456...
|
|
621
638
|
|
|
622
639
|
# /var/secrets/api-key
|
|
623
640
|
my-api-key-value
|
|
@@ -635,7 +652,7 @@ mcp_servers:
|
|
|
635
652
|
Authorization: "kubernetes" # Uses user's k8s token from request auth
|
|
636
653
|
```
|
|
637
654
|
|
|
638
|
-
|
|
655
|
+
**Note:** Kubernetes token-based MCP authorization only works when Lightspeed Core Stack is configured with Kubernetes authentication (`authentication.module` is `k8s`) or `noop-with-token`. For any other authentication types, MCP servers configured with `Authorization: "kubernetes"` are removed from the available MCP servers list.
|
|
639
656
|
|
|
640
657
|
##### 3. Client-Provided Tokens (For Per-User Authentication)
|
|
641
658
|
|
|
@@ -663,6 +680,83 @@ curl -X POST "http://localhost:8080/v1/query" \
|
|
|
663
680
|
|
|
664
681
|
**Structure**: `MCP-HEADERS: {"<server-name>": {"<header-name>": "<header-value>", ...}, ...}`
|
|
665
682
|
|
|
683
|
+
##### 4. OAuth (For MCP Servers Requiring OAuth)
|
|
684
|
+
|
|
685
|
+
Use the special `"oauth"` keyword when the MCP server requires OAuth and the client will supply a token (e.g. via `MCP-HEADERS` after obtaining it from an OAuth flow):
|
|
686
|
+
|
|
687
|
+
```yaml
|
|
688
|
+
mcp_servers:
|
|
689
|
+
- name: "oauth-protected-service"
|
|
690
|
+
url: "https://mcp.example.com"
|
|
691
|
+
authorization_headers:
|
|
692
|
+
Authorization: "oauth" # Token provided via MCP-HEADERS (from OAuth flow)
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
When no token is provided for an OAuth-configured server, the service may respond with **401 Unauthorized** and a **`WWW-Authenticate`** header (probed from the MCP server). Clients can use this to drive an OAuth flow and then retry with the token in `MCP-HEADERS`.
|
|
696
|
+
|
|
697
|
+
##### 5. Automatic Header Propagation (For Gateway-Injected Headers)
|
|
698
|
+
|
|
699
|
+
Use the `headers` field to automatically forward specific headers from the incoming HTTP request to an MCP server. This is designed for environments where infrastructure components (e.g. API gateways) inject headers that MCP servers need but clients cannot provide.
|
|
700
|
+
|
|
701
|
+
**HCC Use Case:** In Hybrid Cloud Console (HCC), the gateway strips the client's `Authorization` header and replaces it with `x-rh-identity` (a base64-encoded user identity). Backend services use `x-rh-identity` to identify users. Since clients never see this header, the existing `MCP-HEADERS` mechanism cannot be used. Instead, configure `headers` to automatically forward it:
|
|
702
|
+
|
|
703
|
+
```yaml
|
|
704
|
+
mcp_servers:
|
|
705
|
+
- name: "rbac"
|
|
706
|
+
url: "http://rbac-service:8080"
|
|
707
|
+
headers:
|
|
708
|
+
- x-rh-identity
|
|
709
|
+
- x-rh-insights-request-id
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
When a request arrives at Lightspeed with these headers, they are automatically extracted and forwarded to the `rbac` MCP server. No client-side configuration is needed.
|
|
713
|
+
|
|
714
|
+
**Key behaviors:**
|
|
715
|
+
|
|
716
|
+
- **Case-insensitive matching**: Header names in the allowlist are matched case-insensitively against the incoming request.
|
|
717
|
+
- **Missing headers are skipped**: If a header in the allowlist is not present on the incoming request, it is silently skipped. The MCP server is **not** skipped (unlike `authorization_headers` behavior).
|
|
718
|
+
- **Additive with other methods**: Propagated headers can be combined with `authorization_headers` and `MCP-HEADERS`. If the same header name appears in both `authorization_headers` and `headers`, the `authorization_headers` value takes precedence.
|
|
719
|
+
|
|
720
|
+
**Combined example:**
|
|
721
|
+
|
|
722
|
+
```yaml
|
|
723
|
+
mcp_servers:
|
|
724
|
+
- name: "notifications"
|
|
725
|
+
url: "http://notifications-service:8080"
|
|
726
|
+
headers:
|
|
727
|
+
- x-rh-identity # From incoming request
|
|
728
|
+
authorization_headers:
|
|
729
|
+
X-API-Key: "/var/secrets/notifications-key" # Static service credential
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
##### Client-Authenticated MCP Servers Discovery
|
|
733
|
+
|
|
734
|
+
To help clients determine which MCP servers require client-provided tokens, use the **MCP Client Auth Options** endpoint:
|
|
735
|
+
|
|
736
|
+
```bash
|
|
737
|
+
GET /v1/mcp-auth/client-options
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
**Response:**
|
|
741
|
+
```json
|
|
742
|
+
{
|
|
743
|
+
"servers": [
|
|
744
|
+
{
|
|
745
|
+
"name": "user-specific-service",
|
|
746
|
+
"client_auth_headers": ["Authorization", "X-User-Token"]
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
"name": "github-integration",
|
|
750
|
+
"client_auth_headers": ["Authorization"]
|
|
751
|
+
}
|
|
752
|
+
]
|
|
753
|
+
}
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
This endpoint returns only MCP servers configured with `authorization_headers: "client"`, along with the specific header names that need to be provided via `MCP-HEADERS`. Servers using file-based or Kubernetes authentication are not included in this response.
|
|
757
|
+
|
|
758
|
+
**Use case:** Clients can call this endpoint at startup or before making requests to discover which servers they can authenticate with using their own tokens.
|
|
759
|
+
|
|
666
760
|
##### Combining Authentication Methods
|
|
667
761
|
|
|
668
762
|
You can mix and match authentication methods across different MCP servers, and even combine multiple methods for a single server:
|
|
@@ -691,11 +785,13 @@ mcp_servers:
|
|
|
691
785
|
|
|
692
786
|
##### Authentication Method Comparison
|
|
693
787
|
|
|
694
|
-
| Method
|
|
695
|
-
|
|
696
|
-
| **Static File**
|
|
697
|
-
| **Kubernetes**
|
|
698
|
-
| **Client**
|
|
788
|
+
| Method | Use Case | Configuration | Token Scope | Example |
|
|
789
|
+
|------------------------|----------------------------------|----------------------------------|------------------------------------|-------------------------------|
|
|
790
|
+
| **Static File** | Service tokens, API keys | File path in config | Global (all users) | `"/var/secrets/token"` |
|
|
791
|
+
| **Kubernetes** | K8s service accounts | `"kubernetes"` keyword | Per-user (from auth) | `"kubernetes"` |
|
|
792
|
+
| **Client** | User-specific tokens | `"client"` keyword + HTTP header | Per-request | `"client"` |
|
|
793
|
+
| **OAuth** | OAuth-protected MCP servers | `"oauth"` keyword + HTTP header | Per-request (from OAuth flow) | `"oauth"` |
|
|
794
|
+
| **Header Propagation** | Gateway-injected headers (HCC) | `headers` list | Per-request (from incoming request)| `headers: [x-rh-identity]` |
|
|
699
795
|
|
|
700
796
|
##### Important: Automatic Server Skipping
|
|
701
797
|
|
|
@@ -704,6 +800,7 @@ mcp_servers:
|
|
|
704
800
|
**Examples:**
|
|
705
801
|
- A server with `Authorization: "kubernetes"` will be skipped if the user's request doesn't include a Kubernetes token
|
|
706
802
|
- A server with `Authorization: "client"` will be skipped if no `MCP-HEADERS` are provided in the request
|
|
803
|
+
- A server with `Authorization: "oauth"` and no token in `MCP-HEADERS` may cause the API to return **401 Unauthorized** with a **`WWW-Authenticate`** header (so the client can perform OAuth and retry)
|
|
707
804
|
- A server with multiple headers will be skipped if **any** required header cannot be resolved
|
|
708
805
|
|
|
709
806
|
Skipped servers are logged as warnings. Check Lightspeed Core logs to see which servers were skipped and why.
|
|
@@ -872,6 +969,13 @@ utilized:
|
|
|
872
969
|
1. If the `shield_id` starts with `inout_`, it will be used both for input and output.
|
|
873
970
|
1. Otherwise, it will be used for input only.
|
|
874
971
|
|
|
972
|
+
Additionally, an optional list parameter `shield_ids` can be specified in `/query` and `/streaming_query` endpoints to override which shields are applied. You can use this config to disable shield overrides:
|
|
973
|
+
|
|
974
|
+
```yaml
|
|
975
|
+
customization:
|
|
976
|
+
disable_shield_ids_override: true
|
|
977
|
+
```
|
|
978
|
+
|
|
875
979
|
## Authentication
|
|
876
980
|
|
|
877
981
|
See [authentication and authorization](docs/auth.md).
|
|
@@ -943,11 +1047,28 @@ options:
|
|
|
943
1047
|
-v, --verbose make it verbose
|
|
944
1048
|
-d, --dump-configuration
|
|
945
1049
|
dump actual configuration into JSON file and quit
|
|
1050
|
+
-s, --dump-schema dump configuration schema into OpenAPI-compatible file and quit
|
|
946
1051
|
-c CONFIG_FILE, --config CONFIG_FILE
|
|
947
1052
|
path to configuration file (default: lightspeed-stack.yaml)
|
|
948
1053
|
|
|
949
1054
|
```
|
|
950
1055
|
|
|
1056
|
+
## CLI options
|
|
1057
|
+
|
|
1058
|
+
### Dumping configuration
|
|
1059
|
+
|
|
1060
|
+
If `--dump-configuration` CLI option is provided, LCORE writes the active
|
|
1061
|
+
configuration to a file named `configuration.json` and exits (exits with status
|
|
1062
|
+
1 on failure).
|
|
1063
|
+
|
|
1064
|
+
### Dumping configuration schema
|
|
1065
|
+
|
|
1066
|
+
If `--dump-schema` CLI option is provided, LCORE writes the active
|
|
1067
|
+
configuration schema to a file named `schema.json` and exits (exits with status
|
|
1068
|
+
1 on failure).
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
|
|
951
1072
|
## Make targets
|
|
952
1073
|
|
|
953
1074
|
```
|
|
@@ -956,14 +1077,19 @@ Usage: make <OPTIONS> ... <TARGETS>
|
|
|
956
1077
|
Available targets are:
|
|
957
1078
|
|
|
958
1079
|
run Run the service locally
|
|
1080
|
+
help Show this help screen
|
|
1081
|
+
run-llama-stack Start Llama Stack with enriched config (for local service mode)
|
|
959
1082
|
test-unit Run the unit tests
|
|
960
1083
|
test-integration Run integration tests tests
|
|
961
1084
|
test-e2e Run end to end tests for the service
|
|
1085
|
+
test-e2e-local Run end to end tests for the service
|
|
1086
|
+
benchmarks Run benchmarks
|
|
962
1087
|
check-types Checks type hints in sources
|
|
963
1088
|
security-check Check the project for security issues
|
|
964
1089
|
format Format the code into unified format
|
|
965
1090
|
schema Generate OpenAPI schema file
|
|
966
1091
|
openapi-doc Generate OpenAPI documentation
|
|
1092
|
+
generate-documentation Generate documentation
|
|
967
1093
|
requirements.txt Generate requirements.txt file containing hashes for all non-devel packages
|
|
968
1094
|
doc Generate documentation for developers
|
|
969
1095
|
docs/config.puml Generate PlantUML class diagram for configuration
|
|
@@ -978,7 +1104,8 @@ ruff Check source code using Ruff linter
|
|
|
978
1104
|
verify Run all linters
|
|
979
1105
|
distribution-archives Generate distribution archives to be uploaded into Python registry
|
|
980
1106
|
upload-distribution-archives Upload distribution archives into Python registry
|
|
981
|
-
|
|
1107
|
+
konflux-requirements Generate hermetic requirements.*.txt file for konflux build
|
|
1108
|
+
konflux-rpm-lock Generate rpm.lock.yaml file for konflux build
|
|
982
1109
|
```
|
|
983
1110
|
|
|
984
1111
|
## Running Linux container image
|
|
@@ -1220,6 +1347,62 @@ The liveness endpoint performs a basic health check to verify the service is ali
|
|
|
1220
1347
|
}
|
|
1221
1348
|
```
|
|
1222
1349
|
|
|
1350
|
+
## Models endpoint
|
|
1351
|
+
|
|
1352
|
+
**Endpoint:** `GET /v1/models`
|
|
1353
|
+
|
|
1354
|
+
Process GET requests and returns a list of available models from the Llama
|
|
1355
|
+
Stack service. It is possible to specify "model_type" query parameter that is
|
|
1356
|
+
used as a filter. For example, if model type is set to "llm", only LLM models
|
|
1357
|
+
will be returned:
|
|
1358
|
+
|
|
1359
|
+
```bash
|
|
1360
|
+
curl http://localhost:8080/v1/models?model_type=llm
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
The "model_type" query parameter is optional. When not specified, all models
|
|
1364
|
+
will be returned.
|
|
1365
|
+
|
|
1366
|
+
**Response Body:**
|
|
1367
|
+
```json
|
|
1368
|
+
{
|
|
1369
|
+
"models": [
|
|
1370
|
+
{
|
|
1371
|
+
"identifier": "sentence-transformers/.llama",
|
|
1372
|
+
"metadata": {
|
|
1373
|
+
"embedding_dimension": 384
|
|
1374
|
+
},
|
|
1375
|
+
"api_model_type": "embedding",
|
|
1376
|
+
"provider_id": "sentence-transformers",
|
|
1377
|
+
"type": "model",
|
|
1378
|
+
"provider_resource_id": ".llama",
|
|
1379
|
+
"model_type": "embedding"
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"identifier": "openai/gpt-4o-mini",
|
|
1383
|
+
"metadata": {},
|
|
1384
|
+
"api_model_type": "llm",
|
|
1385
|
+
"provider_id": "openai",
|
|
1386
|
+
"type": "model",
|
|
1387
|
+
"provider_resource_id": "gpt-4o-mini",
|
|
1388
|
+
"model_type": "llm"
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"identifier": "sentence-transformers/nomic-ai/nomic-embed-text-v1.5",
|
|
1392
|
+
"metadata": {
|
|
1393
|
+
"embedding_dimension": 768
|
|
1394
|
+
},
|
|
1395
|
+
"api_model_type": "embedding",
|
|
1396
|
+
"provider_id": "sentence-transformers",
|
|
1397
|
+
"type": "model",
|
|
1398
|
+
"provider_resource_id": "nomic-ai/nomic-embed-text-v1.5",
|
|
1399
|
+
"model_type": "embedding"
|
|
1400
|
+
}
|
|
1401
|
+
]
|
|
1402
|
+
}
|
|
1403
|
+
```
|
|
1404
|
+
|
|
1405
|
+
|
|
1223
1406
|
# Database structure
|
|
1224
1407
|
|
|
1225
1408
|
Database structure is described on [this page](https://lightspeed-core.github.io/lightspeed-stack/DB/index.html)
|
|
@@ -1440,7 +1623,10 @@ The script also updates the Tekton pipeline configurations (`.tekton/lightspeed-
|
|
|
1440
1623
|
|
|
1441
1624
|
### Updating RPM Dependencies
|
|
1442
1625
|
|
|
1443
|
-
**Prerequisites:**
|
|
1626
|
+
**Prerequisites:**
|
|
1627
|
+
- Install [rpm-lockfile-prototype](https://github.com/konflux-ci/rpm-lockfile-prototype?tab=readme-ov-file#installation)
|
|
1628
|
+
- Have an active RHEL Subscription, get activation keys from [RH console](https://console.redhat.com/insights/connector/activation-keys)
|
|
1629
|
+
- Have `dnf` installed in system
|
|
1444
1630
|
|
|
1445
1631
|
**Steps:**
|
|
1446
1632
|
|
|
@@ -1448,12 +1634,24 @@ The script also updates the Tekton pipeline configurations (`.tekton/lightspeed-
|
|
|
1448
1634
|
|
|
1449
1635
|
2. **If you changed the base image**, extract its repo file:
|
|
1450
1636
|
```shell
|
|
1637
|
+
# UBI images
|
|
1451
1638
|
podman run -it $BASE_IMAGE cat /etc/yum.repos.d/ubi.repo > ubi.repo
|
|
1639
|
+
# RHEL images
|
|
1640
|
+
podman run -it $BASE_IMAGE cat /etc/yum.repos.d/redhat.repo > redhat.repo
|
|
1641
|
+
```
|
|
1642
|
+
If the repo file contains too many entries, we can filter them and keep only required repositories.
|
|
1643
|
+
Here is the command to check active repositories:
|
|
1644
|
+
```shell
|
|
1645
|
+
dnf repolist
|
|
1646
|
+
```
|
|
1647
|
+
Replace the architecture tag (`uname -m`) to `$basearch` so that rpm-lockfile-prototype can replace it with requested architecture names.
|
|
1648
|
+
```shell
|
|
1649
|
+
sed -i "s/$(uname -m)/\$basearch/g" redhat.repo
|
|
1452
1650
|
```
|
|
1453
1651
|
|
|
1454
|
-
|
|
1652
|
+
1. **Generate the lock file**:
|
|
1455
1653
|
```shell
|
|
1456
|
-
rpm-
|
|
1654
|
+
make konflux-rpm-lock
|
|
1457
1655
|
```
|
|
1458
1656
|
|
|
1459
1657
|
This creates `rpms.lock.yaml` with pinned RPM versions.
|