lightspeed-stack 0.5.0__tar.gz → 0.6.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 (923) hide show
  1. lightspeed_stack-0.6.0rc1/PKG-INFO +1636 -0
  2. lightspeed_stack-0.6.0rc1/README.md +1383 -0
  3. lightspeed_stack-0.6.0rc1/pyproject.toml +223 -0
  4. lightspeed_stack-0.6.0rc1/src/a2a_storage/postgres_context_store.py +143 -0
  5. lightspeed_stack-0.6.0rc1/src/a2a_storage/sqlite_context_store.py +144 -0
  6. lightspeed_stack-0.6.0rc1/src/app/database.py +211 -0
  7. lightspeed_stack-0.6.0rc1/src/app/endpoints/README.md +80 -0
  8. lightspeed_stack-0.6.0rc1/src/app/endpoints/TODO +6 -0
  9. lightspeed_stack-0.6.0rc1/src/app/endpoints/a2a.py +977 -0
  10. lightspeed_stack-0.6.0rc1/src/app/endpoints/a2a_openapi.py +32 -0
  11. lightspeed_stack-0.6.0rc1/src/app/endpoints/authorized.py +51 -0
  12. lightspeed_stack-0.6.0rc1/src/app/endpoints/config.py +66 -0
  13. lightspeed_stack-0.6.0rc1/src/app/endpoints/conversations_v1.py +543 -0
  14. lightspeed_stack-0.6.0rc1/src/app/endpoints/conversations_v2.py +285 -0
  15. lightspeed_stack-0.6.0rc1/src/app/endpoints/feedback.py +248 -0
  16. lightspeed_stack-0.6.0rc1/src/app/endpoints/health.py +188 -0
  17. lightspeed_stack-0.6.0rc1/src/app/endpoints/info.py +89 -0
  18. lightspeed_stack-0.6.0rc1/src/app/endpoints/mcp_auth.py +94 -0
  19. lightspeed_stack-0.6.0rc1/src/app/endpoints/mcp_servers.py +245 -0
  20. lightspeed_stack-0.6.0rc1/src/app/endpoints/metrics.py +73 -0
  21. lightspeed_stack-0.6.0rc1/src/app/endpoints/models.py +141 -0
  22. lightspeed_stack-0.6.0rc1/src/app/endpoints/prompts.py +373 -0
  23. lightspeed_stack-0.6.0rc1/src/app/endpoints/providers.py +172 -0
  24. lightspeed_stack-0.6.0rc1/src/app/endpoints/query.py +343 -0
  25. lightspeed_stack-0.6.0rc1/src/app/endpoints/rags.py +200 -0
  26. lightspeed_stack-0.6.0rc1/src/app/endpoints/responses.py +1145 -0
  27. lightspeed_stack-0.6.0rc1/src/app/endpoints/responses_telemetry.py +162 -0
  28. lightspeed_stack-0.6.0rc1/src/app/endpoints/rlsapi_v1.py +889 -0
  29. lightspeed_stack-0.6.0rc1/src/app/endpoints/root.py +816 -0
  30. lightspeed_stack-0.6.0rc1/src/app/endpoints/shields.py +87 -0
  31. lightspeed_stack-0.6.0rc1/src/app/endpoints/stream_interrupt.py +92 -0
  32. lightspeed_stack-0.6.0rc1/src/app/endpoints/streaming_query.py +1099 -0
  33. lightspeed_stack-0.6.0rc1/src/app/endpoints/tools.py +244 -0
  34. lightspeed_stack-0.6.0rc1/src/app/endpoints/vector_stores.py +860 -0
  35. lightspeed_stack-0.6.0rc1/src/app/main.py +282 -0
  36. lightspeed_stack-0.6.0rc1/src/app/routers.py +79 -0
  37. lightspeed_stack-0.6.0rc1/src/authentication/__init__.py +88 -0
  38. lightspeed_stack-0.6.0rc1/src/authentication/api_key_token.py +74 -0
  39. lightspeed_stack-0.6.0rc1/src/authentication/jwk_token.py +261 -0
  40. lightspeed_stack-0.6.0rc1/src/authentication/k8s.py +518 -0
  41. lightspeed_stack-0.6.0rc1/src/authentication/noop.py +59 -0
  42. lightspeed_stack-0.6.0rc1/src/authentication/noop_with_token.py +73 -0
  43. lightspeed_stack-0.6.0rc1/src/authentication/rh_identity.py +394 -0
  44. lightspeed_stack-0.6.0rc1/src/authentication/utils.py +35 -0
  45. lightspeed_stack-0.6.0rc1/src/authorization/middleware.py +199 -0
  46. lightspeed_stack-0.6.0rc1/src/authorization/resolvers.py +375 -0
  47. lightspeed_stack-0.6.0rc1/src/cache/cache.py +179 -0
  48. lightspeed_stack-0.6.0rc1/src/cache/in_memory_cache.py +172 -0
  49. lightspeed_stack-0.6.0rc1/src/cache/noop_cache.py +151 -0
  50. lightspeed_stack-0.6.0rc1/src/cache/postgres_cache.py +564 -0
  51. lightspeed_stack-0.6.0rc1/src/cache/sqlite_cache.py +537 -0
  52. lightspeed_stack-0.6.0rc1/src/metrics/README.md +11 -0
  53. lightspeed_stack-0.6.0rc1/src/metrics/__init__.py +84 -0
  54. lightspeed_stack-0.6.0rc1/src/metrics/recording.py +159 -0
  55. lightspeed_stack-0.6.0rc1/src/metrics/utils.py +64 -0
  56. lightspeed_stack-0.6.0rc1/src/models/README.md +25 -0
  57. lightspeed_stack-0.6.0rc1/src/models/api/README.md +7 -0
  58. lightspeed_stack-0.6.0rc1/src/models/api/__init__.py +5 -0
  59. lightspeed_stack-0.6.0rc1/src/models/api/requests/__init__.py +30 -0
  60. lightspeed_stack-0.6.0rc1/src/models/api/requests/catalog.py +20 -0
  61. lightspeed_stack-0.6.0rc1/src/models/api/requests/conversations.py +22 -0
  62. lightspeed_stack-0.6.0rc1/src/models/api/requests/feedback.py +204 -0
  63. lightspeed_stack-0.6.0rc1/src/models/api/requests/mcp_servers.py +154 -0
  64. lightspeed_stack-0.6.0rc1/src/models/api/requests/prompts.py +86 -0
  65. lightspeed_stack-0.6.0rc1/src/models/api/requests/query.py +253 -0
  66. lightspeed_stack-0.6.0rc1/src/models/api/requests/responses_openai.py +178 -0
  67. lightspeed_stack-0.6.0rc1/src/models/api/requests/vector_stores.py +215 -0
  68. lightspeed_stack-0.6.0rc1/src/models/api/responses/README.md +13 -0
  69. lightspeed_stack-0.6.0rc1/src/models/api/responses/__init__.py +5 -0
  70. lightspeed_stack-0.6.0rc1/src/models/api/responses/constants.py +34 -0
  71. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/README.md +37 -0
  72. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/__init__.py +32 -0
  73. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/bad_request.py +51 -0
  74. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/bases.py +94 -0
  75. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/conflict.py +120 -0
  76. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/content_too_large.py +148 -0
  77. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/forbidden.py +198 -0
  78. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/internal.py +211 -0
  79. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/not_found.py +111 -0
  80. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/service_unavailable.py +51 -0
  81. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/too_many_requests.py +114 -0
  82. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/unauthorized.py +98 -0
  83. lightspeed_stack-0.6.0rc1/src/models/api/responses/error/unprocessable_entity.py +55 -0
  84. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/README.md +37 -0
  85. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/__init__.py +97 -0
  86. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/bases.py +84 -0
  87. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/catalog.py +258 -0
  88. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/configuration.py +94 -0
  89. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/conversations.py +219 -0
  90. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/feedback.py +58 -0
  91. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/mcp_servers.py +148 -0
  92. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/probes.py +184 -0
  93. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/prompts.py +119 -0
  94. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/query.py +243 -0
  95. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/responses_openai.py +210 -0
  96. lightspeed_stack-0.6.0rc1/src/models/api/responses/successful/vector_stores.py +303 -0
  97. lightspeed_stack-0.6.0rc1/src/models/cache_entry.py +35 -0
  98. lightspeed_stack-0.6.0rc1/src/models/common/README.md +2 -0
  99. lightspeed_stack-0.6.0rc1/src/models/common/__init__.py +51 -0
  100. lightspeed_stack-0.6.0rc1/src/models/common/conversation.py +166 -0
  101. lightspeed_stack-0.6.0rc1/src/models/common/feedback.py +19 -0
  102. lightspeed_stack-0.6.0rc1/src/models/common/health.py +39 -0
  103. lightspeed_stack-0.6.0rc1/src/models/common/mcp.py +33 -0
  104. lightspeed_stack-0.6.0rc1/src/models/common/moderation.py +29 -0
  105. lightspeed_stack-0.6.0rc1/src/models/common/query.py +109 -0
  106. lightspeed_stack-0.6.0rc1/src/models/common/responses/README.md +8 -0
  107. lightspeed_stack-0.6.0rc1/src/models/common/responses/__init__.py +21 -0
  108. lightspeed_stack-0.6.0rc1/src/models/common/responses/responses_api_params.py +175 -0
  109. lightspeed_stack-0.6.0rc1/src/models/common/responses/responses_context.py +55 -0
  110. lightspeed_stack-0.6.0rc1/src/models/common/responses/responses_conversation_context.py +33 -0
  111. lightspeed_stack-0.6.0rc1/src/models/common/responses/types.py +55 -0
  112. lightspeed_stack-0.6.0rc1/src/models/common/transcripts.py +31 -0
  113. lightspeed_stack-0.6.0rc1/src/models/common/turn_summary.py +104 -0
  114. lightspeed_stack-0.6.0rc1/src/models/compaction.py +70 -0
  115. lightspeed_stack-0.6.0rc1/src/models/config.py +2194 -0
  116. lightspeed_stack-0.6.0rc1/src/models/context.py +55 -0
  117. lightspeed_stack-0.6.0rc1/src/models/rlsapi/requests.py +245 -0
  118. lightspeed_stack-0.6.0rc1/src/models/rlsapi/responses.py +93 -0
  119. lightspeed_stack-0.6.0rc1/src/observability/README.md +97 -0
  120. lightspeed_stack-0.6.0rc1/src/observability/__init__.py +26 -0
  121. lightspeed_stack-0.6.0rc1/src/observability/formats/README.md +11 -0
  122. lightspeed_stack-0.6.0rc1/src/observability/formats/__init__.py +15 -0
  123. lightspeed_stack-0.6.0rc1/src/observability/formats/responses.py +50 -0
  124. lightspeed_stack-0.6.0rc1/src/observability/formats/rlsapi.py +58 -0
  125. lightspeed_stack-0.6.0rc1/src/observability/splunk.py +147 -0
  126. lightspeed_stack-0.6.0rc1/src/quota/cluster_quota_limiter.py +49 -0
  127. lightspeed_stack-0.6.0rc1/src/quota/connect_pg.py +53 -0
  128. lightspeed_stack-0.6.0rc1/src/quota/connect_sqlite.py +40 -0
  129. lightspeed_stack-0.6.0rc1/src/quota/quota_exceed_error.py +55 -0
  130. lightspeed_stack-0.6.0rc1/src/quota/quota_limiter.py +195 -0
  131. lightspeed_stack-0.6.0rc1/src/quota/quota_limiter_factory.py +93 -0
  132. lightspeed_stack-0.6.0rc1/src/quota/revokable_quota_limiter.py +376 -0
  133. lightspeed_stack-0.6.0rc1/src/quota/token_usage_history.py +202 -0
  134. lightspeed_stack-0.6.0rc1/src/quota/user_quota_limiter.py +51 -0
  135. lightspeed_stack-0.6.0rc1/src/runners/quota_scheduler.py +398 -0
  136. lightspeed_stack-0.6.0rc1/src/runners/uvicorn.py +39 -0
  137. lightspeed_stack-0.6.0rc1/src/telemetry/configuration_snapshot.py +548 -0
  138. lightspeed_stack-0.6.0rc1/src/utils/README.md +74 -0
  139. lightspeed_stack-0.6.0rc1/src/utils/checks.py +155 -0
  140. lightspeed_stack-0.6.0rc1/src/utils/common.py +143 -0
  141. lightspeed_stack-0.6.0rc1/src/utils/compaction.py +396 -0
  142. lightspeed_stack-0.6.0rc1/src/utils/connection_decorator.py +77 -0
  143. lightspeed_stack-0.6.0rc1/src/utils/conversations.py +529 -0
  144. lightspeed_stack-0.6.0rc1/src/utils/endpoints.py +626 -0
  145. lightspeed_stack-0.6.0rc1/src/utils/llama_stack_version.py +132 -0
  146. lightspeed_stack-0.6.0rc1/src/utils/mcp_auth_headers.py +102 -0
  147. lightspeed_stack-0.6.0rc1/src/utils/mcp_headers.py +258 -0
  148. lightspeed_stack-0.6.0rc1/src/utils/mcp_oauth_probe.py +127 -0
  149. lightspeed_stack-0.6.0rc1/src/utils/prompts.py +102 -0
  150. lightspeed_stack-0.6.0rc1/src/utils/query.py +608 -0
  151. lightspeed_stack-0.6.0rc1/src/utils/quota.py +125 -0
  152. lightspeed_stack-0.6.0rc1/src/utils/responses.py +1883 -0
  153. lightspeed_stack-0.6.0rc1/src/utils/rh_identity.py +39 -0
  154. lightspeed_stack-0.6.0rc1/src/utils/schema_dumper.py +92 -0
  155. lightspeed_stack-0.6.0rc1/src/utils/shields.py +296 -0
  156. lightspeed_stack-0.6.0rc1/src/utils/stream_interrupts.py +148 -0
  157. lightspeed_stack-0.6.0rc1/src/utils/suid.py +140 -0
  158. lightspeed_stack-0.6.0rc1/src/utils/token_estimator.py +188 -0
  159. lightspeed_stack-0.6.0rc1/src/utils/tool_formatter.py +168 -0
  160. lightspeed_stack-0.6.0rc1/src/utils/transcripts.py +168 -0
  161. lightspeed_stack-0.6.0rc1/src/utils/types.py +52 -0
  162. lightspeed_stack-0.6.0rc1/src/utils/vector_search.py +716 -0
  163. lightspeed_stack-0.6.0rc1/tests/benchmarks/conftest.py +127 -0
  164. lightspeed_stack-0.6.0rc1/tests/benchmarks/data_generators.py +160 -0
  165. lightspeed_stack-0.6.0rc1/tests/benchmarks/db_benchmarks.py +357 -0
  166. lightspeed_stack-0.6.0rc1/tests/benchmarks/test_app_database.py +857 -0
  167. lightspeed_stack-0.6.0rc1/tests/benchmarks/test_app_database_comparison.py +144 -0
  168. lightspeed_stack-0.6.0rc1/tests/configuration/lightspeed-stack-proper-name.yaml +44 -0
  169. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-azure.yaml +162 -0
  170. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-bedrock.yaml +160 -0
  171. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-rhaiis.yaml +162 -0
  172. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-rhelai.yaml +162 -0
  173. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-vertexai.yaml +157 -0
  174. lightspeed_stack-0.6.0rc1/tests/e2e/configs/run-watsonx.yaml +158 -0
  175. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-invalid-mcp-file-auth.yaml +24 -0
  176. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-auth.yaml +25 -0
  177. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml +24 -0
  178. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml +24 -0
  179. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +24 -0
  180. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml +24 -0
  181. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml +36 -0
  182. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +34 -0
  183. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-auth-noop-token.yaml +47 -0
  184. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-inline-rag.yaml +41 -0
  185. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-invalid-mcp-file-auth.yaml +25 -0
  186. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-auth.yaml +26 -0
  187. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml +25 -0
  188. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml +25 -0
  189. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +25 -0
  190. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml +25 -0
  191. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml +37 -0
  192. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml +96 -0
  193. lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +35 -0
  194. lightspeed_stack-0.6.0rc1/tests/e2e/features/authorized_noop.feature +56 -0
  195. lightspeed_stack-0.6.0rc1/tests/e2e/features/authorized_noop_token.feature +35 -0
  196. lightspeed_stack-0.6.0rc1/tests/e2e/features/authorized_rh_identity.feature +147 -0
  197. lightspeed_stack-0.6.0rc1/tests/e2e/features/conversation_cache_v2.feature +268 -0
  198. lightspeed_stack-0.6.0rc1/tests/e2e/features/conversations.feature +127 -0
  199. lightspeed_stack-0.6.0rc1/tests/e2e/features/environment.py +524 -0
  200. lightspeed_stack-0.6.0rc1/tests/e2e/features/faiss.feature +33 -0
  201. lightspeed_stack-0.6.0rc1/tests/e2e/features/feedback.feature +313 -0
  202. lightspeed_stack-0.6.0rc1/tests/e2e/features/health.feature +45 -0
  203. lightspeed_stack-0.6.0rc1/tests/e2e/features/http_401_unauthorized.feature +447 -0
  204. lightspeed_stack-0.6.0rc1/tests/e2e/features/info.feature +80 -0
  205. lightspeed_stack-0.6.0rc1/tests/e2e/features/inline_rag.feature +71 -0
  206. lightspeed_stack-0.6.0rc1/tests/e2e/features/llama_stack_disrupted.feature +243 -0
  207. lightspeed_stack-0.6.0rc1/tests/e2e/features/mcp.feature +586 -0
  208. lightspeed_stack-0.6.0rc1/tests/e2e/features/mcp_servers_api.feature +133 -0
  209. lightspeed_stack-0.6.0rc1/tests/e2e/features/mcp_servers_api_auth.feature +31 -0
  210. lightspeed_stack-0.6.0rc1/tests/e2e/features/mcp_servers_api_no_config.feature +23 -0
  211. lightspeed_stack-0.6.0rc1/tests/e2e/features/models.feature +33 -0
  212. lightspeed_stack-0.6.0rc1/tests/e2e/features/opentelemetry.feature +29 -0
  213. lightspeed_stack-0.6.0rc1/tests/e2e/features/proxy.feature +114 -0
  214. lightspeed_stack-0.6.0rc1/tests/e2e/features/query.feature +171 -0
  215. lightspeed_stack-0.6.0rc1/tests/e2e/features/rbac.feature +126 -0
  216. lightspeed_stack-0.6.0rc1/tests/e2e/features/responses.feature +550 -0
  217. lightspeed_stack-0.6.0rc1/tests/e2e/features/responses_streaming.feature +432 -0
  218. lightspeed_stack-0.6.0rc1/tests/e2e/features/rest_api.feature +17 -0
  219. lightspeed_stack-0.6.0rc1/tests/e2e/features/rlsapi_v1.feature +57 -0
  220. lightspeed_stack-0.6.0rc1/tests/e2e/features/rlsapi_v1_errors.feature +36 -0
  221. lightspeed_stack-0.6.0rc1/tests/e2e/features/smoketests.feature +18 -0
  222. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/README.md +56 -0
  223. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/auth.py +194 -0
  224. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/common.py +218 -0
  225. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/common_http.py +290 -0
  226. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/conversation.py +412 -0
  227. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/feedback.py +174 -0
  228. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/health.py +110 -0
  229. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/llm_query_response.py +403 -0
  230. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/models.py +114 -0
  231. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/place_holder.py +17 -0
  232. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/proxy.py +454 -0
  233. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/rlsapi_v1.py +65 -0
  234. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/shields.py +37 -0
  235. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/tls.py +226 -0
  236. lightspeed_stack-0.6.0rc1/tests/e2e/features/steps/token_counters.py +211 -0
  237. lightspeed_stack-0.6.0rc1/tests/e2e/features/streaming_query.feature +158 -0
  238. lightspeed_stack-0.6.0rc1/tests/e2e/features/tls.feature +185 -0
  239. lightspeed_stack-0.6.0rc1/tests/e2e/mock_mcp_server/Dockerfile +5 -0
  240. lightspeed_stack-0.6.0rc1/tests/e2e/mock_mcp_server/server.py +123 -0
  241. lightspeed_stack-0.6.0rc1/tests/e2e/mock_tls_inference_server/README.md +5 -0
  242. lightspeed_stack-0.6.0rc1/tests/e2e/mock_tls_inference_server/server.py +322 -0
  243. lightspeed_stack-0.6.0rc1/tests/e2e/patches/README.md +2 -0
  244. lightspeed_stack-0.6.0rc1/tests/e2e/patches/docker-compose-mcp-volumes-selinux.patch +26 -0
  245. lightspeed_stack-0.6.0rc1/tests/e2e/proxy/interception_proxy.py +239 -0
  246. lightspeed_stack-0.6.0rc1/tests/e2e/proxy/tunnel_proxy.py +174 -0
  247. lightspeed_stack-0.6.0rc1/tests/e2e/test_list.txt +29 -0
  248. lightspeed_stack-0.6.0rc1/tests/e2e/utils/llama_stack_utils.py +160 -0
  249. lightspeed_stack-0.6.0rc1/tests/e2e/utils/prow_utils.py +252 -0
  250. lightspeed_stack-0.6.0rc1/tests/e2e/utils/utils.py +552 -0
  251. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/lightspeed-stack.yaml +73 -0
  252. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/llama-stack-openai.yaml +215 -0
  253. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/llama-stack-prow.yaml +205 -0
  254. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/lightspeed/mock-mcp.yaml +56 -0
  255. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/operators/ds-cluster.yaml +16 -0
  256. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-cpu.yaml +65 -0
  257. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-gpu.yaml +82 -0
  258. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/pipeline-konflux.sh +403 -0
  259. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/pipeline-services-konflux.sh +45 -0
  260. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/pipeline-services.sh +30 -0
  261. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/pipeline.sh +492 -0
  262. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/run-tests.sh +75 -0
  263. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/scripts/bootstrap.sh +102 -0
  264. lightspeed_stack-0.6.0rc1/tests/e2e-prow/rhoai/scripts/e2e-ops.sh +659 -0
  265. lightspeed_stack-0.6.0rc1/tests/integration/README.md +524 -0
  266. lightspeed_stack-0.6.0rc1/tests/integration/conftest.py +516 -0
  267. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/README.md +50 -0
  268. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_authorized_endpoint.py +35 -0
  269. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_config_integration.py +90 -0
  270. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_conversations_v1_integration.py +827 -0
  271. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_conversations_v2_integration.py +815 -0
  272. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_health_integration.py +195 -0
  273. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_info_integration.py +159 -0
  274. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_model_list.py +212 -0
  275. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_query_byok_integration.py +1264 -0
  276. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_query_integration.py +1544 -0
  277. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_rlsapi_v1_integration.py +555 -0
  278. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_root_endpoint.py +75 -0
  279. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_stream_interrupt_integration.py +66 -0
  280. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_streaming_query_byok_integration.py +1074 -0
  281. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_streaming_query_integration.py +317 -0
  282. lightspeed_stack-0.6.0rc1/tests/integration/endpoints/test_tools_integration.py +107 -0
  283. lightspeed_stack-0.6.0rc1/tests/integration/test_configuration.py +94 -0
  284. lightspeed_stack-0.6.0rc1/tests/integration/test_middleware_integration.py +34 -0
  285. lightspeed_stack-0.6.0rc1/tests/integration/test_openapi_json.py +416 -0
  286. lightspeed_stack-0.6.0rc1/tests/integration/test_rh_identity_integration.py +142 -0
  287. lightspeed_stack-0.6.0rc1/tests/test_results/.coverage.integration +0 -0
  288. lightspeed_stack-0.6.0rc1/tests/test_results/.coverage.unit +0 -0
  289. lightspeed_stack-0.6.0rc1/tests/test_results/coverage_integration.json +1 -0
  290. lightspeed_stack-0.6.0rc1/tests/test_results/coverage_unit.json +1 -0
  291. lightspeed_stack-0.6.0rc1/tests/test_results/junit_integration.xml +1 -0
  292. lightspeed_stack-0.6.0rc1/tests/test_results/junit_unit.xml +1 -0
  293. lightspeed_stack-0.6.0rc1/tests/unit/README.md +29 -0
  294. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/README.md +83 -0
  295. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/conftest.py +41 -0
  296. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_a2a.py +894 -0
  297. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_config.py +74 -0
  298. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_conversations.py +2137 -0
  299. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_conversations_v2.py +972 -0
  300. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_feedback.py +428 -0
  301. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_health.py +339 -0
  302. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_mcp_auth.py +339 -0
  303. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_mcp_servers.py +484 -0
  304. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_metrics.py +47 -0
  305. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_models.py +474 -0
  306. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_prompts.py +385 -0
  307. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_query.py +815 -0
  308. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_rags.py +391 -0
  309. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_responses.py +2770 -0
  310. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_responses_splunk.py +814 -0
  311. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_rlsapi_v1.py +1683 -0
  312. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_shields.py +384 -0
  313. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_stream_interrupt.py +150 -0
  314. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_streaming_query.py +2816 -0
  315. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_tools.py +1137 -0
  316. lightspeed_stack-0.6.0rc1/tests/unit/app/endpoints/test_vector_stores.py +1183 -0
  317. lightspeed_stack-0.6.0rc1/tests/unit/app/test_database.py +406 -0
  318. lightspeed_stack-0.6.0rc1/tests/unit/app/test_main_middleware.py +243 -0
  319. lightspeed_stack-0.6.0rc1/tests/unit/app/test_routers.py +185 -0
  320. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_api_key_token.py +139 -0
  321. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_jwk_token.py +927 -0
  322. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_k8s.py +1137 -0
  323. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_noop.py +59 -0
  324. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_noop_with_token.py +148 -0
  325. lightspeed_stack-0.6.0rc1/tests/unit/authentication/test_rh_identity.py +828 -0
  326. lightspeed_stack-0.6.0rc1/tests/unit/authorization/test_middleware.py +382 -0
  327. lightspeed_stack-0.6.0rc1/tests/unit/authorization/test_resolvers.py +467 -0
  328. lightspeed_stack-0.6.0rc1/tests/unit/cache/test_cache_factory.py +265 -0
  329. lightspeed_stack-0.6.0rc1/tests/unit/cache/test_noop_cache.py +252 -0
  330. lightspeed_stack-0.6.0rc1/tests/unit/cache/test_postgres_cache.py +901 -0
  331. lightspeed_stack-0.6.0rc1/tests/unit/cache/test_sqlite_cache.py +610 -0
  332. lightspeed_stack-0.6.0rc1/tests/unit/metrics/README.md +11 -0
  333. lightspeed_stack-0.6.0rc1/tests/unit/metrics/test_recording.py +236 -0
  334. lightspeed_stack-0.6.0rc1/tests/unit/metrics/test_utis.py +75 -0
  335. lightspeed_stack-0.6.0rc1/tests/unit/models/config/README.md +71 -0
  336. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_authentication_configuration.py +616 -0
  337. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_byok_rag.py +201 -0
  338. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_compaction_configuration.py +111 -0
  339. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_conversation_history.py +279 -0
  340. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_customization.py +104 -0
  341. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_database_configuration.py +95 -0
  342. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_dump_configuration.py +1263 -0
  343. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_inference_configuration.py +92 -0
  344. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_jwt_role_rule.py +157 -0
  345. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_llama_stack_configuration.py +134 -0
  346. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_model_context_protocol_server.py +366 -0
  347. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_postgresql_database_configuration.py +123 -0
  348. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_rlsapi_v1_configuration.py +174 -0
  349. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_splunk_configuration.py +126 -0
  350. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_tls_configuration.py +120 -0
  351. lightspeed_stack-0.6.0rc1/tests/unit/models/config/test_user_data_collection.py +100 -0
  352. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/README.md +23 -0
  353. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/__init__.py +1 -0
  354. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_attachment.py +38 -0
  355. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_feedback_request.py +218 -0
  356. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_feedback_status_update_request.py +23 -0
  357. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_query_request.py +149 -0
  358. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_responses_request.py +57 -0
  359. lightspeed_stack-0.6.0rc1/tests/unit/models/requests/test_vector_store_requests.py +180 -0
  360. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_authorized_response.py +46 -0
  361. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_error_responses.py +825 -0
  362. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_query_response.py +95 -0
  363. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_rag_chunk.py +199 -0
  364. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_response_types.py +87 -0
  365. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_successful_responses.py +1282 -0
  366. lightspeed_stack-0.6.0rc1/tests/unit/models/responses/test_types.py +95 -0
  367. lightspeed_stack-0.6.0rc1/tests/unit/models/rlsapi/test_requests.py +681 -0
  368. lightspeed_stack-0.6.0rc1/tests/unit/models/rlsapi/test_responses.py +176 -0
  369. lightspeed_stack-0.6.0rc1/tests/unit/models/test_compaction.py +76 -0
  370. lightspeed_stack-0.6.0rc1/tests/unit/observability/formats/README.md +11 -0
  371. lightspeed_stack-0.6.0rc1/tests/unit/observability/formats/test_responses.py +162 -0
  372. lightspeed_stack-0.6.0rc1/tests/unit/observability/formats/test_rlsapi.py +102 -0
  373. lightspeed_stack-0.6.0rc1/tests/unit/observability/test_splunk.py +318 -0
  374. lightspeed_stack-0.6.0rc1/tests/unit/quota/test_cluster_quota_limiter.py +195 -0
  375. lightspeed_stack-0.6.0rc1/tests/unit/quota/test_connect_pg.py +70 -0
  376. lightspeed_stack-0.6.0rc1/tests/unit/quota/test_quota_limiter_factory.py +281 -0
  377. lightspeed_stack-0.6.0rc1/tests/unit/quota/test_user_quota_limiter.py +180 -0
  378. lightspeed_stack-0.6.0rc1/tests/unit/telemetry/conftest.py +390 -0
  379. lightspeed_stack-0.6.0rc1/tests/unit/telemetry/test_configuration_snapshot.py +727 -0
  380. lightspeed_stack-0.6.0rc1/tests/unit/test_client.py +339 -0
  381. lightspeed_stack-0.6.0rc1/tests/unit/test_configuration.py +2312 -0
  382. lightspeed_stack-0.6.0rc1/tests/unit/test_lightspeed_stack.py +16 -0
  383. lightspeed_stack-0.6.0rc1/tests/unit/test_llama_stack_configuration.py +658 -0
  384. lightspeed_stack-0.6.0rc1/tests/unit/test_log.py +160 -0
  385. lightspeed_stack-0.6.0rc1/tests/unit/test_sentry.py +186 -0
  386. lightspeed_stack-0.6.0rc1/tests/unit/utils/README.md +62 -0
  387. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_compaction.py +612 -0
  388. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_conversations.py +857 -0
  389. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_endpoints.py +547 -0
  390. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_mcp_headers.py +457 -0
  391. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_prompts.py +335 -0
  392. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_query.py +855 -0
  393. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_responses.py +3450 -0
  394. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_rh_identity.py +74 -0
  395. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_shields.py +632 -0
  396. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_token_estimator.py +273 -0
  397. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_transcripts.py +153 -0
  398. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_types.py +274 -0
  399. lightspeed_stack-0.6.0rc1/tests/unit/utils/test_vector_search.py +721 -0
  400. lightspeed_stack-0.5.0/PKG-INFO +0 -1660
  401. lightspeed_stack-0.5.0/README.md +0 -1411
  402. lightspeed_stack-0.5.0/pyproject.toml +0 -220
  403. lightspeed_stack-0.5.0/src/a2a_storage/postgres_context_store.py +0 -143
  404. lightspeed_stack-0.5.0/src/a2a_storage/sqlite_context_store.py +0 -144
  405. lightspeed_stack-0.5.0/src/app/database.py +0 -205
  406. lightspeed_stack-0.5.0/src/app/endpoints/README.md +0 -71
  407. lightspeed_stack-0.5.0/src/app/endpoints/a2a.py +0 -894
  408. lightspeed_stack-0.5.0/src/app/endpoints/authorized.py +0 -43
  409. lightspeed_stack-0.5.0/src/app/endpoints/config.py +0 -61
  410. lightspeed_stack-0.5.0/src/app/endpoints/conversations_v1.py +0 -535
  411. lightspeed_stack-0.5.0/src/app/endpoints/conversations_v2.py +0 -283
  412. lightspeed_stack-0.5.0/src/app/endpoints/feedback.py +0 -236
  413. lightspeed_stack-0.5.0/src/app/endpoints/health.py +0 -156
  414. lightspeed_stack-0.5.0/src/app/endpoints/info.py +0 -82
  415. lightspeed_stack-0.5.0/src/app/endpoints/mcp_auth.py +0 -92
  416. lightspeed_stack-0.5.0/src/app/endpoints/mcp_servers.py +0 -247
  417. lightspeed_stack-0.5.0/src/app/endpoints/metrics.py +0 -68
  418. lightspeed_stack-0.5.0/src/app/endpoints/models.py +0 -140
  419. lightspeed_stack-0.5.0/src/app/endpoints/providers.py +0 -160
  420. lightspeed_stack-0.5.0/src/app/endpoints/query.py +0 -322
  421. lightspeed_stack-0.5.0/src/app/endpoints/rags.py +0 -195
  422. lightspeed_stack-0.5.0/src/app/endpoints/responses.py +0 -765
  423. lightspeed_stack-0.5.0/src/app/endpoints/rlsapi_v1.py +0 -555
  424. lightspeed_stack-0.5.0/src/app/endpoints/root.py +0 -808
  425. lightspeed_stack-0.5.0/src/app/endpoints/shields.py +0 -82
  426. lightspeed_stack-0.5.0/src/app/endpoints/stream_interrupt.py +0 -91
  427. lightspeed_stack-0.5.0/src/app/endpoints/streaming_query.py +0 -1065
  428. lightspeed_stack-0.5.0/src/app/endpoints/tools.py +0 -235
  429. lightspeed_stack-0.5.0/src/app/main.py +0 -235
  430. lightspeed_stack-0.5.0/src/app/routers.py +0 -74
  431. lightspeed_stack-0.5.0/src/authentication/__init__.py +0 -85
  432. lightspeed_stack-0.5.0/src/authentication/api_key_token.py +0 -74
  433. lightspeed_stack-0.5.0/src/authentication/jwk_token.py +0 -253
  434. lightspeed_stack-0.5.0/src/authentication/k8s.py +0 -506
  435. lightspeed_stack-0.5.0/src/authentication/noop.py +0 -56
  436. lightspeed_stack-0.5.0/src/authentication/noop_with_token.py +0 -69
  437. lightspeed_stack-0.5.0/src/authentication/rh_identity.py +0 -365
  438. lightspeed_stack-0.5.0/src/authentication/utils.py +0 -32
  439. lightspeed_stack-0.5.0/src/authorization/middleware.py +0 -192
  440. lightspeed_stack-0.5.0/src/authorization/resolvers.py +0 -356
  441. lightspeed_stack-0.5.0/src/cache/cache.py +0 -165
  442. lightspeed_stack-0.5.0/src/cache/in_memory_cache.py +0 -163
  443. lightspeed_stack-0.5.0/src/cache/noop_cache.py +0 -143
  444. lightspeed_stack-0.5.0/src/cache/postgres_cache.py +0 -548
  445. lightspeed_stack-0.5.0/src/cache/sqlite_cache.py +0 -522
  446. lightspeed_stack-0.5.0/src/metrics/README.md +0 -8
  447. lightspeed_stack-0.5.0/src/metrics/__init__.py +0 -55
  448. lightspeed_stack-0.5.0/src/metrics/utils.py +0 -64
  449. lightspeed_stack-0.5.0/src/models/README.md +0 -20
  450. lightspeed_stack-0.5.0/src/models/cache_entry.py +0 -31
  451. lightspeed_stack-0.5.0/src/models/config.py +0 -2005
  452. lightspeed_stack-0.5.0/src/models/context.py +0 -54
  453. lightspeed_stack-0.5.0/src/models/requests.py +0 -937
  454. lightspeed_stack-0.5.0/src/models/responses.py +0 -2606
  455. lightspeed_stack-0.5.0/src/models/rlsapi/requests.py +0 -244
  456. lightspeed_stack-0.5.0/src/models/rlsapi/responses.py +0 -93
  457. lightspeed_stack-0.5.0/src/observability/README.md +0 -97
  458. lightspeed_stack-0.5.0/src/observability/__init__.py +0 -14
  459. lightspeed_stack-0.5.0/src/observability/formats/README.md +0 -8
  460. lightspeed_stack-0.5.0/src/observability/formats/__init__.py +0 -9
  461. lightspeed_stack-0.5.0/src/observability/formats/rlsapi.py +0 -57
  462. lightspeed_stack-0.5.0/src/observability/splunk.py +0 -90
  463. lightspeed_stack-0.5.0/src/quota/cluster_quota_limiter.py +0 -47
  464. lightspeed_stack-0.5.0/src/quota/connect_pg.py +0 -50
  465. lightspeed_stack-0.5.0/src/quota/connect_sqlite.py +0 -37
  466. lightspeed_stack-0.5.0/src/quota/quota_exceed_error.py +0 -53
  467. lightspeed_stack-0.5.0/src/quota/quota_limiter.py +0 -192
  468. lightspeed_stack-0.5.0/src/quota/quota_limiter_factory.py +0 -88
  469. lightspeed_stack-0.5.0/src/quota/revokable_quota_limiter.py +0 -360
  470. lightspeed_stack-0.5.0/src/quota/token_usage_history.py +0 -199
  471. lightspeed_stack-0.5.0/src/quota/user_quota_limiter.py +0 -49
  472. lightspeed_stack-0.5.0/src/runners/quota_scheduler.py +0 -381
  473. lightspeed_stack-0.5.0/src/runners/uvicorn.py +0 -38
  474. lightspeed_stack-0.5.0/src/telemetry/configuration_snapshot.py +0 -525
  475. lightspeed_stack-0.5.0/src/utils/README.md +0 -71
  476. lightspeed_stack-0.5.0/src/utils/checks.py +0 -147
  477. lightspeed_stack-0.5.0/src/utils/common.py +0 -140
  478. lightspeed_stack-0.5.0/src/utils/connection_decorator.py +0 -49
  479. lightspeed_stack-0.5.0/src/utils/conversations.py +0 -530
  480. lightspeed_stack-0.5.0/src/utils/endpoints.py +0 -631
  481. lightspeed_stack-0.5.0/src/utils/llama_stack_version.py +0 -130
  482. lightspeed_stack-0.5.0/src/utils/mcp_auth_headers.py +0 -99
  483. lightspeed_stack-0.5.0/src/utils/mcp_headers.py +0 -254
  484. lightspeed_stack-0.5.0/src/utils/mcp_oauth_probe.py +0 -108
  485. lightspeed_stack-0.5.0/src/utils/prompts.py +0 -96
  486. lightspeed_stack-0.5.0/src/utils/query.py +0 -583
  487. lightspeed_stack-0.5.0/src/utils/quota.py +0 -117
  488. lightspeed_stack-0.5.0/src/utils/responses.py +0 -1650
  489. lightspeed_stack-0.5.0/src/utils/schema_dumper.py +0 -86
  490. lightspeed_stack-0.5.0/src/utils/shields.py +0 -284
  491. lightspeed_stack-0.5.0/src/utils/stream_interrupts.py +0 -142
  492. lightspeed_stack-0.5.0/src/utils/suid.py +0 -113
  493. lightspeed_stack-0.5.0/src/utils/tool_formatter.py +0 -160
  494. lightspeed_stack-0.5.0/src/utils/transcripts.py +0 -160
  495. lightspeed_stack-0.5.0/src/utils/types.py +0 -381
  496. lightspeed_stack-0.5.0/src/utils/vector_search.py +0 -707
  497. lightspeed_stack-0.5.0/tests/benchmarks/conftest.py +0 -119
  498. lightspeed_stack-0.5.0/tests/benchmarks/data_generators.py +0 -158
  499. lightspeed_stack-0.5.0/tests/benchmarks/db_benchmarks.py +0 -333
  500. lightspeed_stack-0.5.0/tests/benchmarks/test_app_database.py +0 -761
  501. lightspeed_stack-0.5.0/tests/benchmarks/test_app_database_comparison.py +0 -132
  502. lightspeed_stack-0.5.0/tests/configuration/lightspeed-stack-proper-name.yaml +0 -44
  503. lightspeed_stack-0.5.0/tests/e2e/configs/run-azure.yaml +0 -167
  504. lightspeed_stack-0.5.0/tests/e2e/configs/run-rhaiis.yaml +0 -167
  505. lightspeed_stack-0.5.0/tests/e2e/configs/run-rhelai.yaml +0 -164
  506. lightspeed_stack-0.5.0/tests/e2e/configs/run-vertexai.yaml +0 -162
  507. lightspeed_stack-0.5.0/tests/e2e/configs/run-watsonx.yaml +0 -168
  508. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-invalid-mcp-file-auth.yaml +0 -24
  509. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-auth.yaml +0 -25
  510. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-client-auth.yaml +0 -24
  511. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-file-auth.yaml +0 -24
  512. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +0 -24
  513. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp-oauth-auth.yaml +0 -24
  514. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-mcp.yaml +0 -36
  515. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack-no-mcp.yaml +0 -19
  516. lightspeed_stack-0.5.0/tests/e2e/configuration/library-mode/lightspeed-stack.yaml +0 -52
  517. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-auth-noop-token.yaml +0 -47
  518. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-auth-rh-identity.yaml +0 -25
  519. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-inline-rag.yaml +0 -41
  520. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-invalid-feedback-storage.yaml +0 -25
  521. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-invalid-mcp-file-auth.yaml +0 -25
  522. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-auth.yaml +0 -26
  523. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-client-auth.yaml +0 -25
  524. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-file-auth.yaml +0 -25
  525. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-kubernetes-auth.yaml +0 -25
  526. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp-oauth-auth.yaml +0 -25
  527. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-mcp.yaml +0 -37
  528. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-no-cache.yaml +0 -27
  529. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-no-mcp.yaml +0 -20
  530. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack-rbac.yaml +0 -96
  531. lightspeed_stack-0.5.0/tests/e2e/configuration/server-mode/lightspeed-stack.yaml +0 -53
  532. lightspeed_stack-0.5.0/tests/e2e/features/authorized_noop.feature +0 -56
  533. lightspeed_stack-0.5.0/tests/e2e/features/authorized_noop_token.feature +0 -82
  534. lightspeed_stack-0.5.0/tests/e2e/features/authorized_rh_identity.feature +0 -163
  535. lightspeed_stack-0.5.0/tests/e2e/features/conversation_cache_v2.feature +0 -409
  536. lightspeed_stack-0.5.0/tests/e2e/features/conversations.feature +0 -208
  537. lightspeed_stack-0.5.0/tests/e2e/features/environment.py +0 -571
  538. lightspeed_stack-0.5.0/tests/e2e/features/faiss.feature +0 -55
  539. lightspeed_stack-0.5.0/tests/e2e/features/feedback.feature +0 -359
  540. lightspeed_stack-0.5.0/tests/e2e/features/health.feature +0 -64
  541. lightspeed_stack-0.5.0/tests/e2e/features/info.feature +0 -121
  542. lightspeed_stack-0.5.0/tests/e2e/features/inline_rag.feature +0 -69
  543. lightspeed_stack-0.5.0/tests/e2e/features/mcp.feature +0 -519
  544. lightspeed_stack-0.5.0/tests/e2e/features/mcp_servers_api.feature +0 -133
  545. lightspeed_stack-0.5.0/tests/e2e/features/mcp_servers_api_auth.feature +0 -30
  546. lightspeed_stack-0.5.0/tests/e2e/features/mcp_servers_api_no_config.feature +0 -18
  547. lightspeed_stack-0.5.0/tests/e2e/features/models.feature +0 -40
  548. lightspeed_stack-0.5.0/tests/e2e/features/proxy.feature +0 -106
  549. lightspeed_stack-0.5.0/tests/e2e/features/query.feature +0 -235
  550. lightspeed_stack-0.5.0/tests/e2e/features/rbac.feature +0 -161
  551. lightspeed_stack-0.5.0/tests/e2e/features/responses.feature +0 -598
  552. lightspeed_stack-0.5.0/tests/e2e/features/responses_streaming.feature +0 -493
  553. lightspeed_stack-0.5.0/tests/e2e/features/rest_api.feature +0 -12
  554. lightspeed_stack-0.5.0/tests/e2e/features/rlsapi_v1.feature +0 -89
  555. lightspeed_stack-0.5.0/tests/e2e/features/rlsapi_v1_errors.feature +0 -49
  556. lightspeed_stack-0.5.0/tests/e2e/features/smoketests.feature +0 -13
  557. lightspeed_stack-0.5.0/tests/e2e/features/steps/README.md +0 -50
  558. lightspeed_stack-0.5.0/tests/e2e/features/steps/auth.py +0 -192
  559. lightspeed_stack-0.5.0/tests/e2e/features/steps/common.py +0 -84
  560. lightspeed_stack-0.5.0/tests/e2e/features/steps/common_http.py +0 -447
  561. lightspeed_stack-0.5.0/tests/e2e/features/steps/conversation.py +0 -420
  562. lightspeed_stack-0.5.0/tests/e2e/features/steps/feedback.py +0 -147
  563. lightspeed_stack-0.5.0/tests/e2e/features/steps/health.py +0 -75
  564. lightspeed_stack-0.5.0/tests/e2e/features/steps/llm_query_response.py +0 -404
  565. lightspeed_stack-0.5.0/tests/e2e/features/steps/models.py +0 -114
  566. lightspeed_stack-0.5.0/tests/e2e/features/steps/place_holder.py +0 -16
  567. lightspeed_stack-0.5.0/tests/e2e/features/steps/proxy.py +0 -382
  568. lightspeed_stack-0.5.0/tests/e2e/features/steps/rlsapi_v1.py +0 -65
  569. lightspeed_stack-0.5.0/tests/e2e/features/steps/tls.py +0 -224
  570. lightspeed_stack-0.5.0/tests/e2e/features/steps/token_counters.py +0 -205
  571. lightspeed_stack-0.5.0/tests/e2e/features/streaming_query.feature +0 -195
  572. lightspeed_stack-0.5.0/tests/e2e/features/tls.feature +0 -182
  573. lightspeed_stack-0.5.0/tests/e2e/mock_mcp_server/Dockerfile +0 -5
  574. lightspeed_stack-0.5.0/tests/e2e/mock_mcp_server/server.py +0 -123
  575. lightspeed_stack-0.5.0/tests/e2e/mock_tls_inference_server/server.py +0 -318
  576. lightspeed_stack-0.5.0/tests/e2e/proxy/interception_proxy.py +0 -215
  577. lightspeed_stack-0.5.0/tests/e2e/proxy/tunnel_proxy.py +0 -153
  578. lightspeed_stack-0.5.0/tests/e2e/test_list.txt +0 -23
  579. lightspeed_stack-0.5.0/tests/e2e/utils/llama_stack_utils.py +0 -155
  580. lightspeed_stack-0.5.0/tests/e2e/utils/prow_utils.py +0 -252
  581. lightspeed_stack-0.5.0/tests/e2e/utils/utils.py +0 -381
  582. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-auth-noop-token.yaml +0 -31
  583. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-inline-rag.yaml +0 -38
  584. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-invalid-mcp-file-auth.yaml +0 -25
  585. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-mcp-client-auth.yaml +0 -25
  586. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-mcp-file-auth.yaml +0 -25
  587. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-mcp-kubernetes-auth.yaml +0 -25
  588. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-mcp-oauth-auth.yaml +0 -25
  589. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-mcp.yaml +0 -30
  590. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-rbac.yaml +0 -94
  591. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack-tls.yaml +0 -22
  592. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs/lightspeed-stack.yaml +0 -43
  593. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/lightspeed/lightspeed-stack.yaml +0 -65
  594. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/lightspeed/llama-stack-openai.yaml +0 -168
  595. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/lightspeed/llama-stack.yaml +0 -62
  596. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/lightspeed/mcp-mock-server.yaml +0 -68
  597. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/operators/ds-cluster.yaml +0 -17
  598. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-cpu.yaml +0 -65
  599. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/manifests/vllm/vllm-runtime-gpu.yaml +0 -82
  600. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/pipeline-konflux.sh +0 -394
  601. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/pipeline-services-konflux.sh +0 -41
  602. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/pipeline-services.sh +0 -27
  603. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/pipeline.sh +0 -365
  604. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/run-tests.sh +0 -68
  605. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/scripts/bootstrap.sh +0 -96
  606. lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/scripts/e2e-ops.sh +0 -538
  607. lightspeed_stack-0.5.0/tests/integration/README.md +0 -422
  608. lightspeed_stack-0.5.0/tests/integration/conftest.py +0 -478
  609. lightspeed_stack-0.5.0/tests/integration/endpoints/README.md +0 -44
  610. lightspeed_stack-0.5.0/tests/integration/endpoints/test_authorized_endpoint.py +0 -34
  611. lightspeed_stack-0.5.0/tests/integration/endpoints/test_config_integration.py +0 -87
  612. lightspeed_stack-0.5.0/tests/integration/endpoints/test_health_integration.py +0 -182
  613. lightspeed_stack-0.5.0/tests/integration/endpoints/test_info_integration.py +0 -152
  614. lightspeed_stack-0.5.0/tests/integration/endpoints/test_model_list.py +0 -256
  615. lightspeed_stack-0.5.0/tests/integration/endpoints/test_query_byok_integration.py +0 -1085
  616. lightspeed_stack-0.5.0/tests/integration/endpoints/test_query_integration.py +0 -1604
  617. lightspeed_stack-0.5.0/tests/integration/endpoints/test_rlsapi_v1_integration.py +0 -516
  618. lightspeed_stack-0.5.0/tests/integration/endpoints/test_root_endpoint.py +0 -72
  619. lightspeed_stack-0.5.0/tests/integration/endpoints/test_stream_interrupt_integration.py +0 -66
  620. lightspeed_stack-0.5.0/tests/integration/endpoints/test_streaming_query_byok_integration.py +0 -1072
  621. lightspeed_stack-0.5.0/tests/integration/endpoints/test_streaming_query_integration.py +0 -350
  622. lightspeed_stack-0.5.0/tests/integration/endpoints/test_tools_integration.py +0 -112
  623. lightspeed_stack-0.5.0/tests/integration/test_configuration.py +0 -93
  624. lightspeed_stack-0.5.0/tests/integration/test_middleware_integration.py +0 -34
  625. lightspeed_stack-0.5.0/tests/integration/test_openapi_json.py +0 -406
  626. lightspeed_stack-0.5.0/tests/integration/test_rh_identity_integration.py +0 -140
  627. lightspeed_stack-0.5.0/tests/test_results/.coverage.integration +0 -0
  628. lightspeed_stack-0.5.0/tests/test_results/.coverage.unit +0 -0
  629. lightspeed_stack-0.5.0/tests/test_results/coverage_integration.json +0 -1
  630. lightspeed_stack-0.5.0/tests/test_results/coverage_unit.json +0 -1
  631. lightspeed_stack-0.5.0/tests/test_results/junit_integration.xml +0 -1
  632. lightspeed_stack-0.5.0/tests/test_results/junit_unit.xml +0 -1
  633. lightspeed_stack-0.5.0/tests/unit/README.md +0 -26
  634. lightspeed_stack-0.5.0/tests/unit/app/endpoints/README.md +0 -74
  635. lightspeed_stack-0.5.0/tests/unit/app/endpoints/conftest.py +0 -41
  636. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_a2a.py +0 -893
  637. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_config.py +0 -72
  638. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_conversations.py +0 -2131
  639. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_conversations_v2.py +0 -966
  640. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_feedback.py +0 -424
  641. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_health.py +0 -207
  642. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_mcp_auth.py +0 -339
  643. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_mcp_servers.py +0 -437
  644. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_metrics.py +0 -48
  645. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_models.py +0 -474
  646. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_query.py +0 -814
  647. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_rags.py +0 -389
  648. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_responses.py +0 -1374
  649. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_rlsapi_v1.py +0 -1018
  650. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_shields.py +0 -383
  651. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_stream_interrupt.py +0 -150
  652. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_streaming_query.py +0 -2807
  653. lightspeed_stack-0.5.0/tests/unit/app/endpoints/test_tools.py +0 -1137
  654. lightspeed_stack-0.5.0/tests/unit/app/test_database.py +0 -403
  655. lightspeed_stack-0.5.0/tests/unit/app/test_main_middleware.py +0 -177
  656. lightspeed_stack-0.5.0/tests/unit/app/test_routers.py +0 -174
  657. lightspeed_stack-0.5.0/tests/unit/authentication/test_api_key_token.py +0 -133
  658. lightspeed_stack-0.5.0/tests/unit/authentication/test_jwk_token.py +0 -861
  659. lightspeed_stack-0.5.0/tests/unit/authentication/test_k8s.py +0 -978
  660. lightspeed_stack-0.5.0/tests/unit/authentication/test_noop.py +0 -56
  661. lightspeed_stack-0.5.0/tests/unit/authentication/test_noop_with_token.py +0 -143
  662. lightspeed_stack-0.5.0/tests/unit/authentication/test_rh_identity.py +0 -732
  663. lightspeed_stack-0.5.0/tests/unit/authorization/test_middleware.py +0 -370
  664. lightspeed_stack-0.5.0/tests/unit/authorization/test_resolvers.py +0 -446
  665. lightspeed_stack-0.5.0/tests/unit/cache/test_cache_factory.py +0 -244
  666. lightspeed_stack-0.5.0/tests/unit/cache/test_noop_cache.py +0 -232
  667. lightspeed_stack-0.5.0/tests/unit/cache/test_postgres_cache.py +0 -836
  668. lightspeed_stack-0.5.0/tests/unit/cache/test_sqlite_cache.py +0 -570
  669. lightspeed_stack-0.5.0/tests/unit/metrics/README.md +0 -8
  670. lightspeed_stack-0.5.0/tests/unit/metrics/test_utis.py +0 -73
  671. lightspeed_stack-0.5.0/tests/unit/models/config/README.md +0 -68
  672. lightspeed_stack-0.5.0/tests/unit/models/config/test_authentication_configuration.py +0 -590
  673. lightspeed_stack-0.5.0/tests/unit/models/config/test_byok_rag.py +0 -159
  674. lightspeed_stack-0.5.0/tests/unit/models/config/test_conversation_history.py +0 -268
  675. lightspeed_stack-0.5.0/tests/unit/models/config/test_customization.py +0 -86
  676. lightspeed_stack-0.5.0/tests/unit/models/config/test_database_configuration.py +0 -86
  677. lightspeed_stack-0.5.0/tests/unit/models/config/test_dump_configuration.py +0 -1196
  678. lightspeed_stack-0.5.0/tests/unit/models/config/test_inference_configuration.py +0 -52
  679. lightspeed_stack-0.5.0/tests/unit/models/config/test_jwt_role_rule.py +0 -150
  680. lightspeed_stack-0.5.0/tests/unit/models/config/test_llama_stack_configuration.py +0 -125
  681. lightspeed_stack-0.5.0/tests/unit/models/config/test_model_context_protocol_server.py +0 -358
  682. lightspeed_stack-0.5.0/tests/unit/models/config/test_postgresql_database_configuration.py +0 -113
  683. lightspeed_stack-0.5.0/tests/unit/models/config/test_splunk_configuration.py +0 -114
  684. lightspeed_stack-0.5.0/tests/unit/models/config/test_tls_configuration.py +0 -112
  685. lightspeed_stack-0.5.0/tests/unit/models/config/test_user_data_collection.py +0 -89
  686. lightspeed_stack-0.5.0/tests/unit/models/requests/README.md +0 -17
  687. lightspeed_stack-0.5.0/tests/unit/models/requests/__init__.py +0 -1
  688. lightspeed_stack-0.5.0/tests/unit/models/requests/test_attachment.py +0 -30
  689. lightspeed_stack-0.5.0/tests/unit/models/requests/test_feedback_request.py +0 -212
  690. lightspeed_stack-0.5.0/tests/unit/models/requests/test_feedback_status_update_request.py +0 -23
  691. lightspeed_stack-0.5.0/tests/unit/models/requests/test_query_request.py +0 -121
  692. lightspeed_stack-0.5.0/tests/unit/models/responses/test_authorized_response.py +0 -46
  693. lightspeed_stack-0.5.0/tests/unit/models/responses/test_error_responses.py +0 -766
  694. lightspeed_stack-0.5.0/tests/unit/models/responses/test_query_response.py +0 -86
  695. lightspeed_stack-0.5.0/tests/unit/models/responses/test_rag_chunk.py +0 -194
  696. lightspeed_stack-0.5.0/tests/unit/models/responses/test_response_types.py +0 -83
  697. lightspeed_stack-0.5.0/tests/unit/models/responses/test_successful_responses.py +0 -1172
  698. lightspeed_stack-0.5.0/tests/unit/models/responses/test_types.py +0 -83
  699. lightspeed_stack-0.5.0/tests/unit/models/rlsapi/test_requests.py +0 -627
  700. lightspeed_stack-0.5.0/tests/unit/models/rlsapi/test_responses.py +0 -160
  701. lightspeed_stack-0.5.0/tests/unit/observability/formats/README.md +0 -8
  702. lightspeed_stack-0.5.0/tests/unit/observability/formats/test_rlsapi.py +0 -75
  703. lightspeed_stack-0.5.0/tests/unit/observability/test_splunk.py +0 -163
  704. lightspeed_stack-0.5.0/tests/unit/quota/test_cluster_quota_limiter.py +0 -173
  705. lightspeed_stack-0.5.0/tests/unit/quota/test_connect_pg.py +0 -55
  706. lightspeed_stack-0.5.0/tests/unit/quota/test_quota_limiter_factory.py +0 -258
  707. lightspeed_stack-0.5.0/tests/unit/quota/test_user_quota_limiter.py +0 -171
  708. lightspeed_stack-0.5.0/tests/unit/telemetry/conftest.py +0 -388
  709. lightspeed_stack-0.5.0/tests/unit/telemetry/test_configuration_snapshot.py +0 -711
  710. lightspeed_stack-0.5.0/tests/unit/test_client.py +0 -160
  711. lightspeed_stack-0.5.0/tests/unit/test_configuration.py +0 -1171
  712. lightspeed_stack-0.5.0/tests/unit/test_lightspeed_stack.py +0 -10
  713. lightspeed_stack-0.5.0/tests/unit/test_llama_stack_configuration.py +0 -553
  714. lightspeed_stack-0.5.0/tests/unit/test_log.py +0 -155
  715. lightspeed_stack-0.5.0/tests/unit/utils/README.md +0 -59
  716. lightspeed_stack-0.5.0/tests/unit/utils/test_conversations.py +0 -857
  717. lightspeed_stack-0.5.0/tests/unit/utils/test_endpoints.py +0 -710
  718. lightspeed_stack-0.5.0/tests/unit/utils/test_mcp_headers.py +0 -455
  719. lightspeed_stack-0.5.0/tests/unit/utils/test_prompts.py +0 -335
  720. lightspeed_stack-0.5.0/tests/unit/utils/test_query.py +0 -854
  721. lightspeed_stack-0.5.0/tests/unit/utils/test_responses.py +0 -3170
  722. lightspeed_stack-0.5.0/tests/unit/utils/test_shields.py +0 -616
  723. lightspeed_stack-0.5.0/tests/unit/utils/test_transcripts.py +0 -142
  724. lightspeed_stack-0.5.0/tests/unit/utils/test_types.py +0 -274
  725. lightspeed_stack-0.5.0/tests/unit/utils/test_vector_search.py +0 -660
  726. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/LICENSE +0 -0
  727. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/a2a_storage/README.md +0 -0
  728. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/a2a_storage/__init__.py +0 -0
  729. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/a2a_storage/context_store.py +0 -0
  730. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/a2a_storage/in_memory_context_store.py +0 -0
  731. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/a2a_storage/storage_factory.py +0 -0
  732. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/app/README.md +0 -0
  733. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/app/__init__.py +0 -0
  734. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/app/endpoints/__init__.py +0 -0
  735. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/.gitignore +0 -0
  736. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/0.9.1/13770435568462002823 +0 -0
  737. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/0.9.1/2640992821107041526 +0 -0
  738. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/0.9.1/README.md +0 -0
  739. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/CACHEDIR.TAG +0 -0
  740. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/.ruff_cache/README.md +0 -0
  741. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/README.md +0 -0
  742. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authentication/interface.py +0 -0
  743. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authorization/README.md +0 -0
  744. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authorization/__init__.py +0 -0
  745. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/authorization/azure_token_manager.py +0 -0
  746. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/cache/README.md +0 -0
  747. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/cache/__init__.py +0 -0
  748. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/cache/cache_error.py +0 -0
  749. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/cache/cache_factory.py +0 -0
  750. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/.ruff_cache/.gitignore +0 -0
  751. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/.ruff_cache/0.9.1/2435063725374233068 +0 -0
  752. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/.ruff_cache/0.9.1/README.md +0 -0
  753. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/.ruff_cache/CACHEDIR.TAG +0 -0
  754. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/.ruff_cache/README.md +0 -0
  755. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/__init__.py +0 -0
  756. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/database/README.md +0 -0
  757. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/database/__init__.py +0 -0
  758. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/database/base.py +0 -0
  759. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/database/conversations.py +0 -0
  760. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/rlsapi/README.md +0 -0
  761. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/models/rlsapi/__init__.py +0 -0
  762. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/.gitignore +0 -0
  763. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/0.14.1/13216894937928385266 +0 -0
  764. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/0.14.1/README.md +0 -0
  765. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/0.9.1/11326792315657745171 +0 -0
  766. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/0.9.1/README.md +0 -0
  767. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/CACHEDIR.TAG +0 -0
  768. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/.ruff_cache/README.md +0 -0
  769. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/README.md +0 -0
  770. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/__init__.py +0 -0
  771. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/quota/sql.py +0 -0
  772. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/runners/README.md +0 -0
  773. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/runners/__init__.py +0 -0
  774. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/telemetry/README.md +0 -0
  775. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/telemetry/__init__.py +0 -0
  776. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/utils/__init__.py +0 -0
  777. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/src/utils/token_counter.py +0 -0
  778. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/__init__.py +0 -0
  779. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/benchmarks/README.md +0 -0
  780. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/benchmarks-postgres.yaml +0 -0
  781. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/benchmarks-sqlite.yaml +0 -0
  782. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/lightspeed-stack.yaml +0 -0
  783. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/minimal-stack.yaml +0 -0
  784. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/multiline_system_prompt.txt +0 -0
  785. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/password +0 -0
  786. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/rag.txt +0 -0
  787. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/rh-identity-config.yaml +0 -0
  788. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/run.yaml +0 -0
  789. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/server.crt +0 -0
  790. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/server.key +0 -0
  791. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/configuration/system_prompt.txt +0 -0
  792. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/.pdm-python +0 -0
  793. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/README.md +0 -0
  794. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/__init__.py +0 -0
  795. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configs/README.md +0 -0
  796. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configs/run-ci.yaml +0 -0
  797. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/README.md +0 -0
  798. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/README.md +0 -0
  799. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-auth-noop-token.yaml +0 -0
  800. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-auth-rh-identity.yaml +0 -0
  801. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-inline-rag.yaml +0 -0
  802. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-invalid-feedback-storage.yaml +0 -0
  803. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-no-cache.yaml +0 -0
  804. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/library-mode/lightspeed-stack-rbac.yaml +0 -0
  805. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/server-mode/README.md +0 -0
  806. {lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs → lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode}/lightspeed-stack-auth-rh-identity.yaml +0 -0
  807. {lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs → lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode}/lightspeed-stack-invalid-feedback-storage.yaml +0 -0
  808. {lightspeed_stack-0.5.0/tests/e2e-prow/rhoai/configs → lightspeed_stack-0.6.0rc1/tests/e2e/configuration/server-mode}/lightspeed-stack-no-cache.yaml +0 -0
  809. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/configuration/server-mode/lightspeed-stack-tls.yaml +0 -0
  810. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/features/README.md +0 -0
  811. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/features/steps/__init__.py +0 -0
  812. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/features/steps/info.py +0 -0
  813. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/features/steps/rbac.py +0 -0
  814. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/features/steps/responses_steps.py +0 -0
  815. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/gen_scenario_list.py +0 -0
  816. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_jwks_server/Dockerfile +0 -0
  817. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_jwks_server/README.md +0 -0
  818. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_jwks_server/generate_tokens.py +0 -0
  819. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_jwks_server/server.py +0 -0
  820. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_mcp_server/README.md +0 -0
  821. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/mock_tls_inference_server/Dockerfile +0 -0
  822. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/proxy/README.md +0 -0
  823. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/proxy/__init__.py +0 -0
  824. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/rag/README.md +0 -0
  825. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/rag/kv_store.db +0 -0
  826. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/secrets/README.md +0 -0
  827. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/secrets/invalid-mcp-token +0 -0
  828. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/secrets/mcp-token +0 -0
  829. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/test_api.py +0 -0
  830. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e/utils/README.md +0 -0
  831. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/configs/run.yaml +0 -0
  832. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/gpu/cluster-policy.yaml +0 -0
  833. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/gpu/create-nfd.yaml +0 -0
  834. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/lightspeed/mock-jwks.yaml +0 -0
  835. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/namespaces/nfd.yaml +0 -0
  836. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/namespaces/nvidia-operator.yaml +0 -0
  837. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/operators/operatorgroup.yaml +0 -0
  838. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/operators/operators.yaml +0 -0
  839. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-cpu.yaml +0 -0
  840. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/manifests/vllm/vllm-inference-service-gpu.yaml +0 -0
  841. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/pipeline-test-pod.sh +0 -0
  842. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/pipeline-vllm.sh +0 -0
  843. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/scripts/deploy-vllm.sh +0 -0
  844. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/scripts/fetch-vllm-image.sh +0 -0
  845. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/scripts/get-vllm-pod-info.sh +0 -0
  846. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/e2e-prow/rhoai/scripts/gpu-setup.sh +0 -0
  847. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/integration/__init__.py +0 -0
  848. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/integration/endpoints/__init__.py +0 -0
  849. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/integration/test_version.py +0 -0
  850. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/empty.py +0 -0
  851. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/syntax_error.py +0 -0
  852. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/test/profile.py +0 -0
  853. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/test_four/profile.py +0 -0
  854. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/test_three/profile.py +0 -0
  855. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/profiles/test_two/test.txt +0 -0
  856. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/__init__.py +0 -0
  857. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/a2a_storage/README.md +0 -0
  858. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/a2a_storage/__init__.py +0 -0
  859. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/a2a_storage/test_in_memory_context_store.py +0 -0
  860. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/a2a_storage/test_sqlite_context_store.py +0 -0
  861. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/a2a_storage/test_storage_factory.py +0 -0
  862. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/.ruff_cache/.gitignore +0 -0
  863. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/.ruff_cache/0.9.1/10631576872848856737 +0 -0
  864. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/.ruff_cache/0.9.1/README.md +0 -0
  865. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/.ruff_cache/CACHEDIR.TAG +0 -0
  866. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/README.md +0 -0
  867. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/__init__.py +0 -0
  868. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/.ruff_cache/.gitignore +0 -0
  869. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/.ruff_cache/0.9.1/15310180828563549007 +0 -0
  870. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/.ruff_cache/0.9.1/README.md +0 -0
  871. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/.ruff_cache/CACHEDIR.TAG +0 -0
  872. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/__init__.py +0 -0
  873. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/test_authorized.py +0 -0
  874. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/test_info.py +0 -0
  875. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/test_providers.py +0 -0
  876. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/app/endpoints/test_root.py +0 -0
  877. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authentication/README.md +0 -0
  878. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authentication/__init__.py +0 -0
  879. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authentication/test_auth.py +0 -0
  880. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authentication/test_utils.py +0 -0
  881. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authorization/README.md +0 -0
  882. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authorization/__init__.py +0 -0
  883. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/authorization/test_azure_token_manager.py +0 -0
  884. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/cache/README.md +0 -0
  885. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/cache/__init__.py +0 -0
  886. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/conftest.py +0 -0
  887. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/metrics/__init__.py +0 -0
  888. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/README.md +0 -0
  889. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/__init__.py +0 -0
  890. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/__init__.py +0 -0
  891. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_a2a_state_configuration.py +0 -0
  892. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_cors.py +0 -0
  893. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_quota_handlers_config.py +0 -0
  894. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_quota_limiter_config.py +0 -0
  895. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_quota_scheduler_config.py +0 -0
  896. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_rag_configuration.py +0 -0
  897. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/config/test_service_configuration.py +0 -0
  898. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/responses/README.md +0 -0
  899. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/responses/__init__.py +0 -0
  900. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/rlsapi/README.md +0 -0
  901. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/models/rlsapi/__init__.py +0 -0
  902. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/observability/README.md +0 -0
  903. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/observability/__init__.py +0 -0
  904. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/observability/formats/__init__.py +0 -0
  905. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/quota/README.md +0 -0
  906. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/quota/__init__.py +0 -0
  907. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/quota/test_connect_sqlite.py +0 -0
  908. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/quota/test_quota_exceed_error.py +0 -0
  909. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/runners/README.md +0 -0
  910. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/runners/__init__.py +0 -0
  911. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/runners/test_uvicorn_runner.py +0 -0
  912. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/telemetry/README.md +0 -0
  913. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/telemetry/__init__.py +0 -0
  914. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/test_configuration_unknown_fields.py +0 -0
  915. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/__init__.py +0 -0
  916. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/auth_helpers.py +0 -0
  917. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_checks.py +0 -0
  918. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_common.py +0 -0
  919. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_connection_decorator.py +0 -0
  920. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_llama_stack_version.py +0 -0
  921. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_mcp_auth_headers.py +0 -0
  922. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_suid.py +0 -0
  923. {lightspeed_stack-0.5.0 → lightspeed_stack-0.6.0rc1}/tests/unit/utils/test_tool_formatter.py +0 -0
