lightspeed-stack 0.7.1__tar.gz → 0.8.0rc1__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.
Files changed (1311) hide show
  1. lightspeed_stack-0.8.0rc1/PKG-INFO +1829 -0
  2. lightspeed_stack-0.8.0rc1/README.md +1565 -0
  3. lightspeed_stack-0.8.0rc1/pyproject.toml +279 -0
  4. lightspeed_stack-0.8.0rc1/src/a2a_storage/context_store.py +62 -0
  5. lightspeed_stack-0.8.0rc1/src/a2a_storage/in_memory_context_store.py +97 -0
  6. lightspeed_stack-0.8.0rc1/src/a2a_storage/postgres_context_store.py +148 -0
  7. lightspeed_stack-0.8.0rc1/src/a2a_storage/sqlite_context_store.py +149 -0
  8. lightspeed_stack-0.8.0rc1/src/a2a_storage/storage_factory.py +191 -0
  9. lightspeed_stack-0.8.0rc1/src/app/database.py +216 -0
  10. lightspeed_stack-0.8.0rc1/src/app/endpoints/a2a.py +1290 -0
  11. lightspeed_stack-0.8.0rc1/src/app/endpoints/conversations_v1.py +608 -0
  12. lightspeed_stack-0.8.0rc1/src/app/endpoints/conversations_v2.py +302 -0
  13. lightspeed_stack-0.8.0rc1/src/app/endpoints/feedback.py +355 -0
  14. lightspeed_stack-0.8.0rc1/src/app/endpoints/health.py +267 -0
  15. lightspeed_stack-0.8.0rc1/src/app/endpoints/providers.py +189 -0
  16. lightspeed_stack-0.8.0rc1/src/app/endpoints/query.py +357 -0
  17. lightspeed_stack-0.8.0rc1/src/app/endpoints/rags.py +223 -0
  18. lightspeed_stack-0.8.0rc1/src/app/endpoints/responses.py +1546 -0
  19. lightspeed_stack-0.8.0rc1/src/app/endpoints/rlsapi_v1.py +911 -0
  20. lightspeed_stack-0.8.0rc1/src/app/endpoints/streaming_query.py +503 -0
  21. lightspeed_stack-0.8.0rc1/src/app/endpoints/vector_stores.py +1007 -0
  22. lightspeed_stack-0.8.0rc1/src/app/routers.py +84 -0
  23. lightspeed_stack-0.8.0rc1/src/authentication/__init__.py +95 -0
  24. lightspeed_stack-0.8.0rc1/src/authentication/api_key_token.py +94 -0
  25. lightspeed_stack-0.8.0rc1/src/authentication/interface.py +49 -0
  26. lightspeed_stack-0.8.0rc1/src/authentication/jwk_token.py +284 -0
  27. lightspeed_stack-0.8.0rc1/src/authentication/k8s.py +529 -0
  28. lightspeed_stack-0.8.0rc1/src/authentication/noop.py +61 -0
  29. lightspeed_stack-0.8.0rc1/src/authentication/noop_with_token.py +75 -0
  30. lightspeed_stack-0.8.0rc1/src/authentication/rh_identity.py +469 -0
  31. lightspeed_stack-0.8.0rc1/src/authentication/trusted_proxy.py +133 -0
  32. lightspeed_stack-0.8.0rc1/src/authentication/utils.py +36 -0
  33. lightspeed_stack-0.8.0rc1/src/authorization/azure_token_manager.py +125 -0
  34. lightspeed_stack-0.8.0rc1/src/authorization/middleware.py +203 -0
  35. lightspeed_stack-0.8.0rc1/src/authorization/resolvers.py +390 -0
  36. lightspeed_stack-0.8.0rc1/src/cache/cache.py +261 -0
  37. lightspeed_stack-0.8.0rc1/src/cache/cache_entry.py +36 -0
  38. lightspeed_stack-0.8.0rc1/src/cache/cache_factory.py +55 -0
  39. lightspeed_stack-0.8.0rc1/src/cache/in_memory_cache.py +251 -0
  40. lightspeed_stack-0.8.0rc1/src/cache/noop_cache.py +224 -0
  41. lightspeed_stack-0.8.0rc1/src/cache/postgres_cache.py +762 -0
  42. lightspeed_stack-0.8.0rc1/src/cache/sqlite_cache.py +726 -0
  43. lightspeed_stack-0.8.0rc1/src/data/default_run.yaml +124 -0
  44. lightspeed_stack-0.8.0rc1/src/knowledge/README.md +22 -0
  45. lightspeed_stack-0.8.0rc1/src/knowledge/__init__.py +1 -0
  46. lightspeed_stack-0.8.0rc1/src/knowledge/capability.py +40 -0
  47. lightspeed_stack-0.8.0rc1/src/knowledge/reranker.py +105 -0
  48. lightspeed_stack-0.8.0rc1/src/knowledge/search.py +33 -0
  49. lightspeed_stack-0.8.0rc1/src/knowledge/sources/README.md +10 -0
  50. lightspeed_stack-0.8.0rc1/src/knowledge/sources/__init__.py +1 -0
  51. lightspeed_stack-0.8.0rc1/src/knowledge/sources/base.py +95 -0
  52. lightspeed_stack-0.8.0rc1/src/knowledge/types.py +44 -0
  53. lightspeed_stack-0.8.0rc1/src/metrics/recording.py +183 -0
  54. lightspeed_stack-0.8.0rc1/src/models/api/requests/catalog.py +21 -0
  55. lightspeed_stack-0.8.0rc1/src/models/api/requests/conversations.py +23 -0
  56. lightspeed_stack-0.8.0rc1/src/models/api/requests/feedback.py +219 -0
  57. lightspeed_stack-0.8.0rc1/src/models/api/requests/mcp_servers.py +157 -0
  58. lightspeed_stack-0.8.0rc1/src/models/api/requests/prompts.py +88 -0
  59. lightspeed_stack-0.8.0rc1/src/models/api/requests/query.py +259 -0
  60. lightspeed_stack-0.8.0rc1/src/models/api/requests/responses_openai.py +183 -0
  61. lightspeed_stack-0.8.0rc1/src/models/api/requests/rlsapi.py +253 -0
  62. lightspeed_stack-0.8.0rc1/src/models/api/requests/saved_prompts.py +39 -0
  63. lightspeed_stack-0.8.0rc1/src/models/api/requests/vector_stores.py +220 -0
  64. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/bad_request.py +62 -0
  65. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/bases.py +98 -0
  66. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/conflict.py +134 -0
  67. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/content_too_large.py +152 -0
  68. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/forbidden.py +235 -0
  69. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/internal.py +219 -0
  70. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/not_found.py +112 -0
  71. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/service_unavailable.py +52 -0
  72. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/too_many_requests.py +194 -0
  73. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/unauthorized.py +99 -0
  74. lightspeed_stack-0.8.0rc1/src/models/api/responses/error/unprocessable_entity.py +73 -0
  75. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/bases.py +85 -0
  76. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/catalog.py +313 -0
  77. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/configuration.py +127 -0
  78. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/conversations.py +223 -0
  79. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/feedback.py +60 -0
  80. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/mcp_servers.py +152 -0
  81. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/probes.py +225 -0
  82. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/prompts.py +122 -0
  83. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/query.py +257 -0
  84. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/responses_openai.py +212 -0
  85. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/rlsapi.py +95 -0
  86. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/saved_prompts.py +181 -0
  87. lightspeed_stack-0.8.0rc1/src/models/api/responses/successful/vector_stores.py +309 -0
  88. lightspeed_stack-0.8.0rc1/src/models/common/__init__.py +75 -0
  89. lightspeed_stack-0.8.0rc1/src/models/common/agents/stream_payloads.py +288 -0
  90. lightspeed_stack-0.8.0rc1/src/models/common/agents/turn_accumulator.py +47 -0
  91. lightspeed_stack-0.8.0rc1/src/models/common/conversation.py +170 -0
  92. lightspeed_stack-0.8.0rc1/src/models/common/feedback.py +33 -0
  93. lightspeed_stack-0.8.0rc1/src/models/common/health.py +59 -0
  94. lightspeed_stack-0.8.0rc1/src/models/common/mcp.py +34 -0
  95. lightspeed_stack-0.8.0rc1/src/models/common/moderation.py +37 -0
  96. lightspeed_stack-0.8.0rc1/src/models/common/query.py +220 -0
  97. lightspeed_stack-0.8.0rc1/src/models/common/responses/contexts.py +115 -0
  98. lightspeed_stack-0.8.0rc1/src/models/common/responses/responses_api_params.py +172 -0
  99. lightspeed_stack-0.8.0rc1/src/models/common/responses/responses_conversation_context.py +34 -0
  100. lightspeed_stack-0.8.0rc1/src/models/common/shields.py +31 -0
  101. lightspeed_stack-0.8.0rc1/src/models/common/skills.py +18 -0
  102. lightspeed_stack-0.8.0rc1/src/models/common/turn_summary.py +161 -0
  103. lightspeed_stack-0.8.0rc1/src/models/compaction.py +71 -0
  104. lightspeed_stack-0.8.0rc1/src/models/config.py +4103 -0
  105. lightspeed_stack-0.8.0rc1/src/observability/__init__.py +121 -0
  106. lightspeed_stack-0.8.0rc1/src/observability/formats/responses.py +51 -0
  107. lightspeed_stack-0.8.0rc1/src/observability/formats/rlsapi.py +59 -0
  108. lightspeed_stack-0.8.0rc1/src/observability/responses_telemetry.py +166 -0
  109. lightspeed_stack-0.8.0rc1/src/observability/sentry.py +114 -0
  110. lightspeed_stack-0.8.0rc1/src/observability/splunk.py +149 -0
  111. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/README.md +87 -0
  112. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/__init__.py +5 -0
  113. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/anonymizer.py +457 -0
  114. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/recognizers/__init__.py +1 -0
  115. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/recognizers/email_recognizer.py +40 -0
  116. lightspeed_stack-0.8.0rc1/src/pii_redaction_engine/recognizers/hostname_recognizer.py +90 -0
  117. lightspeed_stack-0.8.0rc1/src/providers/README.md +6 -0
  118. lightspeed_stack-0.8.0rc1/src/providers/__init__.py +1 -0
  119. lightspeed_stack-0.8.0rc1/src/providers/inference/README.md +30 -0
  120. lightspeed_stack-0.8.0rc1/src/providers/inference/__init__.py +1 -0
  121. lightspeed_stack-0.8.0rc1/src/providers/inference/azure/README.md +10 -0
  122. lightspeed_stack-0.8.0rc1/src/providers/inference/azure/__init__.py +5 -0
  123. lightspeed_stack-0.8.0rc1/src/providers/inference/azure/provider.py +144 -0
  124. lightspeed_stack-0.8.0rc1/src/providers/inference/base.py +320 -0
  125. lightspeed_stack-0.8.0rc1/src/providers/inference/bedrock/README.md +14 -0
  126. lightspeed_stack-0.8.0rc1/src/providers/inference/bedrock/__init__.py +5 -0
  127. lightspeed_stack-0.8.0rc1/src/providers/inference/bedrock/provider.py +205 -0
  128. lightspeed_stack-0.8.0rc1/src/providers/inference/bedrock/specs.py +17 -0
  129. lightspeed_stack-0.8.0rc1/src/providers/inference/catalog.py +24 -0
  130. lightspeed_stack-0.8.0rc1/src/providers/inference/errors.py +56 -0
  131. lightspeed_stack-0.8.0rc1/src/providers/inference/model_type_inference.py +49 -0
  132. lightspeed_stack-0.8.0rc1/src/providers/inference/openai/README.md +10 -0
  133. lightspeed_stack-0.8.0rc1/src/providers/inference/openai/__init__.py +5 -0
  134. lightspeed_stack-0.8.0rc1/src/providers/inference/openai/provider.py +120 -0
  135. lightspeed_stack-0.8.0rc1/src/providers/inference/registry.py +102 -0
  136. lightspeed_stack-0.8.0rc1/src/providers/inference/sentence_transformers/README.md +6 -0
  137. lightspeed_stack-0.8.0rc1/src/providers/inference/sentence_transformers/__init__.py +1 -0
  138. lightspeed_stack-0.8.0rc1/src/providers/inference/types.py +17 -0
  139. lightspeed_stack-0.8.0rc1/src/providers/inference/vertexai/README.md +10 -0
  140. lightspeed_stack-0.8.0rc1/src/providers/inference/vertexai/__init__.py +5 -0
  141. lightspeed_stack-0.8.0rc1/src/providers/inference/vertexai/provider.py +137 -0
  142. lightspeed_stack-0.8.0rc1/src/providers/inference/vllm/README.md +6 -0
  143. lightspeed_stack-0.8.0rc1/src/providers/inference/vllm/__init__.py +1 -0
  144. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/README.md +22 -0
  145. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/__init__.py +5 -0
  146. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/auth.py +114 -0
  147. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/pai_provider.py +95 -0
  148. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/provider.py +171 -0
  149. lightspeed_stack-0.8.0rc1/src/providers/inference/watsonx/specs.py +24 -0
  150. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/granite_guardian/_capability.py +845 -0
  151. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/granite_guardian/utils.py +298 -0
  152. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/question_validity/_capability.py +178 -0
  153. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/redaction/_capability.py +350 -0
  154. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/redaction/core.py +55 -0
  155. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/capabilities/utils.py +79 -0
  156. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/ogx/_model.py +571 -0
  157. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/ogx/_provider.py +157 -0
  158. lightspeed_stack-0.8.0rc1/src/pydantic_ai_lightspeed/ogx/_transport.py +340 -0
  159. lightspeed_stack-0.8.0rc1/src/quota/cluster_quota_limiter.py +51 -0
  160. lightspeed_stack-0.8.0rc1/src/quota/connect_pg.py +54 -0
  161. lightspeed_stack-0.8.0rc1/src/quota/connect_sqlite.py +41 -0
  162. lightspeed_stack-0.8.0rc1/src/quota/quota_exceed_error.py +56 -0
  163. lightspeed_stack-0.8.0rc1/src/quota/quota_limiter.py +204 -0
  164. lightspeed_stack-0.8.0rc1/src/quota/quota_limiter_factory.py +95 -0
  165. lightspeed_stack-0.8.0rc1/src/quota/revokable_quota_limiter.py +387 -0
  166. lightspeed_stack-0.8.0rc1/src/quota/sql.py +147 -0
  167. lightspeed_stack-0.8.0rc1/src/quota/token_usage_history.py +206 -0
  168. lightspeed_stack-0.8.0rc1/src/quota/user_quota_limiter.py +53 -0
  169. lightspeed_stack-0.8.0rc1/src/runners/quota_scheduler.py +417 -0
  170. lightspeed_stack-0.8.0rc1/src/runners/uvicorn.py +48 -0
  171. lightspeed_stack-0.8.0rc1/src/telemetry/configuration_snapshot.py +808 -0
  172. lightspeed_stack-0.8.0rc1/src/utils/README.md +146 -0
  173. lightspeed_stack-0.8.0rc1/src/utils/agents/error_handler.py +125 -0
  174. lightspeed_stack-0.8.0rc1/src/utils/agents/query.py +341 -0
  175. lightspeed_stack-0.8.0rc1/src/utils/agents/streaming.py +712 -0
  176. lightspeed_stack-0.8.0rc1/src/utils/agents/tool_processor.py +576 -0
  177. lightspeed_stack-0.8.0rc1/src/utils/builtin_tools.py +119 -0
  178. lightspeed_stack-0.8.0rc1/src/utils/checks.py +195 -0
  179. lightspeed_stack-0.8.0rc1/src/utils/common.py +47 -0
  180. lightspeed_stack-0.8.0rc1/src/utils/compaction.py +451 -0
  181. lightspeed_stack-0.8.0rc1/src/utils/connection_decorator.py +79 -0
  182. lightspeed_stack-0.8.0rc1/src/utils/context_window.py +186 -0
  183. lightspeed_stack-0.8.0rc1/src/utils/conversation_compaction.py +894 -0
  184. lightspeed_stack-0.8.0rc1/src/utils/conversations.py +738 -0
  185. lightspeed_stack-0.8.0rc1/src/utils/degraded_mode.py +63 -0
  186. lightspeed_stack-0.8.0rc1/src/utils/dumpers/config_dumper.py +24 -0
  187. lightspeed_stack-0.8.0rc1/src/utils/dumpers/models_dumper.py +260 -0
  188. lightspeed_stack-0.8.0rc1/src/utils/dumpers/openapi_schema_dumper.py +40 -0
  189. lightspeed_stack-0.8.0rc1/src/utils/endpoints.py +641 -0
  190. lightspeed_stack-0.8.0rc1/src/utils/input_sanitization.py +200 -0
  191. lightspeed_stack-0.8.0rc1/src/utils/json_schema_updater.py +56 -0
  192. lightspeed_stack-0.8.0rc1/src/utils/markdown_repair.py +286 -0
  193. lightspeed_stack-0.8.0rc1/src/utils/mcp/mcp_auth_headers.py +104 -0
  194. lightspeed_stack-0.8.0rc1/src/utils/mcp/mcp_headers.py +311 -0
  195. lightspeed_stack-0.8.0rc1/src/utils/mcp/mcp_oauth_probe.py +124 -0
  196. lightspeed_stack-0.8.0rc1/src/utils/mcp/mcp_tools.py +155 -0
  197. lightspeed_stack-0.8.0rc1/src/utils/model_list.py +126 -0
  198. lightspeed_stack-0.8.0rc1/src/utils/ogx_serialization.py +20 -0
  199. lightspeed_stack-0.8.0rc1/src/utils/ogx_version.py +132 -0
  200. lightspeed_stack-0.8.0rc1/src/utils/otel_tracing.py +269 -0
  201. lightspeed_stack-0.8.0rc1/src/utils/pending_turn.py +293 -0
  202. lightspeed_stack-0.8.0rc1/src/utils/prompts.py +104 -0
  203. lightspeed_stack-0.8.0rc1/src/utils/pydantic_ai_helpers.py +307 -0
  204. lightspeed_stack-0.8.0rc1/src/utils/query.py +597 -0
  205. lightspeed_stack-0.8.0rc1/src/utils/quota_utils.py +137 -0
  206. lightspeed_stack-0.8.0rc1/src/utils/reranker.py +210 -0
  207. lightspeed_stack-0.8.0rc1/src/utils/responses.py +2154 -0
  208. lightspeed_stack-0.8.0rc1/src/utils/rh_identity.py +41 -0
  209. lightspeed_stack-0.8.0rc1/src/utils/saved_prompts.py +243 -0
  210. lightspeed_stack-0.8.0rc1/src/utils/shields.py +217 -0
  211. lightspeed_stack-0.8.0rc1/src/utils/stream_interrupts.py +395 -0
  212. lightspeed_stack-0.8.0rc1/src/utils/streaming_sse.py +242 -0
  213. lightspeed_stack-0.8.0rc1/src/utils/suid.py +141 -0
  214. lightspeed_stack-0.8.0rc1/src/utils/token_counter.py +42 -0
  215. lightspeed_stack-0.8.0rc1/src/utils/token_estimator.py +152 -0
  216. lightspeed_stack-0.8.0rc1/src/utils/tool_formatter.py +180 -0
  217. lightspeed_stack-0.8.0rc1/src/utils/types.py +31 -0
  218. lightspeed_stack-0.8.0rc1/src/utils/vector_search.py +897 -0
  219. lightspeed_stack-0.8.0rc1/tests/benchmarks/conftest.py +147 -0
  220. lightspeed_stack-0.8.0rc1/tests/benchmarks/data/python_10000_lines.py +10000 -0
  221. lightspeed_stack-0.8.0rc1/tests/benchmarks/data/python_1000_lines.py +998 -0
  222. lightspeed_stack-0.8.0rc1/tests/benchmarks/data_generators.py +163 -0
  223. lightspeed_stack-0.8.0rc1/tests/benchmarks/db_benchmarks.py +369 -0
  224. lightspeed_stack-0.8.0rc1/tests/benchmarks/test_app_database.py +905 -0
  225. lightspeed_stack-0.8.0rc1/tests/benchmarks/test_app_database_comparison.py +150 -0
  226. lightspeed_stack-0.8.0rc1/tests/benchmarks/test_cache_get.py +364 -0
  227. lightspeed_stack-0.8.0rc1/tests/benchmarks/test_token_estimator.py +526 -0
  228. lightspeed_stack-0.8.0rc1/tests/configuration/unified-mode/lightspeed-stack-invalid-config-and-legacy.yaml +25 -0
  229. lightspeed_stack-0.8.0rc1/tests/configuration/unified-mode/lightspeed-stack-invalid-providers-and-legacy.yaml +31 -0
  230. lightspeed_stack-0.8.0rc1/tests/configuration/unified-mode/lightspeed-stack-invalid-version-legacy-unified-body.yaml +31 -0
  231. lightspeed_stack-0.8.0rc1/tests/configuration/unified-mode/lightspeed-stack-legacy-for-migration.yaml +23 -0
  232. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-azure.yaml +118 -0
  233. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-bedrock.yaml +118 -0
  234. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-ci.yaml +106 -0
  235. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-rhaiis.yaml +117 -0
  236. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-rhelai.yaml +120 -0
  237. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-vertexai.yaml +119 -0
  238. lightspeed_stack-0.8.0rc1/tests/e2e/configs/run-watsonx.yaml +118 -0
  239. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-a2a.yaml +101 -0
  240. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml +54 -0
  241. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml +53 -0
  242. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-compaction-disabled.yaml +61 -0
  243. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-compaction.yaml +60 -0
  244. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml +58 -0
  245. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-legacy.yaml +47 -0
  246. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-shields-empty.yaml +28 -0
  247. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-shields-override-disabled.yaml +46 -0
  248. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-shields.yaml +65 -0
  249. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml +30 -0
  250. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml +31 -0
  251. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +47 -0
  252. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-a2a.yaml +101 -0
  253. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml +53 -0
  254. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-compaction-disabled.yaml +59 -0
  255. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-compaction.yaml +58 -0
  256. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml +56 -0
  257. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml +27 -0
  258. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-offline.yaml +40 -0
  259. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-online.yaml +42 -0
  260. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-tool-offline.yaml +40 -0
  261. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-tool-online.yaml +41 -0
  262. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-shields-empty.yaml +26 -0
  263. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-shields-override-disabled.yaml +44 -0
  264. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-shields.yaml +63 -0
  265. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml +27 -0
  266. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml +27 -0
  267. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +45 -0
  268. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-legacy-for-migration.yaml +23 -0
  269. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-absolute-profile.yaml +24 -0
  270. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-config-only.yaml +24 -0
  271. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-migrated.yaml +126 -0
  272. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-providers.yaml +29 -0
  273. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-relative-profile.yaml +24 -0
  274. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-legacy-for-migration.yaml +23 -0
  275. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-absolute-profile.yaml +26 -0
  276. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-config-only.yaml +26 -0
  277. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-migrated.yaml +128 -0
  278. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-providers.yaml +31 -0
  279. lightspeed_stack-0.8.0rc1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-relative-profile.yaml +26 -0
  280. lightspeed_stack-0.8.0rc1/tests/e2e/features/a2a.feature +85 -0
  281. lightspeed_stack-0.8.0rc1/tests/e2e/features/conversation-compaction.feature +132 -0
  282. lightspeed_stack-0.8.0rc1/tests/e2e/features/environment.py +613 -0
  283. lightspeed_stack-0.8.0rc1/tests/e2e/features/info.feature +73 -0
  284. lightspeed_stack-0.8.0rc1/tests/e2e/features/query.feature +322 -0
  285. lightspeed_stack-0.8.0rc1/tests/e2e/features/responses.feature +557 -0
  286. lightspeed_stack-0.8.0rc1/tests/e2e/features/responses_streaming.feature +439 -0
  287. lightspeed_stack-0.8.0rc1/tests/e2e/features/shields.feature +100 -0
  288. lightspeed_stack-0.8.0rc1/tests/e2e/features/shields_granite_guardian.feature +100 -0
  289. lightspeed_stack-0.8.0rc1/tests/e2e/features/skills.feature +764 -0
  290. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/README.md +94 -0
  291. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/a2a.py +479 -0
  292. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/auth.py +197 -0
  293. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/common.py +239 -0
  294. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/common_http.py +350 -0
  295. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/conversation_compaction.py +201 -0
  296. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/feedback.py +175 -0
  297. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/health.py +118 -0
  298. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/okp_rag.py +425 -0
  299. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/place_holder.py +17 -0
  300. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/proxy.py +661 -0
  301. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/responses_steps.py +81 -0
  302. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/tls.py +400 -0
  303. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/token_counters.py +214 -0
  304. lightspeed_stack-0.8.0rc1/tests/e2e/features/steps/unified_mode.py +107 -0
  305. lightspeed_stack-0.8.0rc1/tests/e2e/mock_tls_inference_server/server.py +386 -0
  306. lightspeed_stack-0.8.0rc1/tests/e2e/proxy/interception_proxy.py +336 -0
  307. lightspeed_stack-0.8.0rc1/tests/e2e/proxy/tunnel_proxy.py +266 -0
  308. lightspeed_stack-0.8.0rc1/tests/e2e/test_list.txt +48 -0
  309. lightspeed_stack-0.8.0rc1/tests/e2e/utils/ogx_config_utils.py +122 -0
  310. lightspeed_stack-0.8.0rc1/tests/e2e/utils/prow_utils.py +452 -0
  311. lightspeed_stack-0.8.0rc1/tests/e2e/utils/utils.py +752 -0
  312. lightspeed_stack-0.8.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/ogx-openai.yaml +302 -0
  313. lightspeed_stack-0.8.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/ogx-prow.yaml +210 -0
  314. lightspeed_stack-0.8.0rc1/tests/e2e-prow/rhoai/pipeline-konflux.sh +540 -0
  315. lightspeed_stack-0.8.0rc1/tests/e2e-prow/rhoai/scripts/e2e-ops.sh +1230 -0
  316. lightspeed_stack-0.8.0rc1/tests/integration/conftest.py +1125 -0
  317. lightspeed_stack-0.8.0rc1/tests/integration/container_lifecycle/test_container_lifecycle.py +197 -0
  318. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/README.md +118 -0
  319. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/_compaction_helpers.py +399 -0
  320. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_authorized_endpoint.py +36 -0
  321. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_compaction_a2a.py +498 -0
  322. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_compaction_conversations_api.py +316 -0
  323. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_compaction_query.py +642 -0
  324. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_compaction_responses.py +829 -0
  325. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_compaction_streaming_query.py +827 -0
  326. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_config_integration.py +177 -0
  327. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_conversations_v1_integration.py +825 -0
  328. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_conversations_v2_integration.py +827 -0
  329. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_granite_guardian_integration.py +847 -0
  330. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_health_integration.py +200 -0
  331. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_info_integration.py +159 -0
  332. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_model_list.py +213 -0
  333. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_query_byok_integration.py +1292 -0
  334. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_query_integration.py +1538 -0
  335. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_responses_integration.py +357 -0
  336. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_root_endpoint.py +77 -0
  337. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_saved_prompts_integration.py +284 -0
  338. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_skills_integration.py +99 -0
  339. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_streaming_query_byok_integration.py +1066 -0
  340. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_streaming_query_integration.py +317 -0
  341. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_tools_integration.py +109 -0
  342. lightspeed_stack-0.8.0rc1/tests/integration/endpoints/test_turn_persistence.py +1359 -0
  343. lightspeed_stack-0.8.0rc1/tests/integration/test_configuration.py +95 -0
  344. lightspeed_stack-0.8.0rc1/tests/integration/test_feedback_otel_trace.py +96 -0
  345. lightspeed_stack-0.8.0rc1/tests/integration/test_openapi_json.py +452 -0
  346. lightspeed_stack-0.8.0rc1/tests/integration/test_otel_trace_propagation.py +201 -0
  347. lightspeed_stack-0.8.0rc1/tests/integration/test_rh_identity_integration.py +187 -0
  348. lightspeed_stack-0.8.0rc1/tests/integration/test_unified_synthesis.py +604 -0
  349. lightspeed_stack-0.8.0rc1/tests/integration/test_version.py +48 -0
  350. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/conftest.py +45 -0
  351. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/responses_otel_helpers.py +323 -0
  352. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_a2a.py +1790 -0
  353. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_config.py +139 -0
  354. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_conversations.py +2593 -0
  355. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_conversations_v2.py +1235 -0
  356. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_feedback.py +873 -0
  357. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_health.py +506 -0
  358. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_info.py +253 -0
  359. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_metrics.py +73 -0
  360. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_models.py +537 -0
  361. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_providers.py +346 -0
  362. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_query.py +656 -0
  363. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_query_otel.py +209 -0
  364. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_rags.py +576 -0
  365. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_responses.py +3035 -0
  366. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_rlsapi_v1.py +2094 -0
  367. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_saved_prompts.py +1118 -0
  368. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_shields.py +200 -0
  369. lightspeed_stack-0.8.0rc1/tests/unit/app/endpoints/test_vector_stores.py +1505 -0
  370. lightspeed_stack-0.8.0rc1/tests/unit/app/test_database.py +410 -0
  371. lightspeed_stack-0.8.0rc1/tests/unit/app/test_routers.py +199 -0
  372. lightspeed_stack-0.8.0rc1/tests/unit/authentication/test_api_key_token.py +140 -0
  373. lightspeed_stack-0.8.0rc1/tests/unit/authentication/test_jwk_token.py +955 -0
  374. lightspeed_stack-0.8.0rc1/tests/unit/authentication/test_k8s.py +1146 -0
  375. lightspeed_stack-0.8.0rc1/tests/unit/authentication/test_rh_identity.py +1082 -0
  376. lightspeed_stack-0.8.0rc1/tests/unit/authorization/test_middleware.py +416 -0
  377. lightspeed_stack-0.8.0rc1/tests/unit/authorization/test_resolvers.py +477 -0
  378. lightspeed_stack-0.8.0rc1/tests/unit/cache/test_cache_factory.py +271 -0
  379. lightspeed_stack-0.8.0rc1/tests/unit/cache/test_in_memory_cache.py +70 -0
  380. lightspeed_stack-0.8.0rc1/tests/unit/cache/test_noop_cache.py +295 -0
  381. lightspeed_stack-0.8.0rc1/tests/unit/cache/test_postgres_cache.py +1099 -0
  382. lightspeed_stack-0.8.0rc1/tests/unit/cache/test_sqlite_cache.py +825 -0
  383. lightspeed_stack-0.8.0rc1/tests/unit/conftest.py +296 -0
  384. lightspeed_stack-0.8.0rc1/tests/unit/knowledge/README.md +18 -0
  385. lightspeed_stack-0.8.0rc1/tests/unit/knowledge/__init__.py +1 -0
  386. lightspeed_stack-0.8.0rc1/tests/unit/knowledge/test_capability.py +51 -0
  387. lightspeed_stack-0.8.0rc1/tests/unit/knowledge/test_reranker.py +271 -0
  388. lightspeed_stack-0.8.0rc1/tests/unit/knowledge/test_search.py +313 -0
  389. lightspeed_stack-0.8.0rc1/tests/unit/models/config/README.md +134 -0
  390. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_authentication_configuration.py +617 -0
  391. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_byok_rag.py +358 -0
  392. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_conversation_history.py +280 -0
  393. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_cors.py +104 -0
  394. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_customization.py +121 -0
  395. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_database_configuration.py +96 -0
  396. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_dump_configuration.py +2891 -0
  397. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_inference_configuration.py +177 -0
  398. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_inference_provider_entries.py +168 -0
  399. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_jwt_role_rule.py +158 -0
  400. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_observability_configuration.py +373 -0
  401. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_postgresql_database_configuration.py +312 -0
  402. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_quota_handlers_config.py +829 -0
  403. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_rlsapi_v1_configuration.py +170 -0
  404. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_splunk_configuration.py +127 -0
  405. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_tls_configuration.py +231 -0
  406. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_user_data_collection.py +102 -0
  407. lightspeed_stack-0.8.0rc1/tests/unit/models/config/test_vector_store.py +288 -0
  408. lightspeed_stack-0.8.0rc1/tests/unit/models/database/test_saved_prompts.py +148 -0
  409. lightspeed_stack-0.8.0rc1/tests/unit/models/requests/test_feedback_request.py +296 -0
  410. lightspeed_stack-0.8.0rc1/tests/unit/models/requests/test_responses_request.py +124 -0
  411. lightspeed_stack-0.8.0rc1/tests/unit/models/responses/test_successful_responses.py +1333 -0
  412. lightspeed_stack-0.8.0rc1/tests/unit/models/rlsapi/test_requests.py +685 -0
  413. lightspeed_stack-0.8.0rc1/tests/unit/models/rlsapi/test_responses.py +177 -0
  414. lightspeed_stack-0.8.0rc1/tests/unit/models/test_compaction.py +76 -0
  415. lightspeed_stack-0.8.0rc1/tests/unit/models/test_saved_prompts_config.py +205 -0
  416. lightspeed_stack-0.8.0rc1/tests/unit/observability/conftest.py +17 -0
  417. lightspeed_stack-0.8.0rc1/tests/unit/observability/formats/test_rlsapi.py +103 -0
  418. lightspeed_stack-0.8.0rc1/tests/unit/observability/test_splunk.py +315 -0
  419. lightspeed_stack-0.8.0rc1/tests/unit/pii_redaction_engine/__init__.py +1 -0
  420. lightspeed_stack-0.8.0rc1/tests/unit/pii_redaction_engine/test_anonymizer.py +114 -0
  421. lightspeed_stack-0.8.0rc1/tests/unit/providers/README.md +6 -0
  422. lightspeed_stack-0.8.0rc1/tests/unit/providers/__init__.py +1 -0
  423. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/README.md +30 -0
  424. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/__init__.py +1 -0
  425. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/_helpers.py +94 -0
  426. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/azure/README.md +10 -0
  427. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/azure/__init__.py +1 -0
  428. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/azure/test_provider.py +247 -0
  429. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/bedrock/README.md +14 -0
  430. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/bedrock/__init__.py +1 -0
  431. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/bedrock/test_provider.py +217 -0
  432. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/bedrock/test_specs.py +22 -0
  433. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/openai/README.md +10 -0
  434. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/openai/__init__.py +1 -0
  435. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/openai/test_provider.py +128 -0
  436. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/test_base.py +188 -0
  437. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/test_catalog.py +29 -0
  438. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/test_errors.py +59 -0
  439. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/test_model_type_inference.py +23 -0
  440. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/test_registry.py +197 -0
  441. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/vertexai/README.md +10 -0
  442. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/vertexai/__init__.py +1 -0
  443. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/vertexai/test_provider.py +193 -0
  444. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/watsonx/README.md +18 -0
  445. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/watsonx/__init__.py +1 -0
  446. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/watsonx/test_auth.py +102 -0
  447. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/watsonx/test_pai_provider.py +98 -0
  448. lightspeed_stack-0.8.0rc1/tests/unit/providers/inference/watsonx/test_provider.py +223 -0
  449. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/README.md +22 -0
  450. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/test_capability.py +989 -0
  451. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/capabilities/question_validity/test_capability.py +803 -0
  452. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/test_capability.py +364 -0
  453. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/ogx/test_model.py +1046 -0
  454. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/ogx/test_provider.py +273 -0
  455. lightspeed_stack-0.8.0rc1/tests/unit/pydantic_ai_lightspeed/ogx/test_transport.py +449 -0
  456. lightspeed_stack-0.8.0rc1/tests/unit/quota/test_cluster_quota_limiter.py +196 -0
  457. lightspeed_stack-0.8.0rc1/tests/unit/telemetry/conftest.py +818 -0
  458. lightspeed_stack-0.8.0rc1/tests/unit/telemetry/test_configuration_snapshot.py +1286 -0
  459. lightspeed_stack-0.8.0rc1/tests/unit/test_configuration.py +4246 -0
  460. lightspeed_stack-0.8.0rc1/tests/unit/test_lightspeed_stack.py +233 -0
  461. lightspeed_stack-0.8.0rc1/tests/unit/test_log.py +115 -0
  462. lightspeed_stack-0.8.0rc1/tests/unit/test_ogx_synthesize.py +1572 -0
  463. lightspeed_stack-0.8.0rc1/tests/unit/utils/README.md +130 -0
  464. lightspeed_stack-0.8.0rc1/tests/unit/utils/agents/test_query.py +707 -0
  465. lightspeed_stack-0.8.0rc1/tests/unit/utils/agents/test_streaming.py +1840 -0
  466. lightspeed_stack-0.8.0rc1/tests/unit/utils/auth_helpers.py +27 -0
  467. lightspeed_stack-0.8.0rc1/tests/unit/utils/dumpers/test_models_dumper.py +10522 -0
  468. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_checks.py +257 -0
  469. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_compaction.py +695 -0
  470. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_context_window.py +159 -0
  471. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_conversation_compaction.py +917 -0
  472. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_conversations.py +1153 -0
  473. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_ogx_version.py +157 -0
  474. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_otel_tracing.py +403 -0
  475. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_pending_turn.py +410 -0
  476. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_pydantic_ai.py +485 -0
  477. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_responses.py +4222 -0
  478. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_saved_prompts.py +424 -0
  479. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_shields.py +405 -0
  480. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_stream_interrupts.py +258 -0
  481. lightspeed_stack-0.8.0rc1/tests/unit/utils/test_token_estimator.py +215 -0
  482. lightspeed_stack-0.7.1/PKG-INFO +0 -1819
  483. lightspeed_stack-0.7.1/README.md +0 -1559
  484. lightspeed_stack-0.7.1/pyproject.toml +0 -279
  485. lightspeed_stack-0.7.1/src/a2a_storage/context_store.py +0 -58
  486. lightspeed_stack-0.7.1/src/a2a_storage/in_memory_context_store.py +0 -93
  487. lightspeed_stack-0.7.1/src/a2a_storage/postgres_context_store.py +0 -143
  488. lightspeed_stack-0.7.1/src/a2a_storage/sqlite_context_store.py +0 -144
  489. lightspeed_stack-0.7.1/src/a2a_storage/storage_factory.py +0 -184
  490. lightspeed_stack-0.7.1/src/app/database.py +0 -211
  491. lightspeed_stack-0.7.1/src/app/endpoints/a2a.py +0 -1265
  492. lightspeed_stack-0.7.1/src/app/endpoints/conversations_v1.py +0 -602
  493. lightspeed_stack-0.7.1/src/app/endpoints/conversations_v2.py +0 -301
  494. lightspeed_stack-0.7.1/src/app/endpoints/feedback.py +0 -351
  495. lightspeed_stack-0.7.1/src/app/endpoints/health.py +0 -265
  496. lightspeed_stack-0.7.1/src/app/endpoints/providers.py +0 -188
  497. lightspeed_stack-0.7.1/src/app/endpoints/query.py +0 -351
  498. lightspeed_stack-0.7.1/src/app/endpoints/rags.py +0 -222
  499. lightspeed_stack-0.7.1/src/app/endpoints/responses.py +0 -1487
  500. lightspeed_stack-0.7.1/src/app/endpoints/rlsapi_v1.py +0 -900
  501. lightspeed_stack-0.7.1/src/app/endpoints/streaming_query.py +0 -497
  502. lightspeed_stack-0.7.1/src/app/endpoints/vector_stores.py +0 -995
  503. lightspeed_stack-0.7.1/src/app/routers.py +0 -83
  504. lightspeed_stack-0.7.1/src/authentication/__init__.py +0 -94
  505. lightspeed_stack-0.7.1/src/authentication/api_key_token.py +0 -92
  506. lightspeed_stack-0.7.1/src/authentication/interface.py +0 -48
  507. lightspeed_stack-0.7.1/src/authentication/jwk_token.py +0 -279
  508. lightspeed_stack-0.7.1/src/authentication/k8s.py +0 -520
  509. lightspeed_stack-0.7.1/src/authentication/noop.py +0 -59
  510. lightspeed_stack-0.7.1/src/authentication/noop_with_token.py +0 -73
  511. lightspeed_stack-0.7.1/src/authentication/rh_identity.py +0 -453
  512. lightspeed_stack-0.7.1/src/authentication/trusted_proxy.py +0 -131
  513. lightspeed_stack-0.7.1/src/authentication/utils.py +0 -35
  514. lightspeed_stack-0.7.1/src/authorization/azure_token_manager.py +0 -123
  515. lightspeed_stack-0.7.1/src/authorization/middleware.py +0 -199
  516. lightspeed_stack-0.7.1/src/authorization/resolvers.py +0 -375
  517. lightspeed_stack-0.7.1/src/cache/cache.py +0 -249
  518. lightspeed_stack-0.7.1/src/cache/cache_entry.py +0 -35
  519. lightspeed_stack-0.7.1/src/cache/cache_factory.py +0 -54
  520. lightspeed_stack-0.7.1/src/cache/in_memory_cache.py +0 -241
  521. lightspeed_stack-0.7.1/src/cache/noop_cache.py +0 -214
  522. lightspeed_stack-0.7.1/src/cache/postgres_cache.py +0 -747
  523. lightspeed_stack-0.7.1/src/cache/sqlite_cache.py +0 -714
  524. lightspeed_stack-0.7.1/src/data/default_run.yaml +0 -124
  525. lightspeed_stack-0.7.1/src/metrics/recording.py +0 -174
  526. lightspeed_stack-0.7.1/src/models/api/requests/catalog.py +0 -20
  527. lightspeed_stack-0.7.1/src/models/api/requests/conversations.py +0 -22
  528. lightspeed_stack-0.7.1/src/models/api/requests/feedback.py +0 -204
  529. lightspeed_stack-0.7.1/src/models/api/requests/mcp_servers.py +0 -154
  530. lightspeed_stack-0.7.1/src/models/api/requests/prompts.py +0 -86
  531. lightspeed_stack-0.7.1/src/models/api/requests/query.py +0 -253
  532. lightspeed_stack-0.7.1/src/models/api/requests/responses_openai.py +0 -175
  533. lightspeed_stack-0.7.1/src/models/api/requests/rlsapi.py +0 -245
  534. lightspeed_stack-0.7.1/src/models/api/requests/saved_prompts.py +0 -38
  535. lightspeed_stack-0.7.1/src/models/api/requests/vector_stores.py +0 -215
  536. lightspeed_stack-0.7.1/src/models/api/responses/error/bad_request.py +0 -61
  537. lightspeed_stack-0.7.1/src/models/api/responses/error/bases.py +0 -94
  538. lightspeed_stack-0.7.1/src/models/api/responses/error/conflict.py +0 -130
  539. lightspeed_stack-0.7.1/src/models/api/responses/error/content_too_large.py +0 -148
  540. lightspeed_stack-0.7.1/src/models/api/responses/error/forbidden.py +0 -228
  541. lightspeed_stack-0.7.1/src/models/api/responses/error/internal.py +0 -211
  542. lightspeed_stack-0.7.1/src/models/api/responses/error/not_found.py +0 -111
  543. lightspeed_stack-0.7.1/src/models/api/responses/error/service_unavailable.py +0 -51
  544. lightspeed_stack-0.7.1/src/models/api/responses/error/too_many_requests.py +0 -188
  545. lightspeed_stack-0.7.1/src/models/api/responses/error/unauthorized.py +0 -98
  546. lightspeed_stack-0.7.1/src/models/api/responses/error/unprocessable_entity.py +0 -72
  547. lightspeed_stack-0.7.1/src/models/api/responses/successful/bases.py +0 -84
  548. lightspeed_stack-0.7.1/src/models/api/responses/successful/catalog.py +0 -312
  549. lightspeed_stack-0.7.1/src/models/api/responses/successful/configuration.py +0 -126
  550. lightspeed_stack-0.7.1/src/models/api/responses/successful/conversations.py +0 -219
  551. lightspeed_stack-0.7.1/src/models/api/responses/successful/feedback.py +0 -58
  552. lightspeed_stack-0.7.1/src/models/api/responses/successful/mcp_servers.py +0 -148
  553. lightspeed_stack-0.7.1/src/models/api/responses/successful/probes.py +0 -220
  554. lightspeed_stack-0.7.1/src/models/api/responses/successful/prompts.py +0 -119
  555. lightspeed_stack-0.7.1/src/models/api/responses/successful/query.py +0 -255
  556. lightspeed_stack-0.7.1/src/models/api/responses/successful/responses_openai.py +0 -211
  557. lightspeed_stack-0.7.1/src/models/api/responses/successful/rlsapi.py +0 -93
  558. lightspeed_stack-0.7.1/src/models/api/responses/successful/saved_prompts.py +0 -177
  559. lightspeed_stack-0.7.1/src/models/api/responses/successful/vector_stores.py +0 -304
  560. lightspeed_stack-0.7.1/src/models/common/__init__.py +0 -74
  561. lightspeed_stack-0.7.1/src/models/common/agents/stream_payloads.py +0 -281
  562. lightspeed_stack-0.7.1/src/models/common/agents/turn_accumulator.py +0 -46
  563. lightspeed_stack-0.7.1/src/models/common/conversation.py +0 -166
  564. lightspeed_stack-0.7.1/src/models/common/feedback.py +0 -19
  565. lightspeed_stack-0.7.1/src/models/common/health.py +0 -58
  566. lightspeed_stack-0.7.1/src/models/common/mcp.py +0 -33
  567. lightspeed_stack-0.7.1/src/models/common/moderation.py +0 -36
  568. lightspeed_stack-0.7.1/src/models/common/query.py +0 -217
  569. lightspeed_stack-0.7.1/src/models/common/responses/contexts.py +0 -114
  570. lightspeed_stack-0.7.1/src/models/common/responses/responses_api_params.py +0 -170
  571. lightspeed_stack-0.7.1/src/models/common/responses/responses_conversation_context.py +0 -33
  572. lightspeed_stack-0.7.1/src/models/common/shields.py +0 -30
  573. lightspeed_stack-0.7.1/src/models/common/skills.py +0 -17
  574. lightspeed_stack-0.7.1/src/models/common/turn_summary.py +0 -159
  575. lightspeed_stack-0.7.1/src/models/compaction.py +0 -70
  576. lightspeed_stack-0.7.1/src/models/config.py +0 -3790
  577. lightspeed_stack-0.7.1/src/observability/__init__.py +0 -121
  578. lightspeed_stack-0.7.1/src/observability/formats/responses.py +0 -50
  579. lightspeed_stack-0.7.1/src/observability/formats/rlsapi.py +0 -58
  580. lightspeed_stack-0.7.1/src/observability/responses_telemetry.py +0 -162
  581. lightspeed_stack-0.7.1/src/observability/sentry.py +0 -112
  582. lightspeed_stack-0.7.1/src/observability/splunk.py +0 -147
  583. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/granite_guardian/_capability.py +0 -829
  584. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/granite_guardian/utils.py +0 -290
  585. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/question_validity/_capability.py +0 -173
  586. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/redaction/_capability.py +0 -338
  587. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/redaction/core.py +0 -53
  588. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/capabilities/utils.py +0 -69
  589. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/ogx/_model.py +0 -543
  590. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/ogx/_provider.py +0 -152
  591. lightspeed_stack-0.7.1/src/pydantic_ai_lightspeed/ogx/_transport.py +0 -328
  592. lightspeed_stack-0.7.1/src/quota/cluster_quota_limiter.py +0 -49
  593. lightspeed_stack-0.7.1/src/quota/connect_pg.py +0 -53
  594. lightspeed_stack-0.7.1/src/quota/connect_sqlite.py +0 -40
  595. lightspeed_stack-0.7.1/src/quota/quota_exceed_error.py +0 -55
  596. lightspeed_stack-0.7.1/src/quota/quota_limiter.py +0 -195
  597. lightspeed_stack-0.7.1/src/quota/quota_limiter_factory.py +0 -93
  598. lightspeed_stack-0.7.1/src/quota/revokable_quota_limiter.py +0 -376
  599. lightspeed_stack-0.7.1/src/quota/sql.py +0 -147
  600. lightspeed_stack-0.7.1/src/quota/token_usage_history.py +0 -202
  601. lightspeed_stack-0.7.1/src/quota/user_quota_limiter.py +0 -51
  602. lightspeed_stack-0.7.1/src/runners/quota_scheduler.py +0 -404
  603. lightspeed_stack-0.7.1/src/runners/uvicorn.py +0 -47
  604. lightspeed_stack-0.7.1/src/telemetry/configuration_snapshot.py +0 -790
  605. lightspeed_stack-0.7.1/src/utils/README.md +0 -138
  606. lightspeed_stack-0.7.1/src/utils/agents/error_handler.py +0 -123
  607. lightspeed_stack-0.7.1/src/utils/agents/query.py +0 -337
  608. lightspeed_stack-0.7.1/src/utils/agents/streaming.py +0 -697
  609. lightspeed_stack-0.7.1/src/utils/agents/tool_processor.py +0 -557
  610. lightspeed_stack-0.7.1/src/utils/builtin_tools.py +0 -117
  611. lightspeed_stack-0.7.1/src/utils/checks.py +0 -155
  612. lightspeed_stack-0.7.1/src/utils/common.py +0 -45
  613. lightspeed_stack-0.7.1/src/utils/compaction.py +0 -402
  614. lightspeed_stack-0.7.1/src/utils/connection_decorator.py +0 -77
  615. lightspeed_stack-0.7.1/src/utils/conversation_compaction.py +0 -909
  616. lightspeed_stack-0.7.1/src/utils/conversations.py +0 -723
  617. lightspeed_stack-0.7.1/src/utils/degraded_mode.py +0 -60
  618. lightspeed_stack-0.7.1/src/utils/dumpers/config_dumper.py +0 -23
  619. lightspeed_stack-0.7.1/src/utils/dumpers/models_dumper.py +0 -257
  620. lightspeed_stack-0.7.1/src/utils/dumpers/openapi_schema_dumper.py +0 -39
  621. lightspeed_stack-0.7.1/src/utils/endpoints.py +0 -626
  622. lightspeed_stack-0.7.1/src/utils/input_sanitization.py +0 -193
  623. lightspeed_stack-0.7.1/src/utils/json_schema_updater.py +0 -55
  624. lightspeed_stack-0.7.1/src/utils/markdown_repair.py +0 -280
  625. lightspeed_stack-0.7.1/src/utils/mcp/mcp_auth_headers.py +0 -103
  626. lightspeed_stack-0.7.1/src/utils/mcp/mcp_headers.py +0 -302
  627. lightspeed_stack-0.7.1/src/utils/mcp/mcp_oauth_probe.py +0 -122
  628. lightspeed_stack-0.7.1/src/utils/mcp/mcp_tools.py +0 -154
  629. lightspeed_stack-0.7.1/src/utils/model_list.py +0 -122
  630. lightspeed_stack-0.7.1/src/utils/ogx_serialization.py +0 -19
  631. lightspeed_stack-0.7.1/src/utils/ogx_version.py +0 -130
  632. lightspeed_stack-0.7.1/src/utils/otel_tracing.py +0 -262
  633. lightspeed_stack-0.7.1/src/utils/prompts.py +0 -102
  634. lightspeed_stack-0.7.1/src/utils/pydantic_ai_helpers.py +0 -298
  635. lightspeed_stack-0.7.1/src/utils/query.py +0 -582
  636. lightspeed_stack-0.7.1/src/utils/quota_utils.py +0 -134
  637. lightspeed_stack-0.7.1/src/utils/reranker.py +0 -207
  638. lightspeed_stack-0.7.1/src/utils/responses.py +0 -2027
  639. lightspeed_stack-0.7.1/src/utils/rh_identity.py +0 -39
  640. lightspeed_stack-0.7.1/src/utils/saved_prompts.py +0 -237
  641. lightspeed_stack-0.7.1/src/utils/shields.py +0 -213
  642. lightspeed_stack-0.7.1/src/utils/stream_interrupts.py +0 -405
  643. lightspeed_stack-0.7.1/src/utils/streaming_sse.py +0 -232
  644. lightspeed_stack-0.7.1/src/utils/suid.py +0 -136
  645. lightspeed_stack-0.7.1/src/utils/token_counter.py +0 -40
  646. lightspeed_stack-0.7.1/src/utils/token_estimator.py +0 -170
  647. lightspeed_stack-0.7.1/src/utils/tool_formatter.py +0 -176
  648. lightspeed_stack-0.7.1/src/utils/types.py +0 -30
  649. lightspeed_stack-0.7.1/src/utils/vector_search.py +0 -882
  650. lightspeed_stack-0.7.1/tests/benchmarks/conftest.py +0 -142
  651. lightspeed_stack-0.7.1/tests/benchmarks/data/python_10000_lines.py +0 -10000
  652. lightspeed_stack-0.7.1/tests/benchmarks/data/python_1000_lines.py +0 -998
  653. lightspeed_stack-0.7.1/tests/benchmarks/data_generators.py +0 -160
  654. lightspeed_stack-0.7.1/tests/benchmarks/db_benchmarks.py +0 -357
  655. lightspeed_stack-0.7.1/tests/benchmarks/test_app_database.py +0 -857
  656. lightspeed_stack-0.7.1/tests/benchmarks/test_app_database_comparison.py +0 -144
  657. lightspeed_stack-0.7.1/tests/benchmarks/test_cache_get.py +0 -47
  658. lightspeed_stack-0.7.1/tests/benchmarks/test_token_estimator.py +0 -493
  659. lightspeed_stack-0.7.1/tests/configuration/unified-mode/lightspeed-stack-invalid-config-and-legacy.yaml +0 -25
  660. lightspeed_stack-0.7.1/tests/configuration/unified-mode/lightspeed-stack-invalid-providers-and-legacy.yaml +0 -31
  661. lightspeed_stack-0.7.1/tests/configuration/unified-mode/lightspeed-stack-invalid-version-legacy-unified-body.yaml +0 -31
  662. lightspeed_stack-0.7.1/tests/configuration/unified-mode/lightspeed-stack-legacy-for-migration.yaml +0 -23
  663. lightspeed_stack-0.7.1/tests/e2e/configs/run-azure.yaml +0 -117
  664. lightspeed_stack-0.7.1/tests/e2e/configs/run-bedrock.yaml +0 -115
  665. lightspeed_stack-0.7.1/tests/e2e/configs/run-ci.yaml +0 -106
  666. lightspeed_stack-0.7.1/tests/e2e/configs/run-rhaiis.yaml +0 -117
  667. lightspeed_stack-0.7.1/tests/e2e/configs/run-rhelai.yaml +0 -117
  668. lightspeed_stack-0.7.1/tests/e2e/configs/run-vertexai.yaml +0 -116
  669. lightspeed_stack-0.7.1/tests/e2e/configs/run-watsonx.yaml +0 -113
  670. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-authorized.yaml +0 -54
  671. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-byok-pdf.yaml +0 -53
  672. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-compaction-disabled.yaml +0 -61
  673. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-compaction.yaml +0 -60
  674. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-default.yaml +0 -58
  675. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-legacy.yaml +0 -47
  676. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-shields-empty.yaml +0 -28
  677. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-shields-override-disabled.yaml +0 -46
  678. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-shields.yaml +0 -65
  679. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-skills-directory.yaml +0 -30
  680. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack-skills.yaml +0 -31
  681. lightspeed_stack-0.7.1/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +0 -47
  682. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-authorized.yaml +0 -53
  683. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-compaction-disabled.yaml +0 -59
  684. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-compaction.yaml +0 -58
  685. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-default.yaml +0 -56
  686. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-degraded.yaml +0 -27
  687. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-offline.yaml +0 -40
  688. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-online.yaml +0 -42
  689. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-tool-offline.yaml +0 -40
  690. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-okp-tool-online.yaml +0 -41
  691. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-shields-empty.yaml +0 -26
  692. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-shields-override-disabled.yaml +0 -44
  693. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-shields.yaml +0 -63
  694. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-skills-directory.yaml +0 -27
  695. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack-skills.yaml +0 -27
  696. lightspeed_stack-0.7.1/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +0 -45
  697. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-legacy-for-migration.yaml +0 -23
  698. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-absolute-profile.yaml +0 -24
  699. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-config-only.yaml +0 -24
  700. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-migrated.yaml +0 -126
  701. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-providers.yaml +0 -29
  702. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/library-mode/lightspeed-stack-unified-relative-profile.yaml +0 -24
  703. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-legacy-for-migration.yaml +0 -23
  704. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-absolute-profile.yaml +0 -26
  705. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-config-only.yaml +0 -26
  706. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-migrated.yaml +0 -128
  707. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-providers.yaml +0 -31
  708. lightspeed_stack-0.7.1/tests/e2e/configuration/unified-mode/server-mode/lightspeed-stack-unified-relative-profile.yaml +0 -26
  709. lightspeed_stack-0.7.1/tests/e2e/features/conversation-compaction.feature +0 -131
  710. lightspeed_stack-0.7.1/tests/e2e/features/environment.py +0 -608
  711. lightspeed_stack-0.7.1/tests/e2e/features/info.feature +0 -72
  712. lightspeed_stack-0.7.1/tests/e2e/features/query.feature +0 -322
  713. lightspeed_stack-0.7.1/tests/e2e/features/responses.feature +0 -550
  714. lightspeed_stack-0.7.1/tests/e2e/features/responses_streaming.feature +0 -432
  715. lightspeed_stack-0.7.1/tests/e2e/features/shields.feature +0 -100
  716. lightspeed_stack-0.7.1/tests/e2e/features/shields_granite_guardian.feature +0 -100
  717. lightspeed_stack-0.7.1/tests/e2e/features/skills.feature +0 -764
  718. lightspeed_stack-0.7.1/tests/e2e/features/steps/README.md +0 -90
  719. lightspeed_stack-0.7.1/tests/e2e/features/steps/auth.py +0 -194
  720. lightspeed_stack-0.7.1/tests/e2e/features/steps/common.py +0 -234
  721. lightspeed_stack-0.7.1/tests/e2e/features/steps/common_http.py +0 -348
  722. lightspeed_stack-0.7.1/tests/e2e/features/steps/conversation_compaction.py +0 -168
  723. lightspeed_stack-0.7.1/tests/e2e/features/steps/feedback.py +0 -172
  724. lightspeed_stack-0.7.1/tests/e2e/features/steps/health.py +0 -117
  725. lightspeed_stack-0.7.1/tests/e2e/features/steps/okp_rag.py +0 -416
  726. lightspeed_stack-0.7.1/tests/e2e/features/steps/place_holder.py +0 -16
  727. lightspeed_stack-0.7.1/tests/e2e/features/steps/proxy.py +0 -660
  728. lightspeed_stack-0.7.1/tests/e2e/features/steps/responses_steps.py +0 -80
  729. lightspeed_stack-0.7.1/tests/e2e/features/steps/tls.py +0 -398
  730. lightspeed_stack-0.7.1/tests/e2e/features/steps/token_counters.py +0 -211
  731. lightspeed_stack-0.7.1/tests/e2e/features/steps/unified_mode.py +0 -107
  732. lightspeed_stack-0.7.1/tests/e2e/mock_tls_inference_server/server.py +0 -383
  733. lightspeed_stack-0.7.1/tests/e2e/proxy/interception_proxy.py +0 -333
  734. lightspeed_stack-0.7.1/tests/e2e/proxy/tunnel_proxy.py +0 -265
  735. lightspeed_stack-0.7.1/tests/e2e/test_list.txt +0 -47
  736. lightspeed_stack-0.7.1/tests/e2e/utils/ogx_config_utils.py +0 -121
  737. lightspeed_stack-0.7.1/tests/e2e/utils/prow_utils.py +0 -434
  738. lightspeed_stack-0.7.1/tests/e2e/utils/utils.py +0 -734
  739. lightspeed_stack-0.7.1/tests/e2e-prow/rhoai/manifests/lightspeed/ogx-openai.yaml +0 -302
  740. lightspeed_stack-0.7.1/tests/e2e-prow/rhoai/manifests/lightspeed/ogx-prow.yaml +0 -210
  741. lightspeed_stack-0.7.1/tests/e2e-prow/rhoai/pipeline-konflux.sh +0 -540
  742. lightspeed_stack-0.7.1/tests/e2e-prow/rhoai/scripts/e2e-ops.sh +0 -1219
  743. lightspeed_stack-0.7.1/tests/integration/conftest.py +0 -1106
  744. lightspeed_stack-0.7.1/tests/integration/container_lifecycle/test_container_lifecycle.py +0 -195
  745. lightspeed_stack-0.7.1/tests/integration/endpoints/README.md +0 -114
  746. lightspeed_stack-0.7.1/tests/integration/endpoints/_compaction_helpers.py +0 -280
  747. lightspeed_stack-0.7.1/tests/integration/endpoints/test_authorized_endpoint.py +0 -35
  748. lightspeed_stack-0.7.1/tests/integration/endpoints/test_compaction_a2a.py +0 -590
  749. lightspeed_stack-0.7.1/tests/integration/endpoints/test_compaction_query.py +0 -641
  750. lightspeed_stack-0.7.1/tests/integration/endpoints/test_compaction_responses.py +0 -827
  751. lightspeed_stack-0.7.1/tests/integration/endpoints/test_compaction_streaming_query.py +0 -825
  752. lightspeed_stack-0.7.1/tests/integration/endpoints/test_config_integration.py +0 -172
  753. lightspeed_stack-0.7.1/tests/integration/endpoints/test_conversations_v1_integration.py +0 -816
  754. lightspeed_stack-0.7.1/tests/integration/endpoints/test_conversations_v2_integration.py +0 -816
  755. lightspeed_stack-0.7.1/tests/integration/endpoints/test_granite_guardian_integration.py +0 -846
  756. lightspeed_stack-0.7.1/tests/integration/endpoints/test_health_integration.py +0 -195
  757. lightspeed_stack-0.7.1/tests/integration/endpoints/test_info_integration.py +0 -155
  758. lightspeed_stack-0.7.1/tests/integration/endpoints/test_model_list.py +0 -209
  759. lightspeed_stack-0.7.1/tests/integration/endpoints/test_query_byok_integration.py +0 -1291
  760. lightspeed_stack-0.7.1/tests/integration/endpoints/test_query_integration.py +0 -1516
  761. lightspeed_stack-0.7.1/tests/integration/endpoints/test_responses_integration.py +0 -355
  762. lightspeed_stack-0.7.1/tests/integration/endpoints/test_root_endpoint.py +0 -75
  763. lightspeed_stack-0.7.1/tests/integration/endpoints/test_saved_prompts_integration.py +0 -283
  764. lightspeed_stack-0.7.1/tests/integration/endpoints/test_skills_integration.py +0 -96
  765. lightspeed_stack-0.7.1/tests/integration/endpoints/test_streaming_query_byok_integration.py +0 -1065
  766. lightspeed_stack-0.7.1/tests/integration/endpoints/test_streaming_query_integration.py +0 -315
  767. lightspeed_stack-0.7.1/tests/integration/endpoints/test_tools_integration.py +0 -107
  768. lightspeed_stack-0.7.1/tests/integration/test_configuration.py +0 -94
  769. lightspeed_stack-0.7.1/tests/integration/test_feedback_otel_trace.py +0 -95
  770. lightspeed_stack-0.7.1/tests/integration/test_openapi_json.py +0 -440
  771. lightspeed_stack-0.7.1/tests/integration/test_otel_trace_propagation.py +0 -200
  772. lightspeed_stack-0.7.1/tests/integration/test_rh_identity_integration.py +0 -183
  773. lightspeed_stack-0.7.1/tests/integration/test_unified_synthesis.py +0 -604
  774. lightspeed_stack-0.7.1/tests/integration/test_version.py +0 -46
  775. lightspeed_stack-0.7.1/tests/unit/app/endpoints/conftest.py +0 -43
  776. lightspeed_stack-0.7.1/tests/unit/app/endpoints/responses_otel_helpers.py +0 -322
  777. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_a2a.py +0 -1756
  778. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_config.py +0 -137
  779. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_conversations.py +0 -2511
  780. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_conversations_v2.py +0 -1234
  781. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_feedback.py +0 -870
  782. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_health.py +0 -502
  783. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_info.py +0 -251
  784. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_metrics.py +0 -71
  785. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_models.py +0 -535
  786. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_providers.py +0 -344
  787. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_query.py +0 -626
  788. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_query_otel.py +0 -205
  789. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_rags.py +0 -572
  790. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_responses.py +0 -2902
  791. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_rlsapi_v1.py +0 -2092
  792. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_saved_prompts.py +0 -1117
  793. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_shields.py +0 -200
  794. lightspeed_stack-0.7.1/tests/unit/app/endpoints/test_vector_stores.py +0 -1502
  795. lightspeed_stack-0.7.1/tests/unit/app/test_database.py +0 -406
  796. lightspeed_stack-0.7.1/tests/unit/app/test_routers.py +0 -196
  797. lightspeed_stack-0.7.1/tests/unit/authentication/test_api_key_token.py +0 -139
  798. lightspeed_stack-0.7.1/tests/unit/authentication/test_jwk_token.py +0 -927
  799. lightspeed_stack-0.7.1/tests/unit/authentication/test_k8s.py +0 -1137
  800. lightspeed_stack-0.7.1/tests/unit/authentication/test_rh_identity.py +0 -1075
  801. lightspeed_stack-0.7.1/tests/unit/authorization/test_middleware.py +0 -409
  802. lightspeed_stack-0.7.1/tests/unit/authorization/test_resolvers.py +0 -467
  803. lightspeed_stack-0.7.1/tests/unit/cache/test_cache_factory.py +0 -265
  804. lightspeed_stack-0.7.1/tests/unit/cache/test_in_memory_cache.py +0 -70
  805. lightspeed_stack-0.7.1/tests/unit/cache/test_noop_cache.py +0 -292
  806. lightspeed_stack-0.7.1/tests/unit/cache/test_postgres_cache.py +0 -1129
  807. lightspeed_stack-0.7.1/tests/unit/cache/test_sqlite_cache.py +0 -821
  808. lightspeed_stack-0.7.1/tests/unit/conftest.py +0 -294
  809. lightspeed_stack-0.7.1/tests/unit/models/config/README.md +0 -130
  810. lightspeed_stack-0.7.1/tests/unit/models/config/test_authentication_configuration.py +0 -616
  811. lightspeed_stack-0.7.1/tests/unit/models/config/test_byok_rag.py +0 -357
  812. lightspeed_stack-0.7.1/tests/unit/models/config/test_conversation_history.py +0 -279
  813. lightspeed_stack-0.7.1/tests/unit/models/config/test_cors.py +0 -104
  814. lightspeed_stack-0.7.1/tests/unit/models/config/test_customization.py +0 -104
  815. lightspeed_stack-0.7.1/tests/unit/models/config/test_database_configuration.py +0 -95
  816. lightspeed_stack-0.7.1/tests/unit/models/config/test_dump_configuration.py +0 -2884
  817. lightspeed_stack-0.7.1/tests/unit/models/config/test_inference_configuration.py +0 -193
  818. lightspeed_stack-0.7.1/tests/unit/models/config/test_jwt_role_rule.py +0 -157
  819. lightspeed_stack-0.7.1/tests/unit/models/config/test_observability_configuration.py +0 -366
  820. lightspeed_stack-0.7.1/tests/unit/models/config/test_postgresql_database_configuration.py +0 -311
  821. lightspeed_stack-0.7.1/tests/unit/models/config/test_quota_handlers_config.py +0 -750
  822. lightspeed_stack-0.7.1/tests/unit/models/config/test_rlsapi_v1_configuration.py +0 -169
  823. lightspeed_stack-0.7.1/tests/unit/models/config/test_splunk_configuration.py +0 -126
  824. lightspeed_stack-0.7.1/tests/unit/models/config/test_tls_configuration.py +0 -229
  825. lightspeed_stack-0.7.1/tests/unit/models/config/test_user_data_collection.py +0 -101
  826. lightspeed_stack-0.7.1/tests/unit/models/config/test_vector_store.py +0 -286
  827. lightspeed_stack-0.7.1/tests/unit/models/database/test_saved_prompts.py +0 -146
  828. lightspeed_stack-0.7.1/tests/unit/models/requests/test_feedback_request.py +0 -218
  829. lightspeed_stack-0.7.1/tests/unit/models/requests/test_responses_request.py +0 -57
  830. lightspeed_stack-0.7.1/tests/unit/models/responses/test_successful_responses.py +0 -1333
  831. lightspeed_stack-0.7.1/tests/unit/models/rlsapi/test_requests.py +0 -681
  832. lightspeed_stack-0.7.1/tests/unit/models/rlsapi/test_responses.py +0 -176
  833. lightspeed_stack-0.7.1/tests/unit/models/test_compaction.py +0 -76
  834. lightspeed_stack-0.7.1/tests/unit/models/test_saved_prompts_config.py +0 -204
  835. lightspeed_stack-0.7.1/tests/unit/observability/conftest.py +0 -16
  836. lightspeed_stack-0.7.1/tests/unit/observability/formats/test_rlsapi.py +0 -103
  837. lightspeed_stack-0.7.1/tests/unit/observability/test_splunk.py +0 -319
  838. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/README.md +0 -18
  839. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/test_capability.py +0 -989
  840. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/capabilities/question_validity/test_capability.py +0 -804
  841. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/test_capability.py +0 -362
  842. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/ogx/test_model.py +0 -952
  843. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/ogx/test_provider.py +0 -273
  844. lightspeed_stack-0.7.1/tests/unit/pydantic_ai_lightspeed/ogx/test_transport.py +0 -447
  845. lightspeed_stack-0.7.1/tests/unit/quota/test_cluster_quota_limiter.py +0 -195
  846. lightspeed_stack-0.7.1/tests/unit/telemetry/conftest.py +0 -809
  847. lightspeed_stack-0.7.1/tests/unit/telemetry/test_configuration_snapshot.py +0 -1284
  848. lightspeed_stack-0.7.1/tests/unit/test_configuration.py +0 -4247
  849. lightspeed_stack-0.7.1/tests/unit/test_lightspeed_stack.py +0 -197
  850. lightspeed_stack-0.7.1/tests/unit/test_log.py +0 -115
  851. lightspeed_stack-0.7.1/tests/unit/test_ogx_synthesize.py +0 -1222
  852. lightspeed_stack-0.7.1/tests/unit/utils/README.md +0 -122
  853. lightspeed_stack-0.7.1/tests/unit/utils/agents/test_query.py +0 -676
  854. lightspeed_stack-0.7.1/tests/unit/utils/agents/test_streaming.py +0 -1769
  855. lightspeed_stack-0.7.1/tests/unit/utils/auth_helpers.py +0 -26
  856. lightspeed_stack-0.7.1/tests/unit/utils/dumpers/test_models_dumper.py +0 -10507
  857. lightspeed_stack-0.7.1/tests/unit/utils/test_checks.py +0 -238
  858. lightspeed_stack-0.7.1/tests/unit/utils/test_compaction.py +0 -597
  859. lightspeed_stack-0.7.1/tests/unit/utils/test_conversation_compaction.py +0 -809
  860. lightspeed_stack-0.7.1/tests/unit/utils/test_conversations.py +0 -1151
  861. lightspeed_stack-0.7.1/tests/unit/utils/test_ogx_version.py +0 -156
  862. lightspeed_stack-0.7.1/tests/unit/utils/test_otel_tracing.py +0 -403
  863. lightspeed_stack-0.7.1/tests/unit/utils/test_pydantic_ai.py +0 -482
  864. lightspeed_stack-0.7.1/tests/unit/utils/test_responses.py +0 -4027
  865. lightspeed_stack-0.7.1/tests/unit/utils/test_saved_prompts.py +0 -427
  866. lightspeed_stack-0.7.1/tests/unit/utils/test_shields.py +0 -401
  867. lightspeed_stack-0.7.1/tests/unit/utils/test_stream_interrupts.py +0 -195
  868. lightspeed_stack-0.7.1/tests/unit/utils/test_token_estimator.py +0 -245
  869. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/LICENSE +0 -0
  870. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/a2a_storage/README.md +0 -0
  871. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/a2a_storage/__init__.py +0 -0
  872. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/README.md +0 -0
  873. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/__init__.py +0 -0
  874. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/README.md +0 -0
  875. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/__init__.py +0 -0
  876. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/a2a_openapi.py +0 -0
  877. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/authorized.py +0 -0
  878. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/config.py +0 -0
  879. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/info.py +0 -0
  880. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/mcp_auth.py +0 -0
  881. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/mcp_servers.py +0 -0
  882. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/metrics.py +0 -0
  883. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/models.py +0 -0
  884. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/prompts.py +0 -0
  885. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/root.py +0 -0
  886. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/saved_prompts.py +0 -0
  887. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/shields.py +0 -0
  888. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/skills.py +0 -0
  889. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/stream_interrupt.py +0 -0
  890. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/endpoints/tools.py +0 -0
  891. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/app/main.py +0 -0
  892. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/authentication/README.md +0 -0
  893. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/authorization/README.md +0 -0
  894. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/authorization/__init__.py +0 -0
  895. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/cache/README.md +0 -0
  896. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/cache/__init__.py +0 -0
  897. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/cache/cache_error.py +0 -0
  898. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/data/README.md +0 -0
  899. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/data/__init__.py +0 -0
  900. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/metrics/README.md +0 -0
  901. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/metrics/__init__.py +0 -0
  902. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/metrics/utils.py +0 -0
  903. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/README.md +0 -0
  904. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/__init__.py +0 -0
  905. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/README.md +0 -0
  906. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/__init__.py +0 -0
  907. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/requests/README.md +0 -0
  908. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/requests/__init__.py +0 -0
  909. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/README.md +0 -0
  910. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/__init__.py +0 -0
  911. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/constants.py +0 -0
  912. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/error/README.md +0 -0
  913. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/error/__init__.py +0 -0
  914. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/successful/README.md +0 -0
  915. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/api/responses/successful/__init__.py +0 -0
  916. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/README.md +0 -0
  917. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/agents/README.md +0 -0
  918. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/agents/__init__.py +0 -0
  919. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/models.py +0 -0
  920. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/responses/README.md +0 -0
  921. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/responses/__init__.py +0 -0
  922. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/responses/types.py +0 -0
  923. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/tools.py +0 -0
  924. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/common/transcripts.py +0 -0
  925. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/database/README.md +0 -0
  926. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/database/__init__.py +0 -0
  927. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/database/base.py +0 -0
  928. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/database/conversations.py +0 -0
  929. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/models/database/saved_prompts.py +0 -0
  930. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/observability/README.md +0 -0
  931. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/observability/formats/README.md +0 -0
  932. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/observability/formats/__init__.py +0 -0
  933. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/observability/profiling.py +0 -0
  934. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/README.md +0 -0
  935. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/__init__.py +0 -0
  936. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/README.md +0 -0
  937. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/__init__.py +0 -0
  938. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/base.py +0 -0
  939. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/granite_guardian/README.md +0 -0
  940. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/granite_guardian/__init__.py +0 -0
  941. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/question_validity/README.md +0 -0
  942. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/question_validity/__init__.py +0 -0
  943. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/redaction/README.md +0 -0
  944. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/capabilities/redaction/__init__.py +0 -0
  945. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/llamastack/README.md +0 -0
  946. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/ogx/README.md +0 -0
  947. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/pydantic_ai_lightspeed/ogx/__init__.py +0 -0
  948. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/quota/README.md +0 -0
  949. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/quota/__init__.py +0 -0
  950. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/runners/README.md +0 -0
  951. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/runners/__init__.py +0 -0
  952. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/telemetry/README.md +0 -0
  953. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/telemetry/__init__.py +0 -0
  954. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/utils/__init__.py +0 -0
  955. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/utils/agents/README.md +0 -0
  956. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/utils/agents/__init__.py +0 -0
  957. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/utils/dumpers/README.md +0 -0
  958. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/src/utils/mcp/README.md +0 -0
  959. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/__init__.py +0 -0
  960. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/README.md +0 -0
  961. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/cache_data.py +0 -0
  962. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/cache_utils.py +0 -0
  963. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/go_10000_lines.go +0 -0
  964. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/go_1000_lines.go +0 -0
  965. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/go_100_lines.go +0 -0
  966. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/go_10_lines.go +0 -0
  967. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/js_10000_lines.js +0 -0
  968. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/js_1000_lines.js +0 -0
  969. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/js_100_lines.js +0 -0
  970. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/js_10_lines.js +0 -0
  971. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/json_10000_lines.json +0 -0
  972. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/json_1000_lines.json +0 -0
  973. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/json_100_lines.json +0 -0
  974. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/json_10_lines.json +0 -0
  975. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/python_100_lines.py +0 -0
  976. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/python_10_lines.py +0 -0
  977. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/xml_10000_lines.xml +0 -0
  978. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/xml_1000_lines.xml +0 -0
  979. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/xml_100_lines.xml +0 -0
  980. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/xml_10_lines.xml +0 -0
  981. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/yaml_10000_lines.yml +0 -0
  982. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/yaml_1000_lines.yml +0 -0
  983. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/yaml_100_lines.yml +0 -0
  984. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/data/yaml_10_lines.yml +0 -0
  985. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/test_cache_connect.py +0 -0
  986. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/test_cache_delete.py +0 -0
  987. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/test_cache_insert_or_append.py +0 -0
  988. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/test_cache_insert_or_append_existing_key.py +0 -0
  989. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/benchmarks/test_cache_insert_or_append_skip_user_id_check.py +0 -0
  990. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/benchmarks-postgres.yaml +0 -0
  991. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/benchmarks-sqlite.yaml +0 -0
  992. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/lightspeed-stack-proper-name.yaml +0 -0
  993. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/lightspeed-stack.yaml +0 -0
  994. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/minimal-stack.yaml +0 -0
  995. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/multiline_system_prompt.txt +0 -0
  996. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/password +0 -0
  997. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/rag.txt +0 -0
  998. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/rh-identity-config.yaml +0 -0
  999. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/run.yaml +0 -0
  1000. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/server.crt +0 -0
  1001. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/server.key +0 -0
  1002. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/configuration/system_prompt.txt +0 -0
  1003. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/README.md +0 -0
  1004. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/__init__.py +0 -0
  1005. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configs/README.md +0 -0
  1006. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/README.md +0 -0
  1007. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/README.md +0 -0
  1008. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-api-auth.yaml +0 -0
  1009. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml +0 -0
  1010. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml +0 -0
  1011. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-invalid.yaml +0 -0
  1012. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +0 -0
  1013. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml +0 -0
  1014. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml +0 -0
  1015. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-negative.yaml +0 -0
  1016. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml +0 -0
  1017. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-rh-identity.yaml +0 -0
  1018. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/README.md +0 -0
  1019. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-api-auth.yaml +0 -0
  1020. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml +0 -0
  1021. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml +0 -0
  1022. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-invalid.yaml +0 -0
  1023. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +0 -0
  1024. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml +0 -0
  1025. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml +0 -0
  1026. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-negative.yaml +0 -0
  1027. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml +0 -0
  1028. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-rh-identity.yaml +0 -0
  1029. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-rhelai.yaml +0 -0
  1030. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-rhoai.yaml +0 -0
  1031. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml +0 -0
  1032. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/unified-mode/README.md +0 -0
  1033. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/unified-mode/library-mode/README.md +0 -0
  1034. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/configuration/unified-mode/server-mode/README.md +0 -0
  1035. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/README.md +0 -0
  1036. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/authorized_noop.feature +0 -0
  1037. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/authorized_noop_token.feature +0 -0
  1038. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/authorized_rh_identity.feature +0 -0
  1039. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/byok_pdf.feature +0 -0
  1040. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/conversation_cache_v2.feature +0 -0
  1041. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/conversations.feature +0 -0
  1042. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/degraded_mode_startup.feature +0 -0
  1043. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/faiss.feature +0 -0
  1044. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/feedback.feature +0 -0
  1045. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/health.feature +0 -0
  1046. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/http_401_unauthorized.feature +0 -0
  1047. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/inline_rag.feature +0 -0
  1048. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/mcp.feature +0 -0
  1049. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/mcp_servers_api.feature +0 -0
  1050. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/mcp_servers_api_auth.feature +0 -0
  1051. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/mcp_servers_api_no_config.feature +0 -0
  1052. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/models.feature +0 -0
  1053. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/ogx_disrupted.feature +0 -0
  1054. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/okp_rag.feature +0 -0
  1055. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/opentelemetry.feature +0 -0
  1056. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/prompts.feature +0 -0
  1057. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/proxy.feature +0 -0
  1058. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/rbac.feature +0 -0
  1059. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/rest_api.feature +0 -0
  1060. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/rlsapi_v1.feature +0 -0
  1061. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/rlsapi_v1_errors.feature +0 -0
  1062. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/shields_overrides.feature +0 -0
  1063. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/shields_question_validity.feature +0 -0
  1064. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/shields_redaction.feature +0 -0
  1065. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/smoketests.feature +0 -0
  1066. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/__init__.py +0 -0
  1067. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/conversation.py +0 -0
  1068. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/info.py +0 -0
  1069. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/llm_query_response.py +0 -0
  1070. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/models.py +0 -0
  1071. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/opentelemetry.py +0 -0
  1072. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/prompts.py +0 -0
  1073. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/rbac.py +0 -0
  1074. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/steps/rlsapi_v1.py +0 -0
  1075. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/streaming_query.feature +0 -0
  1076. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/tls-ca.feature +0 -0
  1077. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/tls-mtls.feature +0 -0
  1078. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/tls-tlsv13.feature +0 -0
  1079. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/unified-mode-boot.feature +0 -0
  1080. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/unified-mode-legacy.feature +0 -0
  1081. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/unified-mode-migration.feature +0 -0
  1082. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/unified-mode-synthesis.feature +0 -0
  1083. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/features/vector_stores.feature +0 -0
  1084. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/gen_scenario_list.py +0 -0
  1085. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_guardian_server/Dockerfile +0 -0
  1086. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_guardian_server/README.md +0 -0
  1087. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_guardian_server/server.py +0 -0
  1088. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_jwks_server/Dockerfile +0 -0
  1089. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_jwks_server/README.md +0 -0
  1090. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_jwks_server/generate_tokens.py +0 -0
  1091. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_jwks_server/server.py +0 -0
  1092. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_mcp_server/Dockerfile +0 -0
  1093. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_mcp_server/README.md +0 -0
  1094. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_mcp_server/server.py +0 -0
  1095. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_otel_collector/Dockerfile +0 -0
  1096. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_otel_collector/README.md +0 -0
  1097. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_otel_collector/server.py +0 -0
  1098. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_tls_inference_server/Dockerfile +0 -0
  1099. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/mock_tls_inference_server/README.md +0 -0
  1100. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/patches/README.md +0 -0
  1101. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/patches/docker-compose-mcp-volumes-selinux.patch +0 -0
  1102. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/proxy/README.md +0 -0
  1103. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/proxy/__init__.py +0 -0
  1104. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/rag/README.md +0 -0
  1105. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/rag/kv_store.db +0 -0
  1106. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/rag/pdf_kv_store.db +0 -0
  1107. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/rag/sources/README.md +0 -0
  1108. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/rag/sources/lightspeed-field-notes.pdf +0 -0
  1109. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/secrets/README.md +0 -0
  1110. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/secrets/invalid-mcp-token +0 -0
  1111. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/secrets/mcp-token +0 -0
  1112. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/skills/echo/SKILL.md +0 -0
  1113. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/skills/echo/references/guide.md +0 -0
  1114. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/skills/summarize/SKILL.md +0 -0
  1115. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/skills/summarize/references/guide.md +0 -0
  1116. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/test_api.py +0 -0
  1117. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/utils/README.md +0 -0
  1118. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e/utils/ogx_prow_utils.py +0 -0
  1119. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/.e2e_exit_code +0 -0
  1120. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/configs/run.yaml +0 -0
  1121. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/gpu/cluster-policy.yaml +0 -0
  1122. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/gpu/create-nfd.yaml +0 -0
  1123. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/e2e-interception-proxy.yaml +0 -0
  1124. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/e2e-mock-tls-inference.yaml +0 -0
  1125. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/e2e-tunnel-proxy.yaml +0 -0
  1126. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/lightspeed-stack.yaml +0 -0
  1127. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/mock-guardian.yaml +0 -0
  1128. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/mock-jwks.yaml +0 -0
  1129. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/mock-mcp.yaml +0 -0
  1130. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/okp-solr.yaml +0 -0
  1131. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/namespaces/nfd.yaml +0 -0
  1132. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/namespaces/nvidia-operator.yaml +0 -0
  1133. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/operators/ds-cluster.yaml +0 -0
  1134. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/operators/operatorgroup.yaml +0 -0
  1135. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/operators/operators.yaml +0 -0
  1136. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-cpu.yaml +0 -0
  1137. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-gpu.yaml +0 -0
  1138. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-cpu.yaml +0 -0
  1139. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-gpu.yaml +0 -0
  1140. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/pipeline-services-konflux.sh +0 -0
  1141. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/pipeline-services.sh +0 -0
  1142. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/pipeline-test-pod.sh +0 -0
  1143. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/pipeline-vllm.sh +0 -0
  1144. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/pipeline.sh +0 -0
  1145. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/run-tests.sh +0 -0
  1146. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/scripts/bootstrap.sh +0 -0
  1147. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/scripts/deploy-vllm.sh +0 -0
  1148. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/scripts/fetch-vllm-image.sh +0 -0
  1149. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/scripts/get-vllm-pod-info.sh +0 -0
  1150. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/e2e-prow/rhoai/scripts/gpu-setup.sh +0 -0
  1151. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/README.md +0 -0
  1152. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/__init__.py +0 -0
  1153. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/container_lifecycle/README.md +0 -0
  1154. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/endpoints/__init__.py +0 -0
  1155. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/endpoints/test_compaction_buffer.py +0 -0
  1156. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/endpoints/test_responses_byok_integration.py +0 -0
  1157. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/endpoints/test_rlsapi_v1_integration.py +0 -0
  1158. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/endpoints/test_stream_interrupt_integration.py +0 -0
  1159. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/test_middleware_integration.py +0 -0
  1160. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/test_responses_otel_trace.py +0 -0
  1161. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/integration/test_unified_mode_cli.py +0 -0
  1162. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/empty.py +0 -0
  1163. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/syntax_error.py +0 -0
  1164. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/test/profile.py +0 -0
  1165. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/test_four/profile.py +0 -0
  1166. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/test_three/profile.py +0 -0
  1167. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/profiles/test_two/test.txt +0 -0
  1168. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/README.md +0 -0
  1169. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/__init__.py +0 -0
  1170. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/a2a_storage/README.md +0 -0
  1171. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/a2a_storage/__init__.py +0 -0
  1172. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/a2a_storage/test_in_memory_context_store.py +0 -0
  1173. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/a2a_storage/test_sqlite_context_store.py +0 -0
  1174. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/a2a_storage/test_storage_factory.py +0 -0
  1175. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/README.md +0 -0
  1176. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/__init__.py +0 -0
  1177. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/README.md +0 -0
  1178. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/__init__.py +0 -0
  1179. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_authorized.py +0 -0
  1180. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_mcp_auth.py +0 -0
  1181. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_mcp_servers.py +0 -0
  1182. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_prompts.py +0 -0
  1183. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_responses_otel.py +0 -0
  1184. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_root.py +0 -0
  1185. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_skills.py +0 -0
  1186. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_stream_interrupt.py +0 -0
  1187. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_streaming_query.py +0 -0
  1188. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/endpoints/test_tools.py +0 -0
  1189. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/app/test_main_middleware.py +0 -0
  1190. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/README.md +0 -0
  1191. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/__init__.py +0 -0
  1192. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/test_auth.py +0 -0
  1193. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/test_noop.py +0 -0
  1194. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/test_noop_with_token.py +0 -0
  1195. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/test_trusted_proxy.py +0 -0
  1196. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authentication/test_utils.py +0 -0
  1197. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authorization/README.md +0 -0
  1198. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authorization/__init__.py +0 -0
  1199. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/authorization/test_azure_token_manager.py +0 -0
  1200. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/cache/README.md +0 -0
  1201. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/cache/__init__.py +0 -0
  1202. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/client/README.md +0 -0
  1203. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/client/test_ogx.py +0 -0
  1204. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/metrics/README.md +0 -0
  1205. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/metrics/__init__.py +0 -0
  1206. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/metrics/test_recording.py +0 -0
  1207. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/metrics/test_utis.py +0 -0
  1208. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/README.md +0 -0
  1209. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/__init__.py +0 -0
  1210. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/__init__.py +0 -0
  1211. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_a2a_state_configuration.py +0 -0
  1212. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_approvals_configuration.py +0 -0
  1213. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_compaction_configuration.py +0 -0
  1214. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_granite_guardian_configuration.py +0 -0
  1215. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_in_memory_cache_configuration.py +0 -0
  1216. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_model_context_protocol_server.py +0 -0
  1217. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_ogx_configuration.py +0 -0
  1218. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_quota_limiter_config.py +0 -0
  1219. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_quota_scheduler_config.py +0 -0
  1220. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_rag_configuration.py +0 -0
  1221. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_reranker_configuration.py +0 -0
  1222. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_service_configuration.py +0 -0
  1223. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_shields_configuration.py +0 -0
  1224. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/config/test_skills_configuration.py +0 -0
  1225. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/database/README.md +0 -0
  1226. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/database/__init__.py +0 -0
  1227. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/README.md +0 -0
  1228. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/__init__.py +0 -0
  1229. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/test_attachment.py +0 -0
  1230. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/test_feedback_status_update_request.py +0 -0
  1231. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/test_query_request.py +0 -0
  1232. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/requests/test_vector_store_requests.py +0 -0
  1233. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/README.md +0 -0
  1234. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/__init__.py +0 -0
  1235. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_authorized_response.py +0 -0
  1236. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_error_responses.py +0 -0
  1237. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_query_response.py +0 -0
  1238. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_rag_chunk.py +0 -0
  1239. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_response_types.py +0 -0
  1240. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/responses/test_types.py +0 -0
  1241. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/rlsapi/README.md +0 -0
  1242. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/rlsapi/__init__.py +0 -0
  1243. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/models/test_saved_prompts_list_response.py +0 -0
  1244. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/README.md +0 -0
  1245. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/__init__.py +0 -0
  1246. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/formats/README.md +0 -0
  1247. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/formats/__init__.py +0 -0
  1248. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/formats/test_responses.py +0 -0
  1249. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/test_responses_splunk.py +0 -0
  1250. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/observability/test_sentry.py +0 -0
  1251. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/README.md +0 -0
  1252. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/__init__.py +0 -0
  1253. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/README.md +0 -0
  1254. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/__init__.py +0 -0
  1255. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/__init__.py +0 -0
  1256. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/test_capability_after_model_request.py +0 -0
  1257. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/test_capability_streaming.py +0 -0
  1258. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/granite_guardian/test_utils.py +0 -0
  1259. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/question_validity/README.md +0 -0
  1260. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/question_validity/__init__.py +0 -0
  1261. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/README.md +0 -0
  1262. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/__init__.py +0 -0
  1263. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/test_config.py +0 -0
  1264. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/capabilities/redaction/test_core.py +0 -0
  1265. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/llamastack/README.md +0 -0
  1266. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/ogx/README.md +0 -0
  1267. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/pydantic_ai_lightspeed/ogx/__init__.py +0 -0
  1268. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/README.md +0 -0
  1269. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/__init__.py +0 -0
  1270. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/test_connect_pg.py +0 -0
  1271. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/test_connect_sqlite.py +0 -0
  1272. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/test_quota_exceed_error.py +0 -0
  1273. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/test_quota_limiter_factory.py +0 -0
  1274. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/quota/test_user_quota_limiter.py +0 -0
  1275. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/runners/README.md +0 -0
  1276. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/runners/__init__.py +0 -0
  1277. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/runners/test_uvicorn_runner.py +0 -0
  1278. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/telemetry/README.md +0 -0
  1279. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/telemetry/__init__.py +0 -0
  1280. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/test_configuration_unknown_fields.py +0 -0
  1281. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/test_degraded_mode.py +0 -0
  1282. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/test_ogx_configuration.py +0 -0
  1283. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/transcripts/README.md +0 -0
  1284. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/transcripts/__init__.py +0 -0
  1285. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/transcripts/test_transcripts.py +0 -0
  1286. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/__init__.py +0 -0
  1287. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/agents/README.md +0 -0
  1288. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/agents/test_error_handler.py +0 -0
  1289. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/agents/test_tool_processor.py +0 -0
  1290. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/dumpers/README.md +0 -0
  1291. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/dumpers/test_config_dumper.py +0 -0
  1292. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/mcp/README.md +0 -0
  1293. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/mcp/test_mcp_auth_headers.py +0 -0
  1294. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/mcp/test_mcp_headers.py +0 -0
  1295. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/mcp/test_mcp_tools.py +0 -0
  1296. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_builtin_tools.py +0 -0
  1297. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_connection_decorator.py +0 -0
  1298. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_endpoints.py +0 -0
  1299. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_input_sanitization.py +0 -0
  1300. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_json_schema_updater.py +0 -0
  1301. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_markdown_repair.py +0 -0
  1302. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_model_list.py +0 -0
  1303. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_ogx_serialization.py +0 -0
  1304. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_prompts.py +0 -0
  1305. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_query.py +0 -0
  1306. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_rh_identity.py +0 -0
  1307. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_streaming_sse.py +0 -0
  1308. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_suid.py +0 -0
  1309. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_tool_formatter.py +0 -0
  1310. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_types.py +0 -0
  1311. {lightspeed_stack-0.7.1 → lightspeed_stack-0.8.0rc1}/tests/unit/utils/test_vector_search.py +0 -0
