llama-stack 0.3.5__py3-none-any.whl → 0.4.1__py3-none-any.whl

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 (460) hide show
  1. llama_stack/__init__.py +0 -5
  2. llama_stack/cli/llama.py +3 -3
  3. llama_stack/cli/stack/_list_deps.py +12 -23
  4. llama_stack/cli/stack/list_stacks.py +37 -18
  5. llama_stack/cli/stack/run.py +121 -11
  6. llama_stack/cli/stack/utils.py +0 -127
  7. llama_stack/core/access_control/access_control.py +69 -28
  8. llama_stack/core/access_control/conditions.py +15 -5
  9. llama_stack/core/admin.py +267 -0
  10. llama_stack/core/build.py +6 -74
  11. llama_stack/core/client.py +1 -1
  12. llama_stack/core/configure.py +6 -6
  13. llama_stack/core/conversations/conversations.py +28 -25
  14. llama_stack/core/datatypes.py +271 -79
  15. llama_stack/core/distribution.py +15 -16
  16. llama_stack/core/external.py +3 -3
  17. llama_stack/core/inspect.py +98 -15
  18. llama_stack/core/library_client.py +73 -61
  19. llama_stack/core/prompts/prompts.py +12 -11
  20. llama_stack/core/providers.py +17 -11
  21. llama_stack/core/resolver.py +65 -56
  22. llama_stack/core/routers/__init__.py +8 -12
  23. llama_stack/core/routers/datasets.py +1 -4
  24. llama_stack/core/routers/eval_scoring.py +7 -4
  25. llama_stack/core/routers/inference.py +55 -271
  26. llama_stack/core/routers/safety.py +52 -24
  27. llama_stack/core/routers/tool_runtime.py +6 -48
  28. llama_stack/core/routers/vector_io.py +130 -51
  29. llama_stack/core/routing_tables/benchmarks.py +24 -20
  30. llama_stack/core/routing_tables/common.py +1 -4
  31. llama_stack/core/routing_tables/datasets.py +22 -22
  32. llama_stack/core/routing_tables/models.py +119 -6
  33. llama_stack/core/routing_tables/scoring_functions.py +7 -7
  34. llama_stack/core/routing_tables/shields.py +1 -2
  35. llama_stack/core/routing_tables/toolgroups.py +17 -7
  36. llama_stack/core/routing_tables/vector_stores.py +51 -16
  37. llama_stack/core/server/auth.py +5 -3
  38. llama_stack/core/server/auth_providers.py +36 -20
  39. llama_stack/core/server/fastapi_router_registry.py +84 -0
  40. llama_stack/core/server/quota.py +2 -2
  41. llama_stack/core/server/routes.py +79 -27
  42. llama_stack/core/server/server.py +102 -87
  43. llama_stack/core/stack.py +235 -62
  44. llama_stack/core/storage/datatypes.py +26 -3
  45. llama_stack/{providers/utils → core/storage}/kvstore/__init__.py +2 -0
  46. llama_stack/{providers/utils → core/storage}/kvstore/kvstore.py +55 -24
  47. llama_stack/{providers/utils → core/storage}/kvstore/mongodb/mongodb.py +13 -10
  48. llama_stack/{providers/utils → core/storage}/kvstore/postgres/postgres.py +28 -17
  49. llama_stack/{providers/utils → core/storage}/kvstore/redis/redis.py +41 -16
  50. llama_stack/{providers/utils → core/storage}/kvstore/sqlite/sqlite.py +1 -1
  51. llama_stack/core/storage/sqlstore/__init__.py +17 -0
  52. llama_stack/{providers/utils → core/storage}/sqlstore/authorized_sqlstore.py +69 -49
  53. llama_stack/{providers/utils → core/storage}/sqlstore/sqlalchemy_sqlstore.py +47 -17
  54. llama_stack/{providers/utils → core/storage}/sqlstore/sqlstore.py +25 -8
  55. llama_stack/core/store/registry.py +1 -1
  56. llama_stack/core/utils/config.py +8 -2
  57. llama_stack/core/utils/config_resolution.py +32 -29
  58. llama_stack/core/utils/context.py +4 -10
  59. llama_stack/core/utils/exec.py +9 -0
  60. llama_stack/core/utils/type_inspection.py +45 -0
  61. llama_stack/distributions/dell/{run.yaml → config.yaml} +3 -2
  62. llama_stack/distributions/dell/dell.py +2 -2
  63. llama_stack/distributions/dell/run-with-safety.yaml +3 -2
  64. llama_stack/distributions/meta-reference-gpu/{run.yaml → config.yaml} +3 -2
  65. llama_stack/distributions/meta-reference-gpu/meta_reference.py +2 -2
  66. llama_stack/distributions/meta-reference-gpu/run-with-safety.yaml +3 -2
  67. llama_stack/distributions/nvidia/{run.yaml → config.yaml} +4 -4
  68. llama_stack/distributions/nvidia/nvidia.py +1 -1
  69. llama_stack/distributions/nvidia/run-with-safety.yaml +4 -4
  70. llama_stack/{apis/datasetio → distributions/oci}/__init__.py +1 -1
  71. llama_stack/distributions/oci/config.yaml +134 -0
  72. llama_stack/distributions/oci/oci.py +108 -0
  73. llama_stack/distributions/open-benchmark/{run.yaml → config.yaml} +5 -4
  74. llama_stack/distributions/open-benchmark/open_benchmark.py +2 -3
  75. llama_stack/distributions/postgres-demo/{run.yaml → config.yaml} +4 -3
  76. llama_stack/distributions/starter/{run.yaml → config.yaml} +64 -13
  77. llama_stack/distributions/starter/run-with-postgres-store.yaml +64 -13
  78. llama_stack/distributions/starter/starter.py +8 -5
  79. llama_stack/distributions/starter-gpu/{run.yaml → config.yaml} +64 -13
  80. llama_stack/distributions/starter-gpu/run-with-postgres-store.yaml +64 -13
  81. llama_stack/distributions/template.py +13 -69
  82. llama_stack/distributions/watsonx/{run.yaml → config.yaml} +4 -3
  83. llama_stack/distributions/watsonx/watsonx.py +1 -1
  84. llama_stack/log.py +28 -11
  85. llama_stack/models/llama/checkpoint.py +6 -6
  86. llama_stack/models/llama/hadamard_utils.py +2 -0
  87. llama_stack/models/llama/llama3/generation.py +3 -1
  88. llama_stack/models/llama/llama3/interface.py +2 -5
  89. llama_stack/models/llama/llama3/multimodal/encoder_utils.py +3 -3
  90. llama_stack/models/llama/llama3/multimodal/image_transform.py +6 -6
  91. llama_stack/models/llama/llama3/prompt_templates/system_prompts.py +1 -1
  92. llama_stack/models/llama/llama3/tool_utils.py +2 -1
  93. llama_stack/models/llama/llama4/prompt_templates/system_prompts.py +1 -1
  94. llama_stack/providers/inline/agents/meta_reference/__init__.py +3 -3
  95. llama_stack/providers/inline/agents/meta_reference/agents.py +44 -261
  96. llama_stack/providers/inline/agents/meta_reference/config.py +6 -1
  97. llama_stack/providers/inline/agents/meta_reference/responses/openai_responses.py +207 -57
  98. llama_stack/providers/inline/agents/meta_reference/responses/streaming.py +308 -47
  99. llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py +162 -96
  100. llama_stack/providers/inline/agents/meta_reference/responses/types.py +23 -8
  101. llama_stack/providers/inline/agents/meta_reference/responses/utils.py +201 -33
  102. llama_stack/providers/inline/agents/meta_reference/safety.py +8 -13
  103. llama_stack/providers/inline/batches/reference/__init__.py +2 -4
  104. llama_stack/providers/inline/batches/reference/batches.py +78 -60
  105. llama_stack/providers/inline/datasetio/localfs/datasetio.py +2 -5
  106. llama_stack/providers/inline/eval/meta_reference/eval.py +16 -61
  107. llama_stack/providers/inline/files/localfs/files.py +37 -28
  108. llama_stack/providers/inline/inference/meta_reference/config.py +2 -2
  109. llama_stack/providers/inline/inference/meta_reference/generators.py +50 -60
  110. llama_stack/providers/inline/inference/meta_reference/inference.py +403 -19
  111. llama_stack/providers/inline/inference/meta_reference/model_parallel.py +7 -26
  112. llama_stack/providers/inline/inference/meta_reference/parallel_utils.py +2 -12
  113. llama_stack/providers/inline/inference/sentence_transformers/sentence_transformers.py +10 -15
  114. llama_stack/providers/inline/post_training/common/validator.py +1 -5
  115. llama_stack/providers/inline/post_training/huggingface/post_training.py +8 -8
  116. llama_stack/providers/inline/post_training/huggingface/recipes/finetune_single_device.py +18 -10
  117. llama_stack/providers/inline/post_training/huggingface/recipes/finetune_single_device_dpo.py +12 -9
  118. llama_stack/providers/inline/post_training/huggingface/utils.py +27 -6
  119. llama_stack/providers/inline/post_training/torchtune/common/checkpointer.py +1 -1
  120. llama_stack/providers/inline/post_training/torchtune/common/utils.py +1 -1
  121. llama_stack/providers/inline/post_training/torchtune/datasets/format_adapter.py +1 -1
  122. llama_stack/providers/inline/post_training/torchtune/post_training.py +8 -8
  123. llama_stack/providers/inline/post_training/torchtune/recipes/lora_finetuning_single_device.py +16 -16
  124. llama_stack/providers/inline/safety/code_scanner/code_scanner.py +13 -9
  125. llama_stack/providers/inline/safety/llama_guard/llama_guard.py +18 -15
  126. llama_stack/providers/inline/safety/prompt_guard/prompt_guard.py +9 -9
  127. llama_stack/providers/inline/scoring/basic/scoring.py +6 -13
  128. llama_stack/providers/inline/scoring/basic/scoring_fn/docvqa_scoring_fn.py +1 -2
  129. llama_stack/providers/inline/scoring/basic/scoring_fn/equality_scoring_fn.py +1 -2
  130. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/docvqa.py +2 -2
  131. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/equality.py +2 -2
  132. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/ifeval.py +2 -2
  133. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/regex_parser_math_response.py +2 -2
  134. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/regex_parser_multiple_choice_answer.py +2 -2
  135. llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/subset_of.py +2 -2
  136. llama_stack/providers/inline/scoring/basic/scoring_fn/ifeval_scoring_fn.py +1 -2
  137. llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_math_response_scoring_fn.py +1 -2
  138. llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_scoring_fn.py +1 -2
  139. llama_stack/providers/inline/scoring/basic/scoring_fn/subset_of_scoring_fn.py +1 -2
  140. llama_stack/providers/inline/scoring/braintrust/braintrust.py +12 -15
  141. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_correctness.py +2 -2
  142. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_relevancy.py +2 -2
  143. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_similarity.py +2 -2
  144. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_entity_recall.py +2 -2
  145. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_precision.py +2 -2
  146. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_recall.py +2 -2
  147. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_relevancy.py +2 -2
  148. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/factuality.py +2 -2
  149. llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/faithfulness.py +2 -2
  150. llama_stack/providers/inline/scoring/llm_as_judge/scoring.py +7 -14
  151. llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/fn_defs/llm_as_judge_405b_simpleqa.py +2 -2
  152. llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/fn_defs/llm_as_judge_base.py +1 -2
  153. llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/llm_as_judge_scoring_fn.py +1 -3
  154. llama_stack/providers/inline/tool_runtime/rag/__init__.py +1 -1
  155. llama_stack/providers/inline/tool_runtime/rag/config.py +8 -1
  156. llama_stack/providers/inline/tool_runtime/rag/context_retriever.py +7 -6
  157. llama_stack/providers/inline/tool_runtime/rag/memory.py +64 -48
  158. llama_stack/providers/inline/vector_io/chroma/__init__.py +1 -1
  159. llama_stack/providers/inline/vector_io/chroma/config.py +1 -1
  160. llama_stack/providers/inline/vector_io/faiss/__init__.py +1 -1
  161. llama_stack/providers/inline/vector_io/faiss/config.py +1 -1
  162. llama_stack/providers/inline/vector_io/faiss/faiss.py +46 -28
  163. llama_stack/providers/inline/vector_io/milvus/__init__.py +1 -1
  164. llama_stack/providers/inline/vector_io/milvus/config.py +1 -1
  165. llama_stack/providers/inline/vector_io/qdrant/__init__.py +1 -1
  166. llama_stack/providers/inline/vector_io/qdrant/config.py +1 -1
  167. llama_stack/providers/inline/vector_io/sqlite_vec/__init__.py +1 -1
  168. llama_stack/providers/inline/vector_io/sqlite_vec/sqlite_vec.py +44 -33
  169. llama_stack/providers/registry/agents.py +8 -3
  170. llama_stack/providers/registry/batches.py +1 -1
  171. llama_stack/providers/registry/datasetio.py +1 -1
  172. llama_stack/providers/registry/eval.py +1 -1
  173. llama_stack/{apis/datasets/__init__.py → providers/registry/file_processors.py} +5 -1
  174. llama_stack/providers/registry/files.py +11 -2
  175. llama_stack/providers/registry/inference.py +22 -3
  176. llama_stack/providers/registry/post_training.py +1 -1
  177. llama_stack/providers/registry/safety.py +1 -1
  178. llama_stack/providers/registry/scoring.py +1 -1
  179. llama_stack/providers/registry/tool_runtime.py +2 -2
  180. llama_stack/providers/registry/vector_io.py +7 -7
  181. llama_stack/providers/remote/datasetio/huggingface/huggingface.py +2 -5
  182. llama_stack/providers/remote/datasetio/nvidia/datasetio.py +1 -4
  183. llama_stack/providers/remote/eval/nvidia/eval.py +15 -9
  184. llama_stack/providers/remote/files/openai/__init__.py +19 -0
  185. llama_stack/providers/remote/files/openai/config.py +28 -0
  186. llama_stack/providers/remote/files/openai/files.py +253 -0
  187. llama_stack/providers/remote/files/s3/files.py +52 -30
  188. llama_stack/providers/remote/inference/anthropic/anthropic.py +2 -1
  189. llama_stack/providers/remote/inference/anthropic/config.py +1 -1
  190. llama_stack/providers/remote/inference/azure/azure.py +1 -3
  191. llama_stack/providers/remote/inference/azure/config.py +8 -7
  192. llama_stack/providers/remote/inference/bedrock/__init__.py +1 -1
  193. llama_stack/providers/remote/inference/bedrock/bedrock.py +82 -105
  194. llama_stack/providers/remote/inference/bedrock/config.py +24 -3
  195. llama_stack/providers/remote/inference/cerebras/cerebras.py +5 -5
  196. llama_stack/providers/remote/inference/cerebras/config.py +12 -5
  197. llama_stack/providers/remote/inference/databricks/config.py +13 -6
  198. llama_stack/providers/remote/inference/databricks/databricks.py +16 -6
  199. llama_stack/providers/remote/inference/fireworks/config.py +5 -5
  200. llama_stack/providers/remote/inference/fireworks/fireworks.py +1 -1
  201. llama_stack/providers/remote/inference/gemini/config.py +1 -1
  202. llama_stack/providers/remote/inference/gemini/gemini.py +13 -14
  203. llama_stack/providers/remote/inference/groq/config.py +5 -5
  204. llama_stack/providers/remote/inference/groq/groq.py +1 -1
  205. llama_stack/providers/remote/inference/llama_openai_compat/config.py +5 -5
  206. llama_stack/providers/remote/inference/llama_openai_compat/llama.py +8 -6
  207. llama_stack/providers/remote/inference/nvidia/__init__.py +1 -1
  208. llama_stack/providers/remote/inference/nvidia/config.py +21 -11
  209. llama_stack/providers/remote/inference/nvidia/nvidia.py +115 -3
  210. llama_stack/providers/remote/inference/nvidia/utils.py +1 -1
  211. llama_stack/providers/remote/inference/oci/__init__.py +17 -0
  212. llama_stack/providers/remote/inference/oci/auth.py +79 -0
  213. llama_stack/providers/remote/inference/oci/config.py +75 -0
  214. llama_stack/providers/remote/inference/oci/oci.py +162 -0
  215. llama_stack/providers/remote/inference/ollama/config.py +7 -5
  216. llama_stack/providers/remote/inference/ollama/ollama.py +17 -8
  217. llama_stack/providers/remote/inference/openai/config.py +4 -4
  218. llama_stack/providers/remote/inference/openai/openai.py +1 -1
  219. llama_stack/providers/remote/inference/passthrough/__init__.py +2 -2
  220. llama_stack/providers/remote/inference/passthrough/config.py +5 -10
  221. llama_stack/providers/remote/inference/passthrough/passthrough.py +97 -75
  222. llama_stack/providers/remote/inference/runpod/config.py +12 -5
  223. llama_stack/providers/remote/inference/runpod/runpod.py +2 -20
  224. llama_stack/providers/remote/inference/sambanova/config.py +5 -5
  225. llama_stack/providers/remote/inference/sambanova/sambanova.py +1 -1
  226. llama_stack/providers/remote/inference/tgi/config.py +7 -6
  227. llama_stack/providers/remote/inference/tgi/tgi.py +19 -11
  228. llama_stack/providers/remote/inference/together/config.py +5 -5
  229. llama_stack/providers/remote/inference/together/together.py +15 -12
  230. llama_stack/providers/remote/inference/vertexai/config.py +1 -1
  231. llama_stack/providers/remote/inference/vllm/config.py +5 -5
  232. llama_stack/providers/remote/inference/vllm/vllm.py +13 -14
  233. llama_stack/providers/remote/inference/watsonx/config.py +4 -4
  234. llama_stack/providers/remote/inference/watsonx/watsonx.py +21 -94
  235. llama_stack/providers/remote/post_training/nvidia/post_training.py +4 -4
  236. llama_stack/providers/remote/post_training/nvidia/utils.py +1 -1
  237. llama_stack/providers/remote/safety/bedrock/bedrock.py +6 -6
  238. llama_stack/providers/remote/safety/bedrock/config.py +1 -1
  239. llama_stack/providers/remote/safety/nvidia/config.py +1 -1
  240. llama_stack/providers/remote/safety/nvidia/nvidia.py +11 -5
  241. llama_stack/providers/remote/safety/sambanova/config.py +1 -1
  242. llama_stack/providers/remote/safety/sambanova/sambanova.py +6 -6
  243. llama_stack/providers/remote/tool_runtime/bing_search/bing_search.py +11 -6
  244. llama_stack/providers/remote/tool_runtime/brave_search/brave_search.py +12 -7
  245. llama_stack/providers/remote/tool_runtime/model_context_protocol/config.py +8 -2
  246. llama_stack/providers/remote/tool_runtime/model_context_protocol/model_context_protocol.py +57 -15
  247. llama_stack/providers/remote/tool_runtime/tavily_search/tavily_search.py +11 -6
  248. llama_stack/providers/remote/tool_runtime/wolfram_alpha/wolfram_alpha.py +11 -6
  249. llama_stack/providers/remote/vector_io/chroma/__init__.py +1 -1
  250. llama_stack/providers/remote/vector_io/chroma/chroma.py +131 -23
  251. llama_stack/providers/remote/vector_io/chroma/config.py +1 -1
  252. llama_stack/providers/remote/vector_io/milvus/__init__.py +1 -1
  253. llama_stack/providers/remote/vector_io/milvus/config.py +1 -1
  254. llama_stack/providers/remote/vector_io/milvus/milvus.py +37 -28
  255. llama_stack/providers/remote/vector_io/pgvector/__init__.py +1 -1
  256. llama_stack/providers/remote/vector_io/pgvector/config.py +1 -1
  257. llama_stack/providers/remote/vector_io/pgvector/pgvector.py +37 -25
  258. llama_stack/providers/remote/vector_io/qdrant/__init__.py +1 -1
  259. llama_stack/providers/remote/vector_io/qdrant/config.py +1 -1
  260. llama_stack/providers/remote/vector_io/qdrant/qdrant.py +147 -30
  261. llama_stack/providers/remote/vector_io/weaviate/__init__.py +1 -1
  262. llama_stack/providers/remote/vector_io/weaviate/config.py +1 -1
  263. llama_stack/providers/remote/vector_io/weaviate/weaviate.py +31 -26
  264. llama_stack/providers/utils/common/data_schema_validator.py +1 -5
  265. llama_stack/providers/utils/files/form_data.py +1 -1
  266. llama_stack/providers/utils/inference/embedding_mixin.py +1 -1
  267. llama_stack/providers/utils/inference/inference_store.py +7 -8
  268. llama_stack/providers/utils/inference/litellm_openai_mixin.py +79 -79
  269. llama_stack/providers/utils/inference/model_registry.py +1 -3
  270. llama_stack/providers/utils/inference/openai_compat.py +44 -1171
  271. llama_stack/providers/utils/inference/openai_mixin.py +68 -42
  272. llama_stack/providers/utils/inference/prompt_adapter.py +50 -265
  273. llama_stack/providers/utils/inference/stream_utils.py +23 -0
  274. llama_stack/providers/utils/memory/__init__.py +2 -0
  275. llama_stack/providers/utils/memory/file_utils.py +1 -1
  276. llama_stack/providers/utils/memory/openai_vector_store_mixin.py +181 -84
  277. llama_stack/providers/utils/memory/vector_store.py +39 -38
  278. llama_stack/providers/utils/pagination.py +1 -1
  279. llama_stack/providers/utils/responses/responses_store.py +15 -25
  280. llama_stack/providers/utils/scoring/aggregation_utils.py +1 -2
  281. llama_stack/providers/utils/scoring/base_scoring_fn.py +1 -2
  282. llama_stack/providers/utils/tools/mcp.py +93 -11
  283. llama_stack/providers/utils/vector_io/__init__.py +16 -0
  284. llama_stack/providers/utils/vector_io/vector_utils.py +36 -0
  285. llama_stack/telemetry/constants.py +27 -0
  286. llama_stack/telemetry/helpers.py +43 -0
  287. llama_stack/testing/api_recorder.py +25 -16
  288. {llama_stack-0.3.5.dist-info → llama_stack-0.4.1.dist-info}/METADATA +57 -55
  289. llama_stack-0.4.1.dist-info/RECORD +588 -0
  290. llama_stack-0.4.1.dist-info/top_level.txt +2 -0
  291. llama_stack_api/__init__.py +945 -0
  292. llama_stack_api/admin/__init__.py +45 -0
  293. llama_stack_api/admin/api.py +72 -0
  294. llama_stack_api/admin/fastapi_routes.py +117 -0
  295. llama_stack_api/admin/models.py +113 -0
  296. llama_stack_api/agents.py +173 -0
  297. llama_stack_api/batches/__init__.py +40 -0
  298. llama_stack_api/batches/api.py +53 -0
  299. llama_stack_api/batches/fastapi_routes.py +113 -0
  300. llama_stack_api/batches/models.py +78 -0
  301. llama_stack_api/benchmarks/__init__.py +43 -0
  302. llama_stack_api/benchmarks/api.py +39 -0
  303. llama_stack_api/benchmarks/fastapi_routes.py +109 -0
  304. llama_stack_api/benchmarks/models.py +109 -0
  305. {llama_stack/apis → llama_stack_api}/common/content_types.py +1 -43
  306. {llama_stack/apis → llama_stack_api}/common/errors.py +0 -8
  307. {llama_stack/apis → llama_stack_api}/common/job_types.py +1 -1
  308. llama_stack_api/common/responses.py +77 -0
  309. {llama_stack/apis → llama_stack_api}/common/training_types.py +1 -1
  310. {llama_stack/apis → llama_stack_api}/common/type_system.py +2 -14
  311. llama_stack_api/connectors.py +146 -0
  312. {llama_stack/apis/conversations → llama_stack_api}/conversations.py +23 -39
  313. {llama_stack/apis/datasetio → llama_stack_api}/datasetio.py +4 -8
  314. llama_stack_api/datasets/__init__.py +61 -0
  315. llama_stack_api/datasets/api.py +35 -0
  316. llama_stack_api/datasets/fastapi_routes.py +104 -0
  317. llama_stack_api/datasets/models.py +152 -0
  318. {llama_stack/providers → llama_stack_api}/datatypes.py +166 -10
  319. {llama_stack/apis/eval → llama_stack_api}/eval.py +8 -40
  320. llama_stack_api/file_processors/__init__.py +27 -0
  321. llama_stack_api/file_processors/api.py +64 -0
  322. llama_stack_api/file_processors/fastapi_routes.py +78 -0
  323. llama_stack_api/file_processors/models.py +42 -0
  324. llama_stack_api/files/__init__.py +35 -0
  325. llama_stack_api/files/api.py +51 -0
  326. llama_stack_api/files/fastapi_routes.py +124 -0
  327. llama_stack_api/files/models.py +107 -0
  328. {llama_stack/apis/inference → llama_stack_api}/inference.py +90 -194
  329. llama_stack_api/inspect_api/__init__.py +37 -0
  330. llama_stack_api/inspect_api/api.py +25 -0
  331. llama_stack_api/inspect_api/fastapi_routes.py +76 -0
  332. llama_stack_api/inspect_api/models.py +28 -0
  333. {llama_stack/apis/agents → llama_stack_api/internal}/__init__.py +3 -1
  334. llama_stack/providers/utils/kvstore/api.py → llama_stack_api/internal/kvstore.py +5 -0
  335. llama_stack_api/internal/sqlstore.py +79 -0
  336. {llama_stack/apis/models → llama_stack_api}/models.py +11 -9
  337. {llama_stack/apis/agents → llama_stack_api}/openai_responses.py +184 -27
  338. {llama_stack/apis/post_training → llama_stack_api}/post_training.py +7 -11
  339. {llama_stack/apis/prompts → llama_stack_api}/prompts.py +3 -4
  340. llama_stack_api/providers/__init__.py +33 -0
  341. llama_stack_api/providers/api.py +16 -0
  342. llama_stack_api/providers/fastapi_routes.py +57 -0
  343. llama_stack_api/providers/models.py +24 -0
  344. {llama_stack/apis/tools → llama_stack_api}/rag_tool.py +2 -52
  345. {llama_stack/apis → llama_stack_api}/resource.py +1 -1
  346. llama_stack_api/router_utils.py +160 -0
  347. {llama_stack/apis/safety → llama_stack_api}/safety.py +6 -9
  348. {llama_stack → llama_stack_api}/schema_utils.py +94 -4
  349. {llama_stack/apis/scoring → llama_stack_api}/scoring.py +3 -3
  350. {llama_stack/apis/scoring_functions → llama_stack_api}/scoring_functions.py +9 -6
  351. {llama_stack/apis/shields → llama_stack_api}/shields.py +6 -7
  352. {llama_stack/apis/tools → llama_stack_api}/tools.py +26 -21
  353. {llama_stack/apis/vector_io → llama_stack_api}/vector_io.py +133 -152
  354. {llama_stack/apis/vector_stores → llama_stack_api}/vector_stores.py +1 -1
  355. llama_stack/apis/agents/agents.py +0 -894
  356. llama_stack/apis/batches/__init__.py +0 -9
  357. llama_stack/apis/batches/batches.py +0 -100
  358. llama_stack/apis/benchmarks/__init__.py +0 -7
  359. llama_stack/apis/benchmarks/benchmarks.py +0 -108
  360. llama_stack/apis/common/responses.py +0 -36
  361. llama_stack/apis/conversations/__init__.py +0 -31
  362. llama_stack/apis/datasets/datasets.py +0 -251
  363. llama_stack/apis/datatypes.py +0 -160
  364. llama_stack/apis/eval/__init__.py +0 -7
  365. llama_stack/apis/files/__init__.py +0 -7
  366. llama_stack/apis/files/files.py +0 -199
  367. llama_stack/apis/inference/__init__.py +0 -7
  368. llama_stack/apis/inference/event_logger.py +0 -43
  369. llama_stack/apis/inspect/__init__.py +0 -7
  370. llama_stack/apis/inspect/inspect.py +0 -94
  371. llama_stack/apis/models/__init__.py +0 -7
  372. llama_stack/apis/post_training/__init__.py +0 -7
  373. llama_stack/apis/prompts/__init__.py +0 -9
  374. llama_stack/apis/providers/__init__.py +0 -7
  375. llama_stack/apis/providers/providers.py +0 -69
  376. llama_stack/apis/safety/__init__.py +0 -7
  377. llama_stack/apis/scoring/__init__.py +0 -7
  378. llama_stack/apis/scoring_functions/__init__.py +0 -7
  379. llama_stack/apis/shields/__init__.py +0 -7
  380. llama_stack/apis/synthetic_data_generation/__init__.py +0 -7
  381. llama_stack/apis/synthetic_data_generation/synthetic_data_generation.py +0 -77
  382. llama_stack/apis/telemetry/__init__.py +0 -7
  383. llama_stack/apis/telemetry/telemetry.py +0 -423
  384. llama_stack/apis/tools/__init__.py +0 -8
  385. llama_stack/apis/vector_io/__init__.py +0 -7
  386. llama_stack/apis/vector_stores/__init__.py +0 -7
  387. llama_stack/core/server/tracing.py +0 -80
  388. llama_stack/core/ui/app.py +0 -55
  389. llama_stack/core/ui/modules/__init__.py +0 -5
  390. llama_stack/core/ui/modules/api.py +0 -32
  391. llama_stack/core/ui/modules/utils.py +0 -42
  392. llama_stack/core/ui/page/__init__.py +0 -5
  393. llama_stack/core/ui/page/distribution/__init__.py +0 -5
  394. llama_stack/core/ui/page/distribution/datasets.py +0 -18
  395. llama_stack/core/ui/page/distribution/eval_tasks.py +0 -20
  396. llama_stack/core/ui/page/distribution/models.py +0 -18
  397. llama_stack/core/ui/page/distribution/providers.py +0 -27
  398. llama_stack/core/ui/page/distribution/resources.py +0 -48
  399. llama_stack/core/ui/page/distribution/scoring_functions.py +0 -18
  400. llama_stack/core/ui/page/distribution/shields.py +0 -19
  401. llama_stack/core/ui/page/evaluations/__init__.py +0 -5
  402. llama_stack/core/ui/page/evaluations/app_eval.py +0 -143
  403. llama_stack/core/ui/page/evaluations/native_eval.py +0 -253
  404. llama_stack/core/ui/page/playground/__init__.py +0 -5
  405. llama_stack/core/ui/page/playground/chat.py +0 -130
  406. llama_stack/core/ui/page/playground/tools.py +0 -352
  407. llama_stack/distributions/dell/build.yaml +0 -33
  408. llama_stack/distributions/meta-reference-gpu/build.yaml +0 -32
  409. llama_stack/distributions/nvidia/build.yaml +0 -29
  410. llama_stack/distributions/open-benchmark/build.yaml +0 -36
  411. llama_stack/distributions/postgres-demo/__init__.py +0 -7
  412. llama_stack/distributions/postgres-demo/build.yaml +0 -23
  413. llama_stack/distributions/postgres-demo/postgres_demo.py +0 -125
  414. llama_stack/distributions/starter/build.yaml +0 -61
  415. llama_stack/distributions/starter-gpu/build.yaml +0 -61
  416. llama_stack/distributions/watsonx/build.yaml +0 -33
  417. llama_stack/providers/inline/agents/meta_reference/agent_instance.py +0 -1024
  418. llama_stack/providers/inline/agents/meta_reference/persistence.py +0 -228
  419. llama_stack/providers/inline/telemetry/__init__.py +0 -5
  420. llama_stack/providers/inline/telemetry/meta_reference/__init__.py +0 -21
  421. llama_stack/providers/inline/telemetry/meta_reference/config.py +0 -47
  422. llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +0 -252
  423. llama_stack/providers/remote/inference/bedrock/models.py +0 -29
  424. llama_stack/providers/utils/kvstore/sqlite/config.py +0 -20
  425. llama_stack/providers/utils/sqlstore/__init__.py +0 -5
  426. llama_stack/providers/utils/sqlstore/api.py +0 -128
  427. llama_stack/providers/utils/telemetry/__init__.py +0 -5
  428. llama_stack/providers/utils/telemetry/trace_protocol.py +0 -142
  429. llama_stack/providers/utils/telemetry/tracing.py +0 -384
  430. llama_stack/strong_typing/__init__.py +0 -19
  431. llama_stack/strong_typing/auxiliary.py +0 -228
  432. llama_stack/strong_typing/classdef.py +0 -440
  433. llama_stack/strong_typing/core.py +0 -46
  434. llama_stack/strong_typing/deserializer.py +0 -877
  435. llama_stack/strong_typing/docstring.py +0 -409
  436. llama_stack/strong_typing/exception.py +0 -23
  437. llama_stack/strong_typing/inspection.py +0 -1085
  438. llama_stack/strong_typing/mapping.py +0 -40
  439. llama_stack/strong_typing/name.py +0 -182
  440. llama_stack/strong_typing/schema.py +0 -792
  441. llama_stack/strong_typing/serialization.py +0 -97
  442. llama_stack/strong_typing/serializer.py +0 -500
  443. llama_stack/strong_typing/slots.py +0 -27
  444. llama_stack/strong_typing/topological.py +0 -89
  445. llama_stack/ui/node_modules/flatted/python/flatted.py +0 -149
  446. llama_stack-0.3.5.dist-info/RECORD +0 -625
  447. llama_stack-0.3.5.dist-info/top_level.txt +0 -1
  448. /llama_stack/{providers/utils → core/storage}/kvstore/config.py +0 -0
  449. /llama_stack/{providers/utils → core/storage}/kvstore/mongodb/__init__.py +0 -0
  450. /llama_stack/{providers/utils → core/storage}/kvstore/postgres/__init__.py +0 -0
  451. /llama_stack/{providers/utils → core/storage}/kvstore/redis/__init__.py +0 -0
  452. /llama_stack/{providers/utils → core/storage}/kvstore/sqlite/__init__.py +0 -0
  453. /llama_stack/{apis → providers/inline/file_processor}/__init__.py +0 -0
  454. /llama_stack/{apis/common → telemetry}/__init__.py +0 -0
  455. {llama_stack-0.3.5.dist-info → llama_stack-0.4.1.dist-info}/WHEEL +0 -0
  456. {llama_stack-0.3.5.dist-info → llama_stack-0.4.1.dist-info}/entry_points.txt +0 -0
  457. {llama_stack-0.3.5.dist-info → llama_stack-0.4.1.dist-info}/licenses/LICENSE +0 -0
  458. {llama_stack/core/ui → llama_stack_api/common}/__init__.py +0 -0
  459. {llama_stack/strong_typing → llama_stack_api}/py.typed +0 -0
  460. {llama_stack/apis → llama_stack_api}/version.py +0 -0