@@ -0,0 +1,1636 @@
1
+ Metadata-Version: 2.1
2
+ Name: lightspeed-stack
3
+ Version: 0.6.0rc1
4
+ Summary: LLM tooling stack
5
+ Keywords: LLM,RAG
6
+ Maintainer-Email: =?utf-8?b?UGF2ZWwgVGnFoW5vdnNrw70=?= <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.14,>=3.12
218
+ Requires-Dist: fastapi>=0.115.12
219
+ Requires-Dist: uvicorn>=0.34.3
220
+ Requires-Dist: kubernetes>=30.1.0
221
+ Requires-Dist: llama-stack==0.6.0
222
+ Requires-Dist: llama-stack-client==0.6.0
223
+ Requires-Dist: llama-stack-api==0.6.0
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.6.1
238
+ Requires-Dist: psycopg2-binary>=2.9.10
239
+ Requires-Dist: litellm>=1.83.7
240
+ Requires-Dist: urllib3>=2.6.3
241
+ Requires-Dist: PyYAML>=6.0.0
242
+ Requires-Dist: einops>=0.8.1
243
+ Requires-Dist: azure-core>=1.38.0
244
+ Requires-Dist: azure-identity>=1.21.0
245
+ Requires-Dist: pyasn1>=0.6.3
246
+ Requires-Dist: jinja2>=3.1.0
247
+ Requires-Dist: requests>=2.33.0
248
+ Requires-Dist: datasets>=4.7.0
249
+ Requires-Dist: sentry-sdk[fastapi]>=2.58.0
250
+ Requires-Dist: python-dotenv>=1.2.2
251
+ Requires-Dist: tiktoken>=0.8.0
252
+ Description-Content-Type: text/markdown
253
+
254
+ # Lightspeed Core Stack (LCS)
255
+
256
+ ## About The Project
257
+
258
+ [![GitHub Pages](https://img.shields.io/badge/%20-GitHub%20Pages-informational)](https://lightspeed-core.github.io/lightspeed-stack/)
259
+ [![License](https://img.shields.io/badge/license-Apache-blue)](https://github.com/lightspeed-core/lightspeed-stack/blob/main/LICENSE)
260
+ [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/)
261
+ [![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/)
262
+ [![Tag](https://img.shields.io/github/v/tag/lightspeed-core/lightspeed-stack)](https://github.com/lightspeed-core/lightspeed-stack/releases/tag/0.5.0)
263
+
264
+ Lightspeed Core Stack (LCS) is an AI-powered assistant that provides answers to product questions using backend LLM services, agents, and RAG databases.
265
+
266
+ 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.
267
+
268
+
269
+ <!-- vim-markdown-toc GFM -->
270
+
271
+ * [Architecture](#architecture)
272
+ * [Prerequisites](#prerequisites)
273
+ * [Installation](#installation)
274
+ * [Run LCS locally](#run-lcs-locally)
275
+ * [Configuration](#configuration)
276
+ * [LLM Compatibility](#llm-compatibility)
277
+ * [Set LLM provider and model](#set-llm-provider-and-model)
278
+ * [Selecting provider and model](#selecting-provider-and-model)
279
+ * [Provider and model selection in REST API request](#provider-and-model-selection-in-rest-api-request)
280
+ * [Default provider and model](#default-provider-and-model)
281
+ * [Supported providers](#supported-providers)
282
+ * [Integration with Llama Stack](#integration-with-llama-stack)
283
+ * [Llama Stack as separate server](#llama-stack-as-separate-server)
284
+ * [MCP Server and Tool Configuration](#mcp-server-and-tool-configuration)
285
+ * [Configuring MCP Servers](#configuring-mcp-servers)
286
+ * [Configuring MCP Server Authentication](#configuring-mcp-server-authentication)
287
+ * [1. Static Tokens from Files (Recommended for Service Credentials)](#1-static-tokens-from-files-recommended-for-service-credentials)
288
+ * [2. Kubernetes Service Account Tokens (For K8s Deployments)](#2-kubernetes-service-account-tokens-for-k8s-deployments)
289
+ * [3. Client-Provided Tokens (For Per-User Authentication)](#3-client-provided-tokens-for-per-user-authentication)
290
+ * [4. OAuth (For MCP Servers Requiring OAuth)](#4-oauth-for-mcp-servers-requiring-oauth)
291
+ * [5. Automatic Header Propagation (For Gateway-Injected Headers)](#5-automatic-header-propagation-for-gateway-injected-headers)
292
+ * [Client-Authenticated MCP Servers Discovery](#client-authenticated-mcp-servers-discovery)
293
+ * [Combining Authentication Methods](#combining-authentication-methods)
294
+ * [Authentication Method Comparison](#authentication-method-comparison)
295
+ * [Important: Automatic Server Skipping](#important-automatic-server-skipping)
296
+ * [Llama Stack project and configuration](#llama-stack-project-and-configuration)
297
+ * [Check connection to Llama Stack](#check-connection-to-llama-stack)
298
+ * [Llama Stack as client library](#llama-stack-as-client-library)
299
+ * [Llama Stack version check](#llama-stack-version-check)
300
+ * [User data collection](#user-data-collection)
301
+ * [System prompt](#system-prompt)
302
+ * [System Prompt Path](#system-prompt-path)
303
+ * [System Prompt Literal](#system-prompt-literal)
304
+ * [Custom Profile](#custom-profile)
305
+ * [Control model/provider overrides via authorization](#control-modelprovider-overrides-via-authorization)
306
+ * [Safety Shields](#safety-shields)
307
+ * [Authentication](#authentication)
308
+ * [CORS](#cors)
309
+ * [Default values](#default-values)
310
+ * [Allow credentials](#allow-credentials)
311
+ * [RAG Configuration](#rag-configuration)
312
+ * [Example configurations for inference](#example-configurations-for-inference)
313
+ * [Usage](#usage)
314
+ * [CLI options](#cli-options)
315
+ * [Dumping configuration](#dumping-configuration)
316
+ * [Dumping configuration schema](#dumping-configuration-schema)
317
+ * [Make targets](#make-targets)
318
+ * [Running Linux container image](#running-linux-container-image)
319
+ * [Building Container Images](#building-container-images)
320
+ * [Llama-Stack as Separate Service (Server Mode)](#llama-stack-as-separate-service-server-mode)
321
+ * [macOS (arm64)](#macos-arm64)
322
+ * [Llama-Stack as Library (Library Mode)](#llama-stack-as-library-library-mode)
323
+ * [macOS](#macos)
324
+ * [Verify it's running properly](#verify-its-running-properly)
325
+ * [Custom Container Image](#custom-container-image)
326
+ * [Endpoints](#endpoints)
327
+ * [OpenAPI specification](#openapi-specification)
328
+ * [Readiness Endpoint](#readiness-endpoint)
329
+ * [Liveness Endpoint](#liveness-endpoint)
330
+ * [Models endpoint](#models-endpoint)
331
+ * [Database structure](#database-structure)
332
+ * [Publish the service as Python package on PyPI](#publish-the-service-as-python-package-on-pypi)
333
+ * [Generate distribution archives to be uploaded into Python registry](#generate-distribution-archives-to-be-uploaded-into-python-registry)
334
+ * [Upload distribution archives into selected Python registry](#upload-distribution-archives-into-selected-python-registry)
335
+ * [Packages on PyPI and Test PyPI](#packages-on-pypi-and-test-pypi)
336
+ * [Contributing](#contributing)
337
+ * [Testing](#testing)
338
+ * [License](#license)
339
+ * [Additional tools](#additional-tools)
340
+ * [Utility to generate OpenAPI schema](#utility-to-generate-openapi-schema)
341
+ * [Path](#path)
342
+ * [Usage](#usage-1)
343
+ * [Makefile target to generate OpenAPI specification](#makefile-target-to-generate-openapi-specification)
344
+ * [Utility to generate documentation from source code](#utility-to-generate-documentation-from-source-code)
345
+ * [Path](#path-1)
346
+ * [Usage](#usage-2)
347
+ * [Data Export Integration](#data-export-integration)
348
+ * [Quick Integration](#quick-integration)
349
+ * [Documentation](#documentation)
350
+ * [Project structure](#project-structure)
351
+ * [Configuration classes](#configuration-classes)
352
+ * [REST API](#rest-api)
353
+ * [Sequence diagrams](#sequence-diagrams)
354
+ * [Query endpoint REST API handler](#query-endpoint-rest-api-handler)
355
+ * [Streaming query endpoint REST API handler](#streaming-query-endpoint-rest-api-handler)
356
+ * [Versioning](#versioning)
357
+ * [Konflux](#konflux)
358
+ * [Updating Dependencies for Hermetic Builds](#updating-dependencies-for-hermetic-builds)
359
+ * [When to Update Dependency Files](#when-to-update-dependency-files)
360
+ * [Updating Python Dependencies](#updating-python-dependencies)
361
+ * [Updating RPM Dependencies](#updating-rpm-dependencies)
362
+
363
+ <!-- vim-markdown-toc -->
364
+
365
+
366
+
367
+ # Architecture
368
+
369
+ Overall architecture with all main parts is displayed below:
370
+
371
+ ![Architecture diagram](docs/architecture.png)
372
+
373
+ Lightspeed Core Stack is based on the FastAPI framework (Uvicorn). The service is split into several parts described below.
374
+
375
+ # Prerequisites
376
+
377
+ * Python 3.12, or 3.13
378
+ - please note that currently Python 3.14 is not officially supported
379
+ - all sources are made (backward) compatible with Python 3.12; it is checked on CI
380
+
381
+ * OpenAI API Key (Recommended for Getting Started)
382
+
383
+ Lightspeed Stack supports multiple LLM providers.
384
+
385
+ | Provider | Setup Documentation |
386
+ |-----------------|-----------------------------------------------------------------------|
387
+ | OpenAI | https://platform.openai.com |
388
+ | Azure OpenAI | https://azure.microsoft.com/en-us/products/ai-services/openai-service |
389
+ | Google VertexAI | https://cloud.google.com/vertex-ai |
390
+ | IBM WatsonX | https://www.ibm.com/products/watsonx |
391
+ | AWS Bedrock | https://aws.amazon.com/bedrock |
392
+ | RHOAI (vLLM) | See tests/e2e-prow/rhoai/configs/run.yaml |
393
+ | RHEL AI (vLLM) | See tests/e2e/configs/run-rhelai.yaml |
394
+
395
+ See `docs/providers.md` for configuration details.
396
+
397
+ You will need an API key from one of these providers to run LightSpeed Stack.
398
+
399
+ For example, if you choose to use OpenAI:
400
+
401
+ 1. **Create an account** at [platform.openai.com](https://platform.openai.com)
402
+ 2. **Add payment information** (new accounts receive free trial credits)
403
+ 3. **Generate an API key** from your dashboard at [API Keys](https://platform.openai.com/api-keys)
404
+ 4. **Export the key** in your environment:
405
+ ```bash
406
+ export OPENAI_API_KEY="sk-your-api-key-here"
407
+ ```
408
+
409
+ # Installation
410
+
411
+ Installation steps depends on operation system. Please look at instructions for your system:
412
+
413
+
414
+ - [Linux installation](https://lightspeed-core.github.io/lightspeed-stack/installation_linux)
415
+ - [macOS installation](https://lightspeed-core.github.io/lightspeed-stack/installation_macos)
416
+
417
+ # Run LCS locally
418
+
419
+ To quickly get hands on LCS, we can run it using the default configurations provided in this repository:
420
+
421
+ 0. install dependencies using [uv](https://docs.astral.sh/uv/getting-started/installation/)
422
+ ```bash
423
+ uv sync --group dev --group llslibdev
424
+ ```
425
+ 1. create llama stack `run.yaml`. you can do this by running the local run generation script
426
+ ```bash
427
+ ./scripts/generate_local_run.sh
428
+ ```
429
+ 2. export the LLM token environment variable that Llama stack requires. for OpenAI, we set the env var by
430
+ ```bash
431
+ export OPENAI_API_KEY=sk-xxxxx
432
+ ```
433
+ 3. start Llama stack server
434
+ ```bash
435
+ uv run llama stack run local-run.yaml
436
+ ```
437
+ 4. [Optional] If you're new to Llama stack, run through a quick tutorial to learn the basics of what the server is used for, by running the interactive tutorial script
438
+ ```bash
439
+ ./scripts/llama_stack_tutorial.sh
440
+ ```
441
+ 5. check the LCS settings in [lightspeed-stack.yaml](lightspeed-stack.yaml). `llama_stack.url` should be `url: http://localhost:8321`
442
+ 6. start LCS server
443
+ ```
444
+ make run
445
+ ```
446
+ 7. access LCS web UI at [http://localhost:8080/](http://localhost:8080/)
447
+
448
+
449
+ # Configuration
450
+
451
+ ## LLM Compatibility
452
+
453
+ 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.
454
+ __Note__: Support for individual models is dependent on the specific inference provider's implementation within the currently supported version of Llama Stack.
455
+
456
+ | Provider | Model | Tool Calling | provider_type | Example |
457
+ |----------------|------------------------------------------------------------------------------|---------------|------------------|----------------------------------------------------------------------------|
458
+ | OpenAI | gpt-5, gpt-4o, gpt-4-turbo, gpt-4.1, o1, o3, o4 | Yes | remote::openai | [1](examples/openai-faiss-run.yaml) [2](examples/openai-pgvector-run.yaml) |
459
+ | OpenAI | gpt-3.5-turbo, gpt-4 | No | remote::openai | |
460
+ | RHOAI (vLLM) | meta-llama/Llama-3.2-1B-Instruct | Yes | remote::vllm | [1](tests/e2e-prow/rhoai/configs/run.yaml) |
461
+ | RHAIIS (vLLM) | meta-llama/Llama-3.1-8B-Instruct | Yes | remote::vllm | [1](tests/e2e/configs/run-rhaiis.yaml) |
462
+ | RHEL AI (vLLM) | meta-llama/Llama-3.1-8B-Instruct | Yes | remote::vllm | [1](tests/e2e/configs/run-rhelai.yaml) |
463
+ | Azure | gpt-5, gpt-5-mini, gpt-5-nano, gpt-4o-mini, o3-mini, o4-mini, o1 | Yes | remote::azure | [1](examples/azure-run.yaml) |
464
+ | Azure | gpt-5-chat, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1-mini | No or limited | remote::azure | |
465
+ | VertexAI | google/gemini-2.0-flash, google/gemini-2.5-flash, google/gemini-2.5-pro [^1] | Yes | remote::vertexai | [1](examples/vertexai-run.yaml) |
466
+ | WatsonX | meta-llama/llama-3-3-70b-instruct | Yes | remote::watsonx | [1](examples/watsonx-run.yaml) |
467
+ | AWS Bedrock | deepseek.v3-v1 | Yes | remote::bedrock | [1](examples/bedrock-run.yaml) |
468
+
469
+ [^1]: List of models is limited by design in llama-stack, future versions will probably allow to use more models (see [here](https://github.com/llamastack/llama-stack/blob/release-0.3.x/llama_stack/providers/remote/inference/vertexai/vertexai.py#L54))
470
+
471
+ The "provider_type" is used in the llama stack configuration file when refering to the provider.
472
+
473
+ For details of OpenAI model capabilities, please refer to https://platform.openai.com/docs/models/compare
474
+
475
+
476
+ ## Set LLM provider and model
477
+
478
+ The LLM provider and model are set in the configuration file for Llama Stack. This repository has a Llama stack configuration file [run.yaml](examples/run.yaml) that can serve as a good example.
479
+
480
+ The LLM providers are set in the section `providers.inference`. This example adds a inference provider "openai" to the llama stack. To use environment variables as configuration values, we can use the syntax `${env.ENV_VAR_NAME}`.
481
+
482
+ For more details, please refer to [llama stack documentation](https://llama-stack.readthedocs.io/en/latest/distributions/configuration.html#providers). Here is a list of llamastack supported providers and their configuration details: [llama stack providers](https://llama-stack.readthedocs.io/en/latest/providers/inference/index.html#providers)
483
+
484
+ ```yaml
485
+ inference:
486
+ - provider_id: openai
487
+ provider_type: remote::openai
488
+ config:
489
+ api_key: ${env.OPENAI_API_KEY}
490
+ url: ${env.SERVICE_URL}
491
+ ```
492
+
493
+ 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.
494
+
495
+ ```yaml
496
+ models:
497
+ - model_id: gpt-4-turbo
498
+ provider_id: openai
499
+ model_type: llm
500
+ provider_model_id: gpt-4-turbo
501
+ ```
502
+
503
+ ## Selecting provider and model
504
+
505
+ It is possible to configure multiple LLM providers and models are configured. In this case it is needed to:
506
+
507
+ - select the provider + model in query request
508
+ - specify default model and provider in Lightspeed Core Stack configuration file
509
+
510
+ ### Provider and model selection in REST API request
511
+
512
+ Provider and model can be specified in `/v1/query` and `/v1/streaming-query` REST API requests:
513
+
514
+ ```json
515
+ {
516
+ "conversation_id": "123e4567-e89b-12d3-a456-426614174000",
517
+ "generate_topic_summary": true,
518
+ "provider": "openai",
519
+ "model": "gpt-5",
520
+ "no_tools": false,
521
+ "query": "write a deployment yaml for the mongodb image",
522
+ "system_prompt": "You are a helpful assistant"
523
+ }
524
+ ```
525
+
526
+ ### Default provider and model
527
+
528
+ It is possible to configure default provider and model in Lightspeed Core Stack configuration file, under the `inference` node:
529
+
530
+ ```yaml
531
+ inference:
532
+ - default_provider: SELECTED PROVIDER
533
+ default_model: SELECTED MODEL
534
+ ```
535
+
536
+ These settings will be used when no provider or model are specified in REST API request.
537
+
538
+
539
+
540
+ ## Supported providers
541
+
542
+ For a comprehensive list of supported providers, take a look [here](docs/providers.md).
543
+
544
+ ## Integration with Llama Stack
545
+
546
+ The Llama Stack can be run as a standalone server and accessed via its the REST
547
+ API. However, instead of direct communication via the REST API (and JSON
548
+ format), there is an even better alternative. It is based on the so-called
549
+ Llama Stack Client. It is a library available for Python, Swift, Node.js or
550
+ Kotlin, which "wraps" the REST API stack in a suitable way, which is easier for
551
+ many applications.
552
+
553
+
554
+ ![Integration with Llama Stack](docs/core2llama-stack_interface.png)
555
+
556
+
557
+
558
+ ## Llama Stack as separate server
559
+
560
+ If Llama Stack 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:
561
+
562
+ ```yaml
563
+ name: foo bar baz
564
+ service:
565
+ host: localhost
566
+ port: 8080
567
+ auth_enabled: false
568
+ workers: 1
569
+ color_log: true
570
+ access_log: true
571
+ llama_stack:
572
+ use_as_library_client: false
573
+ url: http://localhost:8321
574
+ user_data_collection:
575
+ feedback_enabled: true
576
+ feedback_storage: "/tmp/data/feedback"
577
+ transcripts_enabled: true
578
+ transcripts_storage: "/tmp/data/transcripts"
579
+ ```
580
+
581
+ ### MCP Server and Tool Configuration
582
+
583
+ **Note**: The `run.yaml` configuration is currently an implementation detail. In the future, all configuration will be available directly from the lightspeed-core config.
584
+
585
+ **Important**: Only MCP servers defined in the `lightspeed-stack.yaml` configuration are available to the agents. Tools configured in the llama-stack `run.yaml` are not accessible to lightspeed-core agents.
586
+
587
+ Besides configuring the MCP Servers in `lightspeed-stack.yaml` we also need to enable the appropriate tool in llama-stack's `run.yaml` file under the `tool_runtime` section. Here's an example using the default `provider_id` name used by lightspeed-stack for MCPs:
588
+
589
+ ```yaml
590
+ tool_runtime:
591
+ - provider_id: model-context-protocol
592
+ provider_type: remote::model-context-protocol
593
+ config: {}
594
+ ```
595
+
596
+ #### Configuring MCP Servers
597
+
598
+ 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`.
599
+
600
+ **Basic Configuration Structure:**
601
+
602
+ Each MCP server requires two fields:
603
+ - `name`: Unique identifier for the MCP server
604
+ - `url`: The endpoint where the MCP server is running
605
+
606
+ And optional fields:
607
+ - `provider_id`: MCP provider identification (defaults to `"model-context-protocol"`)
608
+ - `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))
609
+
610
+ **Minimal Example:**
611
+
612
+ ```yaml
613
+ mcp_servers:
614
+ - name: "filesystem-tools"
615
+ url: "http://localhost:9000"
616
+ - name: "git-tools"
617
+ url: "http://localhost:9001"
618
+ ```
619
+
620
+ In addition to the basic configuration above, you can configure authentication headers for your MCP servers to securely communicate with services that require credentials.
621
+
622
+ #### Configuring MCP Server Authentication
623
+
624
+ Lightspeed Core Stack supports four methods for authenticating with MCP servers, each suited for different use cases:
625
+
626
+ ##### 1. Static Tokens from Files (Recommended for Service Credentials)
627
+
628
+ 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:
629
+
630
+ ```yaml
631
+ mcp_servers:
632
+ - name: "api-service"
633
+ url: "http://api-service:8080"
634
+ authorization_headers:
635
+ Authorization: "/var/secrets/api-token" # Path to file containing token
636
+ X-API-Key: "/var/secrets/api-key" # Multiple headers supported
637
+ ```
638
+
639
+ The secret files should contain only the header value (tokens are automatically stripped of whitespace):
640
+
641
+ ```bash
642
+ # /var/secrets/api-token
643
+ sk-abc123def456...
644
+
645
+ # /var/secrets/api-key
646
+ my-api-key-value
647
+ ```
648
+
649
+ ##### 2. Kubernetes Service Account Tokens (For K8s Deployments)
650
+
651
+ 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:
652
+
653
+ ```yaml
654
+ mcp_servers:
655
+ - name: "k8s-internal-service"
656
+ url: "http://internal-mcp.default.svc.cluster.local:8080"
657
+ authorization_headers:
658
+ Authorization: "kubernetes" # Uses user's k8s token from request auth
659
+ ```
660
+
661
+ **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.
662
+
663
+ ##### 3. Client-Provided Tokens (For Per-User Authentication)
664
+
665
+ Use the special `"client"` keyword to allow clients to provide custom tokens per-request. This enables user-specific authentication:
666
+
667
+ ```yaml
668
+ mcp_servers:
669
+ - name: "user-specific-service"
670
+ url: "http://user-service:8080"
671
+ authorization_headers:
672
+ Authorization: "client" # Token provided via MCP-HEADERS
673
+ X-User-Token: "client" # Multiple client headers supported
674
+ ```
675
+
676
+ Clients then provide tokens via the `MCP-HEADERS` HTTP header:
677
+
678
+ ```bash
679
+ curl -X POST "http://localhost:8080/v1/query" \
680
+ -H "Content-Type: application/json" \
681
+ -H "MCP-HEADERS: {\"user-specific-service\": {\"Authorization\": \"Bearer user-token-123\", \"X-User-Token\": \"custom-value\"}}" \
682
+ -d '{"query": "Get my data"}'
683
+ ```
684
+
685
+ **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.
686
+
687
+ **Structure**: `MCP-HEADERS: {"<server-name>": {"<header-name>": "<header-value>", ...}, ...}`
688
+
689
+ ##### 4. OAuth (For MCP Servers Requiring OAuth)
690
+
691
+ 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):
692
+
693
+ ```yaml
694
+ mcp_servers:
695
+ - name: "oauth-protected-service"
696
+ url: "https://mcp.example.com"
697
+ authorization_headers:
698
+ Authorization: "oauth" # Token provided via MCP-HEADERS (from OAuth flow)
699
+ ```
700
+
701
+ 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`.
702
+
703
+ ##### 5. Automatic Header Propagation (For Gateway-Injected Headers)
704
+
705
+ 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.
706
+
707
+ **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:
708
+
709
+ ```yaml
710
+ mcp_servers:
711
+ - name: "rbac"
712
+ url: "http://rbac-service:8080"
713
+ headers:
714
+ - x-rh-identity
715
+ - x-rh-insights-request-id
716
+ ```
717
+
718
+ 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.
719
+
720
+ **Key behaviors:**
721
+
722
+ - **Case-insensitive matching**: Header names in the allowlist are matched case-insensitively against the incoming request.
723
+ - **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).
724
+ - **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.
725
+
726
+ **Combined example:**
727
+
728
+ ```yaml
729
+ mcp_servers:
730
+ - name: "notifications"
731
+ url: "http://notifications-service:8080"
732
+ headers:
733
+ - x-rh-identity # From incoming request
734
+ authorization_headers:
735
+ X-API-Key: "/var/secrets/notifications-key" # Static service credential
736
+ ```
737
+
738
+ ##### Client-Authenticated MCP Servers Discovery
739
+
740
+ To help clients determine which MCP servers require client-provided tokens, use the **MCP Client Auth Options** endpoint:
741
+
742
+ ```bash
743
+ GET /v1/mcp-auth/client-options
744
+ ```
745
+
746
+ **Response:**
747
+ ```json
748
+ {
749
+ "servers": [
750
+ {
751
+ "name": "user-specific-service",
752
+ "client_auth_headers": ["Authorization", "X-User-Token"]
753
+ },
754
+ {
755
+ "name": "github-integration",
756
+ "client_auth_headers": ["Authorization"]
757
+ }
758
+ ]
759
+ }
760
+ ```
761
+
762
+ 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.
763
+
764
+ **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.
765
+
766
+ ##### Combining Authentication Methods
767
+
768
+ You can mix and match authentication methods across different MCP servers, and even combine multiple methods for a single server:
769
+
770
+ ```yaml
771
+ mcp_servers:
772
+ # Static credentials for public API
773
+ - name: "weather-api"
774
+ url: "http://weather-api:8080"
775
+ authorization_headers:
776
+ X-API-Key: "/var/secrets/weather-api-key"
777
+
778
+ # Kubernetes auth for internal services
779
+ - name: "internal-db"
780
+ url: "http://db-mcp.cluster.local:8080"
781
+ authorization_headers:
782
+ Authorization: "kubernetes"
783
+
784
+ # Mixed: static API key + per-user token
785
+ - name: "multi-tenant-service"
786
+ url: "http://multi-tenant:8080"
787
+ authorization_headers:
788
+ X-Service-Key: "/var/secrets/service-key" # Static service credential
789
+ Authorization: "client" # User-specific token
790
+ ```
791
+
792
+ ##### Authentication Method Comparison
793
+
794
+ | Method | Use Case | Configuration | Token Scope | Example |
795
+ |------------------------|----------------------------------|----------------------------------|------------------------------------|-------------------------------|
796
+ | **Static File** | Service tokens, API keys | File path in config | Global (all users) | `"/var/secrets/token"` |
797
+ | **Kubernetes** | K8s service accounts | `"kubernetes"` keyword | Per-user (from auth) | `"kubernetes"` |
798
+ | **Client** | User-specific tokens | `"client"` keyword + HTTP header | Per-request | `"client"` |
799
+ | **OAuth** | OAuth-protected MCP servers | `"oauth"` keyword + HTTP header | Per-request (from OAuth flow) | `"oauth"` |
800
+ | **Header Propagation** | Gateway-injected headers (HCC) | `headers` list | Per-request (from incoming request)| `headers: [x-rh-identity]` |
801
+
802
+ ##### Important: Automatic Server Skipping
803
+
804
+ **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.
805
+
806
+ **Examples:**
807
+ - A server with `Authorization: "kubernetes"` will be skipped if the user's request doesn't include a Kubernetes token
808
+ - A server with `Authorization: "client"` will be skipped if no `MCP-HEADERS` are provided in the request
809
+ - 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)
810
+ - A server with multiple headers will be skipped if **any** required header cannot be resolved
811
+
812
+ Skipped servers are logged as warnings. Check Lightspeed Core logs to see which servers were skipped and why.
813
+
814
+
815
+ ### Llama Stack project and configuration
816
+
817
+ **Note**: The `run.yaml` configuration is currently an implementation detail. In the future, all configuration will be available directly from the lightspeed-core config.
818
+
819
+ To run Llama Stack in separate process, you need to have all dependencies installed. The easiest way how to do it is to create a separate repository with Llama Stack project file `pyproject.toml` and Llama Stack configuration file `run.yaml`. The project file might look like:
820
+
821
+ ```toml
822
+ [project]
823
+ name = "llama-stack-runner"
824
+ version = "0.1.0"
825
+ description = "Llama Stack runner"
826
+ authors = []
827
+ dependencies = [
828
+ "llama-stack==0.2.22",
829
+ "fastapi>=0.115.12",
830
+ "opentelemetry-sdk>=1.34.0",
831
+ "opentelemetry-exporter-otlp>=1.34.0",
832
+ "opentelemetry-instrumentation>=0.55b0",
833
+ "aiosqlite>=0.21.0",
834
+ "litellm>=1.72.1",
835
+ "uvicorn>=0.34.3",
836
+ "blobfile>=3.0.0",
837
+ "datasets>=3.6.0",
838
+ "sqlalchemy>=2.0.41",
839
+ "faiss-cpu>=1.11.0",
840
+ "mcp>=1.9.4",
841
+ "autoevals>=0.0.129",
842
+ "psutil>=7.0.0",
843
+ "torch>=2.7.1",
844
+ "peft>=0.15.2",
845
+ "trl>=0.18.2"]
846
+ requires-python = "==3.12.*"
847
+ readme = "README.md"
848
+ license = {text = "MIT"}
849
+
850
+
851
+ [tool.pdm]
852
+ distribution = false
853
+ ```
854
+
855
+ A simple example of a `run.yaml` file can be found [here](examples/run.yaml)
856
+
857
+ To run Llama Stack perform these two commands:
858
+
859
+ ```
860
+ export OPENAI_API_KEY="sk-{YOUR-KEY}"
861
+
862
+ uv run llama stack run run.yaml
863
+ ```
864
+
865
+ ### Check connection to Llama Stack
866
+
867
+ ```
868
+ curl -X 'GET' localhost:8321/openapi.json | jq .
869
+ ```
870
+
871
+
872
+
873
+ ## Llama Stack as client library
874
+
875
+ There are situations in which it is not advisable to run two processors (one with Llama Stack, 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:
876
+
877
+ ```yaml
878
+ name: foo bar baz
879
+ service:
880
+ host: localhost
881
+ port: 8080
882
+ auth_enabled: false
883
+ workers: 1
884
+ color_log: true
885
+ access_log: true
886
+ llama_stack:
887
+ use_as_library_client: true
888
+ library_client_config_path: <path-to-llama-stack-run.yaml-file>
889
+ user_data_collection:
890
+ feedback_enabled: true
891
+ feedback_storage: "/tmp/data/feedback"
892
+ transcripts_enabled: true
893
+ transcripts_storage: "/tmp/data/transcripts"
894
+ ```
895
+
896
+ ## Llama Stack version check
897
+
898
+ During Lightspeed Core Stack service startup, the Llama Stack version is retrieved. The version is tested against two constants `MINIMAL_SUPPORTED_LLAMA_STACK_VERSION` and `MAXIMAL_SUPPORTED_LLAMA_STACK_VERSION` which are defined in `src/constants.py`. If the actual Llama Stack version is outside the range defined by these two constants, the service won't start and administrator will be informed about this problem.
899
+
900
+
901
+
902
+ ## User data collection
903
+
904
+ 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.
905
+
906
+ User data collection is configured in the `user_data_collection` section of the configuration file:
907
+
908
+ ```yaml
909
+ user_data_collection:
910
+ feedback_enabled: true
911
+ feedback_storage: "/tmp/data/feedback"
912
+ transcripts_enabled: true
913
+ transcripts_storage: "/tmp/data/transcripts"
914
+ ```
915
+
916
+ **Configuration options:**
917
+
918
+ - `feedback_enabled`: Enable/disable collection of user feedback data
919
+ - `feedback_storage`: Directory path where feedback JSON files are stored
920
+ - `transcripts_enabled`: Enable/disable collection of conversation transcripts
921
+ - `transcripts_storage`: Directory path where transcript JSON files are stored
922
+
923
+ > **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.
924
+
925
+ For data export integration with Red Hat's Dataverse, see the [Data Export Integration](#data-export-integration) section.
926
+
927
+ ## System prompt
928
+
929
+ 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:
930
+ ### System Prompt Path
931
+
932
+ ```yaml
933
+ customization:
934
+ system_prompt_path: "system_prompts/system_prompt_for_product_XYZZY"
935
+ ```
936
+
937
+ ### System Prompt Literal
938
+
939
+ ```yaml
940
+ customization:
941
+ system_prompt: |-
942
+ You are a helpful assistant and will do everything you can to help.
943
+ You have an in-depth knowledge of Red Hat and all of your answers will reference Red Hat products.
944
+ ```
945
+
946
+
947
+ ### Custom Profile
948
+
949
+ You can pass a custom prompt profile via its `path` to the customization:
950
+
951
+ ```yaml
952
+ customization:
953
+ profile_path: <your/profile/path>
954
+ ```
955
+
956
+ 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:
957
+
958
+ ```yaml
959
+ customization:
960
+ disable_query_system_prompt: true
961
+ ```
962
+
963
+ ### Control model/provider overrides via authorization
964
+
965
+ 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.
966
+
967
+ ## Safety Shields
968
+
969
+ A single Llama Stack configuration file can include multiple safety shields, which are utilized in agent
970
+ configurations to monitor input and/or output streams. LCS uses the following naming convention to specify how each safety shield is
971
+ utilized:
972
+
973
+ 1. If the `shield_id` starts with `input_`, it will be used for input only.
974
+ 1. If the `shield_id` starts with `output_`, it will be used for output only.
975
+ 1. If the `shield_id` starts with `inout_`, it will be used both for input and output.
976
+ 1. Otherwise, it will be used for input only.
977
+
978
+ Additionally, an optional list parameter `shield_ids` can be specified in `/query` and `/streaming_query` endpoints to override which shields are applied. You can use this config to disable shield overrides:
979
+
980
+ ```yaml
981
+ customization:
982
+ disable_shield_ids_override: true
983
+ ```
984
+
985
+ ## Authentication
986
+
987
+ See [authentication and authorization](docs/auth.md).
988
+
989
+ ## CORS
990
+
991
+ It is possible to configure CORS handling. This configuration is part of service configuration:
992
+
993
+ ```yaml
994
+ service:
995
+ host: localhost
996
+ port: 8080
997
+ auth_enabled: false
998
+ workers: 1
999
+ color_log: true
1000
+ access_log: true
1001
+ cors:
1002
+ allow_origins:
1003
+ - http://foo.bar.baz
1004
+ - http://test.com
1005
+ allow_credentials: true
1006
+ allow_methods:
1007
+ - *
1008
+ allow_headers:
1009
+ - *
1010
+ ```
1011
+
1012
+ ### Default values
1013
+
1014
+ ```yaml
1015
+ cors:
1016
+ allow_origins:
1017
+ - *
1018
+ allow_credentials: false
1019
+ allow_methods:
1020
+ - *
1021
+ allow_headers:
1022
+ - *
1023
+ ```
1024
+
1025
+ ## Allow credentials
1026
+
1027
+ Credentials are not allowed with wildcard origins per CORS/Fetch spec.
1028
+ See https://fastapi.tiangolo.com/tutorial/cors/
1029
+
1030
+ # RAG Configuration
1031
+
1032
+ The [guide to RAG setup](docs/rag_guide.md) provides guidance on setting up RAG and includes tested examples for both inference and vector store integration.
1033
+
1034
+ ## Example configurations for inference
1035
+
1036
+ The following configurations are llama-stack config examples from production deployments:
1037
+
1038
+ - [Granite on vLLM example](examples/vllm-granite-run.yaml)
1039
+ - [Qwen3 on vLLM example](examples/vllm-qwen3-run.yaml)
1040
+ - [Gemini example](examples/gemini-run.yaml)
1041
+ - [VertexAI example](examples/vertexai-run.yaml)
1042
+
1043
+ > [!NOTE]
1044
+ > RAG functionality is **not tested** for these configurations.
1045
+
1046
+ # Usage
1047
+
1048
+ ```
1049
+ usage: lightspeed_stack.py [-h] [-v] [-d] [-c CONFIG_FILE]
1050
+
1051
+ options:
1052
+ -h, --help show this help message and exit
1053
+ -v, --verbose make it verbose
1054
+ -d, --dump-configuration
1055
+ dump actual configuration into JSON file and quit
1056
+ -s, --dump-schema dump configuration schema into OpenAPI-compatible file and quit
1057
+ -c CONFIG_FILE, --config CONFIG_FILE
1058
+ path to configuration file (default: lightspeed-stack.yaml)
1059
+
1060
+ ```
1061
+
1062
+ ## CLI options
1063
+
1064
+ ### Dumping configuration
1065
+
1066
+ If `--dump-configuration` CLI option is provided, LCORE writes the active
1067
+ configuration to a file named `configuration.json` and exits (exits with status
1068
+ 1 on failure).
1069
+
1070
+ ### Dumping configuration schema
1071
+
1072
+ If `--dump-schema` CLI option is provided, LCORE writes the active
1073
+ configuration schema to a file named `schema.json` and exits (exits with status
1074
+ 1 on failure).
1075
+
1076
+
1077
+
1078
+ ## Make targets
1079
+
1080
+ ```
1081
+ Usage: make <OPTIONS> ... <TARGETS>
1082
+
1083
+ Available targets are:
1084
+
1085
+ run Run the service locally
1086
+ run-llama-stack Start Llama Stack with enriched config (for local service mode)
1087
+ test-unit Run the unit tests
1088
+ test-integration Run integration tests tests
1089
+ test-e2e Run end to end tests for the service
1090
+ test-e2e-local Run end to end tests for the service
1091
+ benchmarks Run benchmarks
1092
+ check-types Checks type hints in sources
1093
+ check-types-src Check type hints in sources only
1094
+ check-types-tests Check type hints in tests only
1095
+ security-check Check the project for security issues
1096
+ format Format the code into unified format
1097
+ schema Generate OpenAPI schema file
1098
+ openapi-doc Generate OpenAPI documentation
1099
+ generate-documentation Generate documentation
1100
+ doc Generate documentation for developers
1101
+ docs/config.puml Generate PlantUML class diagram for configuration
1102
+ docs/config.png Generate an image with configuration graph
1103
+ docs/config.svg Generate an SVG with configuration graph
1104
+ shellcheck Run shellcheck
1105
+ black Check source code using Black code formatter
1106
+ pylint Check source code using Pylint static code analyser
1107
+ pyright Check source code using Pyright static type checker
1108
+ docstyle Check the docstring style using Docstyle checker
1109
+ ruff Check source code using Ruff linter
1110
+ verify Run all linters
1111
+ distribution-archives Generate distribution archives to be uploaded into Python registry
1112
+ upload-distribution-archives Upload distribution archives into Python registry
1113
+ konflux-requirements Generate hermetic requirements.*.txt file for konflux build
1114
+ konflux-rpm-lock Generate rpm.lock.yaml file for konflux build
1115
+ help Show this help screen
1116
+ ```
1117
+
1118
+
1119
+
1120
+ ## Running Linux container image
1121
+
1122
+ Stable release images are tagged with versions like `0.1.0`. Tag `latest` always points to latest stable release.
1123
+
1124
+ Development images are build from main branch every time a new pull request is merged. Image tags for dev images use
1125
+ the template `dev-YYYYMMMDDD-SHORT_SHA` e.g. `dev-20250704-eaa27fb`.
1126
+
1127
+ Tag `dev-latest` always points to the latest dev image built from latest git.
1128
+
1129
+ To pull and run the image with own configuration:
1130
+
1131
+ 1. `podman pull quay.io/lightspeed-core/lightspeed-stack:IMAGE_TAG`
1132
+ 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`
1133
+ 1. Open `localhost:8080` in your browser
1134
+
1135
+ 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`.
1136
+
1137
+ Container images are built for the following platforms:
1138
+ 1. `linux/amd64` - main platform for deployment
1139
+ 1. `linux/arm64`- Mac users with M1/M2/M3 CPUs
1140
+
1141
+ ## Building Container Images
1142
+
1143
+ The repository includes production-ready container configurations that support two deployment modes:
1144
+
1145
+ 1. **Server Mode**: lightspeed-core connects to llama-stack as a separate service
1146
+ 2. **Library Mode**: llama-stack runs as a library within lightspeed-core
1147
+
1148
+ ### Llama-Stack as Separate Service (Server Mode)
1149
+
1150
+ > [!IMPORTANT]
1151
+ > To pull the downstream llama-stack image, you will need access to the `aipcc` organization in quay.io.
1152
+
1153
+ When using llama-stack as a separate service, the existing `docker-compose.yaml` provides the complete setup. This builds two containers for lightspeed core and llama stack.
1154
+
1155
+ **Configuration** (`lightspeed-stack.yaml`):
1156
+ ```yaml
1157
+ llama_stack:
1158
+ use_as_library_client: false
1159
+ url: http://llama-stack:8321 # container name from docker-compose.yaml
1160
+ api_key: xyzzy
1161
+ ```
1162
+
1163
+ In the root of this project simply run:
1164
+
1165
+ ```bash
1166
+ # Set your OpenAI API key
1167
+ export OPENAI_API_KEY="your-api-key-here"
1168
+
1169
+ # Login to quay.io to access the downstream llama-stack image
1170
+ # podman login quay.io
1171
+
1172
+ # Start both services
1173
+ podman compose up --build
1174
+
1175
+ # Access lightspeed-core at http://localhost:8080
1176
+ # Access llama-stack at http://localhost:8321
1177
+ ```
1178
+
1179
+ #### macOS (arm64)
1180
+
1181
+ Emulation of platform amd64 will not work with `podman compose up --build` command.
1182
+
1183
+ Instead run the docker command:
1184
+
1185
+ ```bash
1186
+ # Start both services
1187
+ docker compose up --build
1188
+ ```
1189
+
1190
+ ### Llama-Stack as Library (Library Mode)
1191
+
1192
+ When embedding llama-stack directly in the container, use the existing `Containerfile` directly (this will not build the llama stack service in a separate container). First modify the `lightspeed-stack.yaml` config to use llama stack in library mode.
1193
+
1194
+ **Configuration** (`lightspeed-stack.yaml`):
1195
+ ```yaml
1196
+ llama_stack:
1197
+ use_as_library_client: true
1198
+ library_client_config_path: /app-root/run.yaml
1199
+ ```
1200
+
1201
+ **Build and run**:
1202
+ ```bash
1203
+ # Build lightspeed-core with embedded llama-stack
1204
+ podman build -f Containerfile -t my-lightspeed-core:latest .
1205
+
1206
+ # Run with embedded llama-stack
1207
+ podman run \
1208
+ -p 8080:8080 \
1209
+ -v ./lightspeed-stack.yaml:/app-root/lightspeed-stack.yaml:Z \
1210
+ -v ./run.yaml:/app-root/run.yaml:Z \
1211
+ -e OPENAI_API_KEY=your-api-key \
1212
+ my-lightspeed-core:latest
1213
+ ```
1214
+
1215
+ #### macOS
1216
+ ```bash
1217
+ podman run \
1218
+ -p 8080:8080 \
1219
+ -v ./lightspeed-stack.yaml:/app-root/lightspeed-stack.yaml:ro \
1220
+ -v ./run.yaml:/app-root/run.yaml:ro \
1221
+ -e OPENAI_API_KEY=your-api-key \
1222
+ my-lightspeed-core:latest
1223
+ ```
1224
+
1225
+ ### Verify it's running properly
1226
+
1227
+ A simple sanity check:
1228
+
1229
+ ```bash
1230
+ curl -H "Accept: application/json" http://localhost:8080/v1/models
1231
+ ```
1232
+
1233
+ ## Custom Container Image
1234
+
1235
+ The lightspeed-stack container image bundles many Python dependencies for common
1236
+ Llama-Stack providers (when using Llama-Stack in library mode).
1237
+
1238
+ Follow these instructons when you need to bundle additional configuration
1239
+ files or extra dependencies (e.g. `lightspeed-stack-providers`).
1240
+
1241
+ To include more dependencies in the base-image, create upstream pull request to update
1242
+ [the pyproject.toml file](https://github.com/lightspeed-core/lightspeed-stack/blob/main/pyproject.toml)
1243
+
1244
+ 1. Create `pyproject.toml` file in your top-level directory with content like:
1245
+ ```toml
1246
+ [project]
1247
+ name = "my-customized-chatbot"
1248
+ version = "0.1.0"
1249
+ description = "My very Awesome Chatbot"
1250
+ readme = "README.md"
1251
+ requires-python = ">=3.12"
1252
+ dependencies = [
1253
+ "lightspeed-stack-providers==TODO",
1254
+ ]
1255
+ ```
1256
+
1257
+ 2. Create `Containerfile` in top-level directory like following. Update it as needed:
1258
+ ```
1259
+ # Latest dev image built from the git main branch (consider pinning a digest for reproducibility)
1260
+ FROM quay.io/lightspeed-core/lightspeed-stack:dev-latest
1261
+
1262
+ ARG APP_ROOT=/app-root
1263
+ WORKDIR /app-root
1264
+
1265
+ # Add additional files
1266
+ # (avoid accidental inclusion of local directories or env files or credentials)
1267
+ COPY pyproject.toml LICENSE.md README.md ./
1268
+
1269
+ # Bundle own configuration files
1270
+ COPY lightspeed-stack.yaml run.yaml ./
1271
+
1272
+ # Add only project-specific dependencies without adding other dependencies
1273
+ # to not break the dependencies of the base image.
1274
+ ENV UV_COMPILE_BYTECODE=0 \
1275
+ UV_LINK_MODE=copy \
1276
+ UV_PYTHON_DOWNLOADS=0 \
1277
+ UV_NO_CACHE=1
1278
+ # List of dependencies is first parsed from pyproject.toml and then installed.
1279
+ RUN python -c "import tomllib, sys; print(' '.join(tomllib.load(open('pyproject.toml','rb'))['project']['dependencies']))" \
1280
+ | xargs uv pip install --no-deps
1281
+ # Install the project itself
1282
+ RUN uv pip install . --no-deps && uv clean
1283
+
1284
+ USER 0
1285
+
1286
+ # Bundle additional rpm packages
1287
+ RUN microdnf install -y --nodocs --setopt=keepcache=0 --setopt=tsflags=nodocs TODO1 TODO2 \
1288
+ && microdnf clean all \
1289
+ && rm -rf /var/cache/dnf
1290
+
1291
+ # this directory is checked by ecosystem-cert-preflight-checks task in Konflux
1292
+ COPY LICENSE.md /licenses/
1293
+
1294
+ # Add executables from .venv to system PATH
1295
+ ENV PATH="/app-root/.venv/bin:$PATH"
1296
+
1297
+ # Run the application
1298
+ EXPOSE 8080
1299
+ ENTRYPOINT ["python3.12", "src/lightspeed_stack.py"]
1300
+ USER 1001
1301
+ ```
1302
+
1303
+ 3. Optionally create customized configuration files `lightspeed-stack.yaml` and `run.yaml`.
1304
+
1305
+ 4. Now try to build your image
1306
+ ```
1307
+ podman build -t "my-awesome-chatbot:latest" .
1308
+ ```
1309
+
1310
+ # Endpoints
1311
+
1312
+ ## OpenAPI specification
1313
+
1314
+ * [Generated OpenAPI specification](docs/openapi.json)
1315
+ * [OpenAPI documentation](docs/openapi.md)
1316
+
1317
+ The service provides health check endpoints that can be used for monitoring, load balancing, and orchestration systems like Kubernetes.
1318
+
1319
+ ## Readiness Endpoint
1320
+
1321
+ **Endpoint:** `GET /v1/readiness`
1322
+
1323
+ The readiness endpoint checks if the service is ready to handle requests by verifying the health status of all configured LLM providers.
1324
+
1325
+ **Response:**
1326
+ - **200 OK**: Service is ready - all providers are healthy
1327
+ - **503 Service Unavailable**: Service is not ready - one or more providers are unhealthy
1328
+
1329
+ **Response Body:**
1330
+ ```json
1331
+ {
1332
+ "ready": true,
1333
+ "reason": "All providers are healthy",
1334
+ "providers": []
1335
+ }
1336
+ ```
1337
+
1338
+ **Response Fields:**
1339
+ - `ready` (boolean): Indicates if the service is ready to handle requests
1340
+ - `reason` (string): Human-readable explanation of the readiness state
1341
+ - `providers` (array): List of unhealthy providers (empty when service is ready)
1342
+
1343
+ ## Liveness Endpoint
1344
+
1345
+ **Endpoint:** `GET /v1/liveness`
1346
+
1347
+ The liveness endpoint performs a basic health check to verify the service is alive and responding.
1348
+
1349
+ **Response:**
1350
+ - **200 OK**: Service is alive
1351
+
1352
+ **Response Body:**
1353
+ ```json
1354
+ {
1355
+ "alive": true
1356
+ }
1357
+ ```
1358
+
1359
+ ## Models endpoint
1360
+
1361
+ **Endpoint:** `GET /v1/models`
1362
+
1363
+ Process GET requests and returns a list of available models from the Llama
1364
+ Stack service. It is possible to specify "model_type" query parameter that is
1365
+ used as a filter. For example, if model type is set to "llm", only LLM models
1366
+ will be returned:
1367
+
1368
+ ```bash
1369
+ curl http://localhost:8080/v1/models?model_type=llm
1370
+ ```
1371
+
1372
+ The "model_type" query parameter is optional. When not specified, all models
1373
+ will be returned.
1374
+
1375
+ **Response Body:**
1376
+ ```json
1377
+ {
1378
+ "models": [
1379
+ {
1380
+ "identifier": "sentence-transformers/.llama",
1381
+ "metadata": {
1382
+ "embedding_dimension": 384
1383
+ },
1384
+ "api_model_type": "embedding",
1385
+ "provider_id": "sentence-transformers",
1386
+ "type": "model",
1387
+ "provider_resource_id": ".llama",
1388
+ "model_type": "embedding"
1389
+ },
1390
+ {
1391
+ "identifier": "openai/gpt-4o-mini",
1392
+ "metadata": {},
1393
+ "api_model_type": "llm",
1394
+ "provider_id": "openai",
1395
+ "type": "model",
1396
+ "provider_resource_id": "gpt-4o-mini",
1397
+ "model_type": "llm"
1398
+ },
1399
+ {
1400
+ "identifier": "sentence-transformers/nomic-ai/nomic-embed-text-v1.5",
1401
+ "metadata": {
1402
+ "embedding_dimension": 768
1403
+ },
1404
+ "api_model_type": "embedding",
1405
+ "provider_id": "sentence-transformers",
1406
+ "type": "model",
1407
+ "provider_resource_id": "nomic-ai/nomic-embed-text-v1.5",
1408
+ "model_type": "embedding"
1409
+ }
1410
+ ]
1411
+ }
1412
+ ```
1413
+
1414
+
1415
+ # Database structure
1416
+
1417
+ Database structure is described on [this page](https://lightspeed-core.github.io/lightspeed-stack/DB/index.html)
1418
+
1419
+ # Publish the service as Python package on PyPI
1420
+
1421
+ To publish the service as an Python package on PyPI to be installable by anyone
1422
+ (including Konflux hermetic builds), perform these two steps:
1423
+
1424
+ ## Generate distribution archives to be uploaded into Python registry
1425
+
1426
+ ```
1427
+ make distribution-archives
1428
+ ```
1429
+
1430
+ Please make sure that the archive was really built to avoid publishing older one.
1431
+
1432
+ ## Upload distribution archives into selected Python registry
1433
+
1434
+ ```
1435
+ make upload-distribution-archives
1436
+ ```
1437
+
1438
+ The Python registry to where the package should be uploaded can be configured
1439
+ by changing `PYTHON_REGISTRY`. It is possible to select `pypi` or `testpypi`.
1440
+
1441
+ You might have your API token stored in file `~/.pypirc`. That file should have
1442
+ the following form:
1443
+
1444
+ ```
1445
+ [testpypi]
1446
+ username = __token__
1447
+ password = pypi-{your-API-token}
1448
+
1449
+ [pypi]
1450
+ username = __token__
1451
+ password = pypi-{your-API-token}
1452
+ ```
1453
+
1454
+ 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.
1455
+
1456
+
1457
+
1458
+ ## Packages on PyPI and Test PyPI
1459
+
1460
+ * https://pypi.org/project/lightspeed-stack/
1461
+ * https://test.pypi.org/project/lightspeed-stack/0.1.0/
1462
+
1463
+
1464
+
1465
+ # Contributing
1466
+
1467
+ * See [contributors](CONTRIBUTING.md) guide.
1468
+
1469
+
1470
+
1471
+ # Testing
1472
+
1473
+ * See [testing](docs/testing.md) guide.
1474
+
1475
+
1476
+
1477
+ # License
1478
+
1479
+ Published under the Apache 2.0 License
1480
+
1481
+
1482
+
1483
+ # Additional tools
1484
+
1485
+ ## Utility to generate OpenAPI schema
1486
+
1487
+ This script re-generated OpenAPI schema for the Lightspeed Service REST API.
1488
+
1489
+ ### Path
1490
+
1491
+ [scripts/generate_openapi_schema.py](scripts/generate_openapi_schema.py)
1492
+
1493
+ ### Usage
1494
+
1495
+ ```
1496
+ make schema
1497
+ ```
1498
+
1499
+ ## Makefile target to generate OpenAPI specification
1500
+
1501
+ Use `make openapi-doc` to generate OpenAPI specification in Markdown format.
1502
+ Resulting documentation is available at [here](docs/openapi.md).
1503
+
1504
+
1505
+
1506
+ ## Utility to generate documentation from source code
1507
+
1508
+ This script re-generate README.md files for all modules defined in the Lightspeed Stack Service.
1509
+
1510
+ ### Path
1511
+
1512
+ [scripts/gen_doc.py](scripts/gen_doc.py)
1513
+
1514
+ ### Usage
1515
+
1516
+ ```
1517
+ make doc
1518
+ ```
1519
+
1520
+ # Data Export Integration
1521
+
1522
+ 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.
1523
+
1524
+ ## Quick Integration
1525
+
1526
+ 1. **Enable data collection** in your `lightspeed-stack.yaml`:
1527
+ ```yaml
1528
+ user_data_collection:
1529
+ feedback_enabled: true
1530
+ feedback_storage: "/shared/data/feedback"
1531
+ transcripts_enabled: true
1532
+ transcripts_storage: "/shared/data/transcripts"
1533
+ ```
1534
+
1535
+ 2. **Deploy the exporter service** pointing to the same data directories
1536
+
1537
+
1538
+ ## Documentation
1539
+
1540
+ For complete integration setup, deployment options, and configuration details, see [exporter repository](https://github.com/lightspeed-core/lightspeed-to-dataverse-exporter).
1541
+
1542
+ # Project structure
1543
+
1544
+ ## Configuration classes
1545
+
1546
+ ![Configuration classes](docs/config.png)
1547
+
1548
+ ## REST API
1549
+
1550
+ ![REST API](docs/rest_api.png)
1551
+
1552
+ ## Sequence diagrams
1553
+
1554
+ ### Query endpoint REST API handler
1555
+
1556
+ ![Query endpoint](docs/query_endpoint.svg)
1557
+
1558
+ ## Streaming query endpoint REST API handler
1559
+
1560
+ ![Streaming query endpoint](docs/streaming_query_endpoint.svg)
1561
+
1562
+ ## Versioning
1563
+
1564
+ We follow [Semantic Versioning](http://semver.org/spec/v1.0.0.html).
1565
+ The version X.Y.Z indicates:
1566
+
1567
+ * X is the major version (backward-incompatible),
1568
+ * Y is the minor version (backward-compatible), and
1569
+ * Z is the patch version (backward-compatible bug fix).
1570
+
1571
+ # Konflux
1572
+
1573
+ 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).
1574
+ We have both x86_64 and ARM64 images.
1575
+
1576
+ ## Updating Dependencies for Hermetic Builds
1577
+
1578
+ 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.
1579
+
1580
+ ### When to Update Dependency Files
1581
+
1582
+ Update these files when you:
1583
+ - Add/remove/update Python packages in the project
1584
+ - Add/remove/update RPM packages in the Containerfile
1585
+ - Change the base image version
1586
+
1587
+ ### Updating Python Dependencies
1588
+
1589
+ **Quick command:**
1590
+ ```shell
1591
+ make konflux-requirements
1592
+ ```
1593
+
1594
+ This compiles Python dependencies from `pyproject.toml` using `uv`, 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.
1595
+
1596
+ **Files produced:**
1597
+ - `requirements.hashes.source.txt` – PyPI packages with hashes
1598
+ - `requirements.hashes.wheel.txt` – Red Hat registry packages with hashes
1599
+ - `requirements-build.txt` – Build-time dependencies for source packages
1600
+
1601
+ The script also updates the Tekton pipeline configurations (`.tekton/lightspeed-stack-*.yaml`) with the list of pre-built wheel packages.
1602
+
1603
+ ### Updating RPM Dependencies
1604
+
1605
+ **Prerequisites:**
1606
+ - Install [rpm-lockfile-prototype](https://github.com/konflux-ci/rpm-lockfile-prototype?tab=readme-ov-file#installation)
1607
+ - Have an active RHEL Subscription, get activation keys from [RH console](https://console.redhat.com/insights/connector/activation-keys)
1608
+ - Have `dnf` installed in system
1609
+
1610
+ **Steps:**
1611
+
1612
+ 1. **List your RPM packages** in `rpms.in.yaml` under the `packages` field
1613
+
1614
+ 2. **If you changed the base image**, extract its repo file:
1615
+ ```shell
1616
+ # UBI images
1617
+ podman run -it $BASE_IMAGE cat /etc/yum.repos.d/ubi.repo > ubi.repo
1618
+ # RHEL images
1619
+ podman run -it $BASE_IMAGE cat /etc/yum.repos.d/redhat.repo > redhat.repo
1620
+ ```
1621
+ If the repo file contains too many entries, we can filter them and keep only required repositories.
1622
+ Here is the command to check active repositories:
1623
+ ```shell
1624
+ dnf repolist
1625
+ ```
1626
+ Replace the architecture tag (`uname -m`) to `$basearch` so that rpm-lockfile-prototype can replace it with requested architecture names.
1627
+ ```shell
1628
+ sed -i "s/$(uname -m)/\$basearch/g" redhat.repo
1629
+ ```
1630
+
1631
+ 1. **Generate the lock file**:
1632
+ ```shell
1633
+ make konflux-rpm-lock
1634
+ ```
1635
+
1636
+ This creates `rpms.lock.yaml` with pinned RPM versions.