@@ -0,0 +1,1829 @@
1
+ Metadata-Version: 2.1
2
+ Name: lightspeed-stack
3
+ Version: 0.8.0rc1
4
+ Summary: LLM tooling stack
5
+ Keywords: LLM,RAG
6
+ Maintainer-Email: Pavel Tišnovský <tisnik@centrum.cz>
7
+ License: Apache License
8
+ Version 2.0, January 2004
9
+ http://www.apache.org/licenses/
10
+
11
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
12
+
13
+ 1. Definitions.
14
+
15
+ "License" shall mean the terms and conditions for use, reproduction,
16
+ and distribution as defined by Sections 1 through 9 of this document.
17
+
18
+ "Licensor" shall mean the copyright owner or entity authorized by
19
+ the copyright owner that is granting the License.
20
+
21
+ "Legal Entity" shall mean the union of the acting entity and all
22
+ other entities that control, are controlled by, or are under common
23
+ control with that entity. For the purposes of this definition,
24
+ "control" means (i) the power, direct or indirect, to cause the
25
+ direction or management of such entity, whether by contract or
26
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
27
+ outstanding shares, or (iii) beneficial ownership of such entity.
28
+
29
+ "You" (or "Your") shall mean an individual or Legal Entity
30
+ exercising permissions granted by this License.
31
+
32
+ "Source" form shall mean the preferred form for making modifications,
33
+ including but not limited to software source code, documentation
34
+ source, and configuration files.
35
+
36
+ "Object" form shall mean any form resulting from mechanical
37
+ transformation or translation of a Source form, including but
38
+ not limited to compiled object code, generated documentation,
39
+ and conversions to other media types.
40
+
41
+ "Work" shall mean the work of authorship, whether in Source or
42
+ Object form, made available under the License, as indicated by a
43
+ copyright notice that is included in or attached to the work
44
+ (an example is provided in the Appendix below).
45
+
46
+ "Derivative Works" shall mean any work, whether in Source or Object
47
+ form, that is based on (or derived from) the Work and for which the
48
+ editorial revisions, annotations, elaborations, or other modifications
49
+ represent, as a whole, an original work of authorship. For the purposes
50
+ of this License, Derivative Works shall not include works that remain
51
+ separable from, or merely link (or bind by name) to the interfaces of,
52
+ the Work and Derivative Works thereof.
53
+
54
+ "Contribution" shall mean any work of authorship, including
55
+ the original version of the Work and any modifications or additions
56
+ to that Work or Derivative Works thereof, that is intentionally
57
+ submitted to Licensor for inclusion in the Work by the copyright owner
58
+ or by an individual or Legal Entity authorized to submit on behalf of
59
+ the copyright owner. For the purposes of this definition, "submitted"
60
+ means any form of electronic, verbal, or written communication sent
61
+ to the Licensor or its representatives, including but not limited to
62
+ communication on electronic mailing lists, source code control systems,
63
+ and issue tracking systems that are managed by, or on behalf of, the
64
+ Licensor for the purpose of discussing and improving the Work, but
65
+ excluding communication that is conspicuously marked or otherwise
66
+ designated in writing by the copyright owner as "Not a Contribution."
67
+
68
+ "Contributor" shall mean Licensor and any individual or Legal Entity
69
+ on behalf of whom a Contribution has been received by Licensor and
70
+ subsequently incorporated within the Work.
71
+
72
+ 2. Grant of Copyright License. Subject to the terms and conditions of
73
+ this License, each Contributor hereby grants to You a perpetual,
74
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
75
+ copyright license to reproduce, prepare Derivative Works of,
76
+ publicly display, publicly perform, sublicense, and distribute the
77
+ Work and such Derivative Works in Source or Object form.
78
+
79
+ 3. Grant of Patent License. Subject to the terms and conditions of
80
+ this License, each Contributor hereby grants to You a perpetual,
81
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
82
+ (except as stated in this section) patent license to make, have made,
83
+ use, offer to sell, sell, import, and otherwise transfer the Work,
84
+ where such license applies only to those patent claims licensable
85
+ by such Contributor that are necessarily infringed by their
86
+ Contribution(s) alone or by combination of their Contribution(s)
87
+ with the Work to which such Contribution(s) was submitted. If You
88
+ institute patent litigation against any entity (including a
89
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
90
+ or a Contribution incorporated within the Work constitutes direct
91
+ or contributory patent infringement, then any patent licenses
92
+ granted to You under this License for that Work shall terminate
93
+ as of the date such litigation is filed.
94
+
95
+ 4. Redistribution. You may reproduce and distribute copies of the
96
+ Work or Derivative Works thereof in any medium, with or without
97
+ modifications, and in Source or Object form, provided that You
98
+ meet the following conditions:
99
+
100
+ (a) You must give any other recipients of the Work or
101
+ Derivative Works a copy of this License; and
102
+
103
+ (b) You must cause any modified files to carry prominent notices
104
+ stating that You changed the files; and
105
+
106
+ (c) You must retain, in the Source form of any Derivative Works
107
+ that You distribute, all copyright, patent, trademark, and
108
+ attribution notices from the Source form of the Work,
109
+ excluding those notices that do not pertain to any part of
110
+ the Derivative Works; and
111
+
112
+ (d) If the Work includes a "NOTICE" text file as part of its
113
+ distribution, then any Derivative Works that You distribute must
114
+ include a readable copy of the attribution notices contained
115
+ within such NOTICE file, excluding those notices that do not
116
+ pertain to any part of the Derivative Works, in at least one
117
+ of the following places: within a NOTICE text file distributed
118
+ as part of the Derivative Works; within the Source form or
119
+ documentation, if provided along with the Derivative Works; or,
120
+ within a display generated by the Derivative Works, if and
121
+ wherever such third-party notices normally appear. The contents
122
+ of the NOTICE file are for informational purposes only and
123
+ do not modify the License. You may add Your own attribution
124
+ notices within Derivative Works that You distribute, alongside
125
+ or as an addendum to the NOTICE text from the Work, provided
126
+ that such additional attribution notices cannot be construed
127
+ as modifying the License.
128
+
129
+ You may add Your own copyright statement to Your modifications and
130
+ may provide additional or different license terms and conditions
131
+ for use, reproduction, or distribution of Your modifications, or
132
+ for any such Derivative Works as a whole, provided Your use,
133
+ reproduction, and distribution of the Work otherwise complies with
134
+ the conditions stated in this License.
135
+
136
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
137
+ any Contribution intentionally submitted for inclusion in the Work
138
+ by You to the Licensor shall be under the terms and conditions of
139
+ this License, without any additional terms or conditions.
140
+ Notwithstanding the above, nothing herein shall supersede or modify
141
+ the terms of any separate license agreement you may have executed
142
+ with Licensor regarding such Contributions.
143
+
144
+ 6. Trademarks. This License does not grant permission to use the trade
145
+ names, trademarks, service marks, or product names of the Licensor,
146
+ except as required for reasonable and customary use in describing the
147
+ origin of the Work and reproducing the content of the NOTICE file.
148
+
149
+ 7. Disclaimer of Warranty. Unless required by applicable law or
150
+ agreed to in writing, Licensor provides the Work (and each
151
+ Contributor provides its Contributions) on an "AS IS" BASIS,
152
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
153
+ implied, including, without limitation, any warranties or conditions
154
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
155
+ PARTICULAR PURPOSE. You are solely responsible for determining the
156
+ appropriateness of using or redistributing the Work and assume any
157
+ risks associated with Your exercise of permissions under this License.
158
+
159
+ 8. Limitation of Liability. In no event and under no legal theory,
160
+ whether in tort (including negligence), contract, or otherwise,
161
+ unless required by applicable law (such as deliberate and grossly
162
+ negligent acts) or agreed to in writing, shall any Contributor be
163
+ liable to You for damages, including any direct, indirect, special,
164
+ incidental, or consequential damages of any character arising as a
165
+ result of this License or out of the use or inability to use the
166
+ Work (including but not limited to damages for loss of goodwill,
167
+ work stoppage, computer failure or malfunction, or any and all
168
+ other commercial damages or losses), even if such Contributor
169
+ has been advised of the possibility of such damages.
170
+
171
+ 9. Accepting Warranty or Additional Liability. While redistributing
172
+ the Work or Derivative Works thereof, You may choose to offer,
173
+ and charge a fee for, acceptance of support, warranty, indemnity,
174
+ or other liability obligations and/or rights consistent with this
175
+ License. However, in accepting such obligations, You may act only
176
+ on Your own behalf and on Your sole responsibility, not on behalf
177
+ of any other Contributor, and only if You agree to indemnify,
178
+ defend, and hold each Contributor harmless for any liability
179
+ incurred by, or claims asserted against, such Contributor by reason
180
+ of your accepting any such warranty or additional liability.
181
+
182
+ END OF TERMS AND CONDITIONS
183
+
184
+ APPENDIX: How to apply the Apache License to your work.
185
+
186
+ To apply the Apache License to your work, attach the following
187
+ boilerplate notice, with the fields enclosed by brackets "[]"
188
+ replaced with your own identifying information. (Don't include
189
+ the brackets!) The text should be enclosed in the appropriate
190
+ comment syntax for the file format. We also recommend that a
191
+ file or class name and description of purpose be included on the
192
+ same "printed page" as the copyright notice for easier
193
+ identification within third-party archives.
194
+
195
+ Copyright [yyyy] [name of copyright owner]
196
+
197
+ Licensed under the Apache License, Version 2.0 (the "License");
198
+ you may not use this file except in compliance with the License.
199
+ You may obtain a copy of the License at
200
+
201
+ http://www.apache.org/licenses/LICENSE-2.0
202
+
203
+ Unless required by applicable law or agreed to in writing, software
204
+ distributed under the License is distributed on an "AS IS" BASIS,
205
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
206
+ See the License for the specific language governing permissions and
207
+ limitations under the License.
208
+
209
+ Classifier: Development Status :: 4 - Beta
210
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
211
+ Classifier: Topic :: Software Development
212
+ Classifier: Programming Language :: Python :: 3
213
+ Classifier: Programming Language :: Python :: 3 :: Only
214
+ Classifier: License :: OSI Approved :: Apache Software License
215
+ Project-URL: Homepage, https://github.com/lightspeed-core/lightspeed-stack
216
+ Project-URL: Issues, https://github.com/lightspeed-core/lightspeed-stack/issues
217
+ Requires-Python: <3.15,>=3.12
218
+ Requires-Dist: fastapi>=0.115.12
219
+ Requires-Dist: uvicorn>=0.34.3
220
+ Requires-Dist: kubernetes<37.0.0,>=30.1.0
221
+ Requires-Dist: ogx==1.2.5
222
+ Requires-Dist: ogx-client==1.2.5
223
+ Requires-Dist: ogx-api==1.2.5
224
+ Requires-Dist: rich>=14.0.0
225
+ Requires-Dist: cachetools>=6.1.0
226
+ Requires-Dist: prometheus-client>=0.22.1
227
+ Requires-Dist: starlette>=0.47.1
228
+ Requires-Dist: aiohttp>=3.13.3
229
+ Requires-Dist: authlib>=1.6.0
230
+ Requires-Dist: a2a-sdk<0.4.0,>=0.3.4
231
+ Requires-Dist: email-validator>=2.2.0
232
+ Requires-Dist: openai>=1.99.9
233
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.42
234
+ Requires-Dist: aiosqlite>=0.21.0
235
+ Requires-Dist: asyncpg>=0.31.0
236
+ Requires-Dist: semver<4.0.0
237
+ Requires-Dist: jsonpath-ng<1.9.0,>=1.6.1
238
+ Requires-Dist: psycopg2-binary>=2.9.10
239
+ Requires-Dist: urllib3>=2.6.3
240
+ Requires-Dist: PyYAML>=6.0.0
241
+ Requires-Dist: einops>=0.8.1
242
+ Requires-Dist: azure-core>=1.38.0
243
+ Requires-Dist: azure-identity>=1.21.0
244
+ Requires-Dist: pyasn1>=0.6.3
245
+ Requires-Dist: jinja2>=3.1.0
246
+ Requires-Dist: requests>=2.33.0
247
+ Requires-Dist: oauthlib>=4.0.0
248
+ Requires-Dist: PyJWT>=2.15.1
249
+ Requires-Dist: datasets>=4.7.0
250
+ Requires-Dist: sentry-sdk[fastapi]>=2.58.0
251
+ Requires-Dist: python-dotenv>=1.2.2
252
+ Requires-Dist: tiktoken>=0.8.0
253
+ Requires-Dist: genai-prices>=0.1.12
254
+ Requires-Dist: pydantic-ai==2.38.0
255
+ Requires-Dist: pydantic-ai-skills<2.0.0,>=0.11.0
256
+ Requires-Dist: opentelemetry-distro>=0.49b0
257
+ Requires-Dist: opentelemetry-exporter-otlp>=1.34.1
258
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.49b0
259
+ Requires-Dist: presidio-analyzer>=2.2.364
260
+ Requires-Dist: presidio-anonymizer>=2.2.364
261
+ Requires-Dist: boto3
262
+ Requires-Dist: nh3>=0.3.6
263
+ Description-Content-Type: text/markdown
264
+
265
+ # Lightspeed Core Stack (LCS)
266
+
267
+ ## About The Project
268
+
269
+ [![GitHub Pages](https://img.shields.io/badge/%20-GitHub%20Pages-informational)](https://lightspeed-core.github.io/lightspeed-stack/)
270
+ [![License](https://img.shields.io/badge/license-Apache-blue)](https://github.com/lightspeed-core/lightspeed-stack/blob/main/LICENSE)
271
+ [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/)
272
+ [![Required Python version](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Flightspeed-core%2Flightspeed-stack%2Frefs%2Fheads%2Fmain%2Fpyproject.toml)](https://www.python.org/)
273
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/lightspeed-core/lightspeed-stack)
274
+ [![Tag](https://img.shields.io/github/v/tag/lightspeed-core/lightspeed-stack)](https://github.com/lightspeed-core/lightspeed-stack/releases/tag/0.6.0rc2)
275
+
276
+ Lightspeed Core Stack (LCS) is an AI-powered assistant that provides answers to product questions using backend LLM services, agents, and RAG databases.
277
+
278
+ The service includes comprehensive user data collection capabilities for various types of user interaction data, which can be exported to Red Hat's Dataverse for analysis using the companion [lightspeed-to-dataverse-exporter](https://github.com/lightspeed-core/lightspeed-to-dataverse-exporter) service.
279
+
280
+
281
+ <!-- vim-markdown-toc GFM -->
282
+
283
+ * [Architecture](#architecture)
284
+ * [Prerequisites](#prerequisites)
285
+ * [Installation](#installation)
286
+ * [Clone the Repository](#clone-the-repository)
287
+ * [System-Specific Installation](#system-specific-installation)
288
+ * [Run LCS locally](#run-lcs-locally)
289
+ * [Container Runtime Requirements](#container-runtime-requirements)
290
+ * [Configuration](#configuration)
291
+ * [Agentic Capabilities](#agentic-capabilities)
292
+ * [LLM Compatibility](#llm-compatibility)
293
+ * [Set LLM provider and model](#set-llm-provider-and-model)
294
+ * [Selecting provider and model](#selecting-provider-and-model)
295
+ * [Provider and model selection in REST API request](#provider-and-model-selection-in-rest-api-request)
296
+ * [Default provider and model](#default-provider-and-model)
297
+ * [Supported providers](#supported-providers)
298
+ * [Integration with OGX](#integration-with-ogx)
299
+ * [OGX as separate server](#ogx-as-separate-server)
300
+ * [Degraded mode](#degraded-mode)
301
+ * [MCP Server and Tool Configuration](#mcp-server-and-tool-configuration)
302
+ * [Configuring MCP Servers](#configuring-mcp-servers)
303
+ * [Configuring MCP Server Authentication](#configuring-mcp-server-authentication)
304
+ * [1. Static Tokens from Files (Recommended for Service Credentials)](#1-static-tokens-from-files-recommended-for-service-credentials)
305
+ * [2. Kubernetes Service Account Tokens (For K8s Deployments)](#2-kubernetes-service-account-tokens-for-k8s-deployments)
306
+ * [3. Client-Provided Tokens (For Per-User Authentication)](#3-client-provided-tokens-for-per-user-authentication)
307
+ * [4. OAuth (For MCP Servers Requiring OAuth)](#4-oauth-for-mcp-servers-requiring-oauth)
308
+ * [5. Automatic Header Propagation (For Gateway-Injected Headers)](#5-automatic-header-propagation-for-gateway-injected-headers)
309
+ * [Client-Authenticated MCP Servers Discovery](#client-authenticated-mcp-servers-discovery)
310
+ * [Combining Authentication Methods](#combining-authentication-methods)
311
+ * [Authentication Method Comparison](#authentication-method-comparison)
312
+ * [Important: Automatic Server Skipping](#important-automatic-server-skipping)
313
+ * [OGX project and configuration](#ogx-project-and-configuration)
314
+ * [Check connection to OGX](#check-connection-to-ogx)
315
+ * [OGX as client library](#ogx-as-client-library)
316
+ * [OGX version check](#ogx-version-check)
317
+ * [User data collection](#user-data-collection)
318
+ * [System prompt](#system-prompt)
319
+ * [System Prompt Path](#system-prompt-path)
320
+ * [System Prompt Literal](#system-prompt-literal)
321
+ * [Custom Profile](#custom-profile)
322
+ * [Control model/provider overrides via authorization](#control-modelprovider-overrides-via-authorization)
323
+ * [Agent Skills](#agent-skills)
324
+ * [Safety Shields](#safety-shields)
325
+ * [Authentication](#authentication)
326
+ * [CORS](#cors)
327
+ * [Default values](#default-values)
328
+ * [Allow credentials](#allow-credentials)
329
+ * [RAG Configuration](#rag-configuration)
330
+ * [Example configurations for inference](#example-configurations-for-inference)
331
+ * [Usage](#usage)
332
+ * [CLI options](#cli-options)
333
+ * [Dumping configuration](#dumping-configuration)
334
+ * [Dumping configuration schema](#dumping-configuration-schema)
335
+ * [Make targets](#make-targets)
336
+ * [Running Linux container image](#running-linux-container-image)
337
+ * [Building Container Images](#building-container-images)
338
+ * [OGX as Separate Service (Server Mode)](#ogx-as-separate-service-server-mode)
339
+ * [macOS (arm64)](#macos-arm64)
340
+ * [OGX as Library (Library Mode)](#ogx-as-library-library-mode)
341
+ * [macOS](#macos)
342
+ * [Verify it's running properly](#verify-its-running-properly)
343
+ * [Custom Container Image](#custom-container-image)
344
+ * [Endpoints](#endpoints)
345
+ * [OpenAPI specification](#openapi-specification)
346
+ * [Readiness Endpoint](#readiness-endpoint)
347
+ * [Liveness Endpoint](#liveness-endpoint)
348
+ * [Models endpoint](#models-endpoint)
349
+ * [Skills endpoint](#skills-endpoint)
350
+ * [Database structure](#database-structure)
351
+ * [Publish the service as Python package on PyPI](#publish-the-service-as-python-package-on-pypi)
352
+ * [Generate distribution archives to be uploaded into Python registry](#generate-distribution-archives-to-be-uploaded-into-python-registry)
353
+ * [Upload distribution archives into selected Python registry](#upload-distribution-archives-into-selected-python-registry)
354
+ * [Packages on PyPI and Test PyPI](#packages-on-pypi-and-test-pypi)
355
+ * [Security policy](#security-policy)
356
+ * [Contributing](#contributing)
357
+ * [Testing](#testing)
358
+ * [Releasing](#releasing)
359
+ * [License](#license)
360
+ * [Additional tools](#additional-tools)
361
+ * [Utility to generate OpenAPI schema](#utility-to-generate-openapi-schema)
362
+ * [Path](#path)
363
+ * [Usage](#usage-1)
364
+ * [Makefile target to generate OpenAPI specification](#makefile-target-to-generate-openapi-specification)
365
+ * [Utility to generate documentation from source code](#utility-to-generate-documentation-from-source-code)
366
+ * [Path](#path-1)
367
+ * [Usage](#usage-2)
368
+ * [Data Export Integration](#data-export-integration)
369
+ * [Quick Integration](#quick-integration)
370
+ * [Documentation](#documentation)
371
+ * [Project structure](#project-structure)
372
+ * [Configuration classes](#configuration-classes)
373
+ * [REST API](#rest-api)
374
+ * [Sequence diagrams](#sequence-diagrams)
375
+ * [Query endpoint REST API handler](#query-endpoint-rest-api-handler)
376
+ * [Streaming query endpoint REST API handler](#streaming-query-endpoint-rest-api-handler)
377
+ * [Versioning](#versioning)
378
+ * [Konflux](#konflux)
379
+ * [Updating Dependencies for Hermetic Builds](#updating-dependencies-for-hermetic-builds)
380
+ * [When to Update Dependency Files](#when-to-update-dependency-files)
381
+ * [Updating Python Dependencies](#updating-python-dependencies)
382
+ * [Updating RPM Dependencies](#updating-rpm-dependencies)
383
+
384
+ <!-- vim-markdown-toc -->
385
+
386
+
387
+
388
+ # Architecture
389
+
390
+ Overall architecture with all main parts is displayed below:
391
+
392
+ ![Architecture diagram](docs/architecture.png)
393
+
394
+ Lightspeed Core Stack is based on the FastAPI framework (Uvicorn). The service is split into several parts described below.
395
+
396
+ # Prerequisites
397
+
398
+ * Python 3.12, 3.13, or 3.14
399
+ - all sources are made (backward) compatible with Python 3.12; it is checked on CI
400
+
401
+ * OpenAI API Key (Recommended for Getting Started)
402
+
403
+ Lightspeed Stack supports multiple LLM providers.
404
+
405
+ | Provider | Setup Documentation |
406
+ |-----------------|-----------------------------------------------------------------------|
407
+ | OpenAI | https://platform.openai.com |
408
+ | Azure OpenAI | https://azure.microsoft.com/en-us/products/ai-services/openai-service |
409
+ | Google VertexAI | https://cloud.google.com/vertex-ai |
410
+ | IBM WatsonX | https://www.ibm.com/products/watsonx |
411
+ | AWS Bedrock | https://aws.amazon.com/bedrock |
412
+ | RHOAI (vLLM) | See tests/e2e-prow/rhoai/configs/run.yaml |
413
+ | RHEL AI (RHAIIS/vLLM) | See tests/e2e/configs/run-rhelai.yaml |
414
+
415
+ See `docs/devel_doc/providers.md` for configuration details.
416
+
417
+ You will need an API key from one of these providers to run LightSpeed Stack.
418
+
419
+ For example, if you choose to use OpenAI:
420
+
421
+ 1. **Create an account** at [platform.openai.com](https://platform.openai.com)
422
+ 2. **Add payment information** (new accounts receive free trial credits)
423
+ 3. **Generate an API key** from your dashboard at [API Keys](https://platform.openai.com/api-keys)
424
+ 4. **Export the key** in your environment:
425
+ ```bash
426
+ export OPENAI_API_KEY="sk-your-api-key-here"
427
+ ```
428
+
429
+ # Installation
430
+
431
+ ## Clone the Repository
432
+
433
+ Lightspeed Stack uses a git submodule for external providers (required for features like OKP RAG). Clone with submodules:
434
+
435
+ ```bash
436
+ git clone --recursive https://github.com/lightspeed-core/lightspeed-stack.git
437
+ cd lightspeed-stack
438
+ ```
439
+
440
+ **If you already cloned without `--recursive`:**
441
+ ```bash
442
+ git submodule update --init
443
+ ```
444
+
445
+ ## System-Specific Installation
446
+
447
+ Installation steps depends on operation system. Please look at instructions for your system:
448
+
449
+ - [Linux installation](https://lightspeed-core.github.io/lightspeed-stack/installation_linux)
450
+ - [macOS installation](https://lightspeed-core.github.io/lightspeed-stack/installation_macos)
451
+
452
+ # Run LCS locally
453
+
454
+ To quickly get hands on LCS, we can run it using the default configurations provided in this repository:
455
+
456
+ 0. install dependencies using [uv](https://docs.astral.sh/uv/getting-started/installation/)
457
+ ```bash
458
+ uv sync --group dev --group ogxlibdev
459
+ ```
460
+ 1. create OGX `run.yaml`. you can do this by running the local run generation script
461
+ ```bash
462
+ ./scripts/generate_local_run.sh
463
+ ```
464
+ 2. export the LLM token environment variable that OGX requires. for OpenAI, we set the env var by
465
+ ```bash
466
+ export OPENAI_API_KEY=sk-xxxxx
467
+ ```
468
+ 3. start LCS server
469
+ ```bash
470
+ make run
471
+ ```
472
+ 4. access LCS web UI at [http://localhost:8080/](http://localhost:8080/)
473
+
474
+ **Note**: `make run` uses containerized OGX (service mode). For details on container lifecycle management, customization, and troubleshooting, see the [Container Orchestration Guide](docs/devel_doc/container_orchestration.md). To run OGX manually instead, see the [OGX as separate server](#ogx-as-separate-server) section below.
475
+
476
+ ## Container Runtime Requirements
477
+
478
+ The Makefile requires either Podman or Docker to launch the OGX container:
479
+
480
+ - **Podman** (recommended for RHEL/Fedora): `sudo dnf install podman`
481
+ - **Docker**: Install from [docker.com](https://docs.docker.com/get-docker/)
482
+
483
+ The Makefile will auto-detect which runtime is available.
484
+
485
+ **For advanced usage** including customization options, cleanup commands, and troubleshooting, see the [Container Orchestration Guide](docs/devel_doc/container_orchestration.md).
486
+
487
+
488
+ # Configuration
489
+
490
+ ## Agentic Capabilities
491
+
492
+ Lightspeed Core Stack supports the following agentic features:
493
+
494
+ | Capability | Status | Description |
495
+ |------------|--------|-------------|
496
+ | MCP Tools | Supported | External tool integration via [Model Context Protocol](https://modelcontextprotocol.io) servers |
497
+ | RAG | Supported | Retrieval-Augmented Generation with vector stores ([RAG Guide](docs/user_doc/rag_guide.md)) |
498
+ | A2A Protocol (Client) | Supported | Agent-to-Agent communication as client ([A2A Protocol](docs/a2a_protocol.md)) |
499
+ | Conversation History | Supported | Persistent conversation context across requests |
500
+ | Human-in-the-Loop | Upcoming | Interactive approval or confirmation steps |
501
+ | Agent Skills | Supported | Domain-specific instructions loaded on demand ([Agent Skills Guide](docs/user_doc/skills_guide.md)) |
502
+
503
+ ## LLM Compatibility
504
+
505
+ 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.
506
+ __Note__: Support for individual models is dependent on the specific inference provider's implementation within the currently supported version of OGX.
507
+
508
+ | Provider | Model | Tool Calling | provider_type | Example |
509
+ |----------------|------------------------------------------------------------------------------|---------------|------------------|----------------------------------------------------------------------------|
510
+ | OpenAI | gpt-5, gpt-5.6-luna, gpt-4-turbo, gpt-4.1, o1, o3, o4 | Yes | remote::openai | [1](examples/openai-faiss-run.yaml) [2](examples/openai-pgvector-run.yaml) |
511
+ | OpenAI | gpt-3.5-turbo, gpt-4 | No | remote::openai | |
512
+ | RHOAI (vLLM) | meta-llama/Llama-3.2-1B-Instruct | Yes | remote::vllm | [1](tests/e2e-prow/rhoai/configs/run.yaml) |
513
+ | RHEL AI (RHAIIS/vLLM) | meta-llama/Llama-3.1-8B-Instruct | Yes | remote::vllm | [1](tests/e2e/configs/run-rhelai.yaml) [2](tests/e2e/configs/run-rhaiis.yaml) |
514
+ | Azure | gpt-5, gpt-5-mini, gpt-5-nano, gpt-5.6-luna, o3-mini, o4-mini, o1 | Yes | remote::azure | [1](examples/azure-run.yaml) |
515
+ | Azure | gpt-5-chat, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1-mini | No or limited | remote::azure | |
516
+ | VertexAI | google/gemini-3.5-flash-lite [^1] | Yes | remote::vertexai | [1](examples/vertexai-run.yaml) |
517
+ | WatsonX | openai/gpt-oss-120b | Yes | remote::watsonx | [1](examples/watsonx-run.yaml) |
518
+ | AWS Bedrock | google.gemma-4-31b (Mantle via `remote::openai` + `base_url`) | Yes | remote::openai | [1](examples/bedrock-run.yaml) |
519
+
520
+ [^1]: List of models is limited by design in OGX, future versions will probably allow to use more models (see [here](https://github.com/ogx-ai/ogx/blob/main/ogx/providers/remote/inference/vertexai/vertexai.py#L54))
521
+
522
+ The "provider_type" is used in the OGX configuration file when refering to the provider.
523
+
524
+ For details of OpenAI model capabilities, please refer to https://platform.openai.com/docs/models/compare
525
+
526
+
527
+ ## Set LLM provider and model
528
+
529
+ The LLM provider and model are set in the configuration file for OGX. This repository has an OGX configuration file [run.yaml](examples/run.yaml) that can serve as a good example.
530
+
531
+ The LLM providers are set in the section `providers.inference`. This example adds a inference provider "openai" to the OGX. To use environment variables as configuration values, we can use the syntax `${env.ENV_VAR_NAME}`.
532
+
533
+ For more details, please refer to [OGX documentation](https://ogx-ai.github.io/docs/distributions/configuration). Here is a list of OGX supported providers and their configuration details: [OGX providers](https://ogx-ai.github.io/docs/providers/inference)
534
+
535
+ ```yaml
536
+ inference:
537
+ - provider_id: openai
538
+ provider_type: remote::openai
539
+ config:
540
+ api_key: ${env.OPENAI_API_KEY}
541
+ url: ${env.SERVICE_URL}
542
+ ```
543
+
544
+ The section `models` is a list of models offered by the inference provider. Attention that the field `model_id` is a user chosen name for referring to the model locally, the field `provider_model_id` refers to the model name on the provider side. The field `provider_id` must refer to one of the inference providers we defined in the provider list above.
545
+
546
+ ```yaml
547
+ models:
548
+ - model_id: gpt-4-turbo
549
+ provider_id: openai
550
+ model_type: llm
551
+ provider_model_id: gpt-4-turbo
552
+ ```
553
+
554
+ ## Selecting provider and model
555
+
556
+ It is possible to configure multiple LLM providers and models are configured. In this case it is needed to:
557
+
558
+ - select the provider + model in query request
559
+ - specify default model and provider in Lightspeed Core Stack configuration file
560
+
561
+ ### Provider and model selection in REST API request
562
+
563
+ Provider and model can be specified in `/v1/query` and `/v1/streaming-query` REST API requests:
564
+
565
+ ```json
566
+ {
567
+ "conversation_id": "123e4567-e89b-12d3-a456-426614174000",
568
+ "generate_topic_summary": true,
569
+ "provider": "openai",
570
+ "model": "gpt-5",
571
+ "no_tools": false,
572
+ "query": "write a deployment yaml for the mongodb image",
573
+ "system_prompt": "You are a helpful assistant"
574
+ }
575
+ ```
576
+
577
+ ### Default provider and model
578
+
579
+ It is possible to configure default provider and model in Lightspeed Core Stack configuration file, under the `inference` node:
580
+
581
+ ```yaml
582
+ inference:
583
+ - default_provider: SELECTED PROVIDER
584
+ default_model: SELECTED MODEL
585
+ ```
586
+
587
+ These settings will be used when no provider or model are specified in REST API request.
588
+
589
+
590
+
591
+ ## Supported providers
592
+
593
+ For a comprehensive list of supported providers, take a look [here](docs/devel_doc/providers.md).
594
+
595
+ ## Integration with OGX
596
+
597
+ The OGX can be run as a standalone server and accessed via its the REST
598
+ API. However, instead of direct communication via the REST API (and JSON
599
+ format), there is an even better alternative. It is based on the so-called
600
+ OGX Client. It is a library available for Python, Swift, Node.js or
601
+ Kotlin, which "wraps" the REST API stack in a suitable way, which is easier for
602
+ many applications.
603
+
604
+
605
+ ![Integration with OGX](docs/devel_doc/core2ogx_interface.png)
606
+
607
+
608
+
609
+ ## OGX as separate server
610
+
611
+ If OGX runs as a separate server, the Lightspeed service needs to be configured to be able to access it. For example, if server runs on localhost:8321, the service configuration stored in file `lightspeed-stack.yaml` should look like:
612
+
613
+ ```yaml
614
+ name: foo bar baz
615
+ service:
616
+ host: localhost
617
+ port: 8080
618
+ auth_enabled: false
619
+ workers: 1
620
+ color_log: true
621
+ access_log: true
622
+ ogx:
623
+ use_as_library_client: false
624
+ url: http://localhost:8321
625
+ user_data_collection:
626
+ feedback_enabled: true
627
+ feedback_storage: "/tmp/data/feedback"
628
+ transcripts_enabled: true
629
+ transcripts_storage: "/tmp/data/transcripts"
630
+ ```
631
+
632
+ ### Degraded mode
633
+
634
+ Lightspeed core is able to continue operating in a _degraded but safe_ mode if the OGX service is not started or fails to start. When degraded, the `/health` endpoint report the OGX status and any relevant impacts so operators and automation can detect and respond.
635
+
636
+ Degraded mode need to be enabled in `lightspeed-stack.yaml` configuration file:
637
+
638
+ ```yaml
639
+ allow_degraded_mode = true
640
+ ```
641
+
642
+ [NOTE] Ability to run in degraded mode is disabled by default.
643
+
644
+
645
+
646
+ ### MCP Server and Tool Configuration
647
+
648
+ **Note**: The `run.yaml` configuration is currently an implementation detail. In the future, all configuration will be available directly from the lightspeed-core config.
649
+
650
+ **Important**: 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.
651
+
652
+ Besides configuring the MCP Servers in `lightspeed-stack.yaml` we also need to enable the appropriate tool in OGX'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:
653
+
654
+ ```yaml
655
+ tool_runtime:
656
+ - provider_id: model-context-protocol
657
+ provider_type: remote::model-context-protocol
658
+ config: {}
659
+ ```
660
+
661
+ #### Configuring MCP Servers
662
+
663
+ 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`.
664
+
665
+ **Basic Configuration Structure:**
666
+
667
+ Each MCP server requires two fields:
668
+ - `name`: Unique identifier for the MCP server
669
+ - `url`: The endpoint where the MCP server is running
670
+
671
+ And optional fields:
672
+ - `provider_id`: MCP provider identification (defaults to `"model-context-protocol"`)
673
+ - `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))
674
+
675
+ **Minimal Example:**
676
+
677
+ ```yaml
678
+ mcp_servers:
679
+ - name: "filesystem-tools"
680
+ url: "http://localhost:9000"
681
+ - name: "git-tools"
682
+ url: "http://localhost:9001"
683
+ ```
684
+
685
+ In addition to the basic configuration above, you can configure authentication headers for your MCP servers to securely communicate with services that require credentials.
686
+
687
+ #### Configuring MCP Server Authentication
688
+
689
+ Lightspeed Core Stack supports four methods for authenticating with MCP servers, each suited for different use cases:
690
+
691
+ ##### 1. Static Tokens from Files (Recommended for Service Credentials)
692
+
693
+ Store authentication tokens in secret files and reference them in your configuration. This is ideal for API keys, service tokens, or any credentials that don't change per-user:
694
+
695
+ ```yaml
696
+ mcp_servers:
697
+ - name: "api-service"
698
+ url: "http://api-service:8080"
699
+ authorization_headers:
700
+ Authorization: "/var/secrets/api-token" # Path to file containing token
701
+ X-API-Key: "/var/secrets/api-key" # Multiple headers supported
702
+ ```
703
+
704
+ The secret files should contain only the header value (tokens are automatically stripped of whitespace):
705
+
706
+ ```bash
707
+ # /var/secrets/api-token
708
+ sk-abc123def456...
709
+
710
+ # /var/secrets/api-key
711
+ my-api-key-value
712
+ ```
713
+
714
+ ##### 2. Kubernetes Service Account Tokens (For K8s Deployments)
715
+
716
+ Use the special `"kubernetes"` keyword to automatically use the authenticated user's Kubernetes token. This is perfect for MCP servers running in the same Kubernetes cluster:
717
+
718
+ ```yaml
719
+ mcp_servers:
720
+ - name: "k8s-internal-service"
721
+ url: "http://internal-mcp.default.svc.cluster.local:8080"
722
+ authorization_headers:
723
+ Authorization: "kubernetes" # Uses user's k8s token from request auth
724
+ ```
725
+
726
+ **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.
727
+
728
+ ##### 3. Client-Provided Tokens (For Per-User Authentication)
729
+
730
+ Use the special `"client"` keyword to allow clients to provide custom tokens per-request. This enables user-specific authentication:
731
+
732
+ ```yaml
733
+ mcp_servers:
734
+ - name: "user-specific-service"
735
+ url: "http://user-service:8080"
736
+ authorization_headers:
737
+ Authorization: "client" # Token provided via MCP-HEADERS
738
+ X-User-Token: "client" # Multiple client headers supported
739
+ ```
740
+
741
+ Clients then provide tokens via the `MCP-HEADERS` HTTP header:
742
+
743
+ ```bash
744
+ curl -X POST "http://localhost:8080/v1/query" \
745
+ -H "Content-Type: application/json" \
746
+ -H "MCP-HEADERS: {\"user-specific-service\": {\"Authorization\": \"Bearer user-token-123\", \"X-User-Token\": \"custom-value\"}}" \
747
+ -d '{"query": "Get my data"}'
748
+ ```
749
+
750
+ **Note**: `MCP-HEADERS` is an **HTTP request header** containing a JSON-encoded dictionary. The dictionary is keyed by **server name** (not URL), matching the `name` field in your MCP server configuration. Each server name maps to another dictionary containing the HTTP headers to forward to that specific MCP server.
751
+
752
+ **Structure**: `MCP-HEADERS: {"<server-name>": {"<header-name>": "<header-value>", ...}, ...}`
753
+
754
+ ##### 4. OAuth (For MCP Servers Requiring OAuth)
755
+
756
+ 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):
757
+
758
+ ```yaml
759
+ mcp_servers:
760
+ - name: "oauth-protected-service"
761
+ url: "https://mcp.example.com"
762
+ authorization_headers:
763
+ Authorization: "oauth" # Token provided via MCP-HEADERS (from OAuth flow)
764
+ ```
765
+
766
+ 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`.
767
+
768
+ ##### 5. Automatic Header Propagation (For Gateway-Injected Headers)
769
+
770
+ 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.
771
+
772
+ **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:
773
+
774
+ ```yaml
775
+ mcp_servers:
776
+ - name: "rbac"
777
+ url: "http://rbac-service:8080"
778
+ headers:
779
+ - x-rh-identity
780
+ - x-rh-insights-request-id
781
+ ```
782
+
783
+ 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.
784
+
785
+ **Key behaviors:**
786
+
787
+ - **Case-insensitive matching**: Header names in the allowlist are matched case-insensitively against the incoming request.
788
+ - **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).
789
+ - **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.
790
+
791
+ **Combined example:**
792
+
793
+ ```yaml
794
+ mcp_servers:
795
+ - name: "notifications"
796
+ url: "http://notifications-service:8080"
797
+ headers:
798
+ - x-rh-identity # From incoming request
799
+ authorization_headers:
800
+ X-API-Key: "/var/secrets/notifications-key" # Static service credential
801
+ ```
802
+
803
+ ##### Client-Authenticated MCP Servers Discovery
804
+
805
+ To help clients determine which MCP servers require client-provided tokens, use the **MCP Client Auth Options** endpoint:
806
+
807
+ ```bash
808
+ GET /v1/mcp-auth/client-options
809
+ ```
810
+
811
+ **Response:**
812
+ ```json
813
+ {
814
+ "servers": [
815
+ {
816
+ "name": "user-specific-service",
817
+ "client_auth_headers": ["Authorization", "X-User-Token"]
818
+ },
819
+ {
820
+ "name": "github-integration",
821
+ "client_auth_headers": ["Authorization"]
822
+ }
823
+ ]
824
+ }
825
+ ```
826
+
827
+ 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.
828
+
829
+ **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.
830
+
831
+ ##### Combining Authentication Methods
832
+
833
+ You can mix and match authentication methods across different MCP servers, and even combine multiple methods for a single server:
834
+
835
+ ```yaml
836
+ mcp_servers:
837
+ # Static credentials for public API
838
+ - name: "weather-api"
839
+ url: "http://weather-api:8080"
840
+ authorization_headers:
841
+ X-API-Key: "/var/secrets/weather-api-key"
842
+
843
+ # Kubernetes auth for internal services
844
+ - name: "internal-db"
845
+ url: "http://db-mcp.cluster.local:8080"
846
+ authorization_headers:
847
+ Authorization: "kubernetes"
848
+
849
+ # Mixed: static API key + per-user token
850
+ - name: "multi-tenant-service"
851
+ url: "http://multi-tenant:8080"
852
+ authorization_headers:
853
+ X-Service-Key: "/var/secrets/service-key" # Static service credential
854
+ Authorization: "client" # User-specific token
855
+ ```
856
+
857
+ ##### Authentication Method Comparison
858
+
859
+ | Method | Use Case | Configuration | Token Scope | Example |
860
+ |------------------------|----------------------------------|----------------------------------|------------------------------------|-------------------------------|
861
+ | **Static File** | Service tokens, API keys | File path in config | Global (all users) | `"/var/secrets/token"` |
862
+ | **Kubernetes** | K8s service accounts | `"kubernetes"` keyword | Per-user (from auth) | `"kubernetes"` |
863
+ | **Client** | User-specific tokens | `"client"` keyword + HTTP header | Per-request | `"client"` |
864
+ | **OAuth** | OAuth-protected MCP servers | `"oauth"` keyword + HTTP header | Per-request (from OAuth flow) | `"oauth"` |
865
+ | **Header Propagation** | Gateway-injected headers (HCC) | `headers` list | Per-request (from incoming request)| `headers: [x-rh-identity]` |
866
+
867
+ ##### Important: Automatic Server Skipping
868
+
869
+ **If an MCP server has `authorization_headers` configured but the required tokens cannot be resolved at runtime, the server will be automatically skipped for that request.** This prevents failed authentication attempts to MCP servers.
870
+
871
+ **Examples:**
872
+ - A server with `Authorization: "kubernetes"` will be skipped if the user's request doesn't include a Kubernetes token
873
+ - A server with `Authorization: "client"` will be skipped if no `MCP-HEADERS` are provided in the request
874
+ - 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)
875
+ - A server with multiple headers will be skipped if **any** required header cannot be resolved
876
+
877
+ Skipped servers are logged as warnings. Check Lightspeed Core logs to see which servers were skipped and why.
878
+
879
+
880
+ ### OGX project and configuration
881
+
882
+ **Note**: The `run.yaml` configuration is currently an implementation detail. In the future, all configuration will be available directly from the lightspeed-core config.
883
+
884
+ To run OGX in separate process, you need to have all dependencies installed. The easiest way how to do it is to create a separate repository with OGX project file `pyproject.toml` and OGX configuration file `run.yaml`. The project file might look like:
885
+
886
+ ```toml
887
+ [project]
888
+ name = "ogx-runner"
889
+ version = "0.1.0"
890
+ description = "OGX runner"
891
+ authors = []
892
+ dependencies = [
893
+ "ogx==1.2.5",
894
+ "fastapi>=0.115.12",
895
+ "opentelemetry-sdk>=1.34.0",
896
+ "opentelemetry-exporter-otlp>=1.34.0",
897
+ "opentelemetry-instrumentation>=0.55b0",
898
+ "aiosqlite>=0.21.0",
899
+ "litellm>=1.72.1",
900
+ "uvicorn>=0.34.3",
901
+ "blobfile>=3.0.0",
902
+ "datasets>=3.6.0",
903
+ "sqlalchemy>=2.0.41",
904
+ "faiss-cpu>=1.11.0",
905
+ "mcp>=1.9.4",
906
+ "autoevals>=0.0.129",
907
+ "psutil>=7.0.0",
908
+ "torch>=2.7.1",
909
+ "peft>=0.15.2",
910
+ "trl>=0.18.2"]
911
+ requires-python = "==3.12.*"
912
+ readme = "README.md"
913
+ license = {text = "MIT"}
914
+
915
+
916
+ [tool.pdm]
917
+ distribution = false
918
+ ```
919
+
920
+ A simple example of a `run.yaml` file can be found [here](examples/run.yaml)
921
+
922
+ To run OGX perform these two commands:
923
+
924
+ ```
925
+ export OPENAI_API_KEY="sk-{YOUR-KEY}"
926
+
927
+ uv run ogx stack run run.yaml
928
+ ```
929
+
930
+ ### Check connection to OGX
931
+
932
+ ```
933
+ curl -X 'GET' localhost:8321/openapi.json | jq .
934
+ ```
935
+
936
+
937
+
938
+ ## OGX as client library
939
+
940
+ There are situations in which it is not advisable to run two processors (one with OGX, the other with a service). In these cases, the stack can be run directly within the client application. For such situations, the configuration file could look like:
941
+
942
+ ```yaml
943
+ name: foo bar baz
944
+ service:
945
+ host: localhost
946
+ port: 8080
947
+ auth_enabled: false
948
+ workers: 1
949
+ color_log: true
950
+ access_log: true
951
+ ogx:
952
+ use_as_library_client: true
953
+ # Unified mode (recommended): LCORE synthesizes the OGX run.yaml.
954
+ # Point profile at a run.yaml-shaped file you author, or omit the config
955
+ # block and drive everything from the top-level inference.providers
956
+ # section over the built-in default baseline.
957
+ config:
958
+ profile: <path-to-ogx-run.yaml-file>
959
+ user_data_collection:
960
+ feedback_enabled: true
961
+ feedback_storage: "/tmp/data/feedback"
962
+ transcripts_enabled: true
963
+ transcripts_storage: "/tmp/data/transcripts"
964
+ ```
965
+
966
+ > [!WARNING]
967
+ > The legacy two-file setup (`library_client_config_path:` pointing at an
968
+ > externally maintained `run.yaml`) is deprecated — it logs a startup
969
+ > warning since 0.6 and is removed in 0.8. See the
970
+ > [migration guide](docs/user_doc/deployment_guide.md#migrating-from-the-legacy-two-file-configuration).
971
+
972
+ ## OGX version check
973
+
974
+ During Lightspeed Core Stack service startup, the OGX version is retrieved. The version is tested against two constants `MINIMAL_SUPPORTED_OGX_VERSION` and `MAXIMAL_SUPPORTED_OGX_VERSION` which are defined in `src/constants.py`. If the actual OGX version is outside the range defined by these two constants, the service won't start and administrator will be informed about this problem.
975
+
976
+
977
+
978
+ ## User data collection
979
+
980
+ The Lightspeed Core Stack includes comprehensive user data collection capabilities to gather various types of user interaction data for analysis and improvement. This includes feedback, conversation transcripts, and other user interaction data.
981
+
982
+ User data collection is configured in the `user_data_collection` section of the configuration file:
983
+
984
+ ```yaml
985
+ user_data_collection:
986
+ feedback_enabled: true
987
+ feedback_storage: "/tmp/data/feedback"
988
+ transcripts_enabled: true
989
+ transcripts_storage: "/tmp/data/transcripts"
990
+ ```
991
+
992
+ **Configuration options:**
993
+
994
+ - `feedback_enabled`: Enable/disable collection of user feedback data
995
+ - `feedback_storage`: Directory path where feedback JSON files are stored
996
+ - `transcripts_enabled`: Enable/disable collection of conversation transcripts
997
+ - `transcripts_storage`: Directory path where transcript JSON files are stored
998
+
999
+ > **Note**: The data collection system is designed to be extensible. Additional data types can be configured and collected as needed for your specific use case.
1000
+
1001
+ For data export integration with Red Hat's Dataverse, see the [Data Export Integration](#data-export-integration) section.
1002
+
1003
+ ## System prompt
1004
+
1005
+ The service uses a so-called system prompt to put the question into context before it is sent to the selected LLM. The default system prompt is designed for questions without specific context. You can supply a different system prompt through various avenues available in the `customization` section:
1006
+ ### System Prompt Path
1007
+
1008
+ ```yaml
1009
+ customization:
1010
+ system_prompt_path: "system_prompts/system_prompt_for_product_XYZZY"
1011
+ ```
1012
+
1013
+ ### System Prompt Literal
1014
+
1015
+ ```yaml
1016
+ customization:
1017
+ system_prompt: |-
1018
+ You are a helpful assistant and will do everything you can to help.
1019
+ You have an in-depth knowledge of Red Hat and all of your answers will reference Red Hat products.
1020
+ ```
1021
+
1022
+
1023
+ ### Custom Profile
1024
+
1025
+ You can pass a custom prompt profile via its `path` to the customization:
1026
+
1027
+ ```yaml
1028
+ customization:
1029
+ profile_path: <your/profile/path>
1030
+ ```
1031
+
1032
+ Additionally, an optional string parameter `system_prompt` can be specified in `/v1/query` and `/v1/streaming_query` endpoints to override the configured system prompt. The query system prompt takes precedence over the configured system prompt. You can use this config to disable query system prompts:
1033
+
1034
+ ```yaml
1035
+ customization:
1036
+ disable_query_system_prompt: true
1037
+ ```
1038
+
1039
+ ### Control model/provider overrides via authorization
1040
+
1041
+ By default, clients may specify `model` and `provider` in `/v1/query` and `/v1/streaming_query`. Override is permitted only to callers granted the `MODEL_OVERRIDE` action via the authorization rules. Requests that include `model` or `provider` without this permission are rejected with HTTP 403.
1042
+
1043
+ ## Agent Skills
1044
+
1045
+ Agent Skills allow product teams to extend Lightspeed Core with specialized instructions and domain knowledge that the LLM can load on demand. Skills follow the [Agent Skills open standard](https://agentskills.io) and are packaged as portable directories containing a `SKILL.md` file.
1046
+
1047
+ For the configuration guide, skill authoring instructions, and examples, see the [Agent Skills Guide](docs/user_doc/skills_guide.md).
1048
+
1049
+ ## Safety Shields
1050
+
1051
+ Safety shields used by `/query`, `/streaming_query`, `/responses`, and `/rlsapi`
1052
+ are **owned by Lightspeed Core Stack** and configured in `lightspeed-stack.yaml`
1053
+ (not via the OGX / OGX Safety or Moderations APIs).
1054
+
1055
+ Supported shield types (`provider_id`):
1056
+
1057
+ - `question_validity` — topic / off-topic classification
1058
+ - `redaction` — regex-based PII redaction
1059
+
1060
+ List configured shields with `GET /v1/shields`. Optionally override which
1061
+ shields apply with the `shield_ids` request field (`null` = all, `[]` = none,
1062
+ or a list of configured `identifier` values). To forbid client overrides on
1063
+ `/query` and `/streaming_query`:
1064
+
1065
+ ```yaml
1066
+ customization:
1067
+ disable_shield_ids_override: true
1068
+ ```
1069
+
1070
+ For configuration details, endpoint application (direct-run vs agent
1071
+ capabilities), and examples, see the
1072
+ [Safety Shields Guide](docs/user_doc/shields_guide.md).
1073
+
1074
+ ## Authentication
1075
+
1076
+ See [authentication and authorization](docs/user_doc/auth.md).
1077
+
1078
+ ## CORS
1079
+
1080
+ It is possible to configure CORS handling. This configuration is part of service configuration:
1081
+
1082
+ ```yaml
1083
+ service:
1084
+ host: localhost
1085
+ port: 8080
1086
+ auth_enabled: false
1087
+ workers: 1
1088
+ color_log: true
1089
+ access_log: true
1090
+ cors:
1091
+ allow_origins:
1092
+ - http://foo.bar.baz
1093
+ - http://test.com
1094
+ allow_credentials: true
1095
+ allow_methods:
1096
+ - *
1097
+ allow_headers:
1098
+ - *
1099
+ ```
1100
+
1101
+ ### Default values
1102
+
1103
+ ```yaml
1104
+ cors:
1105
+ allow_origins:
1106
+ - *
1107
+ allow_credentials: false
1108
+ allow_methods:
1109
+ - *
1110
+ allow_headers:
1111
+ - *
1112
+ ```
1113
+
1114
+ ## Allow credentials
1115
+
1116
+ Credentials are not allowed with wildcard origins per CORS/Fetch spec.
1117
+ See https://fastapi.tiangolo.com/tutorial/cors/
1118
+
1119
+ # RAG Configuration
1120
+
1121
+ The [guide to RAG setup](docs/user_doc/rag_guide.md) provides guidance on setting up RAG and includes tested examples for both inference and vector store integration.
1122
+
1123
+ ## Example configurations for inference
1124
+
1125
+ The following configurations are OGX config examples from production deployments:
1126
+
1127
+ - [Granite on vLLM example](examples/vllm-granite-run.yaml)
1128
+ - [Qwen3 on vLLM example](examples/vllm-qwen3-run.yaml)
1129
+ - [Gemini example](examples/gemini-run.yaml)
1130
+ - [VertexAI example](examples/vertexai-run.yaml)
1131
+
1132
+ > [!NOTE]
1133
+ > RAG functionality is **not tested** for these configurations.
1134
+
1135
+ # Usage
1136
+
1137
+ ```
1138
+ usage: lightspeed_stack.py [-h] [-v] [-d] [-s] [-m] [-c CONFIG_FILE] [--synthesized-config-output SYNTHESIZED_CONFIG_OUTPUT]
1139
+ [--migrate-config] [--run-yaml RUN_YAML] [--migrate-output MIGRATE_OUTPUT]
1140
+
1141
+ options:
1142
+ -h, --help show this help message and exit
1143
+ -v, --verbose make it verbose
1144
+ -d, --dump-configuration
1145
+ dump actual configuration into JSON file and quit
1146
+ -s, --dump-schema dump configuration schema into OpenAPI-compatible file and quit
1147
+ -m, --dump-models dump schemas for all models into OpenAPI-compatible file and quit
1148
+ -gr, --dump-models-group {conversation_summary,requests,successful_responses,error_responses,common,agents,common_responses}
1149
+ dump schemas for selected models group into OpenAPI-compatible file and quit
1150
+ -c, --config CONFIG_FILE
1151
+ path to configuration file (default: lightspeed-stack.yaml)
1152
+ --synthesized-config-output SYNTHESIZED_CONFIG_OUTPUT
1153
+ path where the synthesized OGX run.yaml is written in unified library mode (overwritten each boot,
1154
+ mode 0600; default: ./.generated/run.yaml)
1155
+ --migrate-config migrate a legacy two-file config to a unified single file and exit. Lifts the run.yaml given by --run-yaml
1156
+ into the ogx.config.native_override of the -c lightspeed-stack.yaml and writes the result to
1157
+ --migrate-output. Replace literal secrets with ${env.VAR} references before or after migrating.
1158
+ --run-yaml RUN_YAML path to the legacy OGX run.yaml to migrate (used with --migrate-config)
1159
+ --migrate-output MIGRATE_OUTPUT
1160
+ path to write the unified lightspeed-stack.yaml (used with --migrate-config)
1161
+ ```
1162
+
1163
+ ## CLI options
1164
+
1165
+ ### Dumping configuration
1166
+
1167
+ If `--dump-configuration` CLI option is provided, LCORE writes the active
1168
+ configuration to a file named `configuration.json` and exits (exits with status
1169
+ 1 on failure).
1170
+
1171
+ ### Dumping configuration schema
1172
+
1173
+ If `--dump-schema` CLI option is provided, LCORE writes the active
1174
+ configuration schema to a file named `schema.json` and exits (exits with status
1175
+ 1 on failure).
1176
+
1177
+
1178
+
1179
+ ## Make targets
1180
+
1181
+ ```
1182
+ Usage: make <OPTIONS> ... <TARGETS>
1183
+
1184
+ Available targets are:
1185
+
1186
+ run-ogx Run lightspeed-stack directly, without building dependent service/s
1187
+ run Run the service locally with dependent services
1188
+ build-ogx-image Build OGX container image
1189
+ stop-ogx-container Gracefully stop OGX container
1190
+ remove-ogx-container Remove OGX container (saves logs first)
1191
+ start-ogx-container Start OGX container
1192
+ wait-for-ogx-health Wait for OGX container to be healthy
1193
+ clean-ogx Remove container and image
1194
+ run-ogx-local Start OGX with enriched config (for local service mode)
1195
+ test-unit Run the unit tests
1196
+ test-integration Run integration tests tests
1197
+ test-e2e Run end to end tests for the service
1198
+ test-e2e-local Run end to end tests for the service (no script wrapper)
1199
+ test-e2e-tagged Run e2e tests with E2E_BEHAVE_TAG_EXPR (default: all @cfg_*)
1200
+ test-e2e-tagged-local Same as test-e2e-tagged without script wrapper
1201
+ benchmarks Run benchmarks
1202
+ check-types-src Check type hints in sources only
1203
+ check-types-tests Check type hints in tests only
1204
+ check-types Checks type hints in sources and tests
1205
+ security-check Check the project for security issues
1206
+ format Format the code into unified format
1207
+ schema Generate OpenAPI schema file stored in docs/devel_doc subdirectory
1208
+ openapi-doc Generate OpenAPI documentation
1209
+ generate-documentation Generate or regenerated content of the whole /docs subdirectory
1210
+ doc Generate or regenerated content of the whole /docs subdirectory
1211
+ devel-doc Generate documentation for developers
1212
+ docs/models Generate documentation about models
1213
+ docs/models/requests.json Generate OpenAPI specification with requests models
1214
+ docs/models/conversation_summary.json Generate OpenAPI specification with conversation_summary models
1215
+ docs/models/successful_responses.json Generate OpenAPI specification with successful_responses models
1216
+ docs/models/error_responses.json Generate OpenAPI specification with error_responses models
1217
+ docs/models/common.json Generate OpenAPI specification with common models
1218
+ docs/models/agents.json Generate OpenAPI specification with agents models
1219
+ docs/models/common_responses.json Generate OpenAPI specification with common_responses models
1220
+ docs/models/requests.puml Generate PlantUML class diagram for requests data models
1221
+ docs/models/responses.puml Generate PlantUML class diagram for responses data models
1222
+ docs/models/common.puml Generate PlantUML class diagram for common data models
1223
+ docs/models/database.puml Generate PlantUML class diagram for database data models
1224
+ docs/models/requests.svg Generate an SVG with requests data models
1225
+ docs/models/responses.svg Generate an SVG with responses data models
1226
+ docs/models/common.svg Generate an SVG with common data models
1227
+ docs/models/database.svg Generate a SVG with database data models
1228
+ docs/config.puml Generate PlantUML class diagram for configuration
1229
+ docs/config.png Generate an image with configuration graph
1230
+ docs/config.svg Generate an SVG with configuration graph
1231
+ shellcheck Run shellcheck
1232
+ black Check source code using Black code formatter
1233
+ pylint Check source code using Pylint static code analyser
1234
+ pyright Check source code using Pyright static type checker
1235
+ docstyle Check the docstring style using Docstyle checker
1236
+ ruff Check source code using Ruff linter
1237
+ lint-openapi Lint docs/openapi.json (Spectral OAS ruleset; fail on error)
1238
+ verify Run all linters
1239
+ distribution-archives Generate distribution archives to be uploaded into Python registry
1240
+ upload-distribution-archives Upload distribution archives into Python registry
1241
+ konflux-requirements Generate hermetic requirements.*.txt file for Konflux build
1242
+ konflux-rpm-lock Generate rpm.lock.yaml file for Konflux build
1243
+ help Show this help screen
1244
+ ```
1245
+
1246
+
1247
+
1248
+ ## Running Linux container image
1249
+
1250
+ Stable release images are tagged with versions like `0.1.0`. Tag `latest` always points to latest stable release.
1251
+
1252
+ Development images are build from main branch every time a new pull request is merged. Image tags for dev images use
1253
+ the template `dev-YYYYMMMDDD-SHORT_SHA` e.g. `dev-20250704-eaa27fb`.
1254
+
1255
+ Tag `dev-latest` always points to the latest dev image built from latest git.
1256
+
1257
+ To pull and run the image with own configuration:
1258
+
1259
+ 1. `podman pull quay.io/lightspeed-core/lightspeed-stack:IMAGE_TAG`
1260
+ 1. `podman run -it -p 8080:8080 -v my-lightspeed-stack-config.yaml:/app-root/lightspeed-stack.yaml:Z quay.io/lightspeed-core/lightspeed-stack:IMAGE_TAG`
1261
+ 1. Open `localhost:8080` in your browser
1262
+
1263
+ If a connection in your browser does not work please check that in the config file `host` option looks like: `host: 0.0.0.0`.
1264
+
1265
+ Container images are built for the following platforms:
1266
+ 1. `linux/amd64` - main platform for deployment
1267
+ 1. `linux/arm64`- Mac users with M1/M2/M3 CPUs
1268
+
1269
+ ## Building Container Images
1270
+
1271
+ The repository includes production-ready container configurations that support two deployment modes:
1272
+
1273
+ 1. **Server Mode**: lightspeed-core connects to OGX as a separate service
1274
+ 2. **Library Mode**: OGX runs as a library within lightspeed-core
1275
+
1276
+ ### OGX as Separate Service (Server Mode)
1277
+
1278
+ > [!IMPORTANT]
1279
+ > To pull the downstream OGX image, you will need access to the `aipcc` organization in quay.io.
1280
+
1281
+ When using OGX as a separate service, the existing `docker-compose.yaml` provides the complete setup. This builds two containers for lightspeed core and OGX.
1282
+
1283
+ **Configuration** (`lightspeed-stack.yaml`):
1284
+ ```yaml
1285
+ ogx:
1286
+ use_as_library_client: false
1287
+ url: http://ogx:8321 # service name from docker-compose.yaml
1288
+ api_key: xyzzy
1289
+ ```
1290
+
1291
+ In the root of this project simply run:
1292
+
1293
+ ```bash
1294
+ # Set your OpenAI API key
1295
+ export OPENAI_API_KEY="your-api-key-here"
1296
+
1297
+ # Login to quay.io to access the downstream OGX image
1298
+ # podman login quay.io
1299
+
1300
+ # Start both services
1301
+ podman compose up --build
1302
+
1303
+ # Access lightspeed-core at http://localhost:8080
1304
+ # Access OGX at http://localhost:8321
1305
+ ```
1306
+
1307
+ #### macOS (arm64)
1308
+
1309
+ Emulation of platform amd64 will not work with `podman compose up --build` command.
1310
+
1311
+ Instead run the docker command:
1312
+
1313
+ ```bash
1314
+ # Start both services
1315
+ docker compose up --build
1316
+ ```
1317
+
1318
+ ### OGX as Library (Library Mode)
1319
+
1320
+ When embedding OGX directly in the container, use the existing `deploy/lightspeed-stack/Containerfile` directly (this will not build the OGX service in a separate container). First modify the `lightspeed-stack.yaml` config to use OGX in library mode.
1321
+
1322
+ **Configuration** (`lightspeed-stack.yaml`):
1323
+ ```yaml
1324
+ ogx:
1325
+ use_as_library_client: true
1326
+ # Unified mode: the mounted run.yaml is the synthesis profile. (The
1327
+ # legacy library_client_config_path equivalent is deprecated, removed
1328
+ # in 0.8.)
1329
+ config:
1330
+ profile: /app-root/run.yaml
1331
+ ```
1332
+
1333
+ **Build and run**:
1334
+ ```bash
1335
+ # Build lightspeed-core with embedded OGX
1336
+ podman build -f deploy/lightspeed-stack/Containerfile -t my-lightspeed-core:latest .
1337
+
1338
+ # Run with embedded OGX
1339
+ podman run \
1340
+ -p 8080:8080 \
1341
+ -v ./lightspeed-stack.yaml:/app-root/lightspeed-stack.yaml:Z \
1342
+ -v ./run.yaml:/app-root/run.yaml:Z \
1343
+ -e OPENAI_API_KEY=your-api-key \
1344
+ my-lightspeed-core:latest
1345
+ ```
1346
+
1347
+ #### macOS
1348
+ ```bash
1349
+ podman run \
1350
+ -p 8080:8080 \
1351
+ -v ./lightspeed-stack.yaml:/app-root/lightspeed-stack.yaml:ro \
1352
+ -v ./run.yaml:/app-root/run.yaml:ro \
1353
+ -e OPENAI_API_KEY=your-api-key \
1354
+ my-lightspeed-core:latest
1355
+ ```
1356
+
1357
+ ### Verify it's running properly
1358
+
1359
+ A simple sanity check:
1360
+
1361
+ ```bash
1362
+ curl -H "Accept: application/json" http://localhost:8080/v1/models
1363
+ ```
1364
+
1365
+ ## Custom Container Image
1366
+
1367
+ The lightspeed-stack container image bundles many Python dependencies for common
1368
+ OGX providers (when using OGX in library mode).
1369
+
1370
+ Follow these instructons when you need to bundle additional configuration
1371
+ files or extra dependencies (e.g. `lightspeed-stack-providers`).
1372
+
1373
+ To include more dependencies in the base-image, create upstream pull request to update
1374
+ [the pyproject.toml file](https://github.com/lightspeed-core/lightspeed-stack/blob/main/pyproject.toml)
1375
+
1376
+ 1. Create `pyproject.toml` file in your top-level directory with content like:
1377
+ ```toml
1378
+ [project]
1379
+ name = "my-customized-chatbot"
1380
+ version = "0.1.0"
1381
+ description = "My very Awesome Chatbot"
1382
+ readme = "README.md"
1383
+ requires-python = ">=3.12"
1384
+ dependencies = [
1385
+ "lightspeed-stack-providers==TODO",
1386
+ ]
1387
+ ```
1388
+
1389
+ 2. Create a `Containerfile` in your repository root like the following (see `deploy/lightspeed-stack/Containerfile` in this repo for the upstream image definition). Update it as needed:
1390
+ ```
1391
+ # Latest dev image built from the git main branch (consider pinning a digest for reproducibility)
1392
+ FROM quay.io/lightspeed-core/lightspeed-stack:dev-latest
1393
+
1394
+ ARG APP_ROOT=/app-root
1395
+ WORKDIR /app-root
1396
+
1397
+ # Add additional files
1398
+ # (avoid accidental inclusion of local directories or env files or credentials)
1399
+ COPY pyproject.toml LICENSE.md README.md ./
1400
+
1401
+ # Bundle own configuration files
1402
+ COPY lightspeed-stack.yaml run.yaml ./
1403
+
1404
+ # Add only project-specific dependencies without adding other dependencies
1405
+ # to not break the dependencies of the base image.
1406
+ ENV UV_COMPILE_BYTECODE=0 \
1407
+ UV_LINK_MODE=copy \
1408
+ UV_PYTHON_DOWNLOADS=0 \
1409
+ UV_NO_CACHE=1
1410
+ # List of dependencies is first parsed from pyproject.toml and then installed.
1411
+ RUN python -c "import tomllib, sys; print(' '.join(tomllib.load(open('pyproject.toml','rb'))['project']['dependencies']))" \
1412
+ | xargs uv pip install --no-deps
1413
+ # Install the project itself
1414
+ RUN uv pip install . --no-deps && uv clean
1415
+
1416
+ USER 0
1417
+
1418
+ # Bundle additional rpm packages
1419
+ RUN microdnf install -y --nodocs --setopt=keepcache=0 --setopt=tsflags=nodocs TODO1 TODO2 \
1420
+ && microdnf clean all \
1421
+ && rm -rf /var/cache/dnf
1422
+
1423
+ # this directory is checked by ecosystem-cert-preflight-checks task in Konflux
1424
+ COPY LICENSE.md /licenses/
1425
+
1426
+ # Add executables from .venv to system PATH
1427
+ ENV PATH="/app-root/.venv/bin:$PATH"
1428
+
1429
+ # Run the application
1430
+ EXPOSE 8080
1431
+ ENTRYPOINT ["opentelemetry-instrument", "python3.12", "src/lightspeed_stack.py"]
1432
+ USER 1001
1433
+ ```
1434
+
1435
+ 3. Optionally create customized configuration files `lightspeed-stack.yaml` and `run.yaml`.
1436
+
1437
+ 4. Now try to build your image
1438
+ ```
1439
+ podman build -t "my-awesome-chatbot:latest" .
1440
+ ```
1441
+
1442
+ # Endpoints
1443
+
1444
+ ## OpenAPI specification
1445
+
1446
+ * [Generated OpenAPI specification](docs/openapi.json)
1447
+ * [OpenAPI documentation](docs/devel_doc/openapi.md)
1448
+
1449
+ The service provides health check endpoints that can be used for monitoring, load balancing, and orchestration systems like Kubernetes.
1450
+
1451
+ ## Readiness Endpoint
1452
+
1453
+ **Endpoint:** `GET /v1/readiness`
1454
+
1455
+ The readiness endpoint checks if the service is ready to handle requests by verifying the health status of all configured LLM providers.
1456
+
1457
+ **Response:**
1458
+ - **200 OK**: Service is ready - all providers are healthy
1459
+ - **503 Service Unavailable**: Service is not ready - one or more providers are unhealthy
1460
+
1461
+ **Response Body:**
1462
+ ```json
1463
+ {
1464
+ "ready": true,
1465
+ "reason": "All providers are healthy",
1466
+ "providers": []
1467
+ }
1468
+ ```
1469
+
1470
+ **Response Fields:**
1471
+ - `ready` (boolean): Indicates if the service is ready to handle requests
1472
+ - `reason` (string): Human-readable explanation of the readiness state
1473
+ - `providers` (array): List of unhealthy providers (empty when service is ready)
1474
+
1475
+ ## Liveness Endpoint
1476
+
1477
+ **Endpoint:** `GET /v1/liveness`
1478
+
1479
+ The liveness endpoint performs a basic health check to verify the service is alive and responding.
1480
+
1481
+ **Response:**
1482
+ - **200 OK**: Service is alive
1483
+
1484
+ **Response Body:**
1485
+ ```json
1486
+ {
1487
+ "alive": true
1488
+ }
1489
+ ```
1490
+
1491
+ ## Models endpoint
1492
+
1493
+ **Endpoint:** `GET /v1/models`
1494
+
1495
+ Process GET requests and returns a list of available models from the Llama
1496
+ Stack service. It is possible to specify "model_type" query parameter that is
1497
+ used as a filter. For example, if model type is set to "llm", only LLM models
1498
+ will be returned:
1499
+
1500
+ ```bash
1501
+ curl http://localhost:8080/v1/models?model_type=llm
1502
+ ```
1503
+
1504
+ The "model_type" query parameter is optional. When not specified, all models
1505
+ will be returned.
1506
+
1507
+ **Response Body:**
1508
+ ```json
1509
+ {
1510
+ "models": [
1511
+ {
1512
+ "identifier": "sentence-transformers/.llama",
1513
+ "metadata": {
1514
+ "embedding_dimension": 384
1515
+ },
1516
+ "api_model_type": "embedding",
1517
+ "provider_id": "sentence-transformers",
1518
+ "type": "model",
1519
+ "provider_resource_id": ".llama",
1520
+ "model_type": "embedding"
1521
+ },
1522
+ {
1523
+ "identifier": "openai/gpt-5.6-luna",
1524
+ "metadata": {},
1525
+ "api_model_type": "llm",
1526
+ "provider_id": "openai",
1527
+ "type": "model",
1528
+ "provider_resource_id": "gpt-5.6-luna",
1529
+ "model_type": "llm"
1530
+ },
1531
+ {
1532
+ "identifier": "sentence-transformers/nomic-ai/nomic-embed-text-v1.5",
1533
+ "metadata": {
1534
+ "embedding_dimension": 768
1535
+ },
1536
+ "api_model_type": "embedding",
1537
+ "provider_id": "sentence-transformers",
1538
+ "type": "model",
1539
+ "provider_resource_id": "nomic-ai/nomic-embed-text-v1.5",
1540
+ "model_type": "embedding"
1541
+ }
1542
+ ]
1543
+ }
1544
+ ```
1545
+
1546
+ ## Skills endpoint
1547
+
1548
+ **Endpoint:** `GET /v1/skills`
1549
+
1550
+ Process GET requests and return the list of agent skills loaded from the
1551
+ directories configured under `skills.paths` in the service configuration
1552
+ (see [Agent Skills](#agent-skills) and the [Agent Skills Guide](docs/user_doc/skills_guide.md)
1553
+ for configuration and authoring instructions). Each skill's name and
1554
+ description are read from its `SKILL.md` frontmatter.
1555
+
1556
+ This endpoint reads the configured skill directories directly and does not
1557
+ invoke an LLM or agent — it is intended for clients (e.g. the RHDH UI or
1558
+ other tooling) that need a deterministic way to introspect configured
1559
+ skills without the cost, latency, or non-determinism of an LLM tool call.
1560
+ This is distinct from the `list_skills` tool that the agent itself may
1561
+ invoke during a `/v1/query` or `/v1/streaming_query` turn.
1562
+
1563
+ If [authentication](#authentication) is enabled, include the appropriate
1564
+ credentials; otherwise the request returns `401`/`403`.
1565
+
1566
+ ```bash
1567
+ curl -H "Authorization: Bearer <token>" \
1568
+ http://localhost:8080/v1/skills
1569
+ ```
1570
+
1571
+ **Response Body:**
1572
+
1573
+ ```json
1574
+ {
1575
+ "skills": [
1576
+ {
1577
+ "name": "code-review",
1578
+ "description": "Review code for quality and security"
1579
+ },
1580
+ {
1581
+ "name": "openshift-troubleshooting",
1582
+ "description": "Troubleshoot OpenShift cluster issues"
1583
+ }
1584
+ ]
1585
+ }
1586
+ ```
1587
+
1588
+ If no skills are configured (or `skills.paths` is empty), the endpoint
1589
+ returns an empty list:
1590
+
1591
+ ```json
1592
+ {
1593
+ "skills": []
1594
+ }
1595
+ ```
1596
+
1597
+
1598
+ # Database structure
1599
+
1600
+ Database structure is described on [this page](https://lightspeed-core.github.io/lightspeed-stack/DB/index.html)
1601
+
1602
+ # Publish the service as Python package on PyPI
1603
+
1604
+ To publish the service as an Python package on PyPI to be installable by anyone
1605
+ (including Konflux hermetic builds), perform these two steps:
1606
+
1607
+ ## Generate distribution archives to be uploaded into Python registry
1608
+
1609
+ ```
1610
+ make distribution-archives
1611
+ ```
1612
+
1613
+ Please make sure that the archive was really built to avoid publishing older one.
1614
+
1615
+ ## Upload distribution archives into selected Python registry
1616
+
1617
+ ```
1618
+ make upload-distribution-archives
1619
+ ```
1620
+
1621
+ The Python registry to where the package should be uploaded can be configured
1622
+ by changing `PYTHON_REGISTRY`. It is possible to select `pypi` or `testpypi`.
1623
+
1624
+ You might have your API token stored in file `~/.pypirc`. That file should have
1625
+ the following form:
1626
+
1627
+ ```
1628
+ [testpypi]
1629
+ username = __token__
1630
+ password = pypi-{your-API-token}
1631
+
1632
+ [pypi]
1633
+ username = __token__
1634
+ password = pypi-{your-API-token}
1635
+ ```
1636
+
1637
+ If this configuration file does not exist, you will be prompted to specify API token from keyboard every time you try to upload the archive.
1638
+
1639
+
1640
+
1641
+ ## Packages on PyPI and Test PyPI
1642
+
1643
+ * https://pypi.org/project/lightspeed-stack/
1644
+ * https://test.pypi.org/project/lightspeed-stack/0.1.0/
1645
+
1646
+
1647
+
1648
+ # Security policy
1649
+
1650
+ * See [security policy document](SECURITY.md).
1651
+
1652
+ # Contributing
1653
+
1654
+ * See [contributors](CONTRIBUTING.md) guide.
1655
+
1656
+
1657
+
1658
+ # Testing
1659
+
1660
+ * See [testing](docs/testing/testing.md) guide.
1661
+
1662
+
1663
+
1664
+ # Releasing
1665
+
1666
+ * See [releasing](docs/maintenance/releasing.md) guide.
1667
+
1668
+ # License
1669
+
1670
+ Published under the Apache 2.0 License
1671
+
1672
+
1673
+
1674
+ # Additional tools
1675
+
1676
+ ## Utility to generate OpenAPI schema
1677
+
1678
+ This script re-generated OpenAPI schema for the Lightspeed Service REST API.
1679
+
1680
+ ### Path
1681
+
1682
+ [scripts/generate_openapi_schema.py](scripts/generate_openapi_schema.py)
1683
+
1684
+ ### Usage
1685
+
1686
+ ```
1687
+ make schema
1688
+ ```
1689
+
1690
+ ## Makefile target to generate OpenAPI specification
1691
+
1692
+ Use `make openapi-doc` to generate OpenAPI specification in Markdown format.
1693
+ Resulting documentation is available at [here](docs/devel_doc/openapi.md).
1694
+
1695
+
1696
+
1697
+ ## Utility to generate documentation from source code
1698
+
1699
+ This script re-generate README.md files for all modules defined in the Lightspeed Stack Service.
1700
+
1701
+ ### Path
1702
+
1703
+ [scripts/gen_doc.py](scripts/gen_doc.py)
1704
+
1705
+ ### Usage
1706
+
1707
+ ```
1708
+ make doc
1709
+ ```
1710
+
1711
+ # Data Export Integration
1712
+
1713
+ The Lightspeed Core Stack integrates with the [lightspeed-to-dataverse-exporter](https://github.com/lightspeed-core/lightspeed-to-dataverse-exporter) service to automatically export various types of user interaction data to Red Hat's Dataverse for analysis.
1714
+
1715
+ ## Quick Integration
1716
+
1717
+ 1. **Enable data collection** in your `lightspeed-stack.yaml`:
1718
+ ```yaml
1719
+ user_data_collection:
1720
+ feedback_enabled: true
1721
+ feedback_storage: "/shared/data/feedback"
1722
+ transcripts_enabled: true
1723
+ transcripts_storage: "/shared/data/transcripts"
1724
+ ```
1725
+
1726
+ 2. **Deploy the exporter service** pointing to the same data directories
1727
+
1728
+
1729
+ ## Documentation
1730
+
1731
+ For complete integration setup, deployment options, and configuration details, see [exporter repository](https://github.com/lightspeed-core/lightspeed-to-dataverse-exporter).
1732
+
1733
+ # Project structure
1734
+
1735
+ ## Configuration classes
1736
+
1737
+ ![Configuration classes](docs/config.png)
1738
+
1739
+ ## REST API
1740
+
1741
+ ![REST API](docs/rest_api.png)
1742
+
1743
+ ## Sequence diagrams
1744
+
1745
+ ### Query endpoint REST API handler
1746
+
1747
+ ![Query endpoint](docs/query_endpoint.svg)
1748
+
1749
+ ## Streaming query endpoint REST API handler
1750
+
1751
+ ![Streaming query endpoint](docs/streaming_query_endpoint.svg)
1752
+
1753
+ ## Versioning
1754
+
1755
+ We follow [Semantic Versioning](http://semver.org/spec/v1.0.0.html).
1756
+ The version X.Y.Z indicates:
1757
+
1758
+ * X is the major version (backward-incompatible),
1759
+ * Y is the minor version (backward-compatible), and
1760
+ * Z is the patch version (backward-compatible bug fix).
1761
+
1762
+ For upgrade instructions between versions, see the [Migration Guides](docs/migrations/).
1763
+
1764
+ # Konflux
1765
+
1766
+ The official image of Lightspeed Core Stack is built on [Konflux](https://konflux-ui.apps.kflux-prd-rh02.0fk9.p1.openshiftapps.com/ns/lightspeed-core-tenant/applications/lightspeed-stack).
1767
+ We have both x86_64 and ARM64 images.
1768
+
1769
+ ## Updating Dependencies for Hermetic Builds
1770
+
1771
+ Konflux builds run in **hermetic mode** (air-gapped from the internet), so all dependencies must be prefetched and locked. When you add or update dependencies, you need to regenerate the lock files.
1772
+
1773
+ ### When to Update Dependency Files
1774
+
1775
+ Update these files when you:
1776
+ - Add/remove/update Python packages in the project
1777
+ - Add/remove/update RPM packages in `deploy/lightspeed-stack/Containerfile`
1778
+ - Change the base image version
1779
+
1780
+ ### Updating Python Dependencies
1781
+
1782
+ **Quick command:**
1783
+ ```shell
1784
+ make konflux-requirements
1785
+ ```
1786
+
1787
+ This compiles Python dependencies from `pyproject.toml` using a fork of `uv` that supports a "prefer-index" package version resolution policy, splits packages by their source index (PyPI vs Red Hat's internal registry), and generates hermetic requirements files with pinned versions and hashes for Konflux builds.
1788
+
1789
+ **Files produced:**
1790
+ - `.konflux/requirements.hashes.source.txt` – PyPI packages with hashes
1791
+ - `.konflux/requirements.hashes.wheel.txt` – Red Hat registry packages with hashes
1792
+ - `.konflux/requirements-build.txt` – Build-time dependencies for source packages
1793
+
1794
+ The script also updates the Tekton pipeline configurations (`.tekton/lightspeed-stack-*.yaml`) with the list of pre-built wheel packages.
1795
+
1796
+ ### Updating RPM Dependencies
1797
+
1798
+ **Prerequisites:**
1799
+ - Install [rpm-lockfile-prototype](https://github.com/konflux-ci/rpm-lockfile-prototype?tab=readme-ov-file#installation)
1800
+ - Have an active RHEL Subscription, get activation keys from [RH console](https://console.redhat.com/insights/connector/activation-keys)
1801
+ - Have `dnf` installed in system
1802
+
1803
+ **Steps:**
1804
+
1805
+ 1. **List your RPM packages** in `rpms.in.yaml` under the `packages` field
1806
+
1807
+ 2. **If you changed the base image**, extract its repo file:
1808
+ ```shell
1809
+ # UBI images
1810
+ podman run -it $BASE_IMAGE cat /etc/yum.repos.d/ubi.repo > ubi.repo
1811
+ # RHEL images
1812
+ podman run -it $BASE_IMAGE cat /etc/yum.repos.d/redhat.repo > redhat.repo
1813
+ ```
1814
+ If the repo file contains too many entries, we can filter them and keep only required repositories.
1815
+ Here is the command to check active repositories:
1816
+ ```shell
1817
+ dnf repolist
1818
+ ```
1819
+ Replace the architecture tag (`uname -m`) to `$basearch` so that rpm-lockfile-prototype can replace it with requested architecture names.
1820
+ ```shell
1821
+ sed -i "s/$(uname -m)/\$basearch/g" redhat.repo
1822
+ ```
1823
+
1824
+ 1. **Generate the lock file**:
1825
+ ```shell
1826
+ make konflux-rpm-lock
1827
+ ```
1828
+
1829
+ This creates `rpms.lock.yaml` with pinned RPM versions.