@@ -8,7 +8,7 @@ from typing import Annotated, Literal
8
8
 
9
9
  from pydantic import BaseModel, Field
10
10
 
11
- from llama_stack.schema_utils import json_schema_type, register_schema
11
+ from llama_stack_api.schema_utils import json_schema_type, register_schema
12
12
 
13
13
 
14
14
  @json_schema_type
@@ -103,17 +103,6 @@ class CompletionInputType(BaseModel):
103
103
  type: Literal["completion_input"] = "completion_input"
104
104
 
105
105
 
106
- @json_schema_type
107
- class AgentTurnInputType(BaseModel):
108
- """Parameter type for agent turn input.
109
-
110
- :param type: Discriminator type. Always "agent_turn_input"
111
- """
112
-
113
- # expects List[Message] for messages (may also include attachments?)
114
- type: Literal["agent_turn_input"] = "agent_turn_input"
115
-
116
-
117
106
  @json_schema_type
118
107
  class DialogType(BaseModel):
119
108
  """Parameter type for dialog data with semantic output labels.
@@ -135,8 +124,7 @@ ParamType = Annotated[
135
124
  | JsonType
136
125
  | UnionType
137
126
  | ChatCompletionInputType
138
- | CompletionInputType
139
- | AgentTurnInputType,
127
+ | CompletionInputType,
140
128
  Field(discriminator="type"),
141
129
  ]
142
130
  register_schema(ParamType, name="ParamType")
@@ -0,0 +1,146 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the terms described in the LICENSE file in
5
+ # the root directory of this source tree.
6
+
7
+ from enum import StrEnum
8
+ from typing import Literal, Protocol
9
+
10
+ from pydantic import BaseModel, Field
11
+ from typing_extensions import runtime_checkable
12
+
13
+ from llama_stack_api.resource import Resource, ResourceType
14
+ from llama_stack_api.schema_utils import json_schema_type, webmethod
15
+ from llama_stack_api.tools import ToolDef
16
+ from llama_stack_api.version import LLAMA_STACK_API_V1ALPHA
17
+
18
+
19
+ @json_schema_type
20
+ class ConnectorType(StrEnum):
21
+ """Type of connector."""
22
+
23
+ MCP = "mcp"
24
+
25
+
26
+ class CommonConnectorFields(BaseModel):
27
+ """Common fields for all connectors.
28
+
29
+ :param connector_type: Type of connector
30
+ :param connector_id: Identifier for the connector
31
+ :param url: URL of the connector
32
+ :param server_label: (Optional) Label of the server
33
+ """
34
+
35
+ connector_type: ConnectorType = Field(default=ConnectorType.MCP)
36
+ connector_id: str = Field(..., description="Identifier for the connector")
37
+ url: str = Field(..., description="URL of the connector")
38
+ server_label: str | None = Field(default=None, description="Label of the server")
39
+
40
+
41
+ @json_schema_type
42
+ class Connector(CommonConnectorFields, Resource):
43
+ """A connector resource representing a connector registered in Llama Stack.
44
+
45
+ :param type: Type of resource, always 'connector' for connectors
46
+ :param server_name: (Optional) Name of the server
47
+ :param server_description: (Optional) Description of the server
48
+ """
49
+
50
+ model_config = {"populate_by_name": True}
51
+ type: Literal[ResourceType.connector] = ResourceType.connector
52
+ server_name: str | None = Field(default=None, description="Name of the server")
53
+ server_description: str | None = Field(default=None, description="Description of the server")
54
+
55
+
56
+ @json_schema_type
57
+ class ConnectorInput(CommonConnectorFields):
58
+ """Input for creating a connector
59
+
60
+ :param type: Type of resource, always 'connector' for connectors
61
+ """
62
+
63
+ type: Literal[ResourceType.connector] = ResourceType.connector
64
+
65
+
66
+ @json_schema_type
67
+ class ListConnectorsResponse(BaseModel):
68
+ """Response containing a list of connectors.
69
+
70
+ :param data: List of connectors
71
+ """
72
+
73
+ data: list[Connector]
74
+
75
+
76
+ @json_schema_type
77
+ class ListToolsResponse(BaseModel):
78
+ """Response containing a list of tools.
79
+
80
+ :param data: List of tools
81
+ """
82
+
83
+ data: list[ToolDef]
84
+
85
+
86
+ @runtime_checkable
87
+ class Connectors(Protocol):
88
+ # NOTE: Route order matters! More specific routes must come before less specific ones.
89
+ # Routes with {param:path} are greedy and will match everything including slashes.
90
+
91
+ @webmethod(route="/connectors", method="GET", level=LLAMA_STACK_API_V1ALPHA)
92
+ async def list_connectors(
93
+ self,
94
+ ) -> ListConnectorsResponse:
95
+ """List all configured connectors.
96
+
97
+ :returns: A ListConnectorsResponse.
98
+ """
99
+ ...
100
+
101
+ @webmethod(route="/connectors/{connector_id}/tools/{tool_name}", method="GET", level=LLAMA_STACK_API_V1ALPHA)
102
+ async def get_connector_tool(
103
+ self,
104
+ connector_id: str,
105
+ tool_name: str,
106
+ authorization: str | None = None,
107
+ ) -> ToolDef:
108
+ """Get a tool definition by its name from a connector.
109
+
110
+ :param connector_id: The ID of the connector to get the tool from.
111
+ :param tool_name: The name of the tool to get.
112
+ :param authorization: (Optional) OAuth access token for authenticating with the MCP server.
113
+
114
+ :returns: A ToolDef.
115
+ """
116
+ ...
117
+
118
+ @webmethod(route="/connectors/{connector_id}/tools", method="GET", level=LLAMA_STACK_API_V1ALPHA)
119
+ async def list_connector_tools(
120
+ self,
121
+ connector_id: str,
122
+ authorization: str | None = None,
123
+ ) -> ListToolsResponse:
124
+ """List tools available from a connector.
125
+
126
+ :param connector_id: The ID of the connector to list tools for.
127
+ :param authorization: (Optional) OAuth access token for authenticating with the MCP server.
128
+
129
+ :returns: A ListToolsResponse.
130
+ """
131
+ ...
132
+
133
+ @webmethod(route="/connectors/{connector_id}", method="GET", level=LLAMA_STACK_API_V1ALPHA)
134
+ async def get_connector(
135
+ self,
136
+ connector_id: str,
137
+ authorization: str | None = None,
138
+ ) -> Connector:
139
+ """Get a connector by its ID.
140
+
141
+ :param connector_id: The ID of the connector to get.
142
+ :param authorization: (Optional) OAuth access token for authenticating with the MCP server.
143
+
144
+ :returns: A Connector.
145
+ """
146
+ ...
@@ -4,14 +4,12 @@
4
4
  # This source code is licensed under the terms described in the LICENSE file in
5
5
  # the root directory of this source tree.
6
6
 
7
+ from enum import StrEnum
7
8
  from typing import Annotated, Literal, Protocol, runtime_checkable
8
9
 
9
- from openai import NOT_GIVEN
10
- from openai._types import NotGiven
11
- from openai.types.responses.response_includable import ResponseIncludable
12
10
  from pydantic import BaseModel, Field
13
11
 
14
- from llama_stack.apis.agents.openai_responses import (
12
+ from llama_stack_api.openai_responses import (
15
13
  OpenAIResponseInputFunctionToolCallOutput,
16
14
  OpenAIResponseMCPApprovalRequest,
17
15
  OpenAIResponseMCPApprovalResponse,
@@ -22,9 +20,8 @@ from llama_stack.apis.agents.openai_responses import (
22
20
  OpenAIResponseOutputMessageMCPListTools,
23
21
  OpenAIResponseOutputMessageWebSearchToolCall,
24
22
  )
25
- from llama_stack.apis.version import LLAMA_STACK_API_V1
26
- from llama_stack.providers.utils.telemetry.trace_protocol import trace_protocol
27
- from llama_stack.schema_utils import json_schema_type, register_schema, webmethod
23
+ from llama_stack_api.schema_utils import json_schema_type, register_schema, webmethod
24
+ from llama_stack_api.version import LLAMA_STACK_API_V1
28
25
 
29
26
  Metadata = dict[str, str]
30
27
 
@@ -104,32 +101,6 @@ register_schema(ConversationItem, name="ConversationItem")
104
101
  # ]
105
102
 
106
103
 
107
- @json_schema_type
108
- class ConversationCreateRequest(BaseModel):
109
- """Request body for creating a conversation."""
110
-
111
- items: list[ConversationItem] | None = Field(
112
- default=[],
113
- description="Initial items to include in the conversation context. You may add up to 20 items at a time.",
114
- max_length=20,
115
- )
116
- metadata: Metadata | None = Field(
117
- default={},
118
- description="Set of 16 key-value pairs that can be attached to an object. Useful for storing additional information",
119
- max_length=16,
120
- )
121
-
122
-
123
- @json_schema_type
124
- class ConversationUpdateRequest(BaseModel):
125
- """Request body for updating a conversation."""
126
-
127
- metadata: Metadata = Field(
128
- ...,
129
- description="Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters.",
130
- )
131
-
132
-
133
104
  @json_schema_type
134
105
  class ConversationDeletedResource(BaseModel):
135
106
  """Response for deleted conversation."""
@@ -150,6 +121,20 @@ class ConversationItemCreateRequest(BaseModel):
150
121
  )
151
122
 
152
123
 
124
+ class ConversationItemInclude(StrEnum):
125
+ """
126
+ Specify additional output data to include in the model response.
127
+ """
128
+
129
+ web_search_call_action_sources = "web_search_call.action.sources"
130
+ code_interpreter_call_outputs = "code_interpreter_call.outputs"
131
+ computer_call_output_output_image_url = "computer_call_output.output.image_url"
132
+ file_search_call_results = "file_search_call.results"
133
+ message_input_image_image_url = "message.input_image.image_url"
134
+ message_output_text_logprobs = "message.output_text.logprobs"
135
+ reasoning_encrypted_content = "reasoning.encrypted_content"
136
+
137
+
153
138
  @json_schema_type
154
139
  class ConversationItemList(BaseModel):
155
140
  """List of conversation items with pagination."""
@@ -171,7 +156,6 @@ class ConversationItemDeletedResource(BaseModel):
171
156
 
172
157
 
173
158
  @runtime_checkable
174
- @trace_protocol
175
159
  class Conversations(Protocol):
176
160
  """Conversations
