llama-stack 0.0.42__py3-none-any.whl → 0.3.4__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.
- llama_stack/__init__.py +5 -0
- llama_stack/apis/agents/__init__.py +1 -1
- llama_stack/apis/agents/agents.py +700 -281
- llama_stack/apis/agents/openai_responses.py +1311 -0
- llama_stack/{providers/adapters/memory/sample/config.py → apis/batches/__init__.py} +2 -5
- llama_stack/apis/batches/batches.py +100 -0
- llama_stack/apis/benchmarks/__init__.py +7 -0
- llama_stack/apis/benchmarks/benchmarks.py +108 -0
- llama_stack/apis/common/content_types.py +143 -0
- llama_stack/apis/common/errors.py +103 -0
- llama_stack/apis/common/job_types.py +38 -0
- llama_stack/apis/common/responses.py +36 -0
- llama_stack/apis/common/training_types.py +36 -5
- llama_stack/apis/common/type_system.py +158 -0
- llama_stack/apis/conversations/__init__.py +31 -0
- llama_stack/apis/conversations/conversations.py +286 -0
- llama_stack/apis/datasetio/__init__.py +7 -0
- llama_stack/apis/datasetio/datasetio.py +59 -0
- llama_stack/apis/datasets/__init__.py +7 -0
- llama_stack/apis/datasets/datasets.py +251 -0
- llama_stack/apis/datatypes.py +160 -0
- llama_stack/apis/eval/__init__.py +7 -0
- llama_stack/apis/eval/eval.py +169 -0
- llama_stack/apis/files/__init__.py +7 -0
- llama_stack/apis/files/files.py +199 -0
- llama_stack/apis/inference/__init__.py +1 -1
- llama_stack/apis/inference/inference.py +1169 -113
- llama_stack/apis/inspect/__init__.py +1 -1
- llama_stack/apis/inspect/inspect.py +69 -16
- llama_stack/apis/models/__init__.py +1 -1
- llama_stack/apis/models/models.py +148 -21
- llama_stack/apis/post_training/__init__.py +1 -1
- llama_stack/apis/post_training/post_training.py +265 -120
- llama_stack/{providers/adapters/agents/sample/config.py → apis/prompts/__init__.py} +2 -5
- llama_stack/apis/prompts/prompts.py +204 -0
- llama_stack/apis/providers/__init__.py +7 -0
- llama_stack/apis/providers/providers.py +69 -0
- llama_stack/apis/resource.py +37 -0
- llama_stack/apis/safety/__init__.py +1 -1
- llama_stack/apis/safety/safety.py +95 -12
- llama_stack/apis/scoring/__init__.py +7 -0
- llama_stack/apis/scoring/scoring.py +93 -0
- llama_stack/apis/scoring_functions/__init__.py +7 -0
- llama_stack/apis/scoring_functions/scoring_functions.py +208 -0
- llama_stack/apis/shields/__init__.py +1 -1
- llama_stack/apis/shields/shields.py +76 -33
- llama_stack/apis/synthetic_data_generation/__init__.py +1 -1
- llama_stack/apis/synthetic_data_generation/synthetic_data_generation.py +40 -17
- llama_stack/apis/telemetry/__init__.py +1 -1
- llama_stack/apis/telemetry/telemetry.py +322 -31
- llama_stack/apis/{dataset → tools}/__init__.py +2 -1
- llama_stack/apis/tools/rag_tool.py +218 -0
- llama_stack/apis/tools/tools.py +221 -0
- llama_stack/apis/vector_io/__init__.py +7 -0
- llama_stack/apis/vector_io/vector_io.py +960 -0
- llama_stack/apis/vector_stores/__init__.py +7 -0
- llama_stack/apis/vector_stores/vector_stores.py +51 -0
- llama_stack/apis/version.py +9 -0
- llama_stack/cli/llama.py +13 -5
- llama_stack/cli/stack/_list_deps.py +182 -0
- llama_stack/cli/stack/list_apis.py +1 -1
- llama_stack/cli/stack/list_deps.py +55 -0
- llama_stack/cli/stack/list_providers.py +24 -10
- llama_stack/cli/stack/list_stacks.py +56 -0
- llama_stack/cli/stack/remove.py +115 -0
- llama_stack/cli/stack/run.py +169 -56
- llama_stack/cli/stack/stack.py +18 -4
- llama_stack/cli/stack/utils.py +151 -0
- llama_stack/cli/table.py +23 -61
- llama_stack/cli/utils.py +29 -0
- llama_stack/core/access_control/access_control.py +131 -0
- llama_stack/core/access_control/conditions.py +129 -0
- llama_stack/core/access_control/datatypes.py +107 -0
- llama_stack/core/build.py +164 -0
- llama_stack/core/client.py +205 -0
- llama_stack/core/common.sh +37 -0
- llama_stack/{distribution → core}/configure.py +74 -55
- llama_stack/core/conversations/conversations.py +309 -0
- llama_stack/core/datatypes.py +625 -0
- llama_stack/core/distribution.py +276 -0
- llama_stack/core/external.py +54 -0
- llama_stack/core/id_generation.py +42 -0
- llama_stack/core/inspect.py +86 -0
- llama_stack/core/library_client.py +539 -0
- llama_stack/core/prompts/prompts.py +234 -0
- llama_stack/core/providers.py +137 -0
- llama_stack/core/request_headers.py +115 -0
- llama_stack/core/resolver.py +506 -0
- llama_stack/core/routers/__init__.py +101 -0
- llama_stack/core/routers/datasets.py +73 -0
- llama_stack/core/routers/eval_scoring.py +155 -0
- llama_stack/core/routers/inference.py +645 -0
- llama_stack/core/routers/safety.py +85 -0
- llama_stack/core/routers/tool_runtime.py +91 -0
- llama_stack/core/routers/vector_io.py +442 -0
- llama_stack/core/routing_tables/benchmarks.py +62 -0
- llama_stack/core/routing_tables/common.py +254 -0
- llama_stack/core/routing_tables/datasets.py +91 -0
- llama_stack/core/routing_tables/models.py +163 -0
- llama_stack/core/routing_tables/scoring_functions.py +66 -0
- llama_stack/core/routing_tables/shields.py +61 -0
- llama_stack/core/routing_tables/toolgroups.py +129 -0
- llama_stack/core/routing_tables/vector_stores.py +292 -0
- llama_stack/core/server/auth.py +187 -0
- llama_stack/core/server/auth_providers.py +494 -0
- llama_stack/core/server/quota.py +110 -0
- llama_stack/core/server/routes.py +141 -0
- llama_stack/core/server/server.py +542 -0
- llama_stack/core/server/tracing.py +80 -0
- llama_stack/core/stack.py +546 -0
- llama_stack/core/start_stack.sh +117 -0
- llama_stack/core/storage/datatypes.py +283 -0
- llama_stack/{cli/model → core/store}/__init__.py +1 -1
- llama_stack/core/store/registry.py +199 -0
- llama_stack/core/testing_context.py +49 -0
- llama_stack/core/ui/app.py +55 -0
- llama_stack/core/ui/modules/api.py +32 -0
- llama_stack/core/ui/modules/utils.py +42 -0
- llama_stack/core/ui/page/distribution/datasets.py +18 -0
- llama_stack/core/ui/page/distribution/eval_tasks.py +20 -0
- llama_stack/core/ui/page/distribution/models.py +18 -0
- llama_stack/core/ui/page/distribution/providers.py +27 -0
- llama_stack/core/ui/page/distribution/resources.py +48 -0
- llama_stack/core/ui/page/distribution/scoring_functions.py +18 -0
- llama_stack/core/ui/page/distribution/shields.py +19 -0
- llama_stack/core/ui/page/evaluations/app_eval.py +143 -0
- llama_stack/core/ui/page/evaluations/native_eval.py +253 -0
- llama_stack/core/ui/page/playground/chat.py +130 -0
- llama_stack/core/ui/page/playground/tools.py +352 -0
- llama_stack/core/utils/config.py +30 -0
- llama_stack/{distribution → core}/utils/config_dirs.py +3 -6
- llama_stack/core/utils/config_resolution.py +125 -0
- llama_stack/core/utils/context.py +84 -0
- llama_stack/core/utils/exec.py +96 -0
- llama_stack/{providers/impls/meta_reference/codeshield/config.py → core/utils/image_types.py} +4 -3
- llama_stack/{distribution → core}/utils/model_utils.py +2 -2
- llama_stack/{distribution → core}/utils/prompt_for_config.py +30 -63
- llama_stack/{apis/batch_inference → distributions/dell}/__init__.py +1 -1
- llama_stack/distributions/dell/build.yaml +33 -0
- llama_stack/distributions/dell/dell.py +158 -0
- llama_stack/distributions/dell/run-with-safety.yaml +141 -0
- llama_stack/distributions/dell/run.yaml +132 -0
- llama_stack/distributions/meta-reference-gpu/__init__.py +7 -0
- llama_stack/distributions/meta-reference-gpu/build.yaml +32 -0
- llama_stack/distributions/meta-reference-gpu/meta_reference.py +163 -0
- llama_stack/distributions/meta-reference-gpu/run-with-safety.yaml +154 -0
- llama_stack/distributions/meta-reference-gpu/run.yaml +139 -0
- llama_stack/{apis/evals → distributions/nvidia}/__init__.py +1 -1
- llama_stack/distributions/nvidia/build.yaml +29 -0
- llama_stack/distributions/nvidia/nvidia.py +154 -0
- llama_stack/distributions/nvidia/run-with-safety.yaml +137 -0
- llama_stack/distributions/nvidia/run.yaml +116 -0
- llama_stack/distributions/open-benchmark/__init__.py +7 -0
- llama_stack/distributions/open-benchmark/build.yaml +36 -0
- llama_stack/distributions/open-benchmark/open_benchmark.py +303 -0
- llama_stack/distributions/open-benchmark/run.yaml +252 -0
- llama_stack/distributions/postgres-demo/__init__.py +7 -0
- llama_stack/distributions/postgres-demo/build.yaml +23 -0
- llama_stack/distributions/postgres-demo/postgres_demo.py +125 -0
- llama_stack/distributions/postgres-demo/run.yaml +115 -0
- llama_stack/{apis/memory → distributions/starter}/__init__.py +1 -1
- llama_stack/distributions/starter/build.yaml +61 -0
- llama_stack/distributions/starter/run-with-postgres-store.yaml +285 -0
- llama_stack/distributions/starter/run.yaml +276 -0
- llama_stack/distributions/starter/starter.py +345 -0
- llama_stack/distributions/starter-gpu/__init__.py +7 -0
- llama_stack/distributions/starter-gpu/build.yaml +61 -0
- llama_stack/distributions/starter-gpu/run-with-postgres-store.yaml +288 -0
- llama_stack/distributions/starter-gpu/run.yaml +279 -0
- llama_stack/distributions/starter-gpu/starter_gpu.py +20 -0
- llama_stack/distributions/template.py +456 -0
- llama_stack/distributions/watsonx/__init__.py +7 -0
- llama_stack/distributions/watsonx/build.yaml +33 -0
- llama_stack/distributions/watsonx/run.yaml +133 -0
- llama_stack/distributions/watsonx/watsonx.py +95 -0
- llama_stack/env.py +24 -0
- llama_stack/log.py +314 -0
- llama_stack/models/llama/checkpoint.py +164 -0
- llama_stack/models/llama/datatypes.py +164 -0
- llama_stack/models/llama/hadamard_utils.py +86 -0
- llama_stack/models/llama/llama3/args.py +74 -0
- llama_stack/models/llama/llama3/chat_format.py +286 -0
- llama_stack/models/llama/llama3/generation.py +376 -0
- llama_stack/models/llama/llama3/interface.py +255 -0
- llama_stack/models/llama/llama3/model.py +304 -0
- llama_stack/models/llama/llama3/multimodal/__init__.py +12 -0
- llama_stack/models/llama/llama3/multimodal/encoder_utils.py +180 -0
- llama_stack/models/llama/llama3/multimodal/image_transform.py +409 -0
- llama_stack/models/llama/llama3/multimodal/model.py +1430 -0
- llama_stack/models/llama/llama3/multimodal/utils.py +26 -0
- llama_stack/models/llama/llama3/prompt_templates/__init__.py +22 -0
- llama_stack/models/llama/llama3/prompt_templates/base.py +39 -0
- llama_stack/models/llama/llama3/prompt_templates/system_prompts.py +319 -0
- llama_stack/models/llama/llama3/prompt_templates/tool_response.py +62 -0
- llama_stack/models/llama/llama3/quantization/loader.py +316 -0
- llama_stack/models/llama/llama3/template_data.py +116 -0
- llama_stack/models/llama/llama3/tokenizer.model +128000 -0
- llama_stack/models/llama/llama3/tokenizer.py +198 -0
- llama_stack/models/llama/llama3/tool_utils.py +266 -0
- llama_stack/models/llama/llama3_1/__init__.py +12 -0
- llama_stack/models/llama/llama3_1/prompt_format.md +358 -0
- llama_stack/models/llama/llama3_1/prompts.py +258 -0
- llama_stack/models/llama/llama3_2/prompts_text.py +229 -0
- llama_stack/models/llama/llama3_2/prompts_vision.py +126 -0
- llama_stack/models/llama/llama3_2/text_prompt_format.md +286 -0
- llama_stack/models/llama/llama3_2/vision_prompt_format.md +141 -0
- llama_stack/models/llama/llama3_3/prompts.py +259 -0
- llama_stack/models/llama/llama4/args.py +107 -0
- llama_stack/models/llama/llama4/chat_format.py +317 -0
- llama_stack/models/llama/llama4/datatypes.py +56 -0
- llama_stack/models/llama/llama4/ffn.py +58 -0
- llama_stack/models/llama/llama4/generation.py +313 -0
- llama_stack/models/llama/llama4/model.py +437 -0
- llama_stack/models/llama/llama4/moe.py +214 -0
- llama_stack/models/llama/llama4/preprocess.py +435 -0
- llama_stack/models/llama/llama4/prompt_format.md +304 -0
- llama_stack/models/llama/llama4/prompt_templates/system_prompts.py +136 -0
- llama_stack/models/llama/llama4/prompts.py +279 -0
- llama_stack/models/llama/llama4/quantization/__init__.py +5 -0
- llama_stack/models/llama/llama4/quantization/loader.py +226 -0
- llama_stack/models/llama/llama4/tokenizer.model +200000 -0
- llama_stack/models/llama/llama4/tokenizer.py +263 -0
- llama_stack/models/llama/llama4/vision/__init__.py +5 -0
- llama_stack/models/llama/llama4/vision/embedding.py +210 -0
- llama_stack/models/llama/llama4/vision/encoder.py +412 -0
- llama_stack/models/llama/prompt_format.py +191 -0
- llama_stack/models/llama/quantize_impls.py +316 -0
- llama_stack/models/llama/sku_list.py +1029 -0
- llama_stack/models/llama/sku_types.py +233 -0
- llama_stack/models/llama/tokenizer_utils.py +40 -0
- llama_stack/providers/datatypes.py +136 -107
- llama_stack/providers/inline/__init__.py +5 -0
- llama_stack/providers/inline/agents/__init__.py +5 -0
- llama_stack/providers/{impls/meta_reference/agents → inline/agents/meta_reference}/__init__.py +12 -5
- llama_stack/providers/inline/agents/meta_reference/agent_instance.py +1024 -0
- llama_stack/providers/inline/agents/meta_reference/agents.py +383 -0
- llama_stack/providers/inline/agents/meta_reference/config.py +37 -0
- llama_stack/providers/inline/agents/meta_reference/persistence.py +228 -0
- llama_stack/providers/inline/agents/meta_reference/responses/__init__.py +5 -0
- llama_stack/providers/inline/agents/meta_reference/responses/openai_responses.py +423 -0
- llama_stack/providers/inline/agents/meta_reference/responses/streaming.py +1226 -0
- llama_stack/providers/inline/agents/meta_reference/responses/tool_executor.py +449 -0
- llama_stack/providers/inline/agents/meta_reference/responses/types.py +194 -0
- llama_stack/providers/inline/agents/meta_reference/responses/utils.py +365 -0
- llama_stack/providers/inline/agents/meta_reference/safety.py +52 -0
- llama_stack/providers/inline/batches/__init__.py +5 -0
- llama_stack/providers/inline/batches/reference/__init__.py +36 -0
- llama_stack/providers/inline/batches/reference/batches.py +679 -0
- llama_stack/providers/inline/batches/reference/config.py +40 -0
- llama_stack/providers/inline/datasetio/__init__.py +5 -0
- llama_stack/providers/inline/datasetio/localfs/__init__.py +20 -0
- llama_stack/providers/inline/datasetio/localfs/config.py +23 -0
- llama_stack/providers/inline/datasetio/localfs/datasetio.py +113 -0
- llama_stack/providers/inline/eval/__init__.py +5 -0
- llama_stack/providers/inline/eval/meta_reference/__init__.py +28 -0
- llama_stack/providers/inline/eval/meta_reference/config.py +23 -0
- llama_stack/providers/inline/eval/meta_reference/eval.py +259 -0
- llama_stack/providers/inline/files/localfs/__init__.py +20 -0
- llama_stack/providers/inline/files/localfs/config.py +31 -0
- llama_stack/providers/inline/files/localfs/files.py +219 -0
- llama_stack/providers/inline/inference/__init__.py +5 -0
- llama_stack/providers/{impls/meta_reference/inference → inline/inference/meta_reference}/__init__.py +4 -4
- llama_stack/providers/inline/inference/meta_reference/common.py +24 -0
- llama_stack/providers/inline/inference/meta_reference/config.py +68 -0
- llama_stack/providers/inline/inference/meta_reference/generators.py +211 -0
- llama_stack/providers/inline/inference/meta_reference/inference.py +158 -0
- llama_stack/providers/inline/inference/meta_reference/model_parallel.py +96 -0
- llama_stack/providers/{impls/meta_reference/inference → inline/inference/meta_reference}/parallel_utils.py +56 -73
- llama_stack/providers/inline/inference/sentence_transformers/__init__.py +22 -0
- llama_stack/providers/{impls/meta_reference/agents → inline/inference/sentence_transformers}/config.py +6 -4
- llama_stack/providers/inline/inference/sentence_transformers/sentence_transformers.py +83 -0
- llama_stack/providers/inline/post_training/__init__.py +5 -0
- llama_stack/providers/inline/post_training/common/__init__.py +5 -0
- llama_stack/providers/inline/post_training/common/utils.py +35 -0
- llama_stack/providers/inline/post_training/common/validator.py +36 -0
- llama_stack/providers/inline/post_training/huggingface/__init__.py +27 -0
- llama_stack/providers/inline/post_training/huggingface/config.py +83 -0
- llama_stack/providers/inline/post_training/huggingface/post_training.py +208 -0
- llama_stack/providers/inline/post_training/huggingface/recipes/__init__.py +5 -0
- llama_stack/providers/inline/post_training/huggingface/recipes/finetune_single_device.py +519 -0
- llama_stack/providers/inline/post_training/huggingface/recipes/finetune_single_device_dpo.py +485 -0
- llama_stack/providers/inline/post_training/huggingface/utils.py +269 -0
- llama_stack/providers/inline/post_training/torchtune/__init__.py +27 -0
- llama_stack/providers/inline/post_training/torchtune/common/__init__.py +5 -0
- llama_stack/providers/inline/post_training/torchtune/common/checkpointer.py +240 -0
- llama_stack/providers/inline/post_training/torchtune/common/utils.py +99 -0
- llama_stack/providers/inline/post_training/torchtune/config.py +20 -0
- llama_stack/providers/inline/post_training/torchtune/datasets/__init__.py +5 -0
- llama_stack/providers/inline/post_training/torchtune/datasets/format_adapter.py +57 -0
- llama_stack/providers/inline/post_training/torchtune/datasets/sft.py +78 -0
- llama_stack/providers/inline/post_training/torchtune/post_training.py +178 -0
- llama_stack/providers/inline/post_training/torchtune/recipes/__init__.py +5 -0
- llama_stack/providers/inline/post_training/torchtune/recipes/lora_finetuning_single_device.py +588 -0
- llama_stack/providers/inline/safety/__init__.py +5 -0
- llama_stack/providers/{impls/meta_reference/codeshield → inline/safety/code_scanner}/__init__.py +4 -2
- llama_stack/providers/inline/safety/code_scanner/code_scanner.py +128 -0
- llama_stack/providers/{impls/meta_reference/memory → inline/safety/code_scanner}/config.py +5 -3
- llama_stack/providers/inline/safety/llama_guard/__init__.py +19 -0
- llama_stack/providers/inline/safety/llama_guard/config.py +19 -0
- llama_stack/providers/inline/safety/llama_guard/llama_guard.py +489 -0
- llama_stack/providers/{adapters/memory/sample → inline/safety/prompt_guard}/__init__.py +4 -4
- llama_stack/providers/inline/safety/prompt_guard/config.py +32 -0
- llama_stack/providers/inline/safety/prompt_guard/prompt_guard.py +131 -0
- llama_stack/providers/inline/scoring/__init__.py +5 -0
- llama_stack/providers/inline/scoring/basic/__init__.py +25 -0
- llama_stack/providers/{adapters/memory/weaviate → inline/scoring/basic}/config.py +5 -7
- llama_stack/providers/inline/scoring/basic/scoring.py +126 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/__init__.py +5 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/docvqa_scoring_fn.py +240 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/equality_scoring_fn.py +41 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/__init__.py +5 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/docvqa.py +21 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/equality.py +21 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/ifeval.py +23 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/regex_parser_math_response.py +27 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/regex_parser_multiple_choice_answer.py +71 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/fn_defs/subset_of.py +21 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/ifeval_scoring_fn.py +80 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_math_response_scoring_fn.py +66 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_scoring_fn.py +58 -0
- llama_stack/providers/inline/scoring/basic/scoring_fn/subset_of_scoring_fn.py +38 -0
- llama_stack/providers/inline/scoring/basic/utils/__init__.py +5 -0
- llama_stack/providers/inline/scoring/basic/utils/ifeval_utils.py +3319 -0
- llama_stack/providers/inline/scoring/basic/utils/math_utils.py +330 -0
- llama_stack/providers/inline/scoring/braintrust/__init__.py +27 -0
- llama_stack/providers/inline/scoring/braintrust/braintrust.py +230 -0
- llama_stack/providers/inline/scoring/braintrust/config.py +21 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/__init__.py +5 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/__init__.py +5 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_correctness.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_relevancy.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/answer_similarity.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_entity_recall.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_precision.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_recall.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/context_relevancy.py +23 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/factuality.py +24 -0
- llama_stack/providers/inline/scoring/braintrust/scoring_fn/fn_defs/faithfulness.py +24 -0
- llama_stack/providers/inline/scoring/llm_as_judge/__init__.py +21 -0
- llama_stack/providers/inline/scoring/llm_as_judge/config.py +14 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring.py +113 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/__init__.py +5 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/fn_defs/__init__.py +5 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/fn_defs/llm_as_judge_405b_simpleqa.py +96 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/fn_defs/llm_as_judge_base.py +20 -0
- llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/llm_as_judge_scoring_fn.py +81 -0
- llama_stack/providers/inline/telemetry/__init__.py +5 -0
- llama_stack/providers/inline/telemetry/meta_reference/__init__.py +21 -0
- llama_stack/providers/inline/telemetry/meta_reference/config.py +47 -0
- llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +252 -0
- llama_stack/providers/inline/tool_runtime/__init__.py +5 -0
- llama_stack/providers/inline/tool_runtime/rag/__init__.py +19 -0
- llama_stack/providers/{impls/meta_reference/telemetry → inline/tool_runtime/rag}/config.py +5 -3
- llama_stack/providers/inline/tool_runtime/rag/context_retriever.py +77 -0
- llama_stack/providers/inline/tool_runtime/rag/memory.py +332 -0
- llama_stack/providers/inline/vector_io/__init__.py +5 -0
- llama_stack/providers/inline/vector_io/chroma/__init__.py +19 -0
- llama_stack/providers/inline/vector_io/chroma/config.py +30 -0
- llama_stack/providers/inline/vector_io/faiss/__init__.py +21 -0
- llama_stack/providers/inline/vector_io/faiss/config.py +26 -0
- llama_stack/providers/inline/vector_io/faiss/faiss.py +293 -0
- llama_stack/providers/inline/vector_io/milvus/__init__.py +19 -0
- llama_stack/providers/inline/vector_io/milvus/config.py +29 -0
- llama_stack/providers/inline/vector_io/qdrant/__init__.py +20 -0
- llama_stack/providers/inline/vector_io/qdrant/config.py +29 -0
- llama_stack/providers/inline/vector_io/sqlite_vec/__init__.py +20 -0
- llama_stack/providers/inline/vector_io/sqlite_vec/config.py +26 -0
- llama_stack/providers/inline/vector_io/sqlite_vec/sqlite_vec.py +483 -0
- llama_stack/providers/registry/agents.py +16 -18
- llama_stack/providers/registry/batches.py +26 -0
- llama_stack/providers/registry/datasetio.py +49 -0
- llama_stack/providers/registry/eval.py +46 -0
- llama_stack/providers/registry/files.py +31 -0
- llama_stack/providers/registry/inference.py +273 -118
- llama_stack/providers/registry/post_training.py +69 -0
- llama_stack/providers/registry/safety.py +46 -41
- llama_stack/providers/registry/scoring.py +51 -0
- llama_stack/providers/registry/tool_runtime.py +87 -0
- llama_stack/providers/registry/vector_io.py +828 -0
- llama_stack/providers/remote/__init__.py +5 -0
- llama_stack/providers/remote/agents/__init__.py +5 -0
- llama_stack/providers/remote/datasetio/__init__.py +5 -0
- llama_stack/providers/{adapters/memory/chroma → remote/datasetio/huggingface}/__init__.py +7 -4
- llama_stack/providers/remote/datasetio/huggingface/config.py +23 -0
- llama_stack/providers/remote/datasetio/huggingface/huggingface.py +99 -0
- llama_stack/providers/remote/datasetio/nvidia/__init__.py +23 -0
- llama_stack/providers/remote/datasetio/nvidia/config.py +61 -0
- llama_stack/providers/remote/datasetio/nvidia/datasetio.py +116 -0
- llama_stack/providers/remote/eval/__init__.py +5 -0
- llama_stack/providers/remote/eval/nvidia/__init__.py +31 -0
- llama_stack/providers/remote/eval/nvidia/config.py +29 -0
- llama_stack/providers/remote/eval/nvidia/eval.py +162 -0
- llama_stack/providers/remote/files/s3/__init__.py +19 -0
- llama_stack/providers/remote/files/s3/config.py +42 -0
- llama_stack/providers/remote/files/s3/files.py +313 -0
- llama_stack/providers/remote/inference/__init__.py +5 -0
- llama_stack/providers/{adapters/safety/sample → remote/inference/anthropic}/__init__.py +4 -6
- llama_stack/providers/remote/inference/anthropic/anthropic.py +36 -0
- llama_stack/providers/remote/inference/anthropic/config.py +28 -0
- llama_stack/providers/{impls/meta_reference/telemetry → remote/inference/azure}/__init__.py +4 -4
- llama_stack/providers/remote/inference/azure/azure.py +25 -0
- llama_stack/providers/remote/inference/azure/config.py +61 -0
- llama_stack/providers/{adapters → remote}/inference/bedrock/__init__.py +18 -17
- llama_stack/providers/remote/inference/bedrock/bedrock.py +142 -0
- llama_stack/providers/{adapters/inference/sample → remote/inference/bedrock}/config.py +3 -4
- llama_stack/providers/remote/inference/bedrock/models.py +29 -0
- llama_stack/providers/remote/inference/cerebras/__init__.py +19 -0
- llama_stack/providers/remote/inference/cerebras/cerebras.py +28 -0
- llama_stack/providers/remote/inference/cerebras/config.py +30 -0
- llama_stack/providers/{adapters → remote}/inference/databricks/__init__.py +4 -5
- llama_stack/providers/remote/inference/databricks/config.py +37 -0
- llama_stack/providers/remote/inference/databricks/databricks.py +44 -0
- llama_stack/providers/{adapters → remote}/inference/fireworks/__init__.py +8 -4
- llama_stack/providers/remote/inference/fireworks/config.py +27 -0
- llama_stack/providers/remote/inference/fireworks/fireworks.py +27 -0
- llama_stack/providers/{adapters/memory/pgvector → remote/inference/gemini}/__init__.py +4 -4
- llama_stack/providers/remote/inference/gemini/config.py +28 -0
- llama_stack/providers/remote/inference/gemini/gemini.py +82 -0
- llama_stack/providers/remote/inference/groq/__init__.py +15 -0
- llama_stack/providers/remote/inference/groq/config.py +34 -0
- llama_stack/providers/remote/inference/groq/groq.py +18 -0
- llama_stack/providers/remote/inference/llama_openai_compat/__init__.py +15 -0
- llama_stack/providers/remote/inference/llama_openai_compat/config.py +34 -0
- llama_stack/providers/remote/inference/llama_openai_compat/llama.py +46 -0
- llama_stack/providers/remote/inference/nvidia/__init__.py +23 -0
- llama_stack/providers/remote/inference/nvidia/config.py +64 -0
- llama_stack/providers/remote/inference/nvidia/nvidia.py +61 -0
- llama_stack/providers/{adapters/safety/sample/config.py → remote/inference/nvidia/utils.py} +3 -4
- llama_stack/providers/{impls/vllm → remote/inference/ollama}/__init__.py +4 -6
- llama_stack/providers/remote/inference/ollama/config.py +25 -0
- llama_stack/providers/remote/inference/ollama/ollama.py +102 -0
- llama_stack/providers/{adapters/telemetry/opentelemetry → remote/inference/openai}/__init__.py +4 -4
- llama_stack/providers/remote/inference/openai/config.py +39 -0
- llama_stack/providers/remote/inference/openai/openai.py +38 -0
- llama_stack/providers/remote/inference/passthrough/__init__.py +23 -0
- llama_stack/providers/remote/inference/passthrough/config.py +34 -0
- llama_stack/providers/remote/inference/passthrough/passthrough.py +122 -0
- llama_stack/providers/remote/inference/runpod/__init__.py +16 -0
- llama_stack/providers/remote/inference/runpod/config.py +32 -0
- llama_stack/providers/remote/inference/runpod/runpod.py +42 -0
- llama_stack/providers/remote/inference/sambanova/__init__.py +16 -0
- llama_stack/providers/remote/inference/sambanova/config.py +34 -0
- llama_stack/providers/remote/inference/sambanova/sambanova.py +28 -0
- llama_stack/providers/{adapters → remote}/inference/tgi/__init__.py +3 -4
- llama_stack/providers/remote/inference/tgi/config.py +76 -0
- llama_stack/providers/remote/inference/tgi/tgi.py +85 -0
- llama_stack/providers/{adapters → remote}/inference/together/__init__.py +8 -4
- llama_stack/providers/remote/inference/together/config.py +27 -0
- llama_stack/providers/remote/inference/together/together.py +102 -0
- llama_stack/providers/remote/inference/vertexai/__init__.py +15 -0
- llama_stack/providers/remote/inference/vertexai/config.py +48 -0
- llama_stack/providers/remote/inference/vertexai/vertexai.py +54 -0
- llama_stack/providers/remote/inference/vllm/__init__.py +22 -0
- llama_stack/providers/remote/inference/vllm/config.py +59 -0
- llama_stack/providers/remote/inference/vllm/vllm.py +111 -0
- llama_stack/providers/remote/inference/watsonx/__init__.py +15 -0
- llama_stack/providers/remote/inference/watsonx/config.py +45 -0
- llama_stack/providers/remote/inference/watsonx/watsonx.py +336 -0
- llama_stack/providers/remote/post_training/__init__.py +5 -0
- llama_stack/providers/remote/post_training/nvidia/__init__.py +23 -0
- llama_stack/providers/remote/post_training/nvidia/config.py +113 -0
- llama_stack/providers/remote/post_training/nvidia/models.py +27 -0
- llama_stack/providers/remote/post_training/nvidia/post_training.py +430 -0
- llama_stack/providers/remote/post_training/nvidia/utils.py +63 -0
- llama_stack/providers/remote/safety/__init__.py +5 -0
- llama_stack/providers/remote/safety/bedrock/bedrock.py +111 -0
- llama_stack/providers/remote/safety/bedrock/config.py +14 -0
- llama_stack/providers/{adapters/inference/sample → remote/safety/nvidia}/__init__.py +5 -4
- llama_stack/providers/remote/safety/nvidia/config.py +40 -0
- llama_stack/providers/remote/safety/nvidia/nvidia.py +161 -0
- llama_stack/providers/{adapters/agents/sample → remote/safety/sambanova}/__init__.py +5 -4
- llama_stack/providers/remote/safety/sambanova/config.py +37 -0
- llama_stack/providers/remote/safety/sambanova/sambanova.py +98 -0
- llama_stack/providers/remote/tool_runtime/__init__.py +5 -0
- llama_stack/providers/remote/tool_runtime/bing_search/__init__.py +21 -0
- llama_stack/providers/remote/tool_runtime/bing_search/bing_search.py +112 -0
- llama_stack/providers/remote/tool_runtime/bing_search/config.py +22 -0
- llama_stack/providers/remote/tool_runtime/brave_search/__init__.py +20 -0
- llama_stack/providers/remote/tool_runtime/brave_search/brave_search.py +148 -0
- llama_stack/providers/remote/tool_runtime/brave_search/config.py +27 -0
- llama_stack/providers/remote/tool_runtime/model_context_protocol/__init__.py +15 -0
- llama_stack/providers/remote/tool_runtime/model_context_protocol/config.py +20 -0
- llama_stack/providers/remote/tool_runtime/model_context_protocol/model_context_protocol.py +73 -0
- llama_stack/providers/remote/tool_runtime/tavily_search/__init__.py +20 -0
- llama_stack/providers/remote/tool_runtime/tavily_search/config.py +27 -0
- llama_stack/providers/remote/tool_runtime/tavily_search/tavily_search.py +84 -0
- llama_stack/providers/remote/tool_runtime/wolfram_alpha/__init__.py +22 -0
- llama_stack/providers/remote/tool_runtime/wolfram_alpha/config.py +21 -0
- llama_stack/providers/remote/tool_runtime/wolfram_alpha/wolfram_alpha.py +140 -0
- llama_stack/providers/remote/vector_io/__init__.py +5 -0
- llama_stack/providers/remote/vector_io/chroma/__init__.py +17 -0
- llama_stack/providers/remote/vector_io/chroma/chroma.py +215 -0
- llama_stack/providers/remote/vector_io/chroma/config.py +28 -0
- llama_stack/providers/remote/vector_io/milvus/__init__.py +18 -0
- llama_stack/providers/remote/vector_io/milvus/config.py +35 -0
- llama_stack/providers/remote/vector_io/milvus/milvus.py +375 -0
- llama_stack/providers/remote/vector_io/pgvector/__init__.py +17 -0
- llama_stack/providers/remote/vector_io/pgvector/config.py +47 -0
- llama_stack/providers/remote/vector_io/pgvector/pgvector.py +460 -0
- llama_stack/providers/remote/vector_io/qdrant/__init__.py +17 -0
- llama_stack/providers/remote/vector_io/qdrant/config.py +37 -0
- llama_stack/providers/remote/vector_io/qdrant/qdrant.py +265 -0
- llama_stack/providers/remote/vector_io/weaviate/__init__.py +17 -0
- llama_stack/providers/remote/vector_io/weaviate/config.py +32 -0
- llama_stack/providers/remote/vector_io/weaviate/weaviate.py +393 -0
- llama_stack/providers/utils/bedrock/__init__.py +5 -0
- llama_stack/providers/utils/bedrock/client.py +74 -0
- llama_stack/providers/utils/bedrock/config.py +64 -0
- llama_stack/providers/utils/bedrock/refreshable_boto_session.py +112 -0
- llama_stack/providers/utils/common/__init__.py +5 -0
- llama_stack/providers/utils/common/data_schema_validator.py +103 -0
- llama_stack/providers/utils/datasetio/__init__.py +5 -0
- llama_stack/providers/utils/datasetio/url_utils.py +47 -0
- llama_stack/providers/utils/files/__init__.py +5 -0
- llama_stack/providers/utils/files/form_data.py +69 -0
- llama_stack/providers/utils/inference/__init__.py +8 -7
- llama_stack/providers/utils/inference/embedding_mixin.py +101 -0
- llama_stack/providers/utils/inference/inference_store.py +264 -0
- llama_stack/providers/utils/inference/litellm_openai_mixin.py +336 -0
- llama_stack/providers/utils/inference/model_registry.py +173 -23
- llama_stack/providers/utils/inference/openai_compat.py +1261 -49
- llama_stack/providers/utils/inference/openai_mixin.py +506 -0
- llama_stack/providers/utils/inference/prompt_adapter.py +365 -67
- llama_stack/providers/utils/kvstore/api.py +6 -6
- llama_stack/providers/utils/kvstore/config.py +28 -48
- llama_stack/providers/utils/kvstore/kvstore.py +61 -15
- llama_stack/providers/utils/kvstore/mongodb/__init__.py +9 -0
- llama_stack/providers/utils/kvstore/mongodb/mongodb.py +82 -0
- llama_stack/providers/utils/kvstore/postgres/__init__.py +7 -0
- llama_stack/providers/utils/kvstore/postgres/postgres.py +114 -0
- llama_stack/providers/utils/kvstore/redis/redis.py +33 -9
- llama_stack/providers/utils/kvstore/sqlite/config.py +2 -1
- llama_stack/providers/utils/kvstore/sqlite/sqlite.py +123 -22
- llama_stack/providers/utils/memory/file_utils.py +1 -1
- llama_stack/providers/utils/memory/openai_vector_store_mixin.py +1304 -0
- llama_stack/providers/utils/memory/vector_store.py +220 -82
- llama_stack/providers/utils/pagination.py +43 -0
- llama_stack/providers/utils/responses/__init__.py +5 -0
- llama_stack/providers/utils/responses/responses_store.py +292 -0
- llama_stack/providers/utils/scheduler.py +270 -0
- llama_stack/providers/utils/scoring/__init__.py +5 -0
- llama_stack/providers/utils/scoring/aggregation_utils.py +75 -0
- llama_stack/providers/utils/scoring/base_scoring_fn.py +114 -0
- llama_stack/providers/utils/scoring/basic_scoring_utils.py +26 -0
- llama_stack/providers/utils/sqlstore/__init__.py +5 -0
- llama_stack/providers/utils/sqlstore/api.py +128 -0
- llama_stack/providers/utils/sqlstore/authorized_sqlstore.py +319 -0
- llama_stack/providers/utils/sqlstore/sqlalchemy_sqlstore.py +343 -0
- llama_stack/providers/utils/sqlstore/sqlstore.py +70 -0
- llama_stack/providers/utils/telemetry/trace_protocol.py +142 -0
- llama_stack/providers/utils/telemetry/tracing.py +192 -53
- llama_stack/providers/utils/tools/__init__.py +5 -0
- llama_stack/providers/utils/tools/mcp.py +148 -0
- llama_stack/providers/utils/tools/ttl_dict.py +70 -0
- llama_stack/providers/utils/vector_io/__init__.py +5 -0
- llama_stack/providers/utils/vector_io/vector_utils.py +156 -0
- llama_stack/schema_utils.py +118 -0
- llama_stack/strong_typing/__init__.py +19 -0
- llama_stack/strong_typing/auxiliary.py +228 -0
- llama_stack/strong_typing/classdef.py +440 -0
- llama_stack/strong_typing/core.py +46 -0
- llama_stack/strong_typing/deserializer.py +877 -0
- llama_stack/strong_typing/docstring.py +409 -0
- llama_stack/strong_typing/exception.py +23 -0
- llama_stack/strong_typing/inspection.py +1085 -0
- llama_stack/strong_typing/mapping.py +40 -0
- llama_stack/strong_typing/name.py +182 -0
- llama_stack/strong_typing/py.typed +0 -0
- llama_stack/strong_typing/schema.py +792 -0
- llama_stack/strong_typing/serialization.py +97 -0
- llama_stack/strong_typing/serializer.py +500 -0
- llama_stack/strong_typing/slots.py +27 -0
- llama_stack/strong_typing/topological.py +89 -0
- llama_stack/testing/__init__.py +5 -0
- llama_stack/testing/api_recorder.py +956 -0
- llama_stack/ui/node_modules/flatted/python/flatted.py +149 -0
- llama_stack-0.3.4.dist-info/METADATA +261 -0
- llama_stack-0.3.4.dist-info/RECORD +625 -0
- {llama_stack-0.0.42.dist-info → llama_stack-0.3.4.dist-info}/WHEEL +1 -1
- llama_stack/apis/agents/client.py +0 -292
- llama_stack/apis/agents/event_logger.py +0 -184
- llama_stack/apis/batch_inference/batch_inference.py +0 -72
- llama_stack/apis/common/deployment_types.py +0 -31
- llama_stack/apis/dataset/dataset.py +0 -63
- llama_stack/apis/evals/evals.py +0 -122
- llama_stack/apis/inference/client.py +0 -197
- llama_stack/apis/inspect/client.py +0 -82
- llama_stack/apis/memory/client.py +0 -155
- llama_stack/apis/memory/memory.py +0 -65
- llama_stack/apis/memory_banks/__init__.py +0 -7
- llama_stack/apis/memory_banks/client.py +0 -101
- llama_stack/apis/memory_banks/memory_banks.py +0 -78
- llama_stack/apis/models/client.py +0 -83
- llama_stack/apis/reward_scoring/__init__.py +0 -7
- llama_stack/apis/reward_scoring/reward_scoring.py +0 -55
- llama_stack/apis/safety/client.py +0 -105
- llama_stack/apis/shields/client.py +0 -79
- llama_stack/cli/download.py +0 -340
- llama_stack/cli/model/describe.py +0 -82
- llama_stack/cli/model/download.py +0 -24
- llama_stack/cli/model/list.py +0 -62
- llama_stack/cli/model/model.py +0 -34
- llama_stack/cli/model/prompt_format.py +0 -112
- llama_stack/cli/model/safety_models.py +0 -52
- llama_stack/cli/stack/build.py +0 -299
- llama_stack/cli/stack/configure.py +0 -178
- llama_stack/distribution/build.py +0 -123
- llama_stack/distribution/build_conda_env.sh +0 -136
- llama_stack/distribution/build_container.sh +0 -142
- llama_stack/distribution/common.sh +0 -40
- llama_stack/distribution/configure_container.sh +0 -47
- llama_stack/distribution/datatypes.py +0 -139
- llama_stack/distribution/distribution.py +0 -58
- llama_stack/distribution/inspect.py +0 -67
- llama_stack/distribution/request_headers.py +0 -57
- llama_stack/distribution/resolver.py +0 -323
- llama_stack/distribution/routers/__init__.py +0 -48
- llama_stack/distribution/routers/routers.py +0 -158
- llama_stack/distribution/routers/routing_tables.py +0 -173
- llama_stack/distribution/server/endpoints.py +0 -48
- llama_stack/distribution/server/server.py +0 -343
- llama_stack/distribution/start_conda_env.sh +0 -42
- llama_stack/distribution/start_container.sh +0 -64
- llama_stack/distribution/templates/local-bedrock-conda-example-build.yaml +0 -10
- llama_stack/distribution/templates/local-build.yaml +0 -10
- llama_stack/distribution/templates/local-databricks-build.yaml +0 -10
- llama_stack/distribution/templates/local-fireworks-build.yaml +0 -10
- llama_stack/distribution/templates/local-hf-endpoint-build.yaml +0 -10
- llama_stack/distribution/templates/local-hf-serverless-build.yaml +0 -10
- llama_stack/distribution/templates/local-ollama-build.yaml +0 -10
- llama_stack/distribution/templates/local-tgi-build.yaml +0 -10
- llama_stack/distribution/templates/local-together-build.yaml +0 -10
- llama_stack/distribution/templates/local-vllm-build.yaml +0 -10
- llama_stack/distribution/utils/exec.py +0 -105
- llama_stack/providers/adapters/agents/sample/sample.py +0 -18
- llama_stack/providers/adapters/inference/bedrock/bedrock.py +0 -451
- llama_stack/providers/adapters/inference/bedrock/config.py +0 -55
- llama_stack/providers/adapters/inference/databricks/config.py +0 -21
- llama_stack/providers/adapters/inference/databricks/databricks.py +0 -125
- llama_stack/providers/adapters/inference/fireworks/config.py +0 -20
- llama_stack/providers/adapters/inference/fireworks/fireworks.py +0 -130
- llama_stack/providers/adapters/inference/ollama/__init__.py +0 -19
- llama_stack/providers/adapters/inference/ollama/ollama.py +0 -175
- llama_stack/providers/adapters/inference/sample/sample.py +0 -23
- llama_stack/providers/adapters/inference/tgi/config.py +0 -43
- llama_stack/providers/adapters/inference/tgi/tgi.py +0 -200
- llama_stack/providers/adapters/inference/together/config.py +0 -22
- llama_stack/providers/adapters/inference/together/together.py +0 -143
- llama_stack/providers/adapters/memory/chroma/chroma.py +0 -157
- llama_stack/providers/adapters/memory/pgvector/config.py +0 -17
- llama_stack/providers/adapters/memory/pgvector/pgvector.py +0 -211
- llama_stack/providers/adapters/memory/sample/sample.py +0 -23
- llama_stack/providers/adapters/memory/weaviate/__init__.py +0 -15
- llama_stack/providers/adapters/memory/weaviate/weaviate.py +0 -190
- llama_stack/providers/adapters/safety/bedrock/bedrock.py +0 -113
- llama_stack/providers/adapters/safety/bedrock/config.py +0 -16
- llama_stack/providers/adapters/safety/sample/sample.py +0 -23
- llama_stack/providers/adapters/safety/together/__init__.py +0 -18
- llama_stack/providers/adapters/safety/together/config.py +0 -26
- llama_stack/providers/adapters/safety/together/together.py +0 -101
- llama_stack/providers/adapters/telemetry/opentelemetry/config.py +0 -12
- llama_stack/providers/adapters/telemetry/opentelemetry/opentelemetry.py +0 -201
- llama_stack/providers/adapters/telemetry/sample/__init__.py +0 -17
- llama_stack/providers/adapters/telemetry/sample/config.py +0 -12
- llama_stack/providers/adapters/telemetry/sample/sample.py +0 -18
- llama_stack/providers/impls/meta_reference/agents/agent_instance.py +0 -844
- llama_stack/providers/impls/meta_reference/agents/agents.py +0 -161
- llama_stack/providers/impls/meta_reference/agents/persistence.py +0 -84
- llama_stack/providers/impls/meta_reference/agents/rag/context_retriever.py +0 -74
- llama_stack/providers/impls/meta_reference/agents/safety.py +0 -57
- llama_stack/providers/impls/meta_reference/agents/tests/code_execution.py +0 -93
- llama_stack/providers/impls/meta_reference/agents/tests/test_chat_agent.py +0 -305
- llama_stack/providers/impls/meta_reference/agents/tools/base.py +0 -20
- llama_stack/providers/impls/meta_reference/agents/tools/builtin.py +0 -375
- llama_stack/providers/impls/meta_reference/agents/tools/ipython_tool/code_env_prefix.py +0 -133
- llama_stack/providers/impls/meta_reference/agents/tools/ipython_tool/code_execution.py +0 -256
- llama_stack/providers/impls/meta_reference/agents/tools/ipython_tool/matplotlib_custom_backend.py +0 -87
- llama_stack/providers/impls/meta_reference/agents/tools/ipython_tool/utils.py +0 -21
- llama_stack/providers/impls/meta_reference/agents/tools/safety.py +0 -43
- llama_stack/providers/impls/meta_reference/codeshield/code_scanner.py +0 -58
- llama_stack/providers/impls/meta_reference/inference/config.py +0 -45
- llama_stack/providers/impls/meta_reference/inference/generation.py +0 -376
- llama_stack/providers/impls/meta_reference/inference/inference.py +0 -280
- llama_stack/providers/impls/meta_reference/inference/model_parallel.py +0 -99
- llama_stack/providers/impls/meta_reference/inference/quantization/fp8_impls.py +0 -184
- llama_stack/providers/impls/meta_reference/inference/quantization/fp8_txest_disabled.py +0 -76
- llama_stack/providers/impls/meta_reference/inference/quantization/loader.py +0 -97
- llama_stack/providers/impls/meta_reference/inference/quantization/scripts/quantize_checkpoint.py +0 -161
- llama_stack/providers/impls/meta_reference/memory/__init__.py +0 -19
- llama_stack/providers/impls/meta_reference/memory/faiss.py +0 -113
- llama_stack/providers/impls/meta_reference/safety/__init__.py +0 -17
- llama_stack/providers/impls/meta_reference/safety/base.py +0 -57
- llama_stack/providers/impls/meta_reference/safety/config.py +0 -48
- llama_stack/providers/impls/meta_reference/safety/llama_guard.py +0 -268
- llama_stack/providers/impls/meta_reference/safety/prompt_guard.py +0 -145
- llama_stack/providers/impls/meta_reference/safety/safety.py +0 -112
- llama_stack/providers/impls/meta_reference/telemetry/console.py +0 -89
- llama_stack/providers/impls/vllm/config.py +0 -35
- llama_stack/providers/impls/vllm/vllm.py +0 -241
- llama_stack/providers/registry/memory.py +0 -78
- llama_stack/providers/registry/telemetry.py +0 -44
- llama_stack/providers/tests/agents/test_agents.py +0 -210
- llama_stack/providers/tests/inference/test_inference.py +0 -257
- llama_stack/providers/tests/inference/test_prompt_adapter.py +0 -126
- llama_stack/providers/tests/memory/test_memory.py +0 -136
- llama_stack/providers/tests/resolver.py +0 -100
- llama_stack/providers/tests/safety/test_safety.py +0 -77
- llama_stack-0.0.42.dist-info/METADATA +0 -137
- llama_stack-0.0.42.dist-info/RECORD +0 -256
- /llama_stack/{distribution → core}/__init__.py +0 -0
- /llama_stack/{distribution/server → core/access_control}/__init__.py +0 -0
- /llama_stack/{distribution/utils → core/conversations}/__init__.py +0 -0
- /llama_stack/{providers/adapters → core/prompts}/__init__.py +0 -0
- /llama_stack/{providers/adapters/agents → core/routing_tables}/__init__.py +0 -0
- /llama_stack/{providers/adapters/inference → core/server}/__init__.py +0 -0
- /llama_stack/{providers/adapters/memory → core/storage}/__init__.py +0 -0
- /llama_stack/{providers/adapters/safety → core/ui}/__init__.py +0 -0
- /llama_stack/{providers/adapters/telemetry → core/ui/modules}/__init__.py +0 -0
- /llama_stack/{providers/impls → core/ui/page}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference → core/ui/page/distribution}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference/agents/rag → core/ui/page/evaluations}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference/agents/tests → core/ui/page/playground}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference/agents/tools → core/utils}/__init__.py +0 -0
- /llama_stack/{distribution → core}/utils/dynamic.py +0 -0
- /llama_stack/{distribution → core}/utils/serialize.py +0 -0
- /llama_stack/{providers/impls/meta_reference/agents/tools/ipython_tool → distributions}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference/inference/quantization → models}/__init__.py +0 -0
- /llama_stack/{providers/impls/meta_reference/inference/quantization/scripts → models/llama}/__init__.py +0 -0
- /llama_stack/{providers/tests → models/llama/llama3}/__init__.py +0 -0
- /llama_stack/{providers/tests/agents → models/llama/llama3/quantization}/__init__.py +0 -0
- /llama_stack/{providers/tests/inference → models/llama/llama3_2}/__init__.py +0 -0
- /llama_stack/{providers/tests/memory → models/llama/llama3_3}/__init__.py +0 -0
- /llama_stack/{providers/tests/safety → models/llama/llama4}/__init__.py +0 -0
- /llama_stack/{scripts → models/llama/llama4/prompt_templates}/__init__.py +0 -0
- /llama_stack/providers/{adapters → remote}/safety/bedrock/__init__.py +0 -0
- {llama_stack-0.0.42.dist-info → llama_stack-0.3.4.dist-info}/entry_points.txt +0 -0
- {llama_stack-0.0.42.dist-info → llama_stack-0.3.4.dist-info/licenses}/LICENSE +0 -0
- {llama_stack-0.0.42.dist-info → llama_stack-0.3.4.dist-info}/top_level.txt +0 -0
|
@@ -4,12 +4,28 @@
|
|
|
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
|
-
|
|
8
|
-
|
|
7
|
+
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
8
|
+
# All rights reserved.
|
|
9
|
+
# This source code is licensed under the terms described in the LICENSE file in
|
|
10
|
+
# the root directory of this source tree.
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from llama_stack.core.storage.datatypes import KVStoreReference, StorageBackendConfig, StorageBackendType
|
|
15
|
+
|
|
16
|
+
from .api import KVStore
|
|
17
|
+
from .config import KVStoreConfig
|
|
9
18
|
|
|
10
19
|
|
|
11
20
|
def kvstore_dependencies():
|
|
12
|
-
|
|
21
|
+
"""
|
|
22
|
+
Returns all possible kvstore dependencies for registry/provider specifications.
|
|
23
|
+
|
|
24
|
+
NOTE: For specific kvstore implementations, use config.pip_packages instead.
|
|
25
|
+
This function returns the union of all dependencies for cases where the specific
|
|
26
|
+
kvstore type is not known at declaration time (e.g., provider registries).
|
|
27
|
+
"""
|
|
28
|
+
return ["aiosqlite", "psycopg2-binary", "redis", "pymongo"]
|
|
13
29
|
|
|
14
30
|
|
|
15
31
|
class InmemoryKVStoreImpl(KVStore):
|
|
@@ -19,31 +35,61 @@ class InmemoryKVStoreImpl(KVStore):
|
|
|
19
35
|
async def initialize(self) -> None:
|
|
20
36
|
pass
|
|
21
37
|
|
|
22
|
-
async def get(self, key: str) ->
|
|
38
|
+
async def get(self, key: str) -> str | None:
|
|
23
39
|
return self._store.get(key)
|
|
24
40
|
|
|
25
41
|
async def set(self, key: str, value: str) -> None:
|
|
26
42
|
self._store[key] = value
|
|
27
43
|
|
|
28
|
-
async def
|
|
29
|
-
return [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
]
|
|
44
|
+
async def values_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
45
|
+
return [self._store[key] for key in self._store.keys() if key >= start_key and key < end_key]
|
|
46
|
+
|
|
47
|
+
async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
48
|
+
"""Get all keys in the given range."""
|
|
49
|
+
return [key for key in self._store.keys() if key >= start_key and key < end_key]
|
|
50
|
+
|
|
51
|
+
async def delete(self, key: str) -> None:
|
|
52
|
+
del self._store[key]
|
|
34
53
|
|
|
35
54
|
|
|
36
|
-
|
|
37
|
-
|
|
55
|
+
_KVSTORE_BACKENDS: dict[str, KVStoreConfig] = {}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def register_kvstore_backends(backends: dict[str, StorageBackendConfig]) -> None:
|
|
59
|
+
"""Register the set of available KV store backends for reference resolution."""
|
|
60
|
+
global _KVSTORE_BACKENDS
|
|
61
|
+
|
|
62
|
+
_KVSTORE_BACKENDS.clear()
|
|
63
|
+
for name, cfg in backends.items():
|
|
64
|
+
_KVSTORE_BACKENDS[name] = cfg
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
async def kvstore_impl(reference: KVStoreReference) -> KVStore:
|
|
68
|
+
backend_name = reference.backend
|
|
69
|
+
|
|
70
|
+
backend_config = _KVSTORE_BACKENDS.get(backend_name)
|
|
71
|
+
if backend_config is None:
|
|
72
|
+
raise ValueError(f"Unknown KVStore backend '{backend_name}'. Registered backends: {sorted(_KVSTORE_BACKENDS)}")
|
|
73
|
+
|
|
74
|
+
config = backend_config.model_copy()
|
|
75
|
+
config.namespace = reference.namespace
|
|
76
|
+
|
|
77
|
+
if config.type == StorageBackendType.KV_REDIS.value:
|
|
38
78
|
from .redis import RedisKVStoreImpl
|
|
39
79
|
|
|
40
80
|
impl = RedisKVStoreImpl(config)
|
|
41
|
-
elif config.type ==
|
|
81
|
+
elif config.type == StorageBackendType.KV_SQLITE.value:
|
|
42
82
|
from .sqlite import SqliteKVStoreImpl
|
|
43
83
|
|
|
44
84
|
impl = SqliteKVStoreImpl(config)
|
|
45
|
-
elif config.type ==
|
|
46
|
-
|
|
85
|
+
elif config.type == StorageBackendType.KV_POSTGRES.value:
|
|
86
|
+
from .postgres import PostgresKVStoreImpl
|
|
87
|
+
|
|
88
|
+
impl = PostgresKVStoreImpl(config)
|
|
89
|
+
elif config.type == StorageBackendType.KV_MONGODB.value:
|
|
90
|
+
from .mongodb import MongoDBKVStoreImpl
|
|
91
|
+
|
|
92
|
+
impl = MongoDBKVStoreImpl(config)
|
|
47
93
|
else:
|
|
48
94
|
raise ValueError(f"Unknown kvstore type {config.type}")
|
|
49
95
|
|
|
@@ -0,0 +1,9 @@
|
|
|
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 .mongodb import MongoDBKVStoreImpl
|
|
8
|
+
|
|
9
|
+
__all__ = ["MongoDBKVStoreImpl"]
|
|
@@ -0,0 +1,82 @@
|
|
|
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 datetime import datetime
|
|
8
|
+
|
|
9
|
+
from pymongo import AsyncMongoClient
|
|
10
|
+
from pymongo.asynchronous.collection import AsyncCollection
|
|
11
|
+
|
|
12
|
+
from llama_stack.log import get_logger
|
|
13
|
+
from llama_stack.providers.utils.kvstore import KVStore
|
|
14
|
+
|
|
15
|
+
from ..config import MongoDBKVStoreConfig
|
|
16
|
+
|
|
17
|
+
log = get_logger(name=__name__, category="providers::utils")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class MongoDBKVStoreImpl(KVStore):
|
|
21
|
+
def __init__(self, config: MongoDBKVStoreConfig):
|
|
22
|
+
self.config = config
|
|
23
|
+
self.conn: AsyncMongoClient | None = None
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def collection(self) -> AsyncCollection:
|
|
27
|
+
if self.conn is None:
|
|
28
|
+
raise RuntimeError("MongoDB connection is not initialized")
|
|
29
|
+
return self.conn[self.config.db][self.config.collection_name]
|
|
30
|
+
|
|
31
|
+
async def initialize(self) -> None:
|
|
32
|
+
try:
|
|
33
|
+
conn_creds = {
|
|
34
|
+
"host": self.config.host,
|
|
35
|
+
"port": self.config.port,
|
|
36
|
+
"username": self.config.user,
|
|
37
|
+
"password": self.config.password,
|
|
38
|
+
}
|
|
39
|
+
conn_creds = {k: v for k, v in conn_creds.items() if v is not None}
|
|
40
|
+
self.conn = AsyncMongoClient(**conn_creds)
|
|
41
|
+
except Exception as e:
|
|
42
|
+
log.exception("Could not connect to MongoDB database server")
|
|
43
|
+
raise RuntimeError("Could not connect to MongoDB database server") from e
|
|
44
|
+
|
|
45
|
+
def _namespaced_key(self, key: str) -> str:
|
|
46
|
+
if not self.config.namespace:
|
|
47
|
+
return key
|
|
48
|
+
return f"{self.config.namespace}:{key}"
|
|
49
|
+
|
|
50
|
+
async def set(self, key: str, value: str, expiration: datetime | None = None) -> None:
|
|
51
|
+
key = self._namespaced_key(key)
|
|
52
|
+
update_query = {"$set": {"value": value, "expiration": expiration}}
|
|
53
|
+
await self.collection.update_one({"key": key}, update_query, upsert=True)
|
|
54
|
+
|
|
55
|
+
async def get(self, key: str) -> str | None:
|
|
56
|
+
key = self._namespaced_key(key)
|
|
57
|
+
query = {"key": key}
|
|
58
|
+
result = await self.collection.find_one(query, {"value": 1, "_id": 0})
|
|
59
|
+
return result["value"] if result else None
|
|
60
|
+
|
|
61
|
+
async def delete(self, key: str) -> None:
|
|
62
|
+
key = self._namespaced_key(key)
|
|
63
|
+
await self.collection.delete_one({"key": key})
|
|
64
|
+
|
|
65
|
+
async def values_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
66
|
+
start_key = self._namespaced_key(start_key)
|
|
67
|
+
end_key = self._namespaced_key(end_key)
|
|
68
|
+
query = {
|
|
69
|
+
"key": {"$gte": start_key, "$lt": end_key},
|
|
70
|
+
}
|
|
71
|
+
cursor = self.collection.find(query, {"value": 1, "_id": 0}).sort("key", 1)
|
|
72
|
+
result = []
|
|
73
|
+
async for doc in cursor:
|
|
74
|
+
result.append(doc["value"])
|
|
75
|
+
return result
|
|
76
|
+
|
|
77
|
+
async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
78
|
+
start_key = self._namespaced_key(start_key)
|
|
79
|
+
end_key = self._namespaced_key(end_key)
|
|
80
|
+
query = {"key": {"$gte": start_key, "$lt": end_key}}
|
|
81
|
+
cursor = self.collection.find(query, {"key": 1, "_id": 0}).sort("key", 1)
|
|
82
|
+
return [doc["key"] for doc in cursor]
|
|
@@ -0,0 +1,7 @@
|
|
|
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 .postgres import PostgresKVStoreImpl # noqa: F401 F403
|
|
@@ -0,0 +1,114 @@
|
|
|
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 datetime import datetime
|
|
8
|
+
|
|
9
|
+
import psycopg2
|
|
10
|
+
from psycopg2.extras import DictCursor
|
|
11
|
+
|
|
12
|
+
from llama_stack.log import get_logger
|
|
13
|
+
|
|
14
|
+
from ..api import KVStore
|
|
15
|
+
from ..config import PostgresKVStoreConfig
|
|
16
|
+
|
|
17
|
+
log = get_logger(name=__name__, category="providers::utils")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PostgresKVStoreImpl(KVStore):
|
|
21
|
+
def __init__(self, config: PostgresKVStoreConfig):
|
|
22
|
+
self.config = config
|
|
23
|
+
self.conn = None
|
|
24
|
+
self.cursor = None
|
|
25
|
+
|
|
26
|
+
async def initialize(self) -> None:
|
|
27
|
+
try:
|
|
28
|
+
self.conn = psycopg2.connect(
|
|
29
|
+
host=self.config.host,
|
|
30
|
+
port=self.config.port,
|
|
31
|
+
database=self.config.db,
|
|
32
|
+
user=self.config.user,
|
|
33
|
+
password=self.config.password,
|
|
34
|
+
sslmode=self.config.ssl_mode,
|
|
35
|
+
sslrootcert=self.config.ca_cert_path,
|
|
36
|
+
)
|
|
37
|
+
self.conn.autocommit = True
|
|
38
|
+
self.cursor = self.conn.cursor(cursor_factory=DictCursor)
|
|
39
|
+
|
|
40
|
+
# Create table if it doesn't exist
|
|
41
|
+
self.cursor.execute(
|
|
42
|
+
f"""
|
|
43
|
+
CREATE TABLE IF NOT EXISTS {self.config.table_name} (
|
|
44
|
+
key TEXT PRIMARY KEY,
|
|
45
|
+
value TEXT,
|
|
46
|
+
expiration TIMESTAMP
|
|
47
|
+
)
|
|
48
|
+
"""
|
|
49
|
+
)
|
|
50
|
+
except Exception as e:
|
|
51
|
+
log.exception("Could not connect to PostgreSQL database server")
|
|
52
|
+
raise RuntimeError("Could not connect to PostgreSQL database server") from e
|
|
53
|
+
|
|
54
|
+
def _namespaced_key(self, key: str) -> str:
|
|
55
|
+
if not self.config.namespace:
|
|
56
|
+
return key
|
|
57
|
+
return f"{self.config.namespace}:{key}"
|
|
58
|
+
|
|
59
|
+
async def set(self, key: str, value: str, expiration: datetime | None = None) -> None:
|
|
60
|
+
key = self._namespaced_key(key)
|
|
61
|
+
self.cursor.execute(
|
|
62
|
+
f"""
|
|
63
|
+
INSERT INTO {self.config.table_name} (key, value, expiration)
|
|
64
|
+
VALUES (%s, %s, %s)
|
|
65
|
+
ON CONFLICT (key) DO UPDATE
|
|
66
|
+
SET value = EXCLUDED.value, expiration = EXCLUDED.expiration
|
|
67
|
+
""",
|
|
68
|
+
(key, value, expiration),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
async def get(self, key: str) -> str | None:
|
|
72
|
+
key = self._namespaced_key(key)
|
|
73
|
+
self.cursor.execute(
|
|
74
|
+
f"""
|
|
75
|
+
SELECT value FROM {self.config.table_name}
|
|
76
|
+
WHERE key = %s
|
|
77
|
+
AND (expiration IS NULL OR expiration > NOW())
|
|
78
|
+
""",
|
|
79
|
+
(key,),
|
|
80
|
+
)
|
|
81
|
+
result = self.cursor.fetchone()
|
|
82
|
+
return result[0] if result else None
|
|
83
|
+
|
|
84
|
+
async def delete(self, key: str) -> None:
|
|
85
|
+
key = self._namespaced_key(key)
|
|
86
|
+
self.cursor.execute(
|
|
87
|
+
f"DELETE FROM {self.config.table_name} WHERE key = %s",
|
|
88
|
+
(key,),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
async def values_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
92
|
+
start_key = self._namespaced_key(start_key)
|
|
93
|
+
end_key = self._namespaced_key(end_key)
|
|
94
|
+
|
|
95
|
+
self.cursor.execute(
|
|
96
|
+
f"""
|
|
97
|
+
SELECT value FROM {self.config.table_name}
|
|
98
|
+
WHERE key >= %s AND key < %s
|
|
99
|
+
AND (expiration IS NULL OR expiration > NOW())
|
|
100
|
+
ORDER BY key
|
|
101
|
+
""",
|
|
102
|
+
(start_key, end_key),
|
|
103
|
+
)
|
|
104
|
+
return [row[0] for row in self.cursor.fetchall()]
|
|
105
|
+
|
|
106
|
+
async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
107
|
+
start_key = self._namespaced_key(start_key)
|
|
108
|
+
end_key = self._namespaced_key(end_key)
|
|
109
|
+
|
|
110
|
+
self.cursor.execute(
|
|
111
|
+
f"SELECT key FROM {self.config.table_name} WHERE key >= %s AND key < %s",
|
|
112
|
+
(start_key, end_key),
|
|
113
|
+
)
|
|
114
|
+
return [row[0] for row in self.cursor.fetchall()]
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
# the root directory of this source tree.
|
|
6
6
|
|
|
7
7
|
from datetime import datetime
|
|
8
|
-
from typing import List, Optional
|
|
9
8
|
|
|
10
9
|
from redis.asyncio import Redis
|
|
11
10
|
|
|
12
|
-
from ..api import
|
|
11
|
+
from ..api import KVStore
|
|
13
12
|
from ..config import RedisKVStoreConfig
|
|
14
13
|
|
|
15
14
|
|
|
@@ -25,28 +24,53 @@ class RedisKVStoreImpl(KVStore):
|
|
|
25
24
|
return key
|
|
26
25
|
return f"{self.config.namespace}:{key}"
|
|
27
26
|
|
|
28
|
-
async def set(
|
|
29
|
-
self, key: str, value: str, expiration: Optional[datetime] = None
|
|
30
|
-
) -> None:
|
|
27
|
+
async def set(self, key: str, value: str, expiration: datetime | None = None) -> None:
|
|
31
28
|
key = self._namespaced_key(key)
|
|
32
29
|
await self.redis.set(key, value)
|
|
33
30
|
if expiration:
|
|
34
31
|
await self.redis.expireat(key, expiration)
|
|
35
32
|
|
|
36
|
-
async def get(self, key: str) ->
|
|
33
|
+
async def get(self, key: str) -> str | None:
|
|
37
34
|
key = self._namespaced_key(key)
|
|
38
35
|
value = await self.redis.get(key)
|
|
39
36
|
if value is None:
|
|
40
37
|
return None
|
|
41
|
-
|
|
38
|
+
await self.redis.ttl(key)
|
|
42
39
|
return value
|
|
43
40
|
|
|
44
41
|
async def delete(self, key: str) -> None:
|
|
45
42
|
key = self._namespaced_key(key)
|
|
46
43
|
await self.redis.delete(key)
|
|
47
44
|
|
|
48
|
-
async def
|
|
45
|
+
async def values_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
49
46
|
start_key = self._namespaced_key(start_key)
|
|
50
47
|
end_key = self._namespaced_key(end_key)
|
|
48
|
+
cursor = 0
|
|
49
|
+
pattern = start_key + "*" # Match all keys starting with start_key prefix
|
|
50
|
+
matching_keys = []
|
|
51
|
+
while True:
|
|
52
|
+
cursor, keys = await self.redis.scan(cursor, match=pattern, count=1000)
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
for key in keys:
|
|
55
|
+
key_str = key.decode("utf-8") if isinstance(key, bytes) else key
|
|
56
|
+
if start_key <= key_str <= end_key:
|
|
57
|
+
matching_keys.append(key)
|
|
58
|
+
|
|
59
|
+
if cursor == 0:
|
|
60
|
+
break
|
|
61
|
+
|
|
62
|
+
# Then fetch all values in a single MGET call
|
|
63
|
+
if matching_keys:
|
|
64
|
+
values = await self.redis.mget(matching_keys)
|
|
65
|
+
return [
|
|
66
|
+
value.decode("utf-8") if isinstance(value, bytes) else value for value in values if value is not None
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
return []
|
|
70
|
+
|
|
71
|
+
async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
72
|
+
"""Get all keys in the given range."""
|
|
73
|
+
matching_keys = await self.redis.zrangebylex(self.namespace, f"[{start_key}", f"[{end_key}")
|
|
74
|
+
if not matching_keys:
|
|
75
|
+
return []
|
|
76
|
+
return [k.decode("utf-8") for k in matching_keys]
|
|
@@ -4,9 +4,10 @@
|
|
|
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 llama_models.schema_utils import json_schema_type
|
|
8
7
|
from pydantic import BaseModel, Field
|
|
9
8
|
|
|
9
|
+
from llama_stack.schema_utils import json_schema_type
|
|
10
|
+
|
|
10
11
|
|
|
11
12
|
@json_schema_type
|
|
12
13
|
class SqliteControlPlaneConfig(BaseModel):
|
|
@@ -5,25 +5,43 @@
|
|
|
5
5
|
# the root directory of this source tree.
|
|
6
6
|
|
|
7
7
|
import os
|
|
8
|
-
|
|
9
8
|
from datetime import datetime
|
|
10
|
-
from typing import List, Optional
|
|
11
9
|
|
|
12
10
|
import aiosqlite
|
|
13
11
|
|
|
14
|
-
from
|
|
12
|
+
from llama_stack.log import get_logger
|
|
13
|
+
|
|
14
|
+
from ..api import KVStore
|
|
15
15
|
from ..config import SqliteKVStoreConfig
|
|
16
16
|
|
|
17
|
+
logger = get_logger(name=__name__, category="providers::utils")
|
|
18
|
+
|
|
17
19
|
|
|
18
20
|
class SqliteKVStoreImpl(KVStore):
|
|
19
21
|
def __init__(self, config: SqliteKVStoreConfig):
|
|
20
22
|
self.db_path = config.db_path
|
|
21
23
|
self.table_name = "kvstore"
|
|
24
|
+
self._conn: aiosqlite.Connection | None = None
|
|
25
|
+
|
|
26
|
+
def __str__(self):
|
|
27
|
+
return f"SqliteKVStoreImpl(db_path={self.db_path}, table_name={self.table_name})"
|
|
28
|
+
|
|
29
|
+
def _is_memory_db(self) -> bool:
|
|
30
|
+
"""Check if this is an in-memory database."""
|
|
31
|
+
return self.db_path == ":memory:" or "mode=memory" in self.db_path
|
|
22
32
|
|
|
23
33
|
async def initialize(self):
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
# Skip directory creation for in-memory databases and file: URIs
|
|
35
|
+
if not self._is_memory_db() and not self.db_path.startswith("file:"):
|
|
36
|
+
db_dir = os.path.dirname(self.db_path)
|
|
37
|
+
if db_dir: # Only create if there's a directory component
|
|
38
|
+
os.makedirs(db_dir, exist_ok=True)
|
|
39
|
+
|
|
40
|
+
# Only use persistent connection for in-memory databases
|
|
41
|
+
# File-based databases use connection-per-operation to avoid hangs
|
|
42
|
+
if self._is_memory_db():
|
|
43
|
+
self._conn = await aiosqlite.connect(self.db_path)
|
|
44
|
+
await self._conn.execute(
|
|
27
45
|
f"""
|
|
28
46
|
CREATE TABLE IF NOT EXISTS {self.table_name} (
|
|
29
47
|
key TEXT PRIMARY KEY,
|
|
@@ -32,37 +50,88 @@ class SqliteKVStoreImpl(KVStore):
|
|
|
32
50
|
)
|
|
33
51
|
"""
|
|
34
52
|
)
|
|
35
|
-
await
|
|
53
|
+
await self._conn.commit()
|
|
54
|
+
else:
|
|
55
|
+
# For file-based databases, just create the table
|
|
56
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
57
|
+
await db.execute(
|
|
58
|
+
f"""
|
|
59
|
+
CREATE TABLE IF NOT EXISTS {self.table_name} (
|
|
60
|
+
key TEXT PRIMARY KEY,
|
|
61
|
+
value TEXT,
|
|
62
|
+
expiration TIMESTAMP
|
|
63
|
+
)
|
|
64
|
+
"""
|
|
65
|
+
)
|
|
66
|
+
await db.commit()
|
|
36
67
|
|
|
37
|
-
async def
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
68
|
+
async def shutdown(self):
|
|
69
|
+
"""Close the persistent connection (only for in-memory databases)."""
|
|
70
|
+
if self._conn:
|
|
71
|
+
await self._conn.close()
|
|
72
|
+
self._conn = None
|
|
73
|
+
|
|
74
|
+
async def set(self, key: str, value: str, expiration: datetime | None = None) -> None:
|
|
75
|
+
if self._conn:
|
|
76
|
+
# In-memory database with persistent connection
|
|
77
|
+
await self._conn.execute(
|
|
42
78
|
f"INSERT OR REPLACE INTO {self.table_name} (key, value, expiration) VALUES (?, ?, ?)",
|
|
43
79
|
(key, value, expiration),
|
|
44
80
|
)
|
|
45
|
-
await
|
|
81
|
+
await self._conn.commit()
|
|
82
|
+
else:
|
|
83
|
+
# File-based database with connection per operation
|
|
84
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
85
|
+
await db.execute(
|
|
86
|
+
f"INSERT OR REPLACE INTO {self.table_name} (key, value, expiration) VALUES (?, ?, ?)",
|
|
87
|
+
(key, value, expiration),
|
|
88
|
+
)
|
|
89
|
+
await db.commit()
|
|
46
90
|
|
|
47
|
-
async def get(self, key: str) ->
|
|
48
|
-
|
|
49
|
-
|
|
91
|
+
async def get(self, key: str) -> str | None:
|
|
92
|
+
if self._conn:
|
|
93
|
+
# In-memory database with persistent connection
|
|
94
|
+
async with self._conn.execute(
|
|
50
95
|
f"SELECT value, expiration FROM {self.table_name} WHERE key = ?", (key,)
|
|
51
96
|
) as cursor:
|
|
52
97
|
row = await cursor.fetchone()
|
|
53
98
|
if row is None:
|
|
54
99
|
return None
|
|
55
100
|
value, expiration = row
|
|
101
|
+
if not isinstance(value, str):
|
|
102
|
+
logger.warning(f"Expected string value for key {key}, got {type(value)}, returning None")
|
|
103
|
+
return None
|
|
56
104
|
return value
|
|
105
|
+
else:
|
|
106
|
+
# File-based database with connection per operation
|
|
107
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
108
|
+
async with db.execute(
|
|
109
|
+
f"SELECT value, expiration FROM {self.table_name} WHERE key = ?", (key,)
|
|
110
|
+
) as cursor:
|
|
111
|
+
row = await cursor.fetchone()
|
|
112
|
+
if row is None:
|
|
113
|
+
return None
|
|
114
|
+
value, expiration = row
|
|
115
|
+
if not isinstance(value, str):
|
|
116
|
+
logger.warning(f"Expected string value for key {key}, got {type(value)}, returning None")
|
|
117
|
+
return None
|
|
118
|
+
return value
|
|
57
119
|
|
|
58
120
|
async def delete(self, key: str) -> None:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
await
|
|
121
|
+
if self._conn:
|
|
122
|
+
# In-memory database with persistent connection
|
|
123
|
+
await self._conn.execute(f"DELETE FROM {self.table_name} WHERE key = ?", (key,))
|
|
124
|
+
await self._conn.commit()
|
|
125
|
+
else:
|
|
126
|
+
# File-based database with connection per operation
|
|
127
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
128
|
+
await db.execute(f"DELETE FROM {self.table_name} WHERE key = ?", (key,))
|
|
129
|
+
await db.commit()
|
|
62
130
|
|
|
63
|
-
async def
|
|
64
|
-
|
|
65
|
-
|
|
131
|
+
async def values_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
132
|
+
if self._conn:
|
|
133
|
+
# In-memory database with persistent connection
|
|
134
|
+
async with self._conn.execute(
|
|
66
135
|
f"SELECT key, value, expiration FROM {self.table_name} WHERE key >= ? AND key <= ?",
|
|
67
136
|
(start_key, end_key),
|
|
68
137
|
) as cursor:
|
|
@@ -71,3 +140,35 @@ class SqliteKVStoreImpl(KVStore):
|
|
|
71
140
|
_, value, _ = row
|
|
72
141
|
result.append(value)
|
|
73
142
|
return result
|
|
143
|
+
else:
|
|
144
|
+
# File-based database with connection per operation
|
|
145
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
146
|
+
async with db.execute(
|
|
147
|
+
f"SELECT key, value, expiration FROM {self.table_name} WHERE key >= ? AND key <= ?",
|
|
148
|
+
(start_key, end_key),
|
|
149
|
+
) as cursor:
|
|
150
|
+
result = []
|
|
151
|
+
async for row in cursor:
|
|
152
|
+
_, value, _ = row
|
|
153
|
+
result.append(value)
|
|
154
|
+
return result
|
|
155
|
+
|
|
156
|
+
async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
|
|
157
|
+
"""Get all keys in the given range."""
|
|
158
|
+
if self._conn:
|
|
159
|
+
# In-memory database with persistent connection
|
|
160
|
+
cursor = await self._conn.execute(
|
|
161
|
+
f"SELECT key FROM {self.table_name} WHERE key >= ? AND key <= ?",
|
|
162
|
+
(start_key, end_key),
|
|
163
|
+
)
|
|
164
|
+
rows = await cursor.fetchall()
|
|
165
|
+
return [row[0] for row in rows]
|
|
166
|
+
else:
|
|
167
|
+
# File-based database with connection per operation
|
|
168
|
+
async with aiosqlite.connect(self.db_path) as db:
|
|
169
|
+
cursor = await db.execute(
|
|
170
|
+
f"SELECT key FROM {self.table_name} WHERE key >= ? AND key <= ?",
|
|
171
|
+
(start_key, end_key),
|
|
172
|
+
)
|
|
173
|
+
rows = await cursor.fetchall()
|
|
174
|
+
return [row[0] for row in rows]
|