177
161
 
@@ -250,13 +234,13 @@ class Conversations(Protocol):
250
234
  ...
251
235
 
252
236
  @webmethod(route="/conversations/{conversation_id}/items", method="GET", level=LLAMA_STACK_API_V1)
253
- async def list(
237
+ async def list_items(
254
238
  self,
255
239
  conversation_id: str,
256
- after: str | NotGiven = NOT_GIVEN,
257
- include: list[ResponseIncludable] | NotGiven = NOT_GIVEN,
258
- limit: int | NotGiven = NOT_GIVEN,
259
- order: Literal["asc", "desc"] | NotGiven = NOT_GIVEN,
240
+ after: str | None = None,
241
+ include: list[ConversationItemInclude] | None = None,
242
+ limit: int | None = None,
243
+ order: Literal["asc", "desc"] | None = None,
260
244
  ) -> ConversationItemList:
261
245
  """List items.
262
246
 
@@ -6,10 +6,10 @@
6
6
 
7
7
  from typing import Any, Protocol, runtime_checkable
8
8
 
9
- from llama_stack.apis.common.responses import PaginatedResponse
10
- from llama_stack.apis.datasets import Dataset
11
- from llama_stack.apis.version import LLAMA_STACK_API_V1, LLAMA_STACK_API_V1BETA
12
- from llama_stack.schema_utils import webmethod
9
+ from llama_stack_api.common.responses import PaginatedResponse
10
+ from llama_stack_api.datasets import Dataset
11
+ from llama_stack_api.schema_utils import webmethod
12
+ from llama_stack_api.version import LLAMA_STACK_API_V1BETA
13
13
 
14
14
 
15
15
  class DatasetStore(Protocol):
@@ -21,7 +21,6 @@ class DatasetIO(Protocol):
21
21
  # keeping for aligning with inference/safety, but this is not used
22
22
  dataset_store: DatasetStore
23
23
 
24
- @webmethod(route="/datasetio/iterrows/{dataset_id:path}", method="GET", deprecated=True, level=LLAMA_STACK_API_V1)
25
24
  @webmethod(route="/datasetio/iterrows/{dataset_id:path}", method="GET", level=LLAMA_STACK_API_V1BETA)
26
25
  async def iterrows(
27
26
  self,
@@ -46,9 +45,6 @@ class DatasetIO(Protocol):
46
45
  """
47
46
  ...
48
47
 
49
- @webmethod(
50
- route="/datasetio/append-rows/{dataset_id:path}", method="POST", deprecated=True, level=LLAMA_STACK_API_V1
51
- )
52
48
  @webmethod(route="/datasetio/append-rows/{dataset_id:path}", method="POST", level=LLAMA_STACK_API_V1BETA)
53
49
  async def append_rows(self, dataset_id: str, rows: list[dict[str, Any]]) -> None:
54
50
  """Append rows to a dataset.
@@ -0,0 +1,61 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the terms described in the LICENSE file in
5
+ # the root directory of this source tree.
6
+
7
+ """Datasets API protocol and models.
8
+
9
+ This module contains the Datasets protocol definition.
10
+ Pydantic models are defined in llama_stack_api.datasets.models.
11
+ The FastAPI router is defined in llama_stack_api.datasets.fastapi_routes.
12
+ """
13
+
14
+ # Import fastapi_routes for router factory access
15
+ from . import fastapi_routes
16
+
17
+ # Import new protocol for FastAPI router
18
+ from .api import Datasets
19
+
20
+ # Import models for re-export
21
+ from .models import (
22
+ CommonDatasetFields,
23
+ Dataset,
24
+ DatasetPurpose,
25
+ DatasetType,
26
+ DataSource,
27
+ GetDatasetRequest,
28
+ ListDatasetsResponse,
29
+ RegisterDatasetRequest,
30
+ RowsDataSource,
31
+ UnregisterDatasetRequest,
32
+ URIDataSource,
33
+ )
34
+
35
+
36
+ # Define DatasetInput for backward compatibility
37
+ class DatasetInput(CommonDatasetFields):
38
+ """Input parameters for dataset operations.
39
+
40
+ :param dataset_id: Unique identifier for the dataset
41
+ """
42
+
43
+ dataset_id: str
44
+
45
+
46
+ __all__ = [
47
+ "Datasets",
48
+ "Dataset",
49
+ "CommonDatasetFields",
50
+ "DatasetPurpose",
51
+ "DataSource",
52
+ "DatasetInput",
53
+ "DatasetType",
54
+ "RowsDataSource",
55
+ "URIDataSource",
56
+ "ListDatasetsResponse",
57
+ "RegisterDatasetRequest",
58
+ "GetDatasetRequest",
59
+ "UnregisterDatasetRequest",
60
+ "fastapi_routes",
61
+ ]
@@ -0,0 +1,35 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the terms described in the LICENSE file in
5
+ # the root directory of this source tree.
6
+
7
+ """Datasets API protocol definition.
8
+
9
+ This module contains the Datasets protocol definition.
10
+ Pydantic models are defined in llama_stack_api.datasets.models.
11
+ The FastAPI router is defined in llama_stack_api.datasets.fastapi_routes.
12
+ """
13
+
14
+ from typing import Protocol, runtime_checkable
15
+
16
+ from .models import (
17
+ Dataset,
18
+ GetDatasetRequest,
19
+ ListDatasetsResponse,
20
+ RegisterDatasetRequest,
21
+ UnregisterDatasetRequest,
22
+ )
23
+
24
+
25
+ @runtime_checkable
26
+ class Datasets(Protocol):
27
+ """Protocol for dataset management operations."""
28
+
29
+ async def register_dataset(self, request: RegisterDatasetRequest) -> Dataset: ...
30
+
31
+ async def get_dataset(self, request: GetDatasetRequest) -> Dataset: ...
32
+
33
+ async def list_datasets(self) -> ListDatasetsResponse: ...
34
+
35
+ async def unregister_dataset(self, request: UnregisterDatasetRequest) -> None: ...
@@ -0,0 +1,104 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the terms described in the LICENSE file in
5
+ # the root directory of this source tree.
6
+
7
+ """FastAPI router for the Datasets API.
8
+
9
+ This module defines the FastAPI router for the Datasets API using standard
10
+ FastAPI route decorators.
11
+ """
12
+
13
+ from typing import Annotated
14
+
15
+ from fastapi import APIRouter, Body, Depends
16
+
17
+ from llama_stack_api.router_utils import create_path_dependency, standard_responses
18
+ from llama_stack_api.version import LLAMA_STACK_API_V1BETA
19
+
20
+ from .api import Datasets
21
+ from .models import (
22
+ Dataset,
23
+ GetDatasetRequest,
24
+ ListDatasetsResponse,
25
+ RegisterDatasetRequest,
26
+ UnregisterDatasetRequest,
27
+ )
28
+
29
+ # Path parameter dependencies for single-field models
30
+ get_dataset_request = create_path_dependency(GetDatasetRequest)
31
+ unregister_dataset_request = create_path_dependency(UnregisterDatasetRequest)
32
+
33
+
34
+ def create_router(impl: Datasets) -> APIRouter:
35
+ """Create a FastAPI router for the Datasets API.
36
+
37
+ Args:
38
+ impl: The Datasets implementation instance
39
+
40
+ Returns:
41
+ APIRouter configured for the Datasets API
42
+ """
43
+ router = APIRouter(
44
+ prefix=f"/{LLAMA_STACK_API_V1BETA}",
45
+ tags=["Datasets"],
46
+ responses=standard_responses,
47
+ )
48
+
49
+ @router.post(
50
+ "/datasets",
51
+ response_model=Dataset,
52
+ summary="Register a new dataset.",
53
+ description="Register a new dataset.",
54
+ responses={
55
+ 200: {"description": "The registered dataset object."},
56
+ },
57
+ deprecated=True,
58
+ )
59
+ async def register_dataset(
60
+ request: Annotated[RegisterDatasetRequest, Body(...)],
61
+ ) -> Dataset:
62
+ return await impl.register_dataset(request)
63
+
64
+ @router.get(
65
+ "/datasets/{dataset_id:path}",
66
+ response_model=Dataset,
67
+ summary="Get a dataset by its ID.",
68
+ description="Get a dataset by its ID.",
69
+ responses={
70
+ 200: {"description": "The dataset object."},
71
+ },
72
+ )
73
+ async def get_dataset(
74
+ request: Annotated[GetDatasetRequest, Depends(get_dataset_request)],
75
+ ) -> Dataset:
76
+ return await impl.get_dataset(request)
77
+
78
+ @router.get(
79
+ "/datasets",
80
+ response_model=ListDatasetsResponse,
81
+ summary="List all datasets.",
82
+ description="List all datasets.",
83
+ responses={
84
+ 200: {"description": "A list of dataset objects."},
85
+ },
86
+ )
87
+ async def list_datasets() -> ListDatasetsResponse:
88
+ return await impl.list_datasets()
89
+
90
+ @router.delete(
91
+ "/datasets/{dataset_id:path}",
92
+ summary="Unregister a dataset by its ID.",
93
+ description="Unregister a dataset by its ID.",
94
+ responses={
95
+ 200: {"description": "The dataset was successfully unregistered."},
96
+ },
97
+ deprecated=True,
98
+ )
99
+ async def unregister_dataset(
100
+ request: Annotated[UnregisterDatasetRequest, Depends(unregister_dataset_request)],
101
+ ) -> None:
102
+ return await impl.unregister_dataset(request)
103
+
104
+ return router
@@ -0,0 +1,152 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the terms described in the LICENSE file in
5
+ # the root directory of this source tree.
6
+
7
+ """Pydantic models for Datasets API requests and responses.
8
+
9
+ This module defines the request and response models for the Datasets API
10
+ using Pydantic with Field descriptions for OpenAPI schema generation.
11
+ """
12
+
13
+ from enum import Enum, StrEnum
14
+ from typing import Annotated, Any, Literal
15
+
16
+ from pydantic import BaseModel, Field
17
+
18
+ from llama_stack_api.resource import Resource, ResourceType
19
+ from llama_stack_api.schema_utils import json_schema_type, register_schema
20
+
21
+
22
+ class DatasetPurpose(StrEnum):
23
+ """Purpose of the dataset. Each purpose has a required input data schema."""
24
+
25
+ post_training_messages = "post-training/messages"
26
+ """The dataset contains messages used for post-training."""
27
+ eval_question_answer = "eval/question-answer"
28
+ """The dataset contains a question column and an answer column."""
29
+ eval_messages_answer = "eval/messages-answer"
30
+ """The dataset contains a messages column with list of messages and an answer column."""
31
+
32
+
33
+ class DatasetType(Enum):
34
+ """Type of the dataset source."""
35
+
36
+ uri = "uri"
37
+ """The dataset can be obtained from a URI."""
38
+ rows = "rows"
39
+ """The dataset is stored in rows."""
40
+
41
+
42
+ @json_schema_type
43
+ class URIDataSource(BaseModel):
44
+ """A dataset that can be obtained from a URI."""
45
+
46
+ type: Literal["uri"] = Field(default="uri", description="The type of data source.")
47
+ uri: str = Field(
48
+ ...,
49
+ description='The dataset can be obtained from a URI. E.g. "https://mywebsite.com/mydata.jsonl", "lsfs://mydata.jsonl", "data:csv;base64,{base64_content}"',
50
+ )
51
+
52
+
53
+ @json_schema_type
54
+ class RowsDataSource(BaseModel):
55
+ """A dataset stored in rows."""
56
+
57
+ type: Literal["rows"] = Field(default="rows", description="The type of data source.")
58
+ rows: list[dict[str, Any]] = Field(
59
+ ...,
60
+ description='The dataset is stored in rows. E.g. [{"messages": [{"role": "user", "content": "Hello, world!"}, {"role": "assistant", "content": "Hello, world!"}]}]',
61
+ )
62
+
63
+
64
+ DataSource = Annotated[
65
+ URIDataSource | RowsDataSource,
66
+ Field(discriminator="type"),
67
+ ]
68
+ register_schema(DataSource, name="DataSource")
69
+
70
+
71
+ class CommonDatasetFields(BaseModel):
72
+ """Common fields for a dataset."""
73
+
74
+ purpose: DatasetPurpose = Field(..., description="Purpose of the dataset indicating its intended use")
75
+ source: DataSource = Field(..., description="Data source configuration for the dataset")
76
+ metadata: dict[str, Any] = Field(
77
+ default_factory=dict,
78
+ description="Any additional metadata for this dataset",
79
+ )
80
+
81
+
82
+ @json_schema_type
83
+ class Dataset(CommonDatasetFields, Resource):
84
+ """Dataset resource for storing and accessing training or evaluation data."""
85
+
86
+ type: Literal[ResourceType.dataset] = Field(
87
+ default=ResourceType.dataset,
88
+ description="Type of resource, always 'dataset' for datasets",
89
+ )
90
+
91
+ @property
92
+ def dataset_id(self) -> str:
93
+ return self.identifier
94
+
95
+ @property
96
+ def provider_dataset_id(self) -> str | None:
97
+ return self.provider_resource_id
98
+
99
+
100
+ @json_schema_type
101
+ class ListDatasetsResponse(BaseModel):
102
+ """Response from listing datasets."""
103
+
104
+ data: list[Dataset] = Field(..., description="List of datasets")
105
+
106
+
107
+ # Request models for each endpoint
108
+
109
+
110
+ @json_schema_type
111
+ class RegisterDatasetRequest(BaseModel):
112
+ """Request model for registering a dataset."""
113
+
114
+ purpose: DatasetPurpose = Field(..., description="The purpose of the dataset.")
115
+ source: DataSource = Field(..., description="The data source of the dataset.")
116
+ metadata: dict[str, Any] | None = Field(
117
+ default=None,
118
+ description="The metadata for the dataset.",
119
+ )
120
+ dataset_id: str | None = Field(
121
+ default=None,
122
+ description="The ID of the dataset. If not provided, an ID will be generated.",
123
+ )
124
+
125
+
126
+ @json_schema_type
127
+ class GetDatasetRequest(BaseModel):
128
+ """Request model for getting a dataset by ID."""
129
+
130
+ dataset_id: str = Field(..., description="The ID of the dataset to get.")
131
+
132
+
133
+ @json_schema_type
134
+ class UnregisterDatasetRequest(BaseModel):
135
+ """Request model for unregistering a dataset."""
136
+
137
+ dataset_id: str = Field(..., description="The ID of the dataset to unregister.")
138
+
139
+
140
+ __all__ = [
141
+ "CommonDatasetFields",
142
+ "Dataset",
143
+ "DatasetPurpose",
144
+ "DatasetType",
145
+ "DataSource",
146
+ "RowsDataSource",
147
+ "URIDataSource",
148
+ "ListDatasetsResponse",
149
+ "RegisterDatasetRequest",
150
+ "GetDatasetRequest",
151
+ "UnregisterDatasetRequest",
152
+ ]