Copy disabled (too large)
Download .txt
Showing preview only (80,439K chars total). Download the full file to get everything.
Repository: llamastack/llama-stack
Branch: main
Commit: 700b202df7e5
Files: 4148
Total size: 75.7 MB
Directory structure:
gitextract_g2qf32pc/
├── .coveragerc
├── .dockerignore
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── discussion.yml
│ │ ├── feature-request.yml
│ │ └── tech-debt.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── TRIAGERS.md
│ ├── actions/
│ │ ├── install-llama-stack-client/
│ │ │ └── action.yml
│ │ ├── run-and-record-tests/
│ │ │ └── action.yml
│ │ ├── setup-ollama/
│ │ │ └── action.yml
│ │ ├── setup-runner/
│ │ │ └── action.yml
│ │ ├── setup-test-environment/
│ │ │ └── action.yml
│ │ ├── setup-typescript-client/
│ │ │ └── action.yml
│ │ └── setup-vllm/
│ │ └── action.yml
│ ├── dependabot.yml
│ ├── mergify.yml
│ └── workflows/
│ ├── README.md
│ ├── backward-compat.yml
│ ├── build-distributions.yml
│ ├── ci-status.yml
│ ├── codeql.yml
│ ├── commit-recordings.yml
│ ├── docs-build.yml
│ ├── install-script-ci.yml
│ ├── integration-auth-tests.yml
│ ├── integration-responses-conversations-auth-tests.yml
│ ├── integration-sql-store-tests.yml
│ ├── integration-tests.yml
│ ├── integration-vector-io-tests.yml
│ ├── openapi-generator-validation.yml
│ ├── openresponses-conformance.yml
│ ├── post-release.yml
│ ├── pre-commit.yml
│ ├── prepare-release.yml
│ ├── providers-build.yml
│ ├── providers-list-deps.yml
│ ├── pypi.yml
│ ├── record-integration-tests.yml
│ ├── release-branch-scheduled-ci.yml
│ ├── semantic-pr.yml
│ ├── stainless-builds.yml
│ ├── stale_bot.yml
│ ├── test-external-provider-module.yml
│ ├── test-external.yml
│ ├── ui-unit-tests.yml
│ └── unit-tests.yml
├── .gitignore
├── .pre-commit-config.yaml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── RELEASE_NOTES.md
├── RELEASE_PROCESS.md
├── SECURITY.md
├── benchmarking/
│ ├── k8s-benchmark/
│ │ ├── README.md
│ │ ├── apply.sh
│ │ ├── openai-mock-server.py
│ │ ├── results/
│ │ │ ├── guidellm-benchmark-stack-s1-sw1-v1-20250922-103408.txt
│ │ │ ├── guidellm-benchmark-stack-s1-sw2-v1-20250922-104457.txt
│ │ │ ├── guidellm-benchmark-stack-s1-sw4-v1-20250922-105539.txt
│ │ │ └── guidellm-benchmark-vllm-v1-20250922-111127.txt
│ │ ├── scripts/
│ │ │ ├── generate_charts.py
│ │ │ ├── run-all-benchmarks.sh
│ │ │ └── run-guidellm-benchmark.sh
│ │ ├── stack-configmap.yaml
│ │ ├── stack-k8s.yaml.template
│ │ └── stack_run_config.yaml
│ └── vertical-scaling/
│ ├── README.md
│ ├── locustfile.py
│ ├── mock-server.py
│ └── run-benchmark.sh
├── client-sdks/
│ ├── openapi/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build_hierarchy.py
│ │ ├── merge_stainless_config.py
│ │ ├── openapi-config.json.template
│ │ ├── openapitools.json
│ │ ├── patch_hierarchy.py
│ │ ├── patches.yml
│ │ └── templates/
│ │ └── python/
│ │ ├── README.mustache
│ │ ├── README_onlypackage.mustache
│ │ ├── __init__.mustache
│ │ ├── __init__api.mustache
│ │ ├── __init__model.mustache
│ │ ├── __init__package.mustache
│ │ ├── _exceptions.mustache
│ │ ├── _types.mustache
│ │ ├── _version.mustache
│ │ ├── api.mustache
│ │ ├── api_client.mustache
│ │ ├── api_doc.mustache
│ │ ├── api_doc_example.mustache
│ │ ├── api_response.mustache
│ │ ├── api_test.mustache
│ │ ├── async_api_client.mustache
│ │ ├── async_api_response.mustache
│ │ ├── async_stream.mustache
│ │ ├── asyncio/
│ │ │ └── rest.mustache
│ │ ├── common_README.mustache
│ │ ├── configuration.mustache
│ │ ├── exceptions.mustache
│ │ ├── exports_api.mustache
│ │ ├── exports_model.mustache
│ │ ├── exports_package.mustache
│ │ ├── git_push.sh.mustache
│ │ ├── gitignore.mustache
│ │ ├── httpx/
│ │ │ └── rest.mustache
│ │ ├── lib/
│ │ │ ├── .keep
│ │ │ ├── __init__.py
│ │ │ ├── _utils.py
│ │ │ ├── agents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent.py
│ │ │ │ ├── client_tool.py
│ │ │ │ ├── event_logger.py
│ │ │ │ ├── event_synthesizer.py
│ │ │ │ ├── react/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent.py
│ │ │ │ │ ├── prompts.py
│ │ │ │ │ └── tool_parser.py
│ │ │ │ ├── tool_parser.py
│ │ │ │ ├── turn_events.py
│ │ │ │ └── types.py
│ │ │ ├── cli/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── configure.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── datasets/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── datasets.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── register.py
│ │ │ │ │ └── unregister.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── eval.py
│ │ │ │ │ ├── run_benchmark.py
│ │ │ │ │ ├── run_scoring.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── eval_tasks/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── eval_tasks.py
│ │ │ │ │ └── list.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── inference.py
│ │ │ │ ├── inspect/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── llama_stack_client.py
│ │ │ │ ├── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── post_training/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── post_training.py
│ │ │ │ ├── providers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ └── providers.py
│ │ │ │ ├── scoring_functions/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ └── scoring_functions.py
│ │ │ │ ├── shields/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── shields.py
│ │ │ │ ├── toolgroups/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── toolgroups.py
│ │ │ │ └── vector_stores/
│ │ │ │ ├── __init__.py
│ │ │ │ └── vector_stores.py
│ │ │ ├── inference/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── event_logger.py
│ │ │ │ └── utils.py
│ │ │ ├── inline/
│ │ │ │ └── inline.py
│ │ │ ├── stream_printer.py
│ │ │ └── tools/
│ │ │ ├── __init__.py
│ │ │ └── mcp_oauth.py
│ │ ├── llama_stack_client.mustache
│ │ ├── model.mustache
│ │ ├── model_anyof.mustache
│ │ ├── model_doc.mustache
│ │ ├── model_enum.mustache
│ │ ├── model_generic.mustache
│ │ ├── model_oneof.mustache
│ │ ├── model_test.mustache
│ │ ├── partial_api.mustache
│ │ ├── partial_api_args.mustache
│ │ ├── partial_header.mustache
│ │ ├── partial_model_postponed_imports.mustache
│ │ ├── partial_model_wrapper_methods.mustache
│ │ ├── py.typed.mustache
│ │ ├── pyproject.mustache
│ │ ├── python_doc_auth_partial.mustache
│ │ ├── requirements.mustache
│ │ ├── rest.mustache
│ │ ├── setup.mustache
│ │ ├── setup_cfg.mustache
│ │ ├── signing.mustache
│ │ ├── stream.mustache
│ │ ├── test-requirements.mustache
│ │ ├── tornado/
│ │ │ └── rest.mustache
│ │ └── tox.mustache
│ └── stainless/
│ ├── README.md
│ ├── config.yml
│ └── openapi.yml
├── conftest.py
├── containers/
│ └── Containerfile
├── docs/
│ ├── README.md
│ ├── blog/
│ │ ├── 2026-01-13-introducing-llama-stack.md
│ │ ├── 2026-01-30-how-to-get-started.md
│ │ ├── 2026-03-01-building-agentic-flows.md
│ │ ├── 2026-03-18-responses-api.md
│ │ ├── building-agentic-flows/
│ │ │ ├── design/
│ │ │ │ └── user_service_v2.md
│ │ │ ├── postmortems/
│ │ │ │ ├── 2025-01-search-indexing-incident.md
│ │ │ │ └── 2025-02-checkout-outage.md
│ │ │ └── runbooks/
│ │ │ └── deployment_rollback.md
│ │ └── self_improving_agent.py
│ ├── docs/
│ │ ├── advanced_apis/
│ │ │ ├── evaluation.mdx
│ │ │ └── scoring.mdx
│ │ ├── api-openai/
│ │ │ ├── conformance.mdx
│ │ │ ├── index.mdx
│ │ │ └── provider_matrix.md
│ │ ├── api-overview.md
│ │ ├── building_applications/
│ │ │ ├── agent.mdx
│ │ │ ├── agent_execution_loop.mdx
│ │ │ ├── evals.mdx
│ │ │ ├── index.mdx
│ │ │ ├── playground.mdx
│ │ │ ├── rag.mdx
│ │ │ ├── responses_vs_agents.mdx
│ │ │ ├── safety.mdx
│ │ │ ├── telemetry.mdx
│ │ │ └── tools.mdx
│ │ ├── concepts/
│ │ │ ├── apis/
│ │ │ │ ├── api_leveling.mdx
│ │ │ │ ├── api_providers.mdx
│ │ │ │ ├── external.mdx
│ │ │ │ └── index.mdx
│ │ │ ├── architecture.mdx
│ │ │ ├── distributions.mdx
│ │ │ ├── evaluation_concepts.mdx
│ │ │ ├── file_operations_vector_stores.mdx
│ │ │ ├── index.mdx
│ │ │ ├── resources.mdx
│ │ │ └── vector_stores_configuration.mdx
│ │ ├── contributing/
│ │ │ ├── index.mdx
│ │ │ ├── new_api_provider.mdx
│ │ │ ├── new_vector_database.mdx
│ │ │ └── testing/
│ │ │ └── record-replay.mdx
│ │ ├── deploying/
│ │ │ ├── aws_eks_deployment.mdx
│ │ │ ├── index.mdx
│ │ │ └── kubernetes_deployment.mdx
│ │ ├── distributions/
│ │ │ ├── building_distro.mdx
│ │ │ ├── configuration.mdx
│ │ │ ├── customizing_run_yaml.mdx
│ │ │ ├── eks/
│ │ │ │ ├── apply.sh
│ │ │ │ └── gp3-topology-aware.yaml
│ │ │ ├── importing_as_library.mdx
│ │ │ ├── index.mdx
│ │ │ ├── k8s/
│ │ │ │ ├── apply.sh
│ │ │ │ ├── chroma-k8s.yaml.template
│ │ │ │ ├── hf-token-secret.yaml.template
│ │ │ │ ├── ingress-k8s.yaml.template
│ │ │ │ ├── postgres-k8s.yaml.template
│ │ │ │ ├── stack-configmap.yaml
│ │ │ │ ├── stack-k8s.yaml.template
│ │ │ │ ├── stack_run_config.yaml
│ │ │ │ ├── ui-k8s.yaml.template
│ │ │ │ ├── vllm-k8s.yaml.template
│ │ │ │ └── vllm-safety-k8s.yaml.template
│ │ │ ├── list_of_distributions.mdx
│ │ │ ├── llama_stack_ui.mdx
│ │ │ ├── ondevice_distro/
│ │ │ │ ├── android_sdk.md
│ │ │ │ └── ios_sdk.md
│ │ │ ├── remote_hosted_distro/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── oci.md
│ │ │ │ └── watsonx.md
│ │ │ ├── self_hosted_distro/
│ │ │ │ ├── dell-tgi.md
│ │ │ │ ├── dell.md
│ │ │ │ ├── nvidia.md
│ │ │ │ ├── passthrough.md
│ │ │ │ └── starter.md
│ │ │ └── starting_llama_stack_server.mdx
│ │ ├── getting_started/
│ │ │ ├── demo_script.py
│ │ │ ├── detailed_tutorial.mdx
│ │ │ ├── libraries.mdx
│ │ │ └── quickstart.mdx
│ │ ├── index.mdx
│ │ ├── providers/
│ │ │ ├── agents/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_builtin.mdx
│ │ │ ├── batches/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_reference.mdx
│ │ │ ├── datasetio/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_localfs.mdx
│ │ │ │ ├── remote_huggingface.mdx
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── eval/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_builtin.mdx
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── external/
│ │ │ │ ├── external-providers-guide.mdx
│ │ │ │ ├── external-providers-list.mdx
│ │ │ │ └── index.mdx
│ │ │ ├── file_processors/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_pypdf.mdx
│ │ │ ├── files/
│ │ │ │ ├── files.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_localfs.mdx
│ │ │ │ ├── openai_file_operations_quick_reference.md
│ │ │ │ ├── openai_file_operations_support.md
│ │ │ │ ├── remote_openai.mdx
│ │ │ │ └── remote_s3.mdx
│ │ │ ├── index.mdx
│ │ │ ├── inference/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_sentence-transformers.mdx
│ │ │ │ ├── inline_transformers.mdx
│ │ │ │ ├── remote_anthropic.mdx
│ │ │ │ ├── remote_azure.mdx
│ │ │ │ ├── remote_bedrock.mdx
│ │ │ │ ├── remote_cerebras.mdx
│ │ │ │ ├── remote_databricks.mdx
│ │ │ │ ├── remote_fireworks.mdx
│ │ │ │ ├── remote_gemini.mdx
│ │ │ │ ├── remote_groq.mdx
│ │ │ │ ├── remote_hf_endpoint.mdx
│ │ │ │ ├── remote_hf_serverless.mdx
│ │ │ │ ├── remote_llama-cpp-server.mdx
│ │ │ │ ├── remote_llama-cpp.mdx
│ │ │ │ ├── remote_llama-openai-compat.mdx
│ │ │ │ ├── remote_llama-server.mdx
│ │ │ │ ├── remote_nvidia.mdx
│ │ │ │ ├── remote_oci.mdx
│ │ │ │ ├── remote_ollama.mdx
│ │ │ │ ├── remote_openai.mdx
│ │ │ │ ├── remote_passthrough.mdx
│ │ │ │ ├── remote_runpod.mdx
│ │ │ │ ├── remote_sambanova-openai-compat.mdx
│ │ │ │ ├── remote_sambanova.mdx
│ │ │ │ ├── remote_tgi.mdx
│ │ │ │ ├── remote_together.mdx
│ │ │ │ ├── remote_vertexai.mdx
│ │ │ │ ├── remote_vllm.mdx
│ │ │ │ └── remote_watsonx.mdx
│ │ │ ├── openai.mdx
│ │ │ ├── openai_responses_limitations.mdx
│ │ │ ├── post_training/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_huggingface-cpu.mdx
│ │ │ │ ├── inline_huggingface-gpu.mdx
│ │ │ │ ├── inline_huggingface.mdx
│ │ │ │ ├── inline_torchtune-cpu.mdx
│ │ │ │ ├── inline_torchtune-gpu.mdx
│ │ │ │ ├── inline_torchtune.md
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── safety/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_code-scanner.mdx
│ │ │ │ ├── inline_llama-guard.mdx
│ │ │ │ ├── inline_prompt-guard.mdx
│ │ │ │ ├── remote_bedrock.mdx
│ │ │ │ ├── remote_nvidia.mdx
│ │ │ │ ├── remote_passthrough.mdx
│ │ │ │ └── remote_sambanova.mdx
│ │ │ ├── scoring/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_basic.mdx
│ │ │ │ ├── inline_braintrust.mdx
│ │ │ │ └── inline_llm-as-judge.mdx
│ │ │ ├── tool_runtime/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_file-search.mdx
│ │ │ │ ├── inline_rag-runtime.mdx
│ │ │ │ ├── remote_bing-search.mdx
│ │ │ │ ├── remote_brave-search.mdx
│ │ │ │ ├── remote_model-context-protocol.mdx
│ │ │ │ ├── remote_tavily-search.mdx
│ │ │ │ └── remote_wolfram-alpha.mdx
│ │ │ └── vector_io/
│ │ │ ├── index.mdx
│ │ │ ├── inline_builtin.mdx
│ │ │ ├── inline_chromadb.mdx
│ │ │ ├── inline_faiss.mdx
│ │ │ ├── inline_milvus.mdx
│ │ │ ├── inline_qdrant.mdx
│ │ │ ├── inline_sqlite-vec.mdx
│ │ │ ├── inline_sqlite_vec.mdx
│ │ │ ├── remote_chromadb.mdx
│ │ │ ├── remote_elasticsearch.mdx
│ │ │ ├── remote_milvus.mdx
│ │ │ ├── remote_oci.mdx
│ │ │ ├── remote_pgvector.mdx
│ │ │ ├── remote_qdrant.mdx
│ │ │ └── remote_weaviate.mdx
│ │ └── references/
│ │ ├── evals_reference/
│ │ │ └── index.mdx
│ │ ├── index.mdx
│ │ ├── llama_cli_reference/
│ │ │ ├── download_models.md
│ │ │ └── index.md
│ │ ├── llama_stack_client_cli_reference.md
│ │ └── python_sdk_reference/
│ │ └── index.md
│ ├── docusaurus.config.ts
│ ├── getting_started.ipynb
│ ├── getting_started_llama_api.ipynb
│ ├── license_header.txt
│ ├── notebooks/
│ │ ├── Llama_Stack_Agent_Workflows.ipynb
│ │ ├── Llama_Stack_RAG_Lifecycle.ipynb
│ │ ├── bedrock_inference_example.ipynb
│ │ ├── crewai/
│ │ │ └── Llama_Stack_CrewAI.ipynb
│ │ ├── langchain/
│ │ │ └── Llama_Stack_LangChain.ipynb
│ │ ├── llamastack_agents_getting_started_examples.ipynb
│ │ ├── microsoft_agent_framework/
│ │ │ └── microsoft_agent_framework_llama_stack_integration.ipynb
│ │ ├── nvidia/
│ │ │ ├── beginner_e2e/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.py
│ │ │ │ └── sample_data/
│ │ │ │ ├── sample_content_safety_test_data/
│ │ │ │ │ ├── content_safety_input.jsonl
│ │ │ │ │ └── content_safety_input_50.jsonl
│ │ │ │ ├── sample_squad_data/
│ │ │ │ │ ├── testing/
│ │ │ │ │ │ └── testing.jsonl
│ │ │ │ │ ├── training/
│ │ │ │ │ │ └── training.jsonl
│ │ │ │ │ └── validation/
│ │ │ │ │ └── validation.jsonl
│ │ │ │ └── sample_squad_messages/
│ │ │ │ ├── testing/
│ │ │ │ │ └── testing.jsonl
│ │ │ │ ├── training/
│ │ │ │ │ └── training.jsonl
│ │ │ │ └── validation/
│ │ │ │ └── validation.jsonl
│ │ │ └── tool_calling/
│ │ │ ├── 1_data_preparation.ipynb
│ │ │ ├── 3_model_evaluation.ipynb
│ │ │ ├── 4_adding_safety_guardrails.ipynb
│ │ │ ├── README.md
│ │ │ └── config.py
│ │ ├── oci/
│ │ │ ├── OCI_LlamaStack_Agents_Demo.ipynb
│ │ │ ├── OCI_LlamaStack_Demo.ipynb
│ │ │ └── OCI_ObjectStore_Demo.ipynb
│ │ └── responses-api-agent-migration.ipynb
│ ├── original_rfc.md
│ ├── package.json
│ ├── quick_start.ipynb
│ ├── releases/
│ │ ├── GENERATE.md
│ │ └── RELEASE_NOTES_0.5.md
│ ├── scripts/
│ │ └── sync-files.js
│ ├── sidebars.ts
│ ├── source/
│ │ └── providers/
│ │ ├── agents/
│ │ │ └── index.md
│ │ └── inference/
│ │ └── index.md
│ ├── src/
│ │ ├── components/
│ │ │ ├── CodeFromFile.jsx
│ │ │ └── HomepageFeatures/
│ │ │ ├── index.js
│ │ │ └── styles.module.css
│ │ ├── css/
│ │ │ └── custom.css
│ │ └── pages/
│ │ ├── index.js
│ │ ├── index.module.css
│ │ └── markdown-page.md
│ ├── static/
│ │ ├── deprecated-llama-stack-spec.html
│ │ ├── deprecated-llama-stack-spec.yaml
│ │ ├── experimental-llama-stack-spec.yaml
│ │ ├── llama-stack-spec.html
│ │ ├── llama-stack-spec.yaml
│ │ ├── openai-coverage.json
│ │ ├── openai-spec-2.3.0.yml
│ │ ├── openresponses-spec.json
│ │ ├── site.webmanifest
│ │ ├── stainless-llama-stack-spec.html
│ │ └── stainless-llama-stack-spec.yaml
│ ├── supplementary/
│ │ ├── deprecated/
│ │ │ └── agents-api.md
│ │ ├── experimental/
│ │ │ └── agents-api.md
│ │ └── stable/
│ │ └── agents-api.md
│ ├── tsconfig.json
│ └── zero_to_hero_guide/
│ ├── 00_Inference101.ipynb
│ ├── 01_Local_Cloud_Inference101.ipynb
│ ├── 02_Prompt_Engineering101.ipynb
│ ├── 03_Image_Chat101.ipynb
│ ├── 04_Tool_Calling101.ipynb
│ ├── 05_Memory101.ipynb
│ ├── 06_Safety101.ipynb
│ ├── 07_Agents101.ipynb
│ ├── README.md
│ └── Tool_Calling101_Using_Together_Llama_Stack_Server.ipynb
├── pyproject.toml
├── scripts/
│ ├── check-api-conformance.sh
│ ├── check-init-py.sh
│ ├── check-workflows-use-hashes.sh
│ ├── cleanup_recordings.py
│ ├── diagnose_recordings.py
│ ├── distro_codegen.py
│ ├── docker.sh
│ ├── gen-ci-docs.py
│ ├── generate_ci_matrix.py
│ ├── generate_openai_coverage_docs.py
│ ├── generate_prompt_format.py
│ ├── get_setup_env.py
│ ├── install.sh
│ ├── integration-auth-tests.sh
│ ├── integration-responses-conversations-auth-tests.sh
│ ├── integration-tests.sh
│ ├── normalize_recordings.py
│ ├── openai_coverage.py
│ ├── openapi_generator/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _legacy_order.py
│ │ ├── app.py
│ │ ├── endpoints.py
│ │ ├── main.py
│ │ ├── schema_collection.py
│ │ ├── schema_filtering.py
│ │ ├── schema_transforms.py
│ │ ├── stainless_config/
│ │ │ ├── __init__.py
│ │ │ └── generate_config.py
│ │ └── state.py
│ ├── provider_codegen.py
│ ├── provider_compat_matrix.py
│ ├── record-openresponses-conformance.sh
│ ├── responses_test_coverage.py
│ ├── run-ui-linter.sh
│ ├── run_openapi_generator.sh
│ ├── telemetry/
│ │ ├── README.md
│ │ ├── grafana-dashboards.yaml
│ │ ├── grafana-datasources.yaml
│ │ ├── llama-stack-dashboard.json
│ │ ├── llama-stack-tool-runtime-metrics.json
│ │ ├── llama-stack-vector-io-metrics.json
│ │ ├── otel-collector-config.yaml
│ │ ├── prometheus.yml
│ │ └── setup_telemetry.sh
│ ├── unit-tests.sh
│ └── uv-run-with-index.sh
├── src/
│ ├── llama_stack/
│ │ ├── __init__.py
│ │ ├── cli/
│ │ │ ├── __init__.py
│ │ │ ├── llama.py
│ │ │ ├── scripts/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── install-wheel-from-presigned.sh
│ │ │ │ └── run.py
│ │ │ ├── stack/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _list_deps.py
│ │ │ │ ├── list_apis.py
│ │ │ │ ├── list_deps.py
│ │ │ │ ├── list_providers.py
│ │ │ │ ├── list_stacks.py
│ │ │ │ ├── remove.py
│ │ │ │ ├── run.py
│ │ │ │ ├── stack.py
│ │ │ │ └── utils.py
│ │ │ ├── subcommand.py
│ │ │ ├── table.py
│ │ │ └── utils.py
│ │ ├── core/
│ │ │ ├── __init__.py
│ │ │ ├── access_control/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── access_control.py
│ │ │ │ ├── conditions.py
│ │ │ │ └── datatypes.py
│ │ │ ├── admin.py
│ │ │ ├── build.py
│ │ │ ├── client.py
│ │ │ ├── common.sh
│ │ │ ├── configure.py
│ │ │ ├── connectors/
│ │ │ │ ├── __init__.py
│ │ │ │ └── connectors.py
│ │ │ ├── conversations/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conversations.py
│ │ │ │ └── validation.py
│ │ │ ├── datatypes.py
│ │ │ ├── distribution.py
│ │ │ ├── exceptions/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mapping.py
│ │ │ │ └── translation.py
│ │ │ ├── external.py
│ │ │ ├── id_generation.py
│ │ │ ├── inspect.py
│ │ │ ├── library_client.py
│ │ │ ├── prompts/
│ │ │ │ ├── __init__.py
│ │ │ │ └── prompts.py
│ │ │ ├── providers.py
│ │ │ ├── request_headers.py
│ │ │ ├── resolver.py
│ │ │ ├── routers/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── datasets.py
│ │ │ │ ├── eval_scoring.py
│ │ │ │ ├── inference.py
│ │ │ │ ├── safety.py
│ │ │ │ ├── tool_runtime.py
│ │ │ │ └── vector_io.py
│ │ │ ├── routing_tables/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── benchmarks.py
│ │ │ │ ├── common.py
│ │ │ │ ├── datasets.py
│ │ │ │ ├── models.py
│ │ │ │ ├── scoring_functions.py
│ │ │ │ ├── shields.py
│ │ │ │ ├── toolgroups.py
│ │ │ │ └── vector_stores.py
│ │ │ ├── server/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth.py
│ │ │ │ ├── auth_providers.py
│ │ │ │ ├── fastapi_router_registry.py
│ │ │ │ ├── quota.py
│ │ │ │ ├── routes.py
│ │ │ │ └── server.py
│ │ │ ├── stack.py
│ │ │ ├── start_stack.sh
│ │ │ ├── storage/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── datatypes.py
│ │ │ │ ├── kvstore/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── kvstore.py
│ │ │ │ │ ├── mongodb/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── mongodb.py
│ │ │ │ │ ├── postgres/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── postgres.py
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── redis.py
│ │ │ │ │ └── sqlite/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sqlite.py
│ │ │ │ └── sqlstore/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── authorized_sqlstore.py
│ │ │ │ ├── sqlalchemy_sqlstore.py
│ │ │ │ └── sqlstore.py
│ │ │ ├── store/
│ │ │ │ ├── __init__.py
│ │ │ │ └── registry.py
│ │ │ ├── task.py
│ │ │ ├── testing_context.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── config_dirs.py
│ │ │ ├── config_resolution.py
│ │ │ ├── context.py
│ │ │ ├── dynamic.py
│ │ │ ├── exec.py
│ │ │ ├── image_types.py
│ │ │ ├── model_utils.py
│ │ │ ├── prompt_for_config.py
│ │ │ ├── serialize.py
│ │ │ └── type_inspection.py
│ │ ├── distributions/
│ │ │ ├── __init__.py
│ │ │ ├── ci-tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── ci_tests.py
│ │ │ │ ├── config.yaml
│ │ │ │ └── run-with-postgres-store.yaml
│ │ │ ├── dell/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── dell.py
│ │ │ │ ├── doc_template.md
│ │ │ │ └── run-with-safety.yaml
│ │ │ ├── nvidia/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── doc_template.md
│ │ │ │ ├── nvidia.py
│ │ │ │ └── run-with-safety.yaml
│ │ │ ├── oci/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── doc_template.md
│ │ │ │ └── oci.py
│ │ │ ├── open-benchmark/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ └── open_benchmark.py
│ │ │ ├── postgres-demo/
│ │ │ │ └── config.yaml
│ │ │ ├── starter/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── run-with-postgres-store.yaml
│ │ │ │ └── starter.py
│ │ │ ├── starter-gpu/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── run-with-postgres-store.yaml
│ │ │ │ └── starter_gpu.py
│ │ │ ├── template.py
│ │ │ └── watsonx/
│ │ │ ├── __init__.py
│ │ │ ├── config.yaml
│ │ │ └── watsonx.py
│ │ ├── env.py
│ │ ├── log.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ └── llama/
│ │ │ ├── __init__.py
│ │ │ ├── sku_list.py
│ │ │ └── sku_types.py
│ │ ├── providers/
│ │ │ ├── __init__.py
│ │ │ ├── inline/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── builtin/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── responses/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── openai_responses.py
│ │ │ │ │ │ ├── streaming.py
│ │ │ │ │ │ ├── tool_executor.py
│ │ │ │ │ │ ├── types.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ └── safety.py
│ │ │ │ ├── batches/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── reference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── batches.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── datasetio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── localfs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── datasetio.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── builtin/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── eval.py
│ │ │ │ ├── file_processor/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── pypdf/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── pypdf.py
│ │ │ │ ├── files/
│ │ │ │ │ └── localfs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── files.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── sentence_transformers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── sentence_transformers.py
│ │ │ │ │ └── transformers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── transformers.py
│ │ │ │ ├── ios/
│ │ │ │ │ └── inference/
│ │ │ │ │ ├── LocalInferenceImpl/
│ │ │ │ │ │ ├── LocalInference.h
│ │ │ │ │ │ ├── LocalInference.swift
│ │ │ │ │ │ ├── Parsing.swift
│ │ │ │ │ │ ├── PromptTemplate.swift
│ │ │ │ │ │ └── SystemPrompts.swift
│ │ │ │ │ └── LocalInferenceImpl.xcodeproj/
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ └── project.xcworkspace/
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata/
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── safety/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── code_scanner/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── code_scanner.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── llama_guard/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama_guard.py
│ │ │ │ │ └── prompt_guard/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── prompt_guard.py
│ │ │ │ ├── scoring/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── basic/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── scoring.py
│ │ │ │ │ │ ├── scoring_fn/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── docvqa_scoring_fn.py
│ │ │ │ │ │ │ ├── equality_scoring_fn.py
│ │ │ │ │ │ │ ├── fn_defs/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── docvqa.py
│ │ │ │ │ │ │ │ ├── equality.py
│ │ │ │ │ │ │ │ ├── ifeval.py
│ │ │ │ │ │ │ │ ├── regex_parser_math_response.py
│ │ │ │ │ │ │ │ ├── regex_parser_multiple_choice_answer.py
│ │ │ │ │ │ │ │ └── subset_of.py
│ │ │ │ │ │ │ ├── ifeval_scoring_fn.py
│ │ │ │ │ │ │ ├── regex_parser_math_response_scoring_fn.py
│ │ │ │ │ │ │ ├── regex_parser_scoring_fn.py
│ │ │ │ │ │ │ └── subset_of_scoring_fn.py
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── ifeval_utils.py
│ │ │ │ │ │ └── math_utils.py
│ │ │ │ │ ├── braintrust/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── braintrust.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── scoring_fn/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fn_defs/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── answer_correctness.py
│ │ │ │ │ │ ├── answer_relevancy.py
│ │ │ │ │ │ ├── answer_similarity.py
│ │ │ │ │ │ ├── context_entity_recall.py
│ │ │ │ │ │ ├── context_precision.py
│ │ │ │ │ │ ├── context_recall.py
│ │ │ │ │ │ ├── context_relevancy.py
│ │ │ │ │ │ ├── factuality.py
│ │ │ │ │ │ └── faithfulness.py
│ │ │ │ │ └── llm_as_judge/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── scoring.py
│ │ │ │ │ └── scoring_fn/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── fn_defs/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── llm_as_judge_405b_simpleqa.py
│ │ │ │ │ │ └── llm_as_judge_base.py
│ │ │ │ │ └── llm_as_judge_scoring_fn.py
│ │ │ │ ├── tool_runtime/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── file_search/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── context_retriever.py
│ │ │ │ │ └── file_search.py
│ │ │ │ └── vector_io/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chroma/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── faiss/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── faiss.py
│ │ │ │ ├── milvus/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── qdrant/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ └── sqlite_vec/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ └── sqlite_vec.py
│ │ │ ├── registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents.py
│ │ │ │ ├── batches.py
│ │ │ │ ├── datasetio.py
│ │ │ │ ├── eval.py
│ │ │ │ ├── file_processors.py
│ │ │ │ ├── files.py
│ │ │ │ ├── inference.py
│ │ │ │ ├── safety.py
│ │ │ │ ├── scoring.py
│ │ │ │ ├── tool_runtime.py
│ │ │ │ └── vector_io.py
│ │ │ ├── remote/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents/
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── datasetio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── huggingface/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── huggingface.py
│ │ │ │ │ └── nvidia/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── datasetio.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── nvidia/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── eval.py
│ │ │ │ ├── files/
│ │ │ │ │ ├── openai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── files.py
│ │ │ │ │ └── s3/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── files.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── anthropic/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anthropic.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── azure/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── azure.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── bedrock/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bedrock.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── cerebras/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── cerebras.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── databricks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── databricks.py
│ │ │ │ │ ├── fireworks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── fireworks.py
│ │ │ │ │ ├── gemini/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── gemini.py
│ │ │ │ │ ├── groq/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── groq.py
│ │ │ │ │ ├── llama_cpp_server/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama_cpp_server.py
│ │ │ │ │ ├── llama_openai_compat/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama.py
│ │ │ │ │ ├── nvidia/
│ │ │ │ │ │ ├── NVIDIA.md
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── nvidia.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── oci/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── auth.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── oci.py
│ │ │ │ │ ├── ollama/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── ollama.py
│ │ │ │ │ ├── openai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── openai.py
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── passthrough.py
│ │ │ │ │ ├── runpod/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── runpod.py
│ │ │ │ │ ├── sambanova/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── sambanova.py
│ │ │ │ │ ├── tgi/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── tgi.py
│ │ │ │ │ ├── together/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── together.py
│ │ │ │ │ ├── vertexai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── converters.py
│ │ │ │ │ │ ├── utils.py
│ │ │ │ │ │ └── vertexai.py
│ │ │ │ │ ├── vllm/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── vllm.py
│ │ │ │ │ └── watsonx/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── watsonx.py
│ │ │ │ ├── safety/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── bedrock/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bedrock.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── nvidia/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── nvidia.py
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── passthrough.py
│ │ │ │ │ └── sambanova/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── sambanova.py
│ │ │ │ ├── tool_runtime/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── bing_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bing_search.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── brave_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── brave_search.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── model_context_protocol/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── model_context_protocol.py
│ │ │ │ │ ├── tavily_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── tavily_search.py
│ │ │ │ │ └── wolfram_alpha/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── wolfram_alpha.py
│ │ │ │ └── vector_io/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chroma/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── chroma.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── elasticsearch.py
│ │ │ │ ├── milvus/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── milvus.py
│ │ │ │ ├── oci/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── oci26ai.py
│ │ │ │ ├── pgvector/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── pgvector.py
│ │ │ │ ├── qdrant/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── qdrant.py
│ │ │ │ └── weaviate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ └── weaviate.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── bedrock/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── client.py
│ │ │ │ ├── config.py
│ │ │ │ └── refreshable_boto_session.py
│ │ │ ├── common/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── data_schema_validator.py
│ │ │ │ └── data_url.py
│ │ │ ├── datasetio/
│ │ │ │ ├── __init__.py
│ │ │ │ └── url_utils.py
│ │ │ ├── files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── form_data.py
│ │ │ │ └── sanitize.py
│ │ │ ├── inference/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── embedding_mixin.py
│ │ │ │ ├── http_client.py
│ │ │ │ ├── inference_store.py
│ │ │ │ ├── model_registry.py
│ │ │ │ ├── openai_compat.py
│ │ │ │ ├── openai_mixin.py
│ │ │ │ ├── prompt_adapter.py
│ │ │ │ └── stream_utils.py
│ │ │ ├── memory/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── file_utils.py
│ │ │ │ ├── openai_vector_store_mixin.py
│ │ │ │ └── vector_store.py
│ │ │ ├── pagination.py
│ │ │ ├── responses/
│ │ │ │ ├── __init__.py
│ │ │ │ └── responses_store.py
│ │ │ ├── safety.py
│ │ │ ├── scheduler.py
│ │ │ ├── scoring/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aggregation_utils.py
│ │ │ │ ├── base_scoring_fn.py
│ │ │ │ └── basic_scoring_utils.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mcp.py
│ │ │ │ └── ttl_dict.py
│ │ │ └── vector_io/
│ │ │ ├── __init__.py
│ │ │ ├── filters.py
│ │ │ └── vector_utils.py
│ │ ├── telemetry/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── helpers.py
│ │ │ ├── tool_runtime_metrics.py
│ │ │ └── vector_io_metrics.py
│ │ └── testing/
│ │ ├── __init__.py
│ │ ├── api_recorder.py
│ │ ├── exception_utils.py
│ │ └── providers/
│ │ ├── __init__.py
│ │ ├── _config.py
│ │ ├── ollama.py
│ │ └── openai.py
│ ├── llama_stack_api/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── admin/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── agents/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── batches/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── benchmarks/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── content_types.py
│ │ │ ├── errors.py
│ │ │ ├── job_types.py
│ │ │ ├── responses.py
│ │ │ ├── type_system.py
│ │ │ └── upload_safety.py
│ │ ├── connectors/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── conversations/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datasetio/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datasets/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datatypes.py
│ │ ├── eval/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── compat.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── file_processors/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── files/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── filters.py
│ │ ├── inference/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── inspect_api/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── internal/
│ │ │ ├── __init__.py
│ │ │ ├── kvstore.py
│ │ │ └── sqlstore.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── openai_responses.py
│ │ ├── prompts/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── providers/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── py.typed
│ │ ├── pyproject.toml
│ │ ├── rag_tool.py
│ │ ├── resource.py
│ │ ├── router_utils.py
│ │ ├── safety/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── datatypes.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── schema_utils.py
│ │ ├── scoring/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── scoring_functions/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── shields/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── tools.py
│ │ ├── validators.py
│ │ ├── vector_io/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── vector_stores.py
│ │ └── version.py
│ └── llama_stack_ui/
│ ├── .dockerignore
│ ├── .gitignore
│ ├── .nvmrc
│ ├── .prettierignore
│ ├── .prettierrc
│ ├── Containerfile
│ ├── README.md
│ ├── app/
│ │ ├── api/
│ │ │ ├── auth/
│ │ │ │ └── [...nextauth]/
│ │ │ │ └── route.ts
│ │ │ └── v1/
│ │ │ └── [...path]/
│ │ │ └── route.ts
│ │ ├── auth/
│ │ │ └── signin/
│ │ │ └── page.tsx
│ │ ├── chat-playground/
│ │ │ ├── chunk-processor.test.tsx
│ │ │ ├── page.test.tsx
│ │ │ └── page.tsx
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ ├── logs/
│ │ │ ├── chat-completions/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── files/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── responses/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ └── vector-stores/
│ │ │ ├── [id]/
│ │ │ │ ├── files/
│ │ │ │ │ └── [fileId]/
│ │ │ │ │ ├── contents/
│ │ │ │ │ │ ├── [contentId]/
│ │ │ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── page.tsx
│ │ └── prompts/
│ │ └── page.tsx
│ ├── bin/
│ │ └── cli.js
│ ├── components/
│ │ ├── chat-completions/
│ │ │ ├── chat-completion-detail.test.tsx
│ │ │ ├── chat-completion-detail.tsx
│ │ │ ├── chat-completion-table.test.tsx
│ │ │ ├── chat-completions-table.tsx
│ │ │ └── chat-messasge-item.tsx
│ │ ├── chat-playground/
│ │ │ ├── chat-message.tsx
│ │ │ ├── chat.tsx
│ │ │ ├── conversations.test.tsx
│ │ │ ├── conversations.tsx
│ │ │ ├── interrupt-prompt.tsx
│ │ │ ├── markdown-renderer.tsx
│ │ │ ├── message-components.tsx
│ │ │ ├── message-input.tsx
│ │ │ ├── message-list.tsx
│ │ │ ├── prompt-suggestions.tsx
│ │ │ ├── typing-indicator.tsx
│ │ │ └── vector-db-creator.tsx
│ │ ├── files/
│ │ │ ├── csv-viewer.tsx
│ │ │ ├── file-detail.tsx
│ │ │ ├── file-editor.tsx
│ │ │ ├── file-upload-zone.test.tsx
│ │ │ ├── file-upload-zone.tsx
│ │ │ ├── files-management.test.tsx
│ │ │ ├── files-management.tsx
│ │ │ └── json-viewer.tsx
│ │ ├── layout/
│ │ │ ├── app-sidebar.tsx
│ │ │ ├── detail-layout.tsx
│ │ │ ├── logs-layout.tsx
│ │ │ └── page-breadcrumb.tsx
│ │ ├── logs/
│ │ │ ├── logs-table-scroll.test.tsx
│ │ │ ├── logs-table.test.tsx
│ │ │ └── logs-table.tsx
│ │ ├── prompts/
│ │ │ ├── index.ts
│ │ │ ├── prompt-editor.test.tsx
│ │ │ ├── prompt-editor.tsx
│ │ │ ├── prompt-list.test.tsx
│ │ │ ├── prompt-list.tsx
│ │ │ ├── prompt-management.test.tsx
│ │ │ ├── prompt-management.tsx
│ │ │ └── types.ts
│ │ ├── providers/
│ │ │ └── session-provider.tsx
│ │ ├── responses/
│ │ │ ├── grouping/
│ │ │ │ └── grouped-items-display.tsx
│ │ │ ├── hooks/
│ │ │ │ └── function-call-grouping.ts
│ │ │ ├── items/
│ │ │ │ ├── function-call-item.tsx
│ │ │ │ ├── generic-item.tsx
│ │ │ │ ├── grouped-function-call-item.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── item-renderer.tsx
│ │ │ │ ├── message-item.tsx
│ │ │ │ └── web-search-item.tsx
│ │ │ ├── responses-detail.test.tsx
│ │ │ ├── responses-detail.tsx
│ │ │ ├── responses-table.test.tsx
│ │ │ ├── responses-table.tsx
│ │ │ └── utils/
│ │ │ └── item-types.ts
│ │ ├── ui/
│ │ │ ├── audio-visualizer.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── breadcrumb.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── collapsible.tsx
│ │ │ ├── copy-button.tsx
│ │ │ ├── dropdown-menu.tsx
│ │ │ ├── file-preview.tsx
│ │ │ ├── input.tsx
│ │ │ ├── label.tsx
│ │ │ ├── mode-toggle.tsx
│ │ │ ├── select.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── sheet.tsx
│ │ │ ├── sidebar.tsx
│ │ │ ├── sign-in-button.tsx
│ │ │ ├── skeleton.tsx
│ │ │ ├── sonner.tsx
│ │ │ ├── table.tsx
│ │ │ ├── tabs.tsx
│ │ │ ├── textarea.tsx
│ │ │ ├── theme-provider.tsx
│ │ │ └── tooltip.tsx
│ │ └── vector-stores/
│ │ ├── vector-store-detail.test.tsx
│ │ ├── vector-store-detail.tsx
│ │ └── vector-store-editor.tsx
│ ├── components.json
│ ├── e2e/
│ │ └── logs-table-scroll.spec.ts
│ ├── eslint.config.mjs
│ ├── hooks/
│ │ ├── use-audio-recording.ts
│ │ ├── use-auth-client.ts
│ │ ├── use-auto-scroll.ts
│ │ ├── use-autosize-textarea.ts
│ │ ├── use-copy-to-clipboard.ts
│ │ ├── use-infinite-scroll.ts
│ │ ├── use-mobile.ts
│ │ └── use-pagination.ts
│ ├── instrumentation.ts
│ ├── jest.config.ts
│ ├── jest.setup.ts
│ ├── lib/
│ │ ├── audio-utils.ts
│ │ ├── auth.ts
│ │ ├── config-validator.ts
│ │ ├── contents-api.ts
│ │ ├── file-utils.test.ts
│ │ ├── file-utils.ts
│ │ ├── file-validation.test.ts
│ │ ├── file-validation.ts
│ │ ├── format-message-content.test.ts
│ │ ├── format-message-content.ts
│ │ ├── format-tool-call.tsx
│ │ ├── message-content-utils.ts
│ │ ├── truncate-text.ts
│ │ ├── types.ts
│ │ └── utils.tsx
│ ├── next.config.ts
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.mjs
│ ├── scripts/
│ │ └── postbuild.js
│ ├── tsconfig.json
│ └── types/
│ └── next-auth.d.ts
└── tests/
├── README.md
├── __init__.py
├── backward_compat/
│ ├── test_eval_compat.py
│ └── test_run_config.py
├── common/
│ └── mcp.py
├── containers/
│ ├── ollama-with-models.containerfile
│ └── ollama-with-vision-model.containerfile
├── external/
│ ├── config.yaml
│ ├── kaze.yaml
│ ├── llama-stack-api-weather/
│ │ ├── pyproject.toml
│ │ └── src/
│ │ └── llama_stack_api_weather/
│ │ ├── __init__.py
│ │ └── weather.py
│ ├── llama-stack-provider-kaze/
│ │ ├── pyproject.toml
│ │ └── src/
│ │ └── llama_stack_provider_kaze/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── kaze.py
│ ├── llama-stack-provider-lmeval/
│ │ └── config.yaml
│ ├── ramalama-stack/
│ │ └── run.yaml
│ └── weather.yaml
├── integration/
│ ├── README.md
│ ├── __init__.py
│ ├── admin/
│ │ ├── __init__.py
│ │ └── test_admin.py
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 007a9180a7aa38e17c1135ebf1f75e0d5ce1ea58e2261deba8c41e51196078ec.json
│ │ │ ├── 00bf38cb0b6eef2963c49f52798781840456635d0510be615cda65f93cd1cdfb.json
│ │ │ ├── 00cf12ddd414ae82d68c2d2b50190f96785f0d0a0c9f5cf72f1f8aea5e28073e.json
│ │ │ ├── 01175978d117633394f2fa36371296b78af269f38656a12fd35a6195efc45787.json
│ │ │ ├── 01bf932b8a65a67fef755e75e11b3b0a3dd2150681781018d1dda3aba98650b2.json
│ │ │ ├── 025c36f9316fb9ea6f443ab59c8463be6e6e5b451d7775ff4a836c7333935d92.json
│ │ │ ├── 0275b5b0278c3188f5530957d25d7eb8ab8a9a14c0b9b31d9a70ad342b02353d.json
│ │ │ ├── 0296b14ead5c7f2a75097f7b09ff885cf4af074892820cecdd12423c50c3e088.json
│ │ │ ├── 02ab36ff31c11b6b9d69b884bb1b9753e850967eb2271313f15b3ad6c76d5cd3.json
│ │ │ ├── 0311a3d28199fad227964fad455d78e114ff228c7465a0f6dd7c330cad546caf.json
│ │ │ ├── 0337d2703fe8be2ba88a3dd79f1513c9890ca8b0543d3f284c1d54ffb8fc7b0b.json
│ │ │ ├── 042da9b89effc00fd0b794b9ae8066633f8f6d9797f5c082a7100d9a1fea81a3.json
│ │ │ ├── 046d92297df0f53e06c3a32b0ce8456db8f8753acb2decc6682abd46fd564b61.json
│ │ │ ├── 046e8977a61fe17d5e8c9c172606cfd69f0b2f698c265eb7fdb0a707d0ca1532.json
│ │ │ ├── 04fee8655462fb880c100f5451213e16e172176a0a6638064b5747ac18522a6e.json
│ │ │ ├── 0668cd9a5e4ee1b55a756010e9e47d76a645467102aa4908c0eece9b143f5df8.json
│ │ │ ├── 06d0af3070a2ba9296c0f3b60ccdc79123811cb94a827bc9c88ef65f24b10969.json
│ │ │ ├── 06db9a91cd42d3ef84a70fcfdc4954c28aa6eb02c09343f6471c2da40d593fe3.json
│ │ │ ├── 06fbd886c2452ec541ae4bf9f29ae579d67d2101bce9c9a608c3455cb0bc4b29.json
│ │ │ ├── 0794c247b2ab1d5ff70625a5faadfdbad3173789631e4c80702252c91a3b5293.json
│ │ │ ├── 07b6ab1d1df4147f5b79645350102e159005d659ab0298c618ab24b015ff9cc9.json
│ │ │ ├── 07c7c181a2aae0a917ae8c2e3cb3480ed3f3d08e84095fdbef32e81cc6d264b5.json
│ │ │ ├── 08178fddf8cfbe725fb743179f5c931478660aaac5fd3ebb5a88e17c8a621817.json
│ │ │ ├── 087220875d68214d741bf859380450713328f5b634fe2f0228996cc4429f45e3.json
│ │ │ ├── 08be528a20c883061233c18ca2d555700e990e2a3de2ecd7ee0448a9bdc8a631.json
│ │ │ ├── 095b37e65a5a78904f225bdefc904d3e20145a4dab1be0cf07d17a416d85e58d.json
│ │ │ ├── 098f818f486be6d6a65bbdf925e3de1718205ccb186f74a9612bffb60f1ffe9c.json
│ │ │ ├── 09b1056e0b0bbf517fc3aaf99f6541fc3bc5ed92b6bb6209efb47f86159bfab6.json
│ │ │ ├── 09f0dcbfd49b53bcc25388544c7275f19e632fe1ce929a605da6aa6706e3a2de.json
│ │ │ ├── 0a45299f33e179ae4e1058fcb9a6526cea3d5c4f47ee30660a453e114cbf0b85.json
│ │ │ ├── 0a4917fbf84f0492f08bdbd0025091b4b7646fd121a01c41c679e897d622257e.json
│ │ │ ├── 0a5ed7514cf28b03a358f3839a7bd206d9a51e411b2a650843c369096ca2c5f2.json
│ │ │ ├── 0a6c06d8101a5f5cf0150c06455ef55d1c3ab8539eb0723790aaa08cccc52c08.json
│ │ │ ├── 0b0fd3a29a2317c588f5375767a0f9ac186d2c1240f921925f9abb8a69d6856b.json
│ │ │ ├── 0b453ed159b4288b7373f8532072d8d41054199fd3f67ce3a8b48b3f4aa89160.json
│ │ │ ├── 0b82e7800c3e3fb9e9df13cd16d74141ba30c55017c7e9e39c54150dcbbb3788.json
│ │ │ ├── 0bc90b6640d8ece3ddb8ac7a29b65c00276e24738ab6c8513e63ee690714a0cc.json
│ │ │ ├── 0be803de6641bd7638bcb91bbd1b40d3a360e5c5403386055d5c93a9303860b3.json
│ │ │ ├── 0c18204f7e189ce0e3b8e8a91a0b74f29757af50c92b98457c15044c4f376994.json
│ │ │ ├── 0c28d26ac990531f57050a1ff948b21d303ec06031771f1baf372c5952a51343.json
│ │ │ ├── 0c77b0fe2dd314d900b36fde318e26657a6a91419f97a31c2beae9e8ae5cc7e7.json
│ │ │ ├── 0d1c21ef897d3e1d41c6bdb870e522ac4472f7f69dad342ec4c2db3561857647.json
│ │ │ ├── 0d79a2171fc69a8c59d9b9aa30c829398194eec3a1133c3e3eb92a42b34e76d1.json
│ │ │ ├── 0dd03b164cc7d62b0219e843a6cf30c3f1e9e4381c7e76a987f36e8a236bc367.json
│ │ │ ├── 0e1115a6442c0e99ef58dcb6442db55925a7c024518e5090fe4cfb5ad344b8c7.json
│ │ │ ├── 0e4ecd8f8f0cfe12054edcd25c61b479a65e9e466f7e4c6a1d9bc665c821e165.json
│ │ │ ├── 0ea967be24fd48a61e2dd2ac9dc1663c32e8410c6498b3efbcf9f7f309718efe.json
│ │ │ ├── 0eb6f1455ae6d30bbbb242eed7f1357fb326c430721738b7b84b1a6f4376a718.json
│ │ │ ├── 0ec64f3ba2370076c0b6c45d281a657ba1a68db4f7269193f7e012672cd02141.json
│ │ │ ├── 0f5443c07d1568fd139b8f3ea0aaa3de23d22b30f353c8ed7e6cfd033d904e04.json
│ │ │ ├── 0fc31328ff6d0d20ce7770dc22062566b07b4ac7dedfef5d521046e54207711a.json
│ │ │ ├── 0fd21a06aa1e22dada1325d6e9f4e7ce3dd40c69ad06a9a618ac2560f3c9993f.json
│ │ │ ├── 0fdd1c67b668497800a18764cbf79bd1300f95ea616b1bb3a29240e4ba664dff.json
│ │ │ ├── 100b10f30530c2d281fec14b3a572fdf7dc260c26606438e14883495f20b0fa2.json
│ │ │ ├── 112bffa0be0c3b55673c84a260876b4a16b9b2e0e3280e3b0aa22badc0bb93a4.json
│ │ │ ├── 116fad54f649a10df405f3c092c628006ab5c11c0091171be3ed492bec19cc9e.json
│ │ │ ├── 11916d75c0bafd01c8c7db15c9559d8783cd3cbfa219dec83aaf5cd38847e2d0.json
│ │ │ ├── 11d104c62115bef2336127ac23bb1443cefc125b85cd2f7879e0c91deb98db71.json
│ │ │ ├── 11e26e730d6f4d150b43967135b4969f8cd585a32527fe0d557a7356578e5e97.json
│ │ │ ├── 1276c415374974487bb8762e78a7fd1932a452b270d517e92b164886ff01d8dd.json
│ │ │ ├── 1307d1ec6c890e124e6d77ca1cf9a6cf50d7b4bab84fc4cb91b2c035c33f8a4e.json
│ │ │ ├── 131e58d0c222adf7513cf86fea3825857bf29e78fa22fbacb8c88ccd7d5e0451.json
│ │ │ ├── 1365fb78a6629d4ef7419c5c48b89161da3a0b78023f005fca61a70abcbab6ed.json
│ │ │ ├── 136c7a2f7a608e5e14e6f7b506d72bbe7d45d2d24101bef7a559cdb30eadc1ad.json
│ │ │ ├── 13f8e348585198ab00335f20d5487e9706f175c17acb004f288f2ef93ee54f67.json
│ │ │ ├── 14b4b1b494ecaa5460d8044b57efa7c5b9d3fe30aa1512a1bdcd34745559047d.json
│ │ │ ├── 159e9958b40dcfd5367b54342e7f66c64d9bf7c0f8abcc27de4c2778844fda9c.json
│ │ │ ├── 15a3aec6df33188afe06a5b1efdddd31ec9d7afbb1ce511bb8b85e49011789a8.json
│ │ │ ├── 15a6ace9bf3235accf433f56ed24fa50022b4473b842cc2d8c552f39ed87ea05.json
│ │ │ ├── 15b23045b5cdfc49228d58e4a082f8402f7c91d15e2240f855cc9b8b4e25352a.json
│ │ │ ├── 1624b61946c49faefe632a635b6c33954b0c3337f5c36a996505d27ef03c0973.json
│ │ │ ├── 164f200f940dd0569b66dbcaf2f0fb408553cf69d4e8a9bcdd7be48003c0a5c3.json
│ │ │ ├── 16ccbbcbf59ea486cc0392bf857597b2308cb2f1cd7d9a49eccd11d41413a21c.json
│ │ │ ├── 16cf4989c967c3d6cdb4675c422c7d7875b58ce3d38b3d5d1603e8baba60fdb8.json
│ │ │ ├── 16da2c98e725a605e52eaf9869353459a9bce7ca6c3ea0edba81f8de8853d3e4.json
│ │ │ ├── 17958bae65cc43664e8127ff47f76d16ed07dd45fe33ff1e9386e1df756420c3.json
│ │ │ ├── 17e4728daa9291fa0bbefe901ca8ba1f18aba89ecf6c0487ea928557dd0efff9.json
│ │ │ ├── 1846efeeb78a89a5c2a0252fb9e586d7335cf6ff2a99de3f16c7222f4ba5b868.json
│ │ │ ├── 190aba7a822f5d67ba23b2d33c558f4a1c36038fc344eda3448a80a6f3f29c3f.json
│ │ │ ├── 197e5045a6e637f45432ecd4ee72c088c9ed14a236088b55827648b6a2e37ebc.json
│ │ │ ├── 19e495545ae18cb8036d576276e9be03ef50e65edb23af19789eac83d7f9f32f.json
│ │ │ ├── 19f222167c94fa6af099b52f7e093a37cc56dd171e2b81755b372b719faaaa1e.json
│ │ │ ├── 1a01039afd7c9fca01db55015aa97e0270ef81657d82c1348b3ffefbb6f25fca.json
│ │ │ ├── 1a5c636e837ffab7b26c0c98fa2e3f3fb35d0c1edb00d4f5b0e7b112fe606e34.json
│ │ │ ├── 1a8629ac3c9e2b3b108343fbd2425f2f4ee13a202d6a4860bfdb4142ad4a7d50.json
│ │ │ ├── 1a8dc64794e2fc4cb778ae78d014fce95aac7956e09eb3ffb3a5d633a716172a.json
│ │ │ ├── 1acb5bf6635045e5a1efab96b3e20bc71e5d71973587271da9ee1e7b5facaa8d.json
│ │ │ ├── 1adb6f4621eaa9e5d350925c3fc8c34fbb3d0af4cf4307d4363ff570c260287b.json
│ │ │ ├── 1afa1ce0a99ce3d98fec0fd309c2c30373208e58d8562b4977a641aecf4f4dec.json
│ │ │ ├── 1bd8001b26759c93336204501e8616c5009e0a670b5267099232f08aa2b20c9c.json
│ │ │ ├── 1c68553ae3f01a07d2c22d4cac5f3e57290d5e633f20adb49e8346aaeb2014f6.json
│ │ │ ├── 1c711fd3707bb96b21004bd8c54fb859caef9b35ba46c1e8ded52629e239d1e9.json
│ │ │ ├── 1d284c256f17ef5a2614963351d0e92d01dda72f137c9515cb98eb5a6a5b14d2.json
│ │ │ ├── 1d80922d01c30958b2aa0974cbfca948c2d12ed008d1b9bc73d2b8f8330e88b4.json
│ │ │ ├── 1d82e9439ae3.json
│ │ │ ├── 1da9a77a827bf013f09a8e0fb0981c73038d5956c774ee404656b33a4a08bb6e.json
│ │ │ ├── 1daf2347763dd31a7456da24bd3c2fec04e2d2e0e0d6f667762c77493870db42.json
│ │ │ ├── 1e17e2fa330014283d36f26784fda965e6094830e82b332490304ba476771807.json
│ │ │ ├── 1e2dbce78b47f70ca192263464099a61a2b65e387093bc570cad26bd8968f0f9.json
│ │ │ ├── 1e3ce968e28ad3e7b88a09ce6efbab0e4edf6a5b26ac3f67b44b316d49b779a5.json
│ │ │ ├── 1e6e4d3cc914541dc57a5b3e54a1aeffcb5fb7c1a29d8055dd2aa3f2eefe3fba.json
│ │ │ ├── 1e79a10a89b081e316d2821675f8b4c407b8d228dda80cbde4238037c50a9ad1.json
│ │ │ ├── 1e7ea09d82a2e90711d56c94b67ef6fd9d41593117fad0d6412b041dcd2e58c4.json
│ │ │ ├── 1e8bed12cfe775d3dde49d4a757114aeb4c7ff130217c4d07a85ddf082f143b7.json
│ │ │ ├── 1ef45eef0c6895501794794ddd911d3d4b0f31f4d5b5300ce8c99fd216bbdc1f.json
│ │ │ ├── 1fa014df26695f6d2db26c652ce8a20389035e206778fbbe9926f3c5642db4ac.json
│ │ │ ├── 204bfbdf3f62f606a2e1fdc54de1cf92cb8f510a56c9c15172d2f61deab696ba.json
│ │ │ ├── 205477727d30890404a99ee4931240212a3a475cb80450bf455d23c6ea258e5c.json
│ │ │ ├── 20588c4f16eaffa6a3db7686240561454586d2ddd840be98787aba163f8d0b6a.json
│ │ │ ├── 208cc861c99a9e609377cc8c4bd75a4d47bf6927d43163f169f35a37723be28c.json
│ │ │ ├── 20b72c0fa9944ead4e5af65fb4e1d80e0e2165ef6b56813b27e8b7a843240fa7.json
│ │ │ ├── 211cc28f80dbf9807235e50b544ac5b3bc12f24766036669363c7bbeb892a617.json
│ │ │ ├── 2124ea5b4e6f9831d1044acfa3c8317fe78c2871723f5c6769134ea656d7cccb.json
│ │ │ ├── 216af1441420051ce57cf88281e55bca00368f5222c25d4a37f9ad09516b8b9a.json
│ │ │ ├── 2172059863d4d17e7525483102a6753617b60a8c33ece637db18061d23086536.json
│ │ │ ├── 217a4e7444bf504049d2ceae1d6ca7171d6d42fee1febefe85026830d6356cfe.json
│ │ │ ├── 22019cf7170f298cbbe644e30b2a1958a02f72fb0d4772a98828c23f9dd03640.json
│ │ │ ├── 222f89f27cc58410959c81ddebbff34b2b92b0053ae2694d64acd85ca330db4b.json
│ │ │ ├── 22affb6141645eca165b6bd431b06e94818db6305bc796e3dc06977e0b59b211.json
│ │ │ ├── 22dfc36fee46563933815412b9619a468814bfc43c30a16a5ee31fc7274e9f88.json
│ │ │ ├── 2375af3ea666306b9a693c440404325186fb4193710c1ae669dbea0be2182092.json
│ │ │ ├── 238285efe96db33e3e48a3775a2fe104b3f418e8da5d0108e6ed04bd1eef8d5a.json
│ │ │ ├── 239ca64fa1413aa677cf3452dbe6bbc373ba06f1fcaeb86566a95e6c00278fd6.json
│ │ │ ├── 23b4dfd4dfe57558372c93cd733914f0b6e85eb9057f162f3687e672d1f19a8f.json
│ │ │ ├── 23cf06367c0c335a7410b904f9ee1eaaa4a7a054f438bb23f347ac96eb7e075b.json
│ │ │ ├── 23e79df4e416c1d2d0227d3afd7ab06ed5e7e8153f444b585ad89c4b87df6566.json
│ │ │ ├── 24a0175ab12e918eabebfa2be5ee73ae74ceb0477331cac011b528c1cc6dd054.json
│ │ │ ├── 257d9ef8ae353a4d096aabf6705b4953393a1138fbf64c382abec5884176a933.json
│ │ │ ├── 25b410a9060e100a6bf5efdf9a23aca0418cd2bc0981cf11e3103bc82cba8425.json
│ │ │ ├── 26a1f441b3e2f282bafbb28acd66923fa2c25314e2a722dda7a800daf9c54aea.json
│ │ │ ├── 26e3525806512070605adf009bf5326588421a84ed775098f1e3766ab6ff009e.json
│ │ │ ├── 27157e78d13c183a22539b939853342c37fb6391557e3052c8cc9284b583dbdf.json
│ │ │ ├── 273ed6250fec691b1c9e6e0f7d04680accba39b6400051e71dc94ca63bff619f.json
│ │ │ ├── 276b5c70b5f3a7bb55ac276b630bb07bdd12c3f9c392534fd3d3df8bb698cba4.json
│ │ │ ├── 27afa8cdbd595531f452965ca94c46b9b378a7f7178ff294d905d01ab356b432.json
│ │ │ ├── 27d1b6d118ee5a5d5699d14e195bb8efeecfe71fd7fb8588a3fb3581e430a8ed.json
│ │ │ ├── 27eb5d58ea53116f946689c8ac04edabd5a48e3d8e30719b14ee09816220c116.json
│ │ │ ├── 27ff70025960841363d81bdef1c99c1ef7b552046b1ede0484db9e80ae1ef8fd.json
│ │ │ ├── 2806e4743a397b372f5167045199557e4f8ae6337668f3d3f5e5e1b02677e161.json
│ │ │ ├── 2825351b31085df4d1186443422464ca27e8d1fbb3b442efcb89ed0bd56bf812.json
│ │ │ ├── 28561c0848c5d46e68aec5b2c6c55862d74bcae2f2ba6ccb69ab41b5532b28a9.json
│ │ │ ├── 28a64dec79d47afaf45c32f4c6e82074f53533bce8f136faa0e0ee3916670d26.json
│ │ │ ├── 28ab3d316be886e823b675db332dca1b1504f5bf166b3670363d3c12566ee035.json
│ │ │ ├── 28cc2057662b6d13ab1becc3f92e5afbdaa19c2192b588a5795a5fa4c09fb588.json
│ │ │ ├── 29147b1c87f6058c56b8f24f0cbf10cf93c240d44e9de53eb389fcf46fbed2f1.json
│ │ │ ├── 295a2ac516b4d96099a63c5e8553a59d1c75295cad3dddb3a641307316e7b576.json
│ │ │ ├── 29672a19586bfb1b5226c42b9ff3bb945c834e3f7d2ffa1fed3da87ca72092c2.json
│ │ │ ├── 2a1473fa95b76ca3508b4c40f6b9b8fc0dd3afaab33b189ecc0e6fbae9720834.json
│ │ │ ├── 2a3f66739156b4fff68b43d2f700991c15b897c5293acbf3c60067dd16055a84.json
│ │ │ ├── 2a5013730936b86b2fd76564de3a35310d648076eaa29de10a0e8efa68d088cf.json
│ │ │ ├── 2ab7dcd7dc9c6992ba9a3f8c7656ce38e7c7ad004201dbf4def2426443f8883c.json
│ │ │ ├── 2ad368a9709cb3474d047e3ea39e1bcd94adeca6e9379702e4adc766576b7c30.json
│ │ │ ├── 2afba0cc539d9a044479e47125e6c419b491e8cf0c093407e6be45a7855843fd.json
│ │ │ ├── 2afdb8ed8f2ca3b800e78b9a83d2cc0c78f1f62322b871df6f75e06358765824.json
│ │ │ ├── 2be85e2b18d0209cb6f18c5fdd2c0b6d30dbda3fa0b66e5d1182081e33d3f5d9.json
│ │ │ ├── 2c5e70d1e2d4c264e34716662cd9de921530b9fe6420aed14fdde7dcbcca04ae.json
│ │ │ ├── 2cc55af01a7b58ba2d6d6edd54c2772f02fd070ee761816097d61618d733516b.json
│ │ │ ├── 2ceaae039e3ca7a62b8da0109fff6e23dbbbf4ad4dff1b519ae92ec7cddc7716.json
│ │ │ ├── 2d1743807397e198919d3300cbbd250808c7c7e3b6cba00e1baa8b6bc777e941.json
│ │ │ ├── 2d5bce103d63e9ffc4dd76ea73a112e8326069fb62baa3c86cf588165897d597.json
│ │ │ ├── 2e48d86e444aeaf649fc94acfcc48bb337eb7921c95edc7a83118f51ff9f37b3.json
│ │ │ ├── 2f373e3a3ab226688558a779b07b9f814bc330231dc6aa7b775ade8d435627df.json
│ │ │ ├── 2f417403cb7c473c4042cb81c5f9c17ab6f64ed0a5a021573a618cabc5a9d0ef.json
│ │ │ ├── 2f6f1fb38ceb4569fd2eb4831482ea6e15c745af104e63e9af128f4e1271d4d0.json
│ │ │ ├── 2fd6dc7a0c872cda11ade6241afbcd42922d71695bf384ca48938ca21f732cff.json
│ │ │ ├── 2fe00c00fa954b91d66e804ecf7c457a30b90b9000afda895ec863ae92f592e2.json
│ │ │ ├── 2feabb513c2826bf3d712684bb6ceb4f6269801f1d3365d92ec6f127e0ef257c.json
│ │ │ ├── 3010ee7f2c82499fedb083a96e54b745fa01e5fb819537690de07a14d25d69ed.json
│ │ │ ├── 3035e2e10eb6f32747adf27d35a9b3b43a8725ea72580828a0136e1d4a2e8b1d.json
│ │ │ ├── 3058f90b3a23057d88b246a18f03d9c88bd560bfe31927d3494c5120196e9e2f.json
│ │ │ ├── 306b7dbc01b7214c32dcaec5e63a27bd1a5d6fdd5dec6308fa28c92813942c9a.json
│ │ │ ├── 309bc06db12fbeb6133c53834a2ce49dcf17267c1a2eca32411843a10fd8dcd6.json
│ │ │ ├── 3144ec31aac7dcfe0813d999eee7e5a7641c95e9c8b8470a4ad10440fa9896e9.json
│ │ │ ├── 316a405c1926775ce2382357e3664761d6663900fd9a99a6705d3e583348b093.json
│ │ │ ├── 3188081713c612d390a71b63c11802894413cdda043e37a01f4db85588333a6b.json
│ │ │ ├── 31b891a312f892bb76ba80974d6b00744680c7f2d17627212db5d205b6353ff8.json
│ │ │ ├── 31d01cb5f1bdbbbbb45e36bc640b77998f082cc9f8293029d42e30cba39bf6c1.json
│ │ │ ├── 323a7c4b3198c084983f16f8f4d040881b2240a31b7f3e741890cd4a02d71633.json
│ │ │ ├── 3318b6ff4b0d1116aaa5ad716af2bbb269e818ecfe3a17fc4fb26a7099fed526.json
│ │ │ ├── 33787fc2dcde809ba7bdd48099b16e4296dd042f59c0402ee4a7780a4c516e3d.json
│ │ │ ├── 34649b63877ba0bf400f924e710902dd68d2623b7620588464ddeaf5c9abeba0.json
│ │ │ ├── 349cfe2cf5befb8052060cc7f244f32151efd159024bb29e61e8f22373f8e49c.json
│ │ │ ├── 34fd105609d2b81d30dbeab7d622708c193a97ce96fca2131fe0b433465ce3f3.json
│ │ │ ├── 35b69775c29f809bef1c8994e061c674a7ffdfbfb56581e64ecaddff01b6cb73.json
│ │ │ ├── 36290f150253ef42ff196867f55cf04c01d0116af5b16eb936ce18407927884f.json
│ │ │ ├── 363c5f5c4f075fb30616196aa1ad2c705a62efe05acc220b5e818104dc9ca8aa.json
│ │ │ ├── 3688e5880531f4333ea95f732adc43291d2c5532bb7bf4c44810b1a3a33264a0.json
│ │ │ ├── 36d833cd3b9bdf6267ac74ede9c0e5ce9115d649016d174800f78bf8885b7ade.json
│ │ │ ├── 374988a090b34be04f9e74f80efaa9ae92cc062d5e967a5d83dd6820e8bf5be1.json
│ │ │ ├── 376531f70c84ce94abacf12db02e8c91d2318fc62d0f05db31a4709196ca309d.json
│ │ │ ├── 37739729d99b4022bbbe700db973823ae983bc6d9b5ae50c62517c463520e07f.json
│ │ │ ├── 38392d9e0ccec92705720ce3aa66f07ae41f782ed959563b01f725a0339a0318.json
│ │ │ ├── 384a05274f63bcb15b1b0f035b73c25d9c943305591a14cb2505bfc21d5d1075.json
│ │ │ ├── 38aa193d2ff3692c73fb33fd03630b7b21b85c31a6d2cb9a745455be6fcc8d23.json
│ │ │ ├── 38f919355d79a4ac65ecada2a2105d1b7a7fe0f8c05249f72c480c05cd28cfae.json
│ │ │ ├── 390e06644027255d74d4c38e52dd6e16e5d5fe1c9e6c5a7e9f0b8b66b9bf529c.json
│ │ │ ├── 39909f03174a2938ef03ac0752c3e85413b38f4d3ecacef0731ed12a327f0bf9.json
│ │ │ ├── 3a1a67912f65.json
│ │ │ ├── 3b27f42cbfcea59970739b7427e66d66a509307aaf36e8a9a07175df3bcbc50c.json
│ │ │ ├── 3b2df3a24ec97849f32583f1cdb68375f95b108740bd33e7aadb490932310986.json
│ │ │ ├── 3b84f58da1b81d002b6e1748cf868b70d832bbc687e429a49e2b267a3f5144ef.json
│ │ │ ├── 3b8b79bf0c528657635d6d3a6cb67d012050fe3670b95fbca14c18d7410c1a81.json
│ │ │ ├── 3b9ee1b6029438f6e3f8feb3b82fb6d6c9a552b48754af642c68b673eb54d510.json
│ │ │ ├── 3bb74e529b05c6cd0969afd1035d143f335a9a69a191036080917581f915d4a3.json
│ │ │ ├── 3bc04693994195edb482dfbf61657e94c2eb4eecc52f3e45971884523a9ae932.json
│ │ │ ├── 3c09965a672fcca3a878305623e34fbd2ebbc6815809201365291a157689b4c3.json
│ │ │ ├── 3c1d8356df28db20b6afe9ba9e7cd4da4b8524e00d5f57b2cb9ce649bf52cab8.json
│ │ │ ├── 3c200fdd38e6876105def4a32df7a27c2ca6d89a7ddcb930f81319365c648e3a.json
│ │ │ ├── 3c3825de4b0a1b6832b2ff5d17fe932c00c7162687a4d3e610a34c8a5f99b2f3.json
│ │ │ ├── 3c73d23f29270290a82a2692af9e969db4f65125238d3721393f09bb618bb711.json
│ │ │ ├── 3c9fbd9010272c6f5066b51555903b58f8d030f86bd3ba4d91aacb9e213b21ca.json
│ │ │ ├── 3d57813664e7444da2f306c82ede7e2311e8916c7bba3bdb76e5a9d9141eabb2.json
│ │ │ ├── 3d6f1c72ebca55b60add8e4a8c5879f84d9d72a5f27053cac838fda20c333fe0.json
│ │ │ ├── 3d7ff3fef259dcbbb6a5ba66ec5a54cc687192622ef79f23906c77082640823e.json
│ │ │ ├── 3db4d31ec81086f12794cb5ff7b853af6e983d046426a368b14772346a27940b.json
│ │ │ ├── 3e04fef809276f32e837a764b8eccce5d3e6e8ec0d611c6aab9354743789679d.json
│ │ │ ├── 3e8a0ac5b47cab9cc0a7c89db84690f9974c966b6c249d44645d1d4bf8268459.json
│ │ │ ├── 3e8acf5db89af88d4f2fb80d5c779515068a28986bc69fe87aada604287820ad.json
│ │ │ ├── 3ec502653be0fd643799d68ecc82655eed00138e30afb4190c8a09014e6a84cf.json
│ │ │ ├── 3ef67b5ce7dbb36bf47c16b906e32b5d5f18f7e46b6425690d680b6536fffcf0.json
│ │ │ ├── 3f442ba52e2b417a0773f3fb89497dbeb83459d5dfb1e2260b6d313b13a6ea87.json
│ │ │ ├── 3f45613d7556f76aaaf56271281a7f73053e21271d49609cac3a1b1ab1b59068.json
│ │ │ ├── 3f47e63f33f29eb86f75fec943c978df1bcf7e9ec8177575c7329f2dc4964557.json
│ │ │ ├── 3fff8a99b56943ddc4abc18ce5fc98ba9f1069185e17cec1c7fc0fa48e768e2c.json
│ │ │ ├── 40bc41cbdada97946ee6e2b701196a8303d3e597ffdea82e7cf83677d5b0dcf7.json
│ │ │ ├── 40e0ba5cfb3f5f2665c2dcc667f8f2c42d90f6036b0c46103d45be21e6a87586.json
│ │ │ ├── 4106e99c6dc0e3bae676c4eb415052045d0f7677dab0cf34967b23e83e5ce882.json
│ │ │ ├── 41183af54f4603a2bf9e21015e3b0d3af2b534e26d606744963aa1091d52b06f.json
│ │ │ ├── 421a91bf6a48824bb19881134b728d4306670c69adc581b880c0921abdf75348.json
│ │ │ ├── 425230118564e6dac13e60bced5a1c66bc25a075b8e46e62236d87b9e9cb8dc5.json
│ │ │ ├── 425bb9c999b72f46ca0302401ea9877381a635a31cbe7345aeb6a34c41362034.json
│ │ │ ├── 4272e19b2f247aefcb305aa1170308e4abfdb2b30b4531324df77efcdaa97670.json
│ │ │ ├── 427a1d45de5490e60cbdc78fe12825cf4e9d2d0a2c23f9a7d3c5b85d8f32a16e.json
│ │ │ ├── 42ab5d3976adf52e402e3c8aa1a54883558c2920f693d72e879cbb08fa485302.json
│ │ │ ├── 439ab7d1bc9f08e91840d999b6760d21de306fe6f5ecbaf969aac5afaa492629.json
│ │ │ ├── 43b0260adbbee6e8e5e174fecd285648392889662235b3c685bcc89f9602ee5b.json
│ │ │ ├── 4409335c53a0cc4576c4f5509ea4fcb73870eb864d239c8bd123d30921b0e8e3.json
│ │ │ ├── 454bf3fdb1e77561835e10fbe85f22e75bf9e4046fa54cd54bf288439fff391f.json
│ │ │ ├── 4568833937981b0daae37327dbb9e64f07dad20ddbce98185e1af04def885238.json
│ │ │ ├── 45f7bb25cd8184f361ab72c0ca3f9391c966d802d60df60d5b5b7c8354d0da6d.json
│ │ │ ├── 46d90bd67f426effa752d1d0bef83161d00784116bb3e5b1b32d75fc46ab62de.json
│ │ │ ├── 4713a39a11f31a3e55e2683d048946f3b55d80d9f58c069c2450df81a596923b.json
│ │ │ ├── 471b044417f6310ad27df1df73aee016d803e8455aff60a67a6b2172b168c0f4.json
│ │ │ ├── 472b1562b4c26bdee3192dadaab67837e2ffd215cc05b27c1fc8f334f4e79e4b.json
│ │ │ ├── 473627b7ee2ffccf3d0b486398a7ad4c1e780e3a3d6fdaee3eeff60f1946e679.json
│ │ │ ├── 479adb30c1b865714ef56eeadf70ba44d19397ef86a307c84d5bddefadf329ee.json
│ │ │ ├── 47e76180fff77913d20570534f1a79ba8d490017855458e4f785efc3219e052a.json
│ │ │ ├── 485c95bf03bc0bc396c03f95b36b74e9b39f805072f8547f82e48d3926875871.json
│ │ │ ├── 48925718d91e9cdb37527cee28f8fce6c0b7136562153cc7e5d359e83798dea3.json
│ │ │ ├── 49096c48201780548c2bb28156f9dbf2ec48e89a25adbe5c646727363344903f.json
│ │ │ ├── 4a06bcd2ff65d1a97f0c63a00d659ad1f7aa6c82610f0290d0eb6c4902b8b503.json
│ │ │ ├── 4a3cc9677fae9a2c232fe61a6474d20f65c83a17414df047327d00d2854ca798.json
│ │ │ ├── 4a5647ecb074af08795167d8b99a9ab7ebdb989a7571c8cada9fc2eb4fc1042d.json
│ │ │ ├── 4a85908aa4cd4a8a1ded4cab2fab74505d8405ce53a163b46915ee0bf70d2c37.json
│ │ │ ├── 4aaef2aa027e14199faac56e7c4dd994ed6d8384002bd8e051e0b12ec76185b4.json
│ │ │ ├── 4ae0db53c44c2bf367a2b47286a7bffcd7fbe8568e3fa6abb5e7573835d30159.json
│ │ │ ├── 4b1c68e2659b76ae76ed79ae7bb36049bb537830b03397322ed08c9cb4785634.json
│ │ │ ├── 4b2802012eabc2cfc9f64ffe08dcd5003056faf4dff2653d918a05b32e08c0c7.json
│ │ │ ├── 4bac0fbf8960d26821d5834d204f4ad39619889e1d3892b4fa9339d144f45b05.json
│ │ │ ├── 4baeed47469b35365c2e5c2d26d5e91c50523443a0a263bd351bc374205294b1.json
│ │ │ ├── 4c5f47d24ea768d724423d7b68c44d026572a16015de436b3cef0ef774442eff.json
│ │ │ ├── 4c992c222a30fa9c5bcbc430794b74841c311e97280fd00e2f7ea405aa7b4194.json
│ │ │ ├── 4ca8bb3b15d2f892248cd09483c2e21daec3c92a8abf1288ca56c5098f305b67.json
│ │ │ ├── 4ca967684e3ebdfd2a4cfacda63d2964e27d350c045173319d3fbc6f86c07627.json
│ │ │ ├── 4cef17ce712d7b0dcf4987620a70d366e44680c7b6d0975afc2ad5588459a54c.json
│ │ │ ├── 4d04a7eb14636050bdf82c302de86789742b377db5de1ce7227ffcb552936ab8.json
│ │ │ ├── 4da32cdf48ae4c3b381e3557edb99afa0ff16a609aaa941737e99606961a6a07.json
│ │ │ ├── 4dcdd7fff806dfc3551a593e4921f8d15695d827f343779cbcf3d4880d81f383.json
│ │ │ ├── 4e3136331b9db4d787ce1e5d938a211fa122139d27322cb3966884c07938f601.json
│ │ │ ├── 4e3555d53967770066bbded92edd400413461cedc1fdd2c824d41b0affe61f66.json
│ │ │ ├── 4e4d8b5933440b8e9c68fbcac841b23100c136a0ba5cc685dc512c32be59b919.json
│ │ │ ├── 4e4e2537f78b5f5f4d30fcb23a79592e2024ca7d3ab03f7b12fe0f0e2d529282.json
│ │ │ ├── 4e8216f5a862384a021bc4b067655c31ddd7d9291a7e5add64f60e4b3a0356cd.json
│ │ │ ├── 4ebf10986c87e50b2fe15ad0f70a28351a7a5964b29f0af3cf7d7772840db554.json
│ │ │ ├── 50444887649535abb825324838eef5ae9528fab5e55798468d7b544ae4f07229.json
│ │ │ ├── 50556539d30abe59bcc1da83315e9bd2f52eec9601552c15aaf625d8b89a92b4.json
│ │ │ ├── 5059ca8ab8b1844d2400fa0562ccc49a112348dff003804e79ee11cc7539cb58.json
│ │ │ ├── 5217a8c6b79f0cb6d6638e2d06193bcc40f30444ef91125093681691d987bc35.json
│ │ │ ├── 524c5f124854cf89a042e7e4dab32e873b3681f858fb103cdefbe34bb554b027.json
│ │ │ ├── 526bcd60789b5638ba9ce23be9e90a7c44bc3cb475616383ebc6bb1bc386d4f5.json
│ │ │ ├── 5276f0c6fd1bb2298fa5adc4fb3fe8a132fd880756ab39edef7fb49c7a63c3f4.json
│ │ │ ├── 52a2664dde376e1cd7e5c3f4e224937053dc7fc574cec364a365bc7c965cd4f5.json
│ │ │ ├── 53c58c29ecc5e74264448e06b41e29b5c34c18f615f0678c5c36ed7363be142e.json
│ │ │ ├── 53cce86a40ba3f67b3798154649165ea139cb6113b8de707ebeed9e379386fde.json
│ │ │ ├── 542b3ea3e6777e437a425f9c2448beb8eb0bfbb616bf60663a526bb9be16af32.json
│ │ │ ├── 54596f570efb862776f95b5f492292761454ac8b8b5267c1f82a5a2eb1a3b4cb.json
│ │ │ ├── 54b895c9eb5d2c1db23581f48071ff98061d9c646218cc67bb24fc1c272afaf4.json
│ │ │ ├── 54bddc0cc7eef2a38b5495cc3487d8ea54078a4e438adcc5602f88edc35229dc.json
│ │ │ ├── 559d2458ea6f3c9769e1f3f43bfb57a12f3221dd8da4567b479ff5038654399d.json
│ │ │ ├── 55c7250c01acd7f27b62fa966eae24af54de6d7e0e393918c58ac7215c60a29f.json
│ │ │ ├── 56009694d683a5a44731338ccefb4d1efbf23dad424d5e2277b6ebd83aa14e5d.json
│ │ │ ├── 5684951287748e2a20fdbd3fd0adc5aec6c5654021766ab6e6db1db222518084.json
│ │ │ ├── 57136dc2f3504bf7a9b4df4a97674fdb664cd4ddeac117afaefc271bb7b85b03.json
│ │ │ ├── 572a17d9d8c2a74b0493566717824c87c2f06ce3b16205f7aa185751f967e53d.json
│ │ │ ├── 57689b52587daa89a33f1e7c5bb76f69fb61792423211aef2c9a0810bafd5297.json
│ │ │ ├── 57970f7c85c6dec2d1f9138e735520e37433006e0b77d1bc9a9c10881e4d136d.json
│ │ │ ├── 58040e156afa7841d05745dc5bd6d120d0529e242ed24b98aaec9de2868808c8.json
│ │ │ ├── 58586892d99c3fc3e3b4674e57e779596550253ca82e67a6311c1bd68a60564a.json
│ │ │ ├── 585a2cf2c22b0db155a6a94052836b34c42f68bf04b1b2cb74ddf00943c0442d.json
│ │ │ ├── 587645b61fdcab43c278bc9b9dd9b2effc1d1d486667132652ca8f273ec0b3c5.json
│ │ │ ├── 593f9404bf5dd926032457757ca6923d5f7d102dcb035740f594147c1b9e7a51.json
│ │ │ ├── 595b6ca2fb280162159d2ce9d7e8cbc8dc2206cfc3eae57db563bf7f3f93f9c1.json
│ │ │ ├── 597a7eab1d38ffb143ff5da1b6d20a5fabbf84fc35939dad3024447a8c10af78.json
│ │ │ ├── 59861219229682235b0897ede7dd2f20fa674794b90e9fbad27cd35189525929.json
│ │ │ ├── 5a3c5d18ff78b18a0c5e3872b2f9b8ed8b8cc69d8dd87eba8f122316427ffd4a.json
│ │ │ ├── 5a3e0338d228235a4581a8abf3961dd0d9d7cc963debb2862ad3b06ef879814d.json
│ │ │ ├── 5a5added980e23c667b6a1ed0c3d3be7c663e8887d3851aaa4d6407e1d5210c3.json
│ │ │ ├── 5a88afff1b0361d715de2d657fc6b5610e7c02d4f84f40fa4ed3b327e6364c98.json
│ │ │ ├── 5a9cb7b526486933d880acd19bf9b15c10e8e80be3926d90b42af729411b7d39.json
│ │ │ ├── 5aa7354a03cea3179535e82597b49b2c72136afbe13ec4420d6e963bd15e6afd.json
│ │ │ ├── 5aae3ab0423943664ef2ed9c26eff938b9ea608ec67a7b7c51219d9d2f954c2a.json
│ │ │ ├── 5b032d6ccd692276eb70dd30289a16a5773e12786ae63e448d2b10c92eadede4.json
│ │ │ ├── 5b058cf2221fcbd97162987ac15e498a95be861954863bf1ea26b8f9ee6bcb7e.json
│ │ │ ├── 5b75907ae5598e7701552ae4510ff5f77f52db04bb592a2f0ce560f5aaaf2ff0.json
│ │ │ ├── 5b93f111740bc8c423fe294bdbf696028215cbe7a8b65aff745bd0f9caa03b7c.json
│ │ │ ├── 5bc4df9e88fb1dc35c07e3f55d4d03fe5fd5be84606898ae337cf39473e63b07.json
│ │ │ ├── 5c01b14de59f079fa01f80f29e831e0ed530983c6d7cb9d69ab2349b48aebda9.json
│ │ │ ├── 5c7817d43543c59709edbada9ca885aa79acb2145f3fbc93ec2f5656b5e94629.json
│ │ │ ├── 5cb19214493752f47d30564e5fe0b22ea3c256a5fcb587c51a3d17f2265c2209.json
│ │ │ ├── 5cc64f10fc39144fc74224249cffb425eb549d747172e4b919cea69c3f30e9f4.json
│ │ │ ├── 5cc7605f9950.json
│ │ │ ├── 5d1bc6f836768b6068d6ec8cdc05b2a5875544daaf7389cc92606062fbe2c778.json
│ │ │ ├── 5d4275f9ac12d2ebe44c20fe75bd2221770892e005cc05f3452b392b0e5a608f.json
│ │ │ ├── 5d46fe29953f16f4d23bb6aca24f0e7e13b9360d3811a62ddb1c723d0eadc451.json
│ │ │ ├── 5d56949732c68803f9e4d60a92fd087e48ba7ccdce0569a97b51a687a4e49b88.json
│ │ │ ├── 5d6da5463a2e9259d1c1ab137c38d1f452151e048f4111d14144d84ddf0b5f11.json
│ │ │ ├── 5daf217a35af0ad3badc6deb23ea9ed04c271153e3eceb3aa64275c4a493a718.json
│ │ │ ├── 5dbea9ad01219a271c867a1cf195fee31353a1847e0ddbcf5527af5732f59ff9.json
│ │ │ ├── 5e063445a6d2455ae33b8aa873ee9be76e334dc3778585ba8cd7c8b42f2c2a33.json
│ │ │ ├── 5e157b7c6b5d67b6e8aed94cb9c9f615150e7987c91ad14e582525be4fe5fea7.json
│ │ │ ├── 5e4ea6b89ff437f9680dd9e31aaa2a5e46d3cc8849c5cc823142d4c0bb2c4c40.json
│ │ │ ├── 5e4f641c83e26f2dcf2f1d0ca2704a56dc78c665e17ebe01bf4c8e8e0459a587.json
│ │ │ ├── 5edf2f0b7a9c875e80e4719f71a1daa94c1287acf164cd81ddd51843d05be718.json
│ │ │ ├── 5f1f435c24de3e8a803e7febba03b64413fbfac2c3cf42a6559b84169795bd50.json
│ │ │ ├── 5f45feb1fe260d8b2b7c89981c4b54c3f64edfe7f6864f9934e4e09db2b74f57.json
│ │ │ ├── 5fc1d5b73610bda664863c069de933e760c20528d5b2bc27a9d0242961f5ec1f.json
│ │ │ ├── 5fe20c6a2cb9dcb59a49e01e405161df5965274b4f92f151c0c44ee46e62cae0.json
│ │ │ ├── 5fe7d2907d3452903fb03e38a7a89f2cb397c1db7abbe0651c9d10dd2a48ecd6.json
│ │ │ ├── 602d09721ce4b8b120ee2eb699d47dd1d2eb515d3cdb9272246706fd6aea8ae0.json
│ │ │ ├── 6052a6721d11477b3a7daa495b15e46095fad0107e184eb2aa13202510a61309.json
│ │ │ ├── 60cc811520747360a4b42a5af506c5019a7980e6dbfc127d3ec8bb94a1a5f22f.json
│ │ │ ├── 61009dfb41f0f532e339afd57b65927165513dc3123ab2d2d8ae109669dcda70.json
│ │ │ ├── 610695da59ffcce0a03a4d4b1ffbf61cf698f39fd41628173fb864e14b3a71c5.json
│ │ │ ├── 6109772bc14ab31de7a6c5094695660a65eaa2d6a6c48c6ccfb6df180f252612.json
│ │ │ ├── 613f9771cdce0943f63e4d2a114c7a5b9b8e2dc9f68e9e5f3eb9b01131f55cac.json
│ │ │ ├── 6160a4e52f644574295bd014c6dfdc32ccd25c5ca620de7ad3d3fbb0525ac7b6.json
│ │ │ ├── 61a465dd0faed868ec3e18fe67c0b088c1e260e344587d3ff15620978cc59687.json
│ │ │ ├── 61e54420f5db4243bad0d9ba7271717533484a6e318cfa02004b0c5d035e77ef.json
│ │ │ ├── 6260b08b40dec4af4bffd49b1b66f83d0b1b401c4ce9295aa0971fa87b50e035.json
│ │ │ ├── 62b029adf7148c081a6706d3f7185dadec1b18c5b6671f6522f37ae616bf143f.json
│ │ │ ├── 63bfce5d980cb543c72b55275926f28d83f42ae26d2d21b8b0250c28d9f2a721.json
│ │ │ ├── 63c8f9a53094eec036d9144c374bdce547a08d382d3098b1d451aec53e07f81a.json
│ │ │ ├── 6405462c8094d2ada59a0fa61e038b11d32d9e654336a0052815f39a9619ab15.json
│ │ │ ├── 6446f5838fb216dcc72e56d44ad62350d66e4f850bc15abb328f1278d1204723.json
│ │ │ ├── 64543b1257403928f487400d6890d9eb6134d4c9b39a4628b3acbd82f15e864a.json
│ │ │ ├── 64578b23282490114a8c141d44b7f778e22c4540df801d539ca8b50d1bf506cc.json
│ │ │ ├── 646b7ef44f194827c7081145225c96fa0c5f871f735b48226a0e4ee684f22100.json
│ │ │ ├── 64b89e56591f462080ff69a3bbdd33913d76bca83c9d55b83b7a8b677f8d150c.json
│ │ │ ├── 64c18179346da8938710437800f44005238b674c02265ea748999b4ec2d7514e.json
│ │ │ ├── 64dc1c9320faa0aaa1e3f81e14c53712525165da4d20d1630cd9f200984865a3.json
│ │ │ ├── 6536e172726b534f7fed9c31fc324e7372ea2792f4cd3ba21362e27ca085dd16.json
│ │ │ ├── 65cce6bd6a81172acc13734c97a7f9e98975e619263a90849e7bb06c2a3405d1.json
│ │ │ ├── 669c19a8d3c9510465f6f0fd0ffcc2b54b940a88eecda1de90a1168045eb3ec4.json
│ │ │ ├── 67846352cedb3a9cd19447bd321662a97a73e28dfe788471752eb146e7c54872.json
│ │ │ ├── 689d91a916fb9ed548e7131754ca8e2dc3d5e1f824137a9a924340518824b3c9.json
│ │ │ ├── 68bdb788e946d6843d06e013aacc2a46cbec728257e61518a12aa2443c5151bf.json
│ │ │ ├── 69c77245f51e505076127ff642915e9125c63386a9de1e5f6624dc619bffea2e.json
│ │ │ ├── 6a3ebb3f16c69638ed83c6e24798c23ae1f75eca5afd40472cd66fef96be3621.json
│ │ │ ├── 6a5f08ff2d7968bc1dfdbd3c751defefb07c515cd20a02326097b5e417e7aad0.json
│ │ │ ├── 6aa47c8f32be4a526685c2db740b26012ca3990230960ae00c75456c03d1f05b.json
│ │ │ ├── 6ae2cd1b110157ebdced948d1f2f45e900fc8acf4e6554cd6a3dcbedfd3b291d.json
│ │ │ ├── 6ae9dbebfa321b7752783269feb45d02df049e49c8ea03c4acf738f6ed08ed4d.json
│ │ │ ├── 6b207540bc67e2b9e6beb091d477d446d91e9837add7e9f4de236627195d41e4.json
│ │ │ ├── 6b7654054f7557e750d00815e6b3b0146ac7043884c071aa116cd4c76879648e.json
│ │ │ ├── 6bb6affc00b01fff5d0178a826a1b1e75613efb564e139e2161e810172604711.json
│ │ │ ├── 6bd85257b4ff9fcc9b1fc9efad66de788896c5fb53456336b9601ba056c06791.json
│ │ │ ├── 6c10f27913878bfac206240e8a84d62da075b580c2b4b5bac6a670363c61a64c.json
│ │ │ ├── 6c2148814595662281d1e5f8f0480d598daa5ea140f369569751f06ba675b6f3.json
│ │ │ ├── 6c4a42d33e45c15fa2cce73ccfe96bedde067b8459d9ab2b1fae0a7d143e8a66.json
│ │ │ ├── 6c6fc337182bb6f0cae17c9cc70e3bebcfa0dfd01dc9d3d8c6ec60fd8e74239c.json
│ │ │ ├── 6d0a2195af0a75eee5f81c9b1a26a517a9280ccc3ace6189043af75b8bb30b15.json
│ │ │ ├── 6daf41fdb4a88729b16257ea383ff367b94308a2cb07e3d690c2bf6f7254c447.json
│ │ │ ├── 6db3a38c4a3f9a600d7463ffa53f4b2c503acabbf7b3a8ab3fc9d25438b35609.json
│ │ │ ├── 6dfb81bb9a38ec1fa13383f9ae481acc84748c9ef05e4e728d3bfd46fe55f788.json
│ │ │ ├── 6e0026f250c4182f5b45ee8a83efacae52b500648f675ccc4f404c56d03927f8.json
│ │ │ ├── 6e3b3f21ef68fc94b64d0effccefda3e9e0b997cd4d6b6e146952769f5d85f14.json
│ │ │ ├── 6e4d606509717b482792c266d884c0215f87addd43734098085134a65b1f447f.json
│ │ │ ├── 6e8169e3cb95046f07020ffa9a35b7a810625af2a7f378d21822f17c8b9ff96e.json
│ │ │ ├── 6eae5f8e86ec87a11c4956c84552231bdd2a33c48f990f1bdaabebe93cab4af1.json
│ │ │ ├── 6ee0acae90b36e942dfb422e5b30059ad2f4b6e619e72c0a2dc2c37bb004a161.json
│ │ │ ├── 6f159751fbdcb74a2dcbc9ce68c9dacb5768db8d887bc626e9d6a3ec2d743dd0.json
│ │ │ ├── 6f5f057acab2b6f3023563ae556ae6fb624b146b9afbea5db3f625520caf56cf.json
│ │ │ ├── 6f729cdc0821e54e1167b0c13ba79fae86b87b359311af5c010942fbc95dd58c.json
│ │ │ ├── 6fc93628ac63a53d030a07d6213864e6ab428ed669fde46c1445854affa453b4.json
│ │ │ ├── 6fe15cf2c60ba0b86a9286e1b8f79c54430fc92bc55b3159939c09b7cb849e0a.json
│ │ │ ├── 70676edc22d29162cdf7f8f34f6de6a35874ab47637d174fb07bca9b62351d97.json
│ │ │ ├── 70a7df1d2e42a3d59f049e9016fbfcb05a3cb9dcc4a0c55bee2bd465c8ce14a0.json
│ │ │ ├── 70d5b83199ae4d5efe2ba3c6b27844ddf77bef0f7b62bd152e1df423911ae9fe.json
│ │ │ ├── 710432676f74ea2c5c27ed6bcd739a7b2d10ed0bc74bd8cddeaf6e67ec021133.json
│ │ │ ├── 711edda4e6262a7e89c022c8d356f024a0a559416f999f07ecd8c490983ee6e2.json
│ │ │ ├── 712573b408b40794dc707458827f2ae34e94edcdfabdcbea6cb03345c45f781b.json
│ │ │ ├── 71ea492a742659af7f49550086defb8ba57120ee187b82a63736ded03c443ff4.json
│ │ │ ├── 726ad976d4261f2878d3d54d77efb8c7803bb51d758a4ded912766bf173791dd.json
│ │ │ ├── 727ab024d50d00ae2f9e8e10676bbc5d3064464c36b96c931a6f08fd778e2c8f.json
│ │ │ ├── 729c9c12ea86ad5a679c95938ea11879075d66318359f9121f8efcab67d4721e.json
│ │ │ ├── 73896f32ec439243c94275fcb8e7e263de022e2eda95588c28ef03fa5b2f9ea4.json
│ │ │ ├── 7421f4e940bf745f6143407a8cbc0aac68ae4985ac3eb32b983fecb31693fdef.json
│ │ │ ├── 7426dc20731ae03a3977786945f34881edb9b902627a1cedf14f956bda72aee8.json
│ │ │ ├── 745b1ca382481fe0150c08e55e0fdff1d832ad44ebb6aa08a44305d43a4e2f16.json
│ │ │ ├── 7464b4db12154bc442b4bbbcfd43e3814c91d0f094953c07bbd7270441607735.json
│ │ │ ├── 746c52e958df8a7140b636a366c9d13efbc39484e9b5a5920c462e53ac4c63cc.json
│ │ │ ├── 74983b9b386dabd493fd1fdc83eff3d2ff33b5de3e2ca4915bf9bfedbbefc00f.json
│ │ │ ├── 74b202bce2945c2f0673b272cfa49aaf6e23deacb10415f673730d8e8f556d80.json
│ │ │ ├── 74c8203d66a949c4ad17943d6a9d7a156418ce40684feea38bc1f58f50da3ad4.json
│ │ │ ├── 750218bdd4fb4366cb138ee562611c59b343be0349acb7726b58dccbe8dbca23.json
│ │ │ ├── 7536460c38ecfb06e8a0974fef891c668558da144619d304a5d38de25486bd58.json
│ │ │ ├── 7553efaec4784c970aeb723506f269dc5e17faf44928f2ab0c3daa15f611abb3.json
│ │ │ ├── 75ae2f583e3eb3920933f9df9ff65fa5cc639daf97fd7d6b53061146a026cc22.json
│ │ │ ├── 7649fdc96cedd460ebe278f2f8c395c22f1bda389d19bb4037da4b7d468e0c7b.json
│ │ │ ├── 76a96703df5a2b1efb7d87faba72386edf12c5fe5b7f59d5ca4be60066180364.json
│ │ │ ├── 76b56f7240f9917ac0dcb7cc3145c0e3c6eb188a98b6bfd1f0cd81e079d4331e.json
│ │ │ ├── 76ce17a06d7460753a049cf2c3c6a62d9c0083b2e055c006549896a07f7c46be.json
│ │ │ ├── 76e24301beb081816b05b41f614ac4b3df78a8b0f9617b685e921fe2b9084a89.json
│ │ │ ├── 76e98cb75ef931d8b98230be177efafcd1e41efa1e63fbab0a2d69566bb51679.json
│ │ │ ├── 7770b77ba6c87977b6a3e979a32f56a23f829d637986257b41027ace632af349.json
│ │ │ ├── 781dc9301b45fb50d885bdfd813990c0d0ad02fb0e73445c52dbd997fde71b2b.json
│ │ │ ├── 7822c6c920ae0e25163aa7457a05f937177b909baea42726ff5b99a30f48de9e.json
│ │ │ ├── 782ecade092991d2615a906a313e1cfd66a920e41b55570709f7603d5b00a00d.json
│ │ │ ├── 78bb859283b9e4dbd4d00ae1a09108ec8fd4abbe327418c10f8f9e13a21f054a.json
│ │ │ ├── 78fb5bccb642e99ad60f259d082a6ec40e77a41131fdb3fac10b4e6488b79a67.json
│ │ │ ├── 7955608a81bbfd541869225386fd28885e6e0ad4c0e3fee6735f4248367478ef.json
│ │ │ ├── 799eef2c9ac071333577d8d50ab1446e39be78d6763fcafb8a1a514cb2ec04a8.json
│ │ │ ├── 79ebb5ab36a0613bb32618e406cae32a41fef4c10fbc35f6033c9facf506d4f2.json
│ │ │ ├── 79eef0892811544a09f4c6eb8ba77030de1c3f09eaa2c0c42bd03831582031ca.json
│ │ │ ├── 7a368e8a77317d21418ec490bf8f2dc1a5ad0ff4a4f49b5eacc775bb833c6503.json
│ │ │ ├── 7a5e4923d34042f41bab1f3ea7aa257f7f29c5adf33b8929f99f577e442a6ed2.json
│ │ │ ├── 7ac2dce2db037fdee005d2308e1d1d480b01454f06579e47c8fdaa78c87c5e6e.json
│ │ │ ├── 7b0bae9b0cb3a81574a8e102c244e0fcfd1b49466bd4ba9564cbac3db02e4214.json
│ │ │ ├── 7b55234e7a23c36582844bf3692da1987389236dcc24db56e7ff6f2bd2fb37df.json
│ │ │ ├── 7b5d272f3e3c2a4f6d55c4201122a1c38b1b866bcadb156fb2d7cf45b61e38b1.json
│ │ │ ├── 7b8cad4efc4bcce16d2cf271e3db9e4d997554e0d149e9ae8232e44357799b92.json
│ │ │ ├── 7ba936935d47de7c2a94549a45b92ad8eb8a1b39b71b6148e04c0f2b9f0612f7.json
│ │ │ ├── 7bc62895b892846aa4d84e7d68ba9fc069fe69221a982c18302faf96830d68d7.json
│ │ │ ├── 7c756c68ac76d4d45ea54795059d300d6592fc1fc64b25e0e6ce31449741ef51.json
│ │ │ ├── 7c7699dde0563759fbe13c84c47d965abc879657d268933f35c18d0b50c0abbb.json
│ │ │ ├── 7c7ff1bdad679df46bb1e7215351b3ded615dc133dfd0294a885683995daa2e9.json
│ │ │ ├── 7ce7f76219625755df5001d9b7c8e97031abc1d3861f81a564abe8817fe03d7b.json
│ │ │ ├── 7d2a01d2f182e2442a42257acd302cb5254340c20c8126110dde82fc56d606ed.json
│ │ │ ├── 7d60dacacb43518674f518bd43bb3f8a0a1b524de084bf72cd130c61d15a9ad9.json
│ │ │ ├── 7d879d3d60569909c59f8a836a427f0ba6dba29a5bb9ac0acf088bd8e08dc901.json
│ │ │ ├── 7de2ae057d69dc504085873fc1dcc96549dfd906493068da020ec3dc0ecb609f.json
│ │ │ ├── 7e1e25658681d2702585a44b07f300d2f7bed5a59663a92fa12bcff24ab665a2.json
│ │ │ ├── 7e757e741674c8b4c1c1ad8f87c5207b7a8a730bbbda0fa0d692cbb6cc12dad2.json
│ │ │ ├── 7ed62ca088a0370a656675466044aea255e315ec204205c2f2b9175b136c5044.json
│ │ │ ├── 7fd156b51621b0d34e088b2143264cb0fc37f1a92db4d2e537ce2c1e5883864b.json
│ │ │ ├── 7fe2adf26b14ba1ec69a756002c6351fd5103f6848a19db5ae5038de2a97a5ed.json
│ │ │ ├── 7fecc1e20a6e7d2644d9635325b040503c9dcd0eb8f1a24993d97ead6c28f844.json
│ │ │ ├── 801020faf1c95926a6e7ded18259004fc2268dd65f7781b6e0f830e5558560b9.json
│ │ │ ├── 80f1f4441b1a956b91b5cc2e6251111aaa2ee77b17a064b802569109d957642c.json
│ │ │ ├── 80f62411a9ad9230babe30730a00138653a1162348ff325def2822cc1b54b8b8.json
│ │ │ ├── 80fbf2bff62e71886fc50a0a83943658aafa9a0fe0eb89428fb43a5c3ae647ae.json
│ │ │ ├── 81c91d970cb7537c31d880a38b9552d8bae0b82a417fab14f53a911a925d1ac0.json
│ │ │ ├── 82550231f6a671c15b3c611b45a2c531bd943c7167d6b61207606b93b74a6037.json
│ │ │ ├── 8344625804c6271d20079d83929380912baca583581cceb4a582fd3a81c0f8b8.json
│ │ │ ├── 834de0980de7338e09a84de95d8d8448d80ece19584897644cdee3af6ffd2b0e.json
│ │ │ ├── 835100ad83c5d3f0fb274c358656e2ddb6c868a1255df5e9bd0d57954fe55832.json
│ │ │ ├── 83f96f250e40b186a033aa1945446d7ada03564b264f1fdd0b32b3ccdea7330f.json
│ │ │ ├── 84107b706f7f4e902f8982672d9af48a3a803ad96317d54093769d2c252079d2.json
│ │ │ ├── 8415bac36cc883d7394e7af6934fc7dea50780be52a3ce9a91cfe58b429da53a.json
│ │ │ ├── 842c0d2e21998d732fdffa6ebc344c5c59b7df08570117252654a79612a9f5c5.json
│ │ │ ├── 846540ecc59fdf4a66bb7521b7d331fa2b691e7c80979e3427d7fcdca2e3492c.json
│ │ │ ├── 84961e630d0c441db1cdc54ed6b0f9a65cdce2c1003c9e281e78a5f55517ffad.json
│ │ │ ├── 8500e40ee6ee6532fe69c5a8d1829f1c7edbe76c777094888fe785f236bd278d.json
│ │ │ ├── 85163515f71bcdb532fd6828c9f16080d1e66048bd048e156b91f6fe377ae090.json
│ │ │ ├── 8533deab326aea070d886bbf142e4d453636f1ae19c3bbb17de0a4c4d8b981e5.json
│ │ │ ├── 859a851e4cfdf6fa83e11a4876af54390c642b01f0121975228cd3edf713562b.json
│ │ │ ├── 85bc7f28df4e80adc546b0b33e571a1d24604bc1825eceb58e8bc050d70ca66c.json
│ │ │ ├── 85cf7486b28ab19df073038478dd0c15105c52edbb6acbcfef1e98a0a300d6ca.json
│ │ │ ├── 85e7aa8adec439d380095cf528c6be230eeea2a99b1f06703fd413ee5750cc7c.json
│ │ │ ├── 86403cf98fbae005fcf3684f1abef4ebcd96a693968017c4ef2a7545464571e4.json
│ │ │ ├── 864496a255af51cb73cf1adfeb1885a421f28e45e31b76971cb2ff5d43f64707.json
│ │ │ ├── 868db6e8a427d63dc71b749257aa40343a2876e37cc0f695fee5f1ae6e1d6ba7.json
│ │ │ ├── 86f08c6b621ad2a143ad9406debe9eaf285165e3231ffbecb99b83d2c1655466.json
│ │ │ ├── 870314ff8d630d8e700d55ac15c745b425463961d16b606aba4c6f6eb76178a4.json
│ │ │ ├── 8723d6de138bf58c4bb99dbb3698a6ac423298eca7f544f76d5baec427e1ccf3.json
│ │ │ ├── 872e677d1fa01d295e2bd9da46d1ea17880f594399d8a1cb9127688b8dfe10a7.json
│ │ │ ├── 8733b9b2c1c165ce97a2548f2eb8e221429318a57340229e19487fe9b1f6bf57.json
│ │ │ ├── 877d845218a47d835e542619cdb889dab6e21348383c7323163fc118167d5705.json
│ │ │ ├── 87a6936c281c4edec68a609fed80fafbbc845a38529057057159a8aa9fc1b774.json
│ │ │ ├── 87cef711eb891a9a41df2cbdff818305025d5f4981b956fd276e5da85b64f9a6.json
│ │ │ ├── 881212eea1a86069e61ad4ae7ed86364c3bededb307d7b893997e051accf1e2f.json
│ │ │ ├── 8825726830280c0cc878e2a705cd11874a002be0e6888b98c8128610c603ba20.json
│ │ │ ├── 884cf9ceb8eab929c6dd546f622974aed879fc5d70782ea412f24b0ea760dec6.json
│ │ │ ├── 889313e50fd10adcb7d5dd2a8d11e9f903cfe44505df480ec4f1a4802c36e354.json
│ │ │ ├── 88cf13699480c670db5c0999c6864a2039c196abee90de0ef359e74f3057cd82.json
│ │ │ ├── 8905c8666c248770e5a5c69928d2d4e788f525ade586e5a81d73101e3bb4de3c.json
│ │ │ ├── 894548f79cf908a5c43e0789d2b79fec50040e1fdf2f890b97dd55f8dcc493c7.json
│ │ │ ├── 8958053f5c5d90145279421c7af5f9eb11777026cd3cf308901bb1af1f77c5ad.json
│ │ │ ├── 898d045503cf5073e730a0a2ed98640f42f5640dc60fd376dabb24882c9cf564.json
│ │ │ ├── 89ba50eeeafd6a1b49ea8866af15d23c5932562609f599a51be2a0fab35b3aa6.json
│ │ │ ├── 89d879fd2f928170132d05029a2670a5ec6ea24b35ad054d4ebd3b651c7dd3fc.json
│ │ │ ├── 89e0fa682612afad44d9878dc0656a36275d9fc80e6db66557dce16df045c662.json
│ │ │ ├── 89f271e9df6164319f53d11cbe1d518d436880b030a97ea9b8c846416612b13c.json
│ │ │ ├── 89f6430a666538bd146f80f7c63e4383eb947fc8708d0a8d8b6cedc85b40c47e.json
│ │ │ ├── 8a218ac9b95202d8300569adf6af6aee511dd5ea148b41b78e24b95945811f3a.json
│ │ │ ├── 8a2b15296a3d9327ef6e3ecc0c7f997923a8819334e1ee5e839ede96c05b8df1.json
│ │ │ ├── 8a73f476d6c54b913594b498862be6cdc51e19fb0040090b84a6ad39e44b5dd5.json
│ │ │ ├── 8a89236161f9ca92d7272a30d88bee86fc57817c6b5e1d8b6a5f4cccbb806d33.json
│ │ │ ├── 8aa2b5b720f1a1b2f22768978d669f497d8ac3c9166a3ffdc5c4892f304d9a08.json
│ │ │ ├── 8b2ae57cfbe9b64bb11e4e91377c15c92c4c7d3255218620da6f0462faeefc73.json
│ │ │ ├── 8b4c24ef7b86b22ca9bbec12fb12e03a36c351ebcdb8b2519255513c0484e36d.json
│ │ │ ├── 8bf6cc56c1cec8fe0bbb8172dafaf11ab58b86e00ed27a0a6b490f7529f89d64.json
│ │ │ ├── 8c41faae008a68ee725152f337d08c2c47023ff9972201c75c779003184a7cd1.json
│ │ │ ├── 8c7b870fd2fb3e6303ca525cda4318de9fbdae4ad15f5805cebb2903381399b3.json
│ │ │ ├── 8cceb684b34782e58d6fa76d69f95982b50c4ca695f2b0337b6d7571c4253c6b.json
│ │ │ ├── 8cd82d1d8dd4211e726a54a077bb7469c76d1e80c98542f58036ceb30783a997.json
│ │ │ ├── 8ce9fe31376d00189ab03b390921eed444cf617265058296e868193071c0e87e.json
│ │ │ ├── 8cfcb33a87c9860a172d7381a1c752a0d73947408054b38f680adaab70e53b41.json
│ │ │ ├── 8da3037194397c09fd2eb264df4edc2ab53fbfb9cd126ec7e2242544bac3d81e.json
│ │ │ ├── 8dc3e2020d04ffad2b9af672025f95f728519849f9f5db6add49772c914eadbf.json
│ │ │ ├── 8e7b85c37d4a090248d5a54e69e9c993d9c2d7acf4007c917c4448861895bb67.json
│ │ │ ├── 8efae6cab6ac05656732f6803fa521b24876ffc8fd2b23918e0698876e6f327f.json
│ │ │ ├── 8efefb173377ad56dd2d549384209ffa9e1552f3384fbf8b3b2ecc285d0f96df.json
│ │ │ ├── 8f0219799e97817f0ee21970b7cac53bd0928b7493cccc8314b3b24389242f48.json
│ │ │ ├── 8fa24a6cd9da0c08857479aa3f34e4705582e76dd67bc285f4769d5d7b6acc6a.json
│ │ │ ├── 8fcec860e799b01a039dd0ae898084408e353489dc19625093d5b4bc4b117caa.json
│ │ │ ├── 906dda40ee87af0af29cb3c992a818edeb52e0c58f3dfc887d4e6f129f541a18.json
│ │ │ ├── 9089127a492cc836daf6bbac7f8e147643a007b8d66f42662e2cfca1bec2faf0.json
│ │ │ ├── 90ee55852dcac0d5a4bc40c765c192aed4bdfa8d4dd7a09f0ed38b78857282a4.json
│ │ │ ├── 913b03812f31b659e7f082ec3bf09607d0c83e2e1226b3e57c7bdfdca942fe60.json
│ │ │ ├── 918071d15f9b74444d889ecc40db1bca5f39943ac3e4c3e4679a182ee3337a3e.json
│ │ │ ├── 91de59891e32b52a6ac64afb7c325b65c7fc2f6ca2facd18c0fddc3a5d21d382.json
│ │ │ ├── 91ea0a4af232e8ec890039630cc810c5656269e8586336cce025ae63bbe8a580.json
│ │ │ ├── 924858cbd18d095db76e7382364371844fe72ba0e736648cd9cbcd5933e7e89a.json
│ │ │ ├── 93eeaf2e8b8ee3944bd0aa0cd10f969637d4e1dad37ba06ed9f92d3d153f415e.json
│ │ │ ├── 945e880e56b6dc2eda9b0627f3d7190ffe2c099d95bb1b60fa0f45677826798e.json
│ │ │ ├── 9482101fb06fc506f4c9e2a327b6914582707e2dbc611164d1599db9954e260e.json
│ │ │ ├── 9512055e0cbff970c02a846dcede99aee78136d159f31a8b9e8ad138f85084d9.json
│ │ │ ├── 954416473cea61d3260f2344ab22837db590827f16694d5900cc2e509dce8030.json
│ │ │ ├── 95a538b07c1e5c36cf833b0bf2c24c2aad8887c0cce29f131b8955d49ac36093.json
│ │ │ ├── 95a749789e3171f15fb62e842aab1e6f7b90f5ef49294ec589c4cc4f766677a9.json
│ │ │ ├── 960f58602f47f074d08bced40d8e2b53444a0ac878445bdbb57d6347eea947c8.json
│ │ │ ├── 961052707b2d39c56d3ac2ee7c71d67fffc2c1398c7d64d8e18a7b28135c42c3.json
│ │ │ ├── 967e2a03e17513166a6db60940f525da73dc51e6070f173112c958d19f1adc67.json
│ │ │ ├── 9695ba37a74e06b354eaf534b8a50469ad28d863f5309da30df231a693b11548.json
│ │ │ ├── 96ee5f375448ed42ddd58a7cf59665e9206fc4d57db74284f078e0d7b8b726a0.json
│ │ │ ├── 98ca5a0d319ac231bd0397b484a575f161a9d996d50d68533f87ca28bd08f1c8.json
│ │ │ ├── 98f7e17eb21e729e143f0087704adaea95bb0f0adff24030074dfcd3baa4c0bd.json
│ │ │ ├── 9941623b98009492cdc37b2966b404c103e5994ed41dd1fcebb4c2ce6877af9a.json
│ │ │ ├── 99d4f70edde26a74f4b3590d532fcbb9546d960ead6093c4ebf980ad8633f910.json
│ │ │ ├── 9a23c502bf93186777c9fb2234dbda85ca059f0bdaf46aba368625f2b781ad61.json
│ │ │ ├── 9a82cdd4c2c930068e0496e03c70c9f637afae4ac79b9c17a472cd77318d8b03.json
│ │ │ ├── 9ae5cdf03e64d484ebb05bf06ffcfce8fec54f1b18bbb9eaaf5407a1072ddd18.json
│ │ │ ├── 9b13e00524b4e4056ffa2ae46eec43ad2bb981bfdcfd473c228ebf8e3d8d46f3.json
│ │ │ ├── 9ba01a24d92620ac886a5db2df8688d6c6edca61f3f9311442b1195f7b849c15.json
│ │ │ ├── 9ba042c097818072535372cd9886f2157ca4dc563b5b987afcf07fdda5ca91fb.json
│ │ │ ├── 9bb024db136ace66f2925ff2ce5345c6d3c1460b75535e8a411e44419157910b.json
│ │ │ ├── 9bc8ef2797b243f9a57b5cdc44b9030871574af42b9a7e172b08e02ad2e3c4a4.json
│ │ │ ├── 9c35ecf7b0ce11d35f39cc190caa5ac006b1180c3299d610d502d8e095f6355a.json
│ │ │ ├── 9c5b3f7877641d8b22b2f7db82d44f20631878bede3007ca6da97daac76b129c.json
│ │ │ ├── 9c92054d5a37bbea2ac19698055e783947b98191f6410a096d9f547aae5c03c9.json
│ │ │ ├── 9c93f6bf11ad1e5d74de5571c1247415898f1b40d05b29edf4dbbe91086f606b.json
│ │ │ ├── 9d8e37f5bb06c037fbf7397ff8280861eac7a6dbd2c193a695107e1b031def8d.json
│ │ │ ├── 9e10b8612a5a69b4911e01ac9dff62d1224fbdc0c02c6af5334be6b2054da062.json
│ │ │ ├── 9eb26fc4f2fb79ccfe7d09fec5e9d988460b8dbaf0b84e41ad4697ddc3a191c4.json
│ │ │ ├── 9ed9b8c6861b40c956931191a2f5296aff9ee2220af99749b91de6ac5e8f1289.json
│ │ │ ├── 9ef4cf2f79947ca5c835382d496d3dee1278084acae52085205e6d365d236357.json
│ │ │ ├── 9f3ca60e271e62dc90930c203fc4f8c0d84c94c6dfd3f93a32f3affa19a8ff66.json
│ │ │ ├── 9f490fa9287d9e22e83bc2e5b3e83d167c903c8c958091fcb222024bc9a67a35.json
│ │ │ ├── a02ef02d05fa58e2714dc1c4e7de674f41bc1162eb4203a498d18b5ee2cef286.json
│ │ │ ├── a07c260cb712d94e4ca0b3d35a39b230ac23c8dcc40eed36c9fd0917bef93924.json
│ │ │ ├── a11d3fc445802cafaffcff7791c6582e0437502aa844182022a2d189b1a524bb.json
│ │ │ ├── a13f258f5588abfb8217ac6c191c1101f9aad430ccf529234040b201c6a6696c.json
│ │ │ ├── a1f2eaf42e937611b0f75448c7ff101b6af3cfb8dad1ed6ffb20632044c6d9f8.json
│ │ │ ├── a2502753c569bbb394b1ca9396c6a8c6a8a16f9975ac92cb7590660dbb18ddf0.json
│ │ │ ├── a2cb9c4a3389f918a08acf7f7adc8f62211799e22ae60198dad20ef9f300f46d.json
│ │ │ ├── a357c8692764a18a6b93b32874ac78b5f8de1746faa1f41efb22d14933407493.json
│ │ │ ├── a3c920cb946721c730ac20c65c9954bbf66591a838c2293ddb7536f90addf848.json
│ │ │ ├── a48cfa6cb2afaa1be0bf05853c3eb55b156fe862dead1fcd4d0d7ef6470dc138.json
│ │ │ ├── a4c45aed0660dbaac088ca59b12b9ffe3dab5517417565c53698f022079ea81d.json
│ │ │ ├── a52c0a478a253c8ae72233d0924b895b8ace6f4b2a04eebefb1d39f9d82eaa7e.json
│ │ │ ├── a58b62cf5fd308bb92e26b275b7b7e76b18e57dc4ba417998f097666b219d7c4.json
│ │ │ ├── a5b2726cff08ca90db1a6b540b9bd9b469bdad35ee68a4cc53bd97bec1003a5c.json
│ │ │ ├── a6b2154bdb5546bc9abd6ac99e69c51307f53d4d0198a9e40819a48d3c3e8018.json
│ │ │ ├── a6b78dc7040a3b8072e6b2988134ad2d8682dfbae2b505a6d0e17d2eb2750340.json
│ │ │ ├── a72640b7420827c0e1904e40b007c088c798cc710596862b4f11c240ec53ce7f.json
│ │ │ ├── a867f61f77ac7d2fcc90314eea91e66c147e48127fdd151297b107f77f64e0eb.json
│ │ │ ├── a9070f1e78634e62e678f3b6cd79ed7060af3721b2231a2958786d56716c666d.json
│ │ │ ├── a935c998630e4f05a638cd6cd97e5493a52b0a976dc7e99d9fef3261f8f755cf.json
│ │ │ ├── a9677d2535a6d837c548a2ba934dcf7ae48cd304b5e4c30c9e7b2da593eb0bb4.json
│ │ │ ├── aa3fc57bdafc9257b1c6983627573330c60d50d26c324f1c15a26dbafdff0d7d.json
│ │ │ ├── ab83fe90a2318e24c516d0f883d7f64e613506f3b7fded7d3411822d8f20aa40.json
│ │ │ ├── ab9d456fd2c5bf9c44ab26131c176d4b455d5d608769396d363598d355a57048.json
│ │ │ ├── ab9fbf67067f638318b8b94ad0cca73905259f7cb182ac9b7024f1888c3b6414.json
│ │ │ ├── abc73b8567134030e5a6cd0202afd8951a5a7976fe4315da5bb2de853a8c3f1a.json
│ │ │ ├── accd741d4b74.json
│ │ │ ├── acfefd50b46f8bdaa9ed89f61bc79063801ebc13f467166db660716be96a7e0b.json
│ │ │ ├── adafd1c9d170436d5a746cf0e75be8d2321f60d2f860d69fbacd86a28b9f99ab.json
│ │ │ ├── ae230a6062d097d51a5a54cb41852f7f33f6b2c7a400039007c0822cac28d434.json
│ │ │ ├── ae5fbe1305cad035af3745bab08c3bfd9549886e65c95ed7887e2d43df42d0ee.json
│ │ │ ├── af0dbc6de10e26971ca3173fd6cdc9553a5691d199b032ab3abdaee6ea30b127.json
│ │ │ ├── af3a19fcbb2de1d9de4748c8f6895c75e3fae88a9941f3db3be73e9b4afe61a9.json
│ │ │ ├── af586c20e57267c3dff9c4ed3b7cf87e94e7c810aa550d4f1afad9cc4bd7ce25.json
│ │ │ ├── afb809422f92036a83c0368451fe08a3e605df24961599d214e3142e8b6f451f.json
│ │ │ ├── afcd08ae84eaf85be553a99b1585914cc7b99f76c11d1cd95311365f7e2520b5.json
│ │ │ ├── b07744ee04bca57741920f6ebfd28946604e21d18d30ac30d9a41956bc8e6639.json
│ │ │ ├── b12d4f926e46f2ed92e1a0cee8fb325f78c031c2c571286f297aaa46f5edb0bf.json
│ │ │ ├── b18dd1210d29067c89111b56b4ac89cd742f9e4b0b5e6618176463b6f943525f.json
│ │ │ ├── b1a8c7b629a05403d15bd3ad42414ab9faa5195baf24d9a2cbb4448b37aa37a8.json
│ │ │ ├── b26ee0191f21251fd2cdf03db2112e39bd5b2236417fef244285bb09ef58079e.json
│ │ │ ├── b28efb19a938e3880936efe24f0725363f7cb24eb9be0551baa3d76d63dedf95.json
│ │ │ ├── b2ef31dcb089fcf39c5a11cf56551c16246fb78e21e7c3e7e17d6f8e93ec97b6.json
│ │ │ ├── b324943b16ab1d5345e7953237b26deaf7633a4d053094aa3160f90b9ee8c423.json
│ │ │ ├── b345730f4ce8dcec94d43d4b234cdddb91996f89adc38c077c351a33ba8ad162.json
│ │ │ ├── b355e30b927b9edcbecad367da5cdd08b2c0df040ef12807516bf2661b2985f3.json
│ │ │ ├── b3c24a0ab429fb3d7e3680a2a689a8eddb2c2aaf826b513fec55dcd70cdf35ea.json
│ │ │ ├── b3e6d9837419a35aa7aa56e64852febe38130ca408e85b1d8eace747c1432c30.json
│ │ │ ├── b4ae7b5fe468a9b049ed53851d94de3dbbb1c06d1d260676b8c61b85cb052a82.json
│ │ │ ├── b4b553e34a48bb226e64867e492d349eb8b743c4adc2ccd9544c8bb430a932bf.json
│ │ │ ├── b4e9598230222a5223f8dfcb9efc11ddff8d8cf8e33916fdfa7d30c3aad8b062.json
│ │ │ ├── b5aa5a7967e6cfe0e1e3aa53ea11c1d3d254efdafa0c982852f8c1b93e4e489c.json
│ │ │ ├── b62c3f8f2acdfcf00c9831f56d7c06627c4cf0c3ea8e9ce39a239d1c79c2a67d.json
│ │ │ ├── b62d824408e5d5f1e278fb6ed654b18a8c50eeed5cfdd125ec110752595649bc.json
│ │ │ ├── b6578a03313d7ae3d2d4e096b9468babd648081b68891f7b4cab19bdb2d0996e.json
│ │ │ ├── b6cd4c6f72a27cce38a55f30a6a72bec1c88af0b7489d38d9aeef815a6489095.json
│ │ │ ├── b6d9e1cf95454a60e222f08f5529acc85403c448892208d2f9d1660fd75699ee.json
│ │ │ ├── b6e2f92f9a42bd574345c2fb6a1fb6411fab2756b155c0dda704956c63eb3164.json
│ │ │ ├── b87a025d37e4631cf736373c2f3620dacaa2b41e1aa0e0a4d4d84b08539a4b72.json
│ │ │ ├── b8c52fedcd0444b1f9d78ee150f8a7ce22d62a334ef235fa5fb90d151ca17ed2.json
│ │ │ ├── b8d1394cf14ac07dbe73d6aeed034b924d65d436ce0589eac5fbfc39ad2d8c3c.json
│ │ │ ├── b94634083f5b502478eb9465d5b29f49bec43271ebb2f394a660bed126918144.json
│ │ │ ├── b94779a78abfc68ffe310b9df0524044c355c1bf57b98dae6e63d44848d71433.json
│ │ │ ├── b95ef0598c13937b9c8a8b4aef933aef0a2a4bebc3f92b4c53320a21796c4cc4.json
│ │ │ ├── b98357785c1a8e285c18ee9ffa5d8281bd6b7bd589afe8cd08da7ed2d32a6329.json
│ │ │ ├── b9b13c917d8c918ff2c68cd38c4ccc49b4658194b3bf684de122375f9d799d59.json
│ │ │ ├── b9cf2277c2014ae47bd0ccd5784220f64b286925c5c92d1d3ed32e2d73a7f7f6.json
│ │ │ ├── ba5af8d56e09c291e8bd26f6f310661efed8f98568b5934ff686c0923d17bf03.json
│ │ │ ├── ba6643acb97baf3e5827c30c3c0c5c93757f351e09250695ee8fdbd305ff2a8c.json
│ │ │ ├── bb08b0234bc8ab5e587336d2b3795d325650440e5f86a3caa930bdd699f8e43d.json
│ │ │ ├── bb45c90bf4f66e08e90c5923ecbdc3df14be190f56a62a053a8577841fc317e0.json
│ │ │ ├── bb544a658bf4d58ce1f1078f125a4e81220daaf17c45c8e9b26063fe77b65e08.json
│ │ │ ├── bb6fdde027740ac5d908d741cf6722128186db06187f1658864b397dd85b7e30.json
│ │ │ ├── bcc2836e70bda8012c7c416bd170b8251baac042272a56cd7696c734fff243aa.json
│ │ │ ├── bd30ce11b71bbfd00ec9f2d6aa9d1068833675a6e0e8bb8ecc0007c01a57144c.json
│ │ │ ├── bd978bcd8997356a248151bfdf1ea2ba4d937215e922091fcba43b3eec385883.json
│ │ │ ├── bec883b835a4ead4c3cd10706fb31385cd36561c42d0184aafd40ea3287b96da.json
│ │ │ ├── bf07c673d163cb6482b2407e9ed0a0305fe2dbba966b668bafa2bf098108fbfe.json
│ │ │ ├── bf3af83c04fabf7428a820a4108d77d7ea22bc5edd24bcd6ebfc33ad93b86da4.json
│ │ │ ├── bf42334ba8ccdec1613a5652f1312468deae5cbb9613419643b8290da2267500.json
│ │ │ ├── bfe299f7d5e2d6752f5f22aef2863ec1886b39a203bd938857cd32225b961e15.json
│ │ │ ├── bfed3bff1ebde7501c487d760a69394d368f2dc507268730451fdc7eb2bde6e5.json
│ │ │ ├── c06e3e9168e15205ae2d1798b9a1c7023b66c8345f4f0e2a3ff89f16761207c6.json
│ │ │ ├── c07068627fabd4b135cea3c95316118e51341c42bcdf35444d937eee97bae329.json
│ │ │ ├── c0a4c5c2dd2ee8fffb29693dd123cd7a0e525f3d8fd4bc88c61e17b412b20d7b.json
│ │ │ ├── c1946fab4bf4700bf1a2c8212edbea4f81e280340c702ccae3ce8b478e9f89c8.json
│ │ │ ├── c1cef185e8d7d5a903cc7b81e622a00555ae0bab9af318079246df5c4795d7c3.json
│ │ │ ├── c2287c0960ed4857e1cda5eba09d20c56a8ab0afe06b25f59c9a4fc14a3e55f7.json
│ │ │ ├── c245aceb066511e357fe0e42911a0dcbcda97468d360089466144518bf27a5af.json
│ │ │ ├── c2482351e08e17b8ff837ed256b2d520cd5d088698a2e1ccf89d76b594c66023.json
│ │ │ ├── c275d023fa3d28f0b2e0ce6aea4ce01002d452bdfeb47cb5fe575099b01bea94.json
│ │ │ ├── c2a65d38d858ec59ec79f4c5a139e96b5652a4e598d4b3a50b17021ed4429e7d.json
│ │ │ ├── c2f33ae4fb9a88045730d790b7490d87ad64eaf7410ea1628e39251051136af1.json
│ │ │ ├── c3333a928f55b11a6c432f175e8c0d449889be37e7cea106adcf82836cc9a702.json
│ │ │ ├── c3aa60d65de45f5b494ee764faa65db8a7a472bf604007244f9e7450af3ea5b8.json
│ │ │ ├── c4084c9d90edfda84b8932542d9ce3c1ff3e58f111ed4f7ed457e1ff0e5c2eaa.json
│ │ │ ├── c470ca9b2638ad25697d3a703618f8e876ffbe4876882cca4765766d14d14826.json
│ │ │ ├── c47ed482b9e4e322e02ba3360187fb643f65a09c4622fc002193d716513f134c.json
│ │ │ ├── c4fbc04f05e51b2011409aba39157632f71d63fc264bfe65f5934974657fc284.json
│ │ │ ├── c5a210bda3708d1e930b61b62244afc25e2164d9f1c3e86ca86cc184e47ddc46.json
│ │ │ ├── c5d9f188e4a5ce31dae6957c44293670ed6aa0c8e1da5fb12cccbaff615c2700.json
│ │ │ ├── c5e10b616118de5535cdb9f3b23d5c97a052b38c1d0991d0d40957a2d26d7de4.json
│ │ │ ├── c61ecf00cb241fd51cdee62362d4ad8dab5c50cdd1305abe99e98cf82233b838.json
│ │ │ ├── c65686eaa1a1d92a625735c9c62fd25a4032e310bf0448712198c6d0583fc890.json
│ │ │ ├── c70e9c79891bf26109bd2ea9d589d4c93b93eb4205d72629ff682d0595355075.json
│ │ │ ├── c7446b903135a28b57098ca75e8a09616be69ff06cb5e962ed9cdb7c52c4f042.json
│ │ │ ├── c75e2552641d7fa3f2f45db014b2e52ebef1cc507c60a492619d95e3c22eae95.json
│ │ │ ├── c767d9255fb4bf45389cb627ffb20e0208868a6289f4d2f69c1d3034fde9e463.json
│ │ │ ├── c794ada97cff86c592db449e4973954668074081cb7ad61c89deb969d93e9094.json
│ │ │ ├── c81723f6c2f113a0b0150056293828fbf091ce4d5d9a0dafa6307ff1af6c1bb1.json
│ │ │ ├── c819f63f56cde3c6e586611342598333b8b5e6d01a31914219868283ffae8514.json
│ │ │ ├── c836313adba02042a668e0f7446a36080a7b55bbe3987de736bb26d324f9d161.json
│ │ │ ├── c870397c2ef426207818a36a0ce9b79125c89c01563004ddeb8d7d5b4aa71231.json
│ │ │ ├── c8b6f1e1ce29dd96b385116335ec06380f14a91dba5db721486a354769255521.json
│ │ │ ├── c8f3506511c99a4ddd8c7d389261ddd9153c5062d6c73ee538292d52afecf33a.json
│ │ │ ├── c9023d5c27b0ec273729b5efcc87cc75fdd32b78752a352c33ad76a1c3310836.json
│ │ │ ├── c964d5ccc1853798da808993bc0d2805a77bb9fa692ca34b5f1a20869bc4baa0.json
│ │ │ ├── c9935e59992e964151e8270e1c602284c721618203b336253a1e978f51b3d136.json
│ │ │ ├── c9a575dacaa3d646847efb52440ff6a57150fff785c3200ced10d51dfea417b7.json
│ │ │ ├── c9ace0e415db4bc8cec4230acab6170feb844977e233088339b11520111fa35f.json
│ │ │ ├── c9c5a9dca92a043ab728b2defc3b00cc87acaff070445e5a4fb82041323af026.json
│ │ │ ├── c9c60b59fdde74a2da2d4473166f13251d242cdf08fb7a0bc239897638217b3d.json
│ │ │ ├── ca4705a6b1c7cde723f95dfa5e66084659adf865e2a6a4b3ed06743be3d84ee3.json
│ │ │ ├── ca8339fafb287d7c41c09f9007db7ea10557ebed135964bd47300dddd075113f.json
│ │ │ ├── cab70ecb8dc421d5650b16ca0efb4d1651b5fd9208c23666d28082a6a81c18a4.json
│ │ │ ├── caf249303788bbf215875e82f577eb2b47cb79565dfe4c80d44a752eb3355e5d.json
│ │ │ ├── cb0915ce016e2f2cdf0e8dfbbf3087f8504623967a34c9dc00be26a05bb2ece7.json
│ │ │ ├── cb338f3d99f7cb7b15f1e860147487529a7bdb9d822752a5efaf4208e52528fc.json
│ │ │ ├── cb73b77f0a724be333a972afab1731dea8a1fee70e62469c5b25e479839910cc.json
│ │ │ ├── cbcdd982c4ff2743c2a89d2188d5f4594e654bfaabaec17b30f3738a76cfd7a8.json
│ │ │ ├── cbf1104a013154f501687d975aa2338f9a63ebb944bc66422159f6790f6f5273.json
│ │ │ ├── cc1bc4ea60dbeb16babfe0f2e2180948147976fae10275b6d0b7825a3146f6d4.json
│ │ │ ├── cc203179f129c20ec392db97acaeb6f6f84b7b52271ba6f8d382ca8b4df4b1d5.json
│ │ │ ├── cc4223c5b4fa93f038904e09ecd82abf3539157ff2197f0da8a5b2d7cf787d9a.json
│ │ │ ├── cd75899ac0ebe19b71a97862e623a9b4ffc709d2bb77b3a1e7e45728679e1fe5.json
│ │ │ ├── cd8dede1bae6783b0da9fa0e23ac24ac64111abd490278344bcb408a8b754cbc.json
│ │ │ ├── ce2fb29da9db1d69871d2c5c83311f9a001e2ca1b37d7e654e37051a4b1ac513.json
│ │ │ ├── ce4cd6ed048f8b76f33c5d5a9981b8180bbf1802472eb825a25603f98df73228.json
│ │ │ ├── ce84b764d28898cb18cd8f0dd41806c04521ea023b07fece5ba628cec080c0c1.json
│ │ │ ├── cf315d327860f159ebe5e98487c619e94f8df615d0b38eb7c44ac02db8fd8bc0.json
│ │ │ ├── cfb6925805d1b2d304117cdbde1191573149954ac33d5b59ccf48b179ac40456.json
│ │ │ ├── cfcb10b04469c51961e536c3778b4c05e7e1fd953e95b402d1832cf3775279f1.json
│ │ │ ├── d03fabbe414834a8278ff61a147076c3724b5c0c6e1b8387459698973575e589.json
│ │ │ ├── d0d555381b39bd7f058cb1789b58bb721edfac5d86ae03e3030e3291d7975dab.json
│ │ │ ├── d136c4241b5eaf29b487168e9fad90d295d5964b9f72208fa31357ee2aa27541.json
│ │ │ ├── d14b1ccefbdad99f31e87bea331b9e12bcbab48877918f917daa66b2ddd8d566.json
│ │ │ ├── d1753a6dd37d5619886666e29c6560712c6639bf0f6779ef88b16db97976b3f6.json
│ │ │ ├── d18c3f556c9352b80d3f84f4128f175c52bcb5d6ac2a110ae9d2653f35f757f8.json
│ │ │ ├── d1cb0072f831acef1d376f846547d4b5a3b314a6ef6836046a8f3834c9b68df5.json
│ │ │ ├── d277afb2a917dd631d5aef7bc14ccbc4951cbd69445d7bab2d4bb15d7d8e7b70.json
│ │ │ ├── d323c0ff73e3f9ca0b0fdb99f1013a595d2b74a55fff8737d9b6516092bd7416.json
│ │ │ ├── d3d13a0574416a631d54e3cc6ea3558f376056ffe775baef3ebabca2a58f0caf.json
│ │ │ ├── d42968deace0c46610bd421ed1b67fe8bbc9d09f6462f7fdcf703474df2246c3.json
│ │ │ ├── d43713c010d752a025b515d7136b461331069834b06341e47299cdad3080fca9.json
│ │ │ ├── d47569a8db568febcffe94eee6fa6e9f17e7533ade5036f250905f8213afe8d7.json
│ │ │ ├── d4fdc9a29bffee5359276c8077f87e59a8978a5e553ac791b794e3f00ba242ff.json
│ │ │ ├── d50f205d64917630d6b8fabd1947c62b513af4147c7607986f351946fde18801.json
│ │ │ ├── d54982af1b313ec3b910166cc543d3af5b1471ae89c076fddc334bd7b95cbb4a.json
│ │ │ ├── d5be1f458c59f1fd4705174c2f0d419668d1e341cf9f617cf2c452ce20be80d7.json
│ │ │ ├── d607f3ca173672957203cee32dee78e1fbf9f0d60a940d212d7f249858f3cdee.json
│ │ │ ├── d686f1f350249cb46f57b251e424a9523b9288aa2a6d769e801b554481c647a2.json
│ │ │ ├── d72cb4ce1646be2a2f783317ff72bd2218d18aeceb13a37f455c4a019a85619e.json
│ │ │ ├── d74045dca1b318fb9102a847d9115625eec1de6b38fde59986ec06b2c51138a0.json
│ │ │ ├── d778d2d36da02db741e239a139d8ae7f922a7ac7dc61a341ea28713d1b521309.json
│ │ │ ├── d77961bb03da7038090a3e069c80805b0df7a5f5fb0c8d8d6860ae70eeb51932.json
│ │ │ ├── d7ccb41b1aa7b2baeb25a8b92108be487ac51f593bdd45cc51983d6e710709e3.json
│ │ │ ├── d7ff8d71af87df7dc357486f48efc5c2382ad65ba96084bb0dae9e8312b671b0.json
│ │ │ ├── d817548f2df4cf952daaa1142fbacd9f4fefb66cd8a30bc09b88b181c459f59c.json
│ │ │ ├── d841db56ba62a7572cd59051f8ae43b47a9a2339901d0a1b0fde34b025440259.json
│ │ │ ├── d89bab8370dc5b552c2b2156e03a9fe530e59bdd5fe1a2faa95ecc24c42b5750.json
│ │ │ ├── d8a4939b120da27841885d4d2f21eb6ea033ba68311487073ee851cfb9e3deed.json
│ │ │ ├── d90403b9ec6b37f3da6b5d67a38227258669d8af71a6c38c9c0ac912345ec4c9.json
│ │ │ ├── d90a1b964ec80f95276dd608b077feece9c5874252e8e405858374cde63252ec.json
│ │ │ ├── d92fb08508997d18852b34b751319108fb0f23a48a24fd289150aed3bd4fd76a.json
│ │ │ ├── d99ee2ad2cd3e1ac7b88a48c47e72495344a21a2192dfe4e8cc823fd81670f00.json
│ │ │ ├── d9a6e3a4b83488a068b6e3d44aa06d93a1e126dc1fdebc7b2704f1df84fe237b.json
│ │ │ ├── da5da0febd0c7a2327687b92f3d30100f49b4377e2d49ebb31581f09a11bd26d.json
│ │ │ ├── da6ec32ed8fb5bf4d957058ddd391a9958c4cfd0ab301bbd7b466a889cfc631b.json
│ │ │ ├── dbc427977ef6a1792cbffc660687ef0f3fadf08af3e02228eb21ea3a0bf5e5a7.json
│ │ │ ├── dbf2a25f9aa80b6ee1002fa08786a0e67b540c3248218727e1e498c233043e79.json
│ │ │ ├── dc295fab3a3f3b5f318c2c430f6e18783cd311313426388a1be027554788baa7.json
│ │ │ ├── dc34532b39089796a5537b8c31d869eef66cd7dce06e16d388360c3a5312e6a4.json
│ │ │ ├── dd318be8983935b0af57eee266bd3c5552c75f74fbf982f60eac62d862100adc.json
│ │ │ ├── dd44766706a93bdeba280bd2da147ce7307dcec03cbf33afcfb1dbefba722d53.json
│ │ │ ├── dd68a9929fe4a70e43796d6c5fd9f050654528c4e0d311e9b521470046100fda.json
│ │ │ ├── ddba827f0ec931a9f5410748bc3c32d83cb453840d1847fa652c375d5c4d5c26.json
│ │ │ ├── ddc00ad2f61d682a109619c52a68ccc6c443f3fdcb639335557aacb2014ca3dc.json
│ │ │ ├── ddd264835206d5c49a45d6ecd6b214424de174ed2cf9a06858ffb7df7f476b58.json
│ │ │ ├── de0d8e177bac4d06361c38bec31d74c792a25e049dca4c2790826e99bdb332d8.json
│ │ │ ├── de37497ebcf4e70cef52185ccf24e3dc6c08494b71aca7ed2462c7861d6cfb54.json
│ │ │ ├── def4979ac9806c84b0c41809b711dbc78e9c278b7eff0bc382661df641d69dc4.json
│ │ │ ├── defed566a70e42a181f836c6e15e35d76fc75d792a006ce6ccc1fefa0bcf0d6c.json
│ │ │ ├── df7eb15a8b834fd2e982fa6a9fcb070e240638ce73f7aaead43cc6f24f111dde.json
│ │ │ ├── df9b40562d9fae8e295c6ebd6bd845170e46e9134b41f2178de152a4f00dfab1.json
│ │ │ ├── e0d5a1f2766babed1f0811f87a68965b1bc26b81d18dae7801fc31bb09df1419.json
│ │ │ ├── e194af0af96d245a5165404dc94b34e1ce2046d1be1921196091122ff5b30d4a.json
│ │ │ ├── e1c94041d79ba2eb25907cb85cde7cb8fdf023fbe997125c0636c4e68ed3b838.json
│ │ │ ├── e1ed192f877e21f914dee3077a37efe787b0dfa9e1f88c8d4055c2c024014c22.json
│ │ │ ├── e28125d63197aff33a01ec2439c8b6cb4e7339315339da2bf6057acfd30a23af.json
│ │ │ ├── e34b99e13d92f2a9d862242bfec1a0529cde52623412cdabf2d67731eca3ec31.json
│ │ │ ├── e39f9635d5fb6a9176e7e0756db9ad7402ecc3f508eab1d1e46fa4c366ad7f05.json
│ │ │ ├── e3edd61ca28c6951cbcb8f4c8689883c78cc4696a73a3c60c12e75755425a04d.json
│ │ │ ├── e41a1c8de2c20674846a287d2f1335c78cd820d74eeeadae79109d677b13f710.json
│ │ │ ├── e445b1b096f1db42df6ba7e0521edb561a9bb702a1395eef01667fea2bd242b0.json
│ │ │ ├── e4f3118873b9897787ca73007b11102fb796438513bae94b9f098aaa12b94c21.json
│ │ │ ├── e5ff20473fddfa1e984f725eb712490400a99c72bb5f8cb7daf89e72a662cde3.json
│ │ │ ├── e611e415816ce2ffc2fc089c4fba96f7db042ed2c05ec609b448618d5cfec056.json
│ │ │ ├── e61543c4717c3481792095f0fb82e3b17545aa562a493cb6b2c3915ccf949e56.json
│ │ │ ├── e639ed0c6cd7ef4a65328bdadb186edf113e2f21dcb3ecf3a8815ecf96b300a5.json
│ │ │ ├── e66621f3c3f4ec937fc1c20ba529513fe1b31e48f6fe06b2540f88b775d06499.json
│ │ │ ├── e677a75428188c8f5f2179a83a7f0ea73f58b995ed121c3a54da711a72839a15.json
│ │ │ ├── e696fe415349aa8373d8ae60d362dcfced5d064679665d1a37ccd049814eb6f1.json
│ │ │ ├── e6b6ad69b0252449d99269294939c0af6aaeb15f4cbb2920cd99e7542adcd7ae.json
│ │ │ ├── e6e147ce89723efeec334e4ea0d9935aba6ec4d8924857b19ad03163b496c077.json
│ │ │ ├── e709ec279d1c80132959ca847ae3dd4d4c6c5d9d1c81584b3896ba4c5ad807a9.json
│ │ │ ├── e71dab31f7dac30e095dd238b2aef62bfe669250a0107da678fd8d0ed38b3790.json
│ │ │ ├── e7789591dfbd4e00d6b32246cdbfef206924e7a0000b7ea0a8743867a9f37f59.json
│ │ │ ├── e78f71ce50cf5f80b048abfd2ded11b683077aca246654d40cef4ecdb1a0548c.json
│ │ │ ├── e7a945de8d75005edaa09a5c068fa0e826855d99591efc9c439951b7c937939f.json
│ │ │ ├── e7afcfe6c763fda2cec2c55a73ed7eaa5e2a72a1f1a78ea80ba8f3952c5f23ed.json
│ │ │ ├── e85cc5b656d03a7cdcb220ba44b447d31bb07a5ff582b33925a0d9800f7929ba.json
│ │ │ ├── e87439f4590e8c56a8ed3841305a4004e263a3aa357250e1f8dc0c1d8354f044.json
│ │ │ ├── e876847435d57844df8edf96ae0b5d7858eeaa0bedd0f883fb08d43bb5b272f6.json
│ │ │ ├── e89b5e4d61923183681f18acf4afca348a8e2f433fb0d6b6abd0be7d316bd573.json
│ │ │ ├── e8a7a22a6f7434ca36e4c6b8dee4546cbbcefccd5c79ea8150c677efc72e6102.json
│ │ │ ├── e8ec0e72cde02bfb8482e4749b24e16d90d3f9b141705f611fd5a90b3448d839.json
│ │ │ ├── e93ce2659faac4fddaa9d419e890a1b593d2994e409c66712ffa5c6b0bf6b8fb.json
│ │ │ ├── e9f395a041e8cb04bd5bc9ddbc47a7915675722eadaabef90e152ffe5683b757.json
│ │ │ ├── ea49e61ffaa092502df8b6022c77b5d58211d7729c5fe3af200df7b4f2441cb3.json
│ │ │ ├── ea983e3fc4f3fa3e3f027781f50bc0ba957969dcd622dc695c48d6fcf7b91905.json
│ │ │ ├── eb558fd3d055ab591c4629b23d79ca4c26adc3f5eac369c723f7b72a7b459f5b.json
│ │ │ ├── eb702e5e86a63eb305a722683a9d717fbbbbd5689a73e98a54f464e4c08ead7c.json
│ │ │ ├── ec2cfc4b6166106730d95eff2fa38db92c089ec4586d6ad8b2957e53095c7ec1.json
│ │ │ ├── ece3c7f548884da69b8cd848f74aeeaee0297e7fa0299d54036fcbbcccf6602f.json
│ │ │ ├── ed2ca06400ac33c4af70013f0acd312b6eea186caaa6e3a1e4a077f19dcf52d6.json
│ │ │ ├── ee03dfa968e9613558e87a20f7f4c504e43f282b1cdbb0318ee6ca99c81cd072.json
│ │ │ ├── ee28f174c77522f517932d5393f76ed053bc8097644f448b141aa3fc500aa5f5.json
│ │ │ ├── ee2f0b7bcb385f763b722ff038242791535db001faf371383c58028bbc83dc05.json
│ │ │ ├── ee3fbbbd3c1710121913f216d467330e89b997331d6dc231ec9aabb9e3239735.json
│ │ │ ├── ee89a17b0f5ab4a00d26af1054d7d74cedcba155943b3c6f4901c8ace6e2253d.json
│ │ │ ├── eefd538cb94a8950a08b4741544ecf79b186412fff53911e277fed7f16119fce.json
│ │ │ ├── ef22139c75c72d77d9ebcb1fd06baa7d2350ea50f61326c6c7728812198282ad.json
│ │ │ ├── ef906c7ac2d45b6a1d5b1f5111925d0cb43620c4a7fdb42a4db2ee8285a9ddd4.json
│ │ │ ├── efabf1bc6b36e0e07b44234bb80647453c6abb5cfb44951d3e6a64c1a436b68d.json
│ │ │ ├── efbdcc90c356e23b53224ef84e37edcb63ec3bd3a72fe389e74abf7e405ca3c7.json
│ │ │ ├── efc1c5750f82a4bd976fc3102edb3a30150333db07ab3d7557f43d059d97fbec.json
│ │ │ ├── f028fd0a4537a6ef0eab0fd8e03d5e13c2ae9a455d36579adba2f75dd2bb93ce.json
│ │ │ ├── f02c015b87620d7981755490c079ad6f4b1c312df8bdbb6128d7022c3875acfd.json
│ │ │ ├── f09e22c0ddd5fadddf5576eda433a4606d83084518337941aa5499b4a1689b9c.json
│ │ │ ├── f0b272b199c448f563fcf42a5aa21b6e1feb3e81b6681e8e8576d3a969675738.json
│ │ │ ├── f18bf33acd7d95dfac39c86031d6cfb81af0d5e02ebda0640cb537aecc6128d1.json
│ │ │ ├── f1912e5bafd37ef76ee98eba1902eaf64419f94aca7114b2791ec62c019fa6b9.json
│ │ │ ├── f1b9cca6577dc85641515a3e12bfb857d247954d11894c7a7a6f700cb9865abf.json
│ │ │ ├── f32bba769d33187504f20ecaa98d6ab400a32da9a7c3d52dd1dc39e5abb088ad.json
│ │ │ ├── f3b88ab91241008692436c658dd230342aac695adde6ab072c9962f6dd40b0b3.json
│ │ │ ├── f41569fd06f964eb74ac7581b3276c9b78f831255cf050abfb2aaf8b8c54ed1b.json
│ │ │ ├── f45f5e2809690356c90a1867bfaef9980b2330406931e31ce8a4738136c46ecd.json
│ │ │ ├── f4894c38303b5bf152c329b51c293cbe58f89b8ef772670856c898c8b56090cf.json
│ │ │ ├── f5649dab562d86fcd39cf6813e951d8772dc6009a4be0c2a1b8333376d730ff3.json
│ │ │ ├── f57187111eaf623131bb05f5147dfe5decfb20a4270e4a030b39673dbcad929f.json
│ │ │ ├── f677c034238cec1bccf4b924c410085f1df445dbd7580883c0544b140c0e5d6c.json
│ │ │ ├── f6af07a99e7452b9ef7acceda04bd675419d7c892098cde6441cebbc4663ef2f.json
│ │ │ ├── f6cad26f54a0817464e12e528630b57d8eaa3d289f494665041b3162afe756c9.json
│ │ │ ├── f6e038efbd67244664fbd7b4810af181d25ee74ae115c847229aff217ea41e66.json
│ │ │ ├── f6fb17fda4f48bd4699344866a1bdfc25ef030f5f5f14587eb08061ecaec3751.json
│ │ │ ├── f70a7ec8b774379f9555d7a2494efbddfee783a3c799d2f648d0bc2ad844f8c0.json
│ │ │ ├── f7174f39c8a2e71b0de698b9dd9ae05a941f49f7f733886cd0cc85984bb99b99.json
│ │ │ ├── f736a77cc103e9437a9c205fa7fa48d79a113ebed98f87f53a3b37c36430b7a1.json
│ │ │ ├── f7409e8c98b48eecdd5769a760c703bb970db9fb3660e2bb6d24b9fadedab9d7.json
│ │ │ ├── f82ce80a86924b02ec40fe8a18501876278f804fe6cab68533f244c530b40a3f.json
│ │ │ ├── f866dbd67894de4b62f58c52d91a7c3a028c28ab7fd8cab7974f98c9ef4bb190.json
│ │ │ ├── f874e8c5ccd08c674707a473a1009e93344f0c617a612890e1faa24cd27dd30d.json
│ │ │ ├── f926d2c62754422f68cedb865afa84884e49699fd9e8c7e5b01fdef9b963dd07.json
│ │ │ ├── f948ecb568b7edf46f1763406a51b7b1cb530f68b40e5e2bede681d507fd524b.json
│ │ │ ├── fa35d855767b5d1215614329c981e2a9fec458c8df022db01860a27f07a176e4.json
│ │ │ ├── fa7dc7b8c4359a8856b40771e91769eb16496e5e7f4e65a5b4f350882c03a344.json
│ │ │ ├── fb2fe81813e47193bb1f45b13698a7d56ad4813738aa045ece453ce0557e1bf6.json
│ │ │ ├── fb6a58633b48453b9274ae5f634ede2243041d20691596e9beb4111a40c9d0f1.json
│ │ │ ├── fb7abb86126b1c96e1f72877080d4511463cf5f03c2a70b7f4bce9ea8fbed9f5.json
│ │ │ ├── fb828dc66f9b21aa5e09a22a5b28b69f60beebb57ea66aab8ce696bcb8e8267f.json
│ │ │ ├── fb8db92aef78078b35ef27b6ceb5ef91bd32c070c3fc56780c7cbd7cbab132c3.json
│ │ │ ├── fc61b5ebd2c55fed7c8f8b75dd878178903911039291a5bb19c207c173b1e695.json
│ │ │ ├── fc9255f62ff2b93456aba64b31c8ea0d56bd404e950723173fb4fac43666b776.json
│ │ │ ├── fca29c7cb550f2bf33d0189153c9ff6f4e265c158dc8c7601ae1149d2e3649fc.json
│ │ │ ├── fcdf4fc8a149289b6e52951586928e4391a6d6743b727e56140d30ec3f3b4beb.json
│ │ │ ├── fd553c8a8897313b46e15f45ba8bd672e947ac01f13b359b6e0a6754ece59fc5.json
│ │ │ ├── fd5a92a5d971a275b8264f18e365f091f8a5573a69c41be2fa839e69c21128b1.json
│ │ │ ├── fdac19ffa6b82581446256ff7dc2975c55e4db65cfa445876876309c74aa667e.json
│ │ │ ├── fdb8dc15344af25a04007bf40b1a0c83d9b54da75853366d9e9fb31009c6acae.json
│ │ │ ├── fdbf3d3343a0e40155ee2e341601fac36ef25cb8652759167249e7753a0b86c5.json
│ │ │ ├── fe8421b8175906beb6aefb1e354cdc3c3bc64145197f146a5877668f53925395.json
│ │ │ ├── fea1ea5622f42cfe111201b01a72a1c144ec096d718b508f0fbf883378835933.json
│ │ │ ├── ff2acaf7fbb3ac4363566533fb3c19ce56234c5d1fea4aa9db7d69d47c748206.json
│ │ │ └── ff67f7f485670538b84fe046af3a98fd2d1aef7e43e35e11209983387fb1f0ee.json
│ │ └── test_openai_responses.py
│ ├── batches/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── recordings/
│ │ │ ├── 3a680a3aabcdeab5d9a7cf137c2d4cb9dbd89b4a42691835373be5655e288f8c.json
│ │ │ ├── 47f3ec3cdc8a216c67662521cd9f0036eeeedff157b39548846c689271d25b79.json
│ │ │ ├── 92d49675c90319c093846b731bdc33d7b261cc73e12a914c9c3661a028c19adc.json
│ │ │ ├── af930233ce6e43f38f2fc6fa0316270c63cddd1b42eb310fde08f51170f2b913.json
│ │ │ └── cb4673f5ab80c45bc13140600f423c7cd5ca750b1a732c92ba6710c2b2742d81.json
│ │ ├── test_batches.py
│ │ ├── test_batches_errors.py
│ │ └── test_batches_idempotency.py
│ ├── ci_matrix.json
│ ├── client-typescript/
│ │ ├── __tests__/
│ │ │ ├── inference.test.ts
│ │ │ └── responses.test.ts
│ │ ├── jest.integration.config.js
│ │ ├── package.json
│ │ ├── run-tests.js
│ │ ├── setup.ts
│ │ ├── suites.json
│ │ └── tsconfig.json
│ ├── common/
│ │ └── recordings/
│ │ ├── 02c93bb3c314427bae2b7a7a6f054792b9f22d2cb4522eab802810be8672d3dc.json
│ │ ├── 0b2c69a5bb37ad55d47d36c33e068b00867d4d5f68e16bc1884b71075b316c72.json
│ │ ├── 1098240ef53bbd378adf8dafbd5838b16eef7d6a7d6e75d24e3c120e25e73750.json
│ │ ├── 224f7e7bd332f0ada326039866d13b7f167d5bfa91ce752022010f1e885d869f.json
│ │ ├── 395c30078677826058a0cbe136dfd07c816854cfb7015ee4ece0e414d16e7e52.json
│ │ ├── 41c28019c2c89e5962ae3043dc7015ee45aa5ee235645768a230a5fa5cd45ad9.json
│ │ ├── 4df315784095a200b2d275c6f8dda8be845e250000208127d20cf8c4f0bc666c.json
│ │ ├── 5b03940f8f14616ba20bf3b695138b785ffc26aed814ef01db492f4a5674d6c5.json
│ │ ├── a4416482053457914b5834398c2664ceb843d8c7deaec80a59d5e20dbb1ca090.json
│ │ ├── a6ad8748dce1ebe53352c6ac4ccd9b209d614ce5c6ff86992b4aed3dc344eafc.json
│ │ ├── ab1a32474062bbad640ce43d02d6b61ed9f174c225597f0241cf120c47c7d2fa.json
│ │ ├── addb54956973bdb2365b2c720e75a55b0be2df284fa147e7ef6cdb7b4c79d620.json
│ │ ├── b2c646582d0a4d9d8986789261c0d630d5b604ee6291cf8aa3d44ab761f2c676.json
│ │ ├── bfc8818f4ad237ba6c9649d47eaff8946e334ea6a2bcb564d74f4f14dbc3497b.json
│ │ ├── c34cccb2af2fb9f02f7136b0dd350e75e7d2a77d222ef26a9bc419e10fa33c56.json
│ │ ├── c4f314b202711805808eb75f1947cb6cca0bf8dbffb0dfabb814f9da0083b3c3.json
│ │ ├── models-3a641f25d65695766fb77e424273f716b852f371e1e87f6e14fd5672b1ab6005-4a65eed3.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-0b98574d.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-0da7d1b1.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-3ff721a4.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-46bed5ab.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-65512f75.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-6a62c598.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-7c709cee.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-826d44c3.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-abd54ea0.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-b848663c.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-de96e712.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-e660ee4a.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-fb68f5a6.json
│ │ ├── models-66c1506ac9a1c3cac55a2dabb6a81f068d753f4a69ae4edeb730b7ca374186c7-74bb7a92.json
│ │ ├── models-66c1506ac9a1c3cac55a2dabb6a81f068d753f4a69ae4edeb730b7ca374186c7-be228ab4.json
│ │ ├── models-83953d70762b611d7b1e6ff232b53374ee7c35538fb0392cf9d92f27815c4fc6-c99eb79a.json
│ │ ├── models-d98e7566147f9d534bc0461f2efe61e3f525c18360a07bb3dda397579e25c27b-a882f554.json
│ │ └── models-d98e7566147f9d534bc0461f2efe61e3f525c18360a07bb3dda397579e25c27b-badf040f.json
│ ├── conftest.py
│ ├── conversations/
│ │ ├── conftest.py
│ │ └── test_openai_conversations.py
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── test_dataset.csv
│ │ ├── test_datasets.py
│ │ └── test_rag_dataset.csv
│ ├── eval/
│ │ ├── __init__.py
│ │ ├── constants.py
│ │ ├── recordings/
│ │ │ ├── 0a2ea52bcc4c7e04d0b4b844ad94bed06bcbaa03d13b228f61e2b36e23093469.json
│ │ │ ├── 171c4dcb3dc848196f5d7fd87efd4626e70673c405ae1cd72b8dd0617104263e.json
│ │ │ ├── 1b2720589d2a4273b5eb2c06b50ab45674040195c15013c9ea43bc6331e1a831.json
│ │ │ ├── 3e5ea35cb3dc92835d230456b6e2fc61593f964148d6c05df5c4a387a5389e6b.json
│ │ │ ├── 58177cd1c0d7d8de9e20515c3e8fe465b66d8436754b30ff4da28c7c03c094a4.json
│ │ │ ├── 6de6d1ebc3128dfaba1efe654ca1453f12cd31ce2e294d20868c0c498b7d9136.json
│ │ │ ├── 752abf1ef7f71bbe7028eae85814e6d567d1e8243e9b0d18f8803cb9b7c8f92f.json
│ │ │ ├── 94e3d8dba56da92e1014a6ee81b61fe8e95d98692c189e7308724338f918678d.json
│ │ │ ├── 9ebe1e04fc3a8d41f88992428a7c99669c7e19b3d551090eb6bec83b33de2a18.json
│ │ │ ├── aa20023c358a0dc718355082cc244a231426700a772b8dc64abf05d8b126a736.json
│ │ │ ├── b52a054b314c8b42634c4a9ef76280591f73cf26c00b7308dde7d19a1ced016c.json
│ │ │ ├── bf6b37511a044df8ad1c6113d3936b1e7f4a9d4f7f8ba8bd844d50265067f417.json
│ │ │ ├── c07b01fe99467efcfa99f6ac9c60acc212cf2ac3bdd4192aabb5f98359236572.json
│ │ │ ├── c4ef767672c890e77ceaa15b6239e9d5a9a5ad6ee7bcad0b12853979b1e43ede.json
│ │ │ ├── cbf92825593fd79fe76e0ad0193ebe742743cd3042654efefa86714e357b86f6.json
│ │ │ └── dcf3c9afad420e66c3cc7434a48169a1235798c2b3ad9abbb29acf1f1b2952fa.json
│ │ └── test_eval.py
│ ├── file_processors/
│ │ ├── __init__.py
│ │ └── test_pypdf_processor.py
│ ├── files/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 108e7edbe4a967fdb8befc0df3d3c10c336afca41aad421e653e4b02eab2a632.json
│ │ │ ├── 12a8beefd95278334e190cfbc8dba722684325cb294aaf45dd42f316d9f6ae5e.json
│ │ │ ├── 1ed03eb1155d3be1507472aca14a1ae10513ccc6b93e7e9d9d50f4cf83b8276b.json
│ │ │ ├── 460d3a62966099de71029d921f76bf7463644b1bd051c7ff5c24f42a2db28c40.json
│ │ │ ├── 47e333d2b4d1585f94f47e173b01ef12a83b887d82856fde50368c85afc4b9fd.json
│ │ │ └── a39e2fb391defd5c25de14caeb5328e102a2c3a0838cb0de0bb62dc04ceb5da0.json
│ │ └── test_files.py
│ ├── fixtures/
│ │ ├── __init__.py
│ │ └── common.py
│ ├── inference/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 006b190876689a0176b00b7bf60ac4944cd9a2e386d37980a2b2466c851686e5.json
│ │ │ ├── 00bbacbcc8180b2151778cdac99b204e347526bc5509d4972f5fdb4d4bed2434.json
│ │ │ ├── 01996b2b3ce70f76d75def3058c49a7d035920832e5bd9227fe940f7f137ecdf.json
│ │ │ ├── 0241337625808a1602a0b4b1c715c7531cecf2491f2f2129e7e6884e3ffb62bb.json
│ │ │ ├── 0248ff8a1be5ff5ba88046947059ffbde15a1c52adbeea456bb42abdfc931bd1.json
│ │ │ ├── 02fba1826ee7c9b9318645bf6e4514d57cf09e34e40fb2745da54227220ccf35.json
│ │ │ ├── 09e409c5eaa8019936481779229558b1541008447a01ba5fffe8c6f17184e0ae.json
│ │ │ ├── 0a2adfcbd0a23b2d7713b678c5fbf3eff74e4fbf0d1de5740bb983492bea9a2d.json
│ │ │ ├── 0de34091fb19d61b7edfe5f361650789ae2e66f9273ad74925e95b230a862a00.json
│ │ │ ├── 10d6c5e40b605412566675be517b6e4952c1bce8cf0c0d3f0402606c092a6080.json
│ │ │ ├── 12b4c92fd0d85cf140cb3ae3c1f79a6f684b20f57519011742a8b9088e92130a.json
│ │ │ ├── 12ea4e4a2705b0589c186d9d068bac0afa6d2385867afa554c6c672722a4e1c0.json
│ │ │ ├── 1675987cb787dc51be76c547577dd38172be220c805c37ba73ba56fa89cd1121.json
│ │ │ ├── 16daa8302d1a96cfb6ff033d4ee42922c7c4fc75fdc786df222fa9d64d21115d.json
│ │ │ ├── 17fab41a46c9f0fcb34928d4ced8784cece336d19f6323f850005ad5589e1589.json
│ │ │ ├── 1867171238f701f0face022cc6890e82ed01e2bc7376d7e0280d29bc59f3ce00.json
│ │ │ ├── 20032ec4aeb47f2a2711ec6fcada258dd47fcaefd22f8ee6a6c0b07152c551d4.json
│ │ │ ├── 20a2ca7669b281740d72e6bb89199c65c77eaea3ce4bd4115fa642efdb820691.json
│ │ │ ├── 228c053a646f7563791aa7f633bb7353eb3f763add416a69ddb255b16f6ea0a9.json
│ │ │ ├── 2367bed24bc3297a70b3c54a1c3e6267ef53986f8974b83364e43a41c06f76b5.json
│ │ │ ├── 27626d79a55535527b7d7ef07f3da44a52de3d7d2e56297491d1a62ede6d48c5.json
│ │ │ ├── 2825486bdbce4722bbc4a993f9f39e820c16bc8d324dc598be1224dad079ebb7.json
│ │ │ ├── 28a43dc80443ccae98eee165c58522090fd6f0637031153b0105399093d39c52.json
│ │ │ ├── 28b529023374d3345f46c0b183ee352ff5014ff344238bd40b820c61510097eb.json
│ │ │ ├── 28b74a89cdc85de62395836bb21baa777d3197245698f4a7531afa0a15c11d1c.json
│ │ │ ├── 2f35a0e0c10e47f2fa64a13d38902ec16d836a24fcd09e330b68b7aa514a10fc.json
│ │ │ ├── 36968c3ac66be305df6bdac7b747612e4e6645cf3bfcec16f96a41397cbfd5aa.json
│ │ │ ├── 37e10e6ac4dccb3a91333fcfe9a17806950b21da9470c98960495f3b9fe94ecd.json
│ │ │ ├── 3d2d95c9e7f6a2e434c69fb2d5ff50a3cce15ef5f308d5443beebd71a7dc7818.json
│ │ │ ├── 42ad86f93eda42a3a73cddb74e533217ddcff6366b52a52718b86148f0e16a7c.json
│ │ │ ├── 42ba670916ebfdbe86b518ad1692971ccbb2c2e4a30372f43f38f8e1fc22daf0.json
│ │ │ ├── 452805c3c85951c86e4e5dfeef078a2e184866dafee83186cd84932daae1af42.json
│ │ │ ├── 46428a21010b325bc6a76497ab428d8824561940cc18eafac17f1355ec8cf6b7.json
│ │ │ ├── 47a484434dfe84938b43b589c2e7a7da5fe3274843575f2f0f685e084628f2a8.json
│ │ │ ├── 48fe79430a3c8a23c5d844602b1773d5a1270521ea405e93d4203dd5b35ed173.json
│ │ │ ├── 496035259763c1bddb1a3148c2586663d08a5bc31f697d1fc5d9bed1c71f5950.json
│ │ │ ├── 4b67443597195a9092b2b27b1dff526263df8ab267f4a9df7196dcb6c11aef17.json
│ │ │ ├── 50fe7d08e8a84d609b5d189fcf303f28abe6244b50d92a81ce25703890d3968e.json
│ │ │ ├── 524ead18daaddb6228284820adaa3fb312d2a525cc35e20c181190ddf40793e6.json
│ │ │ ├── 53f557a067b8f00b81dee1d0f8def8051f330d7a91faa68addc39f9b29e5dbbd.json
│ │ │ ├── 54606aca0c734fe36c3fcba632a36aa4582c2c92af953638d6e1ae060c01d71e.json
│ │ │ ├── 5ae0fe8a12bcbdc6790a759957aef63ebe279ddffb1248b805ff8c22e4d95119.json
│ │ │ ├── 65eba1be095a7037c4f197f4168b310ebc8afc00aba3946ba498abe2fdbe6a63.json
│ │ │ ├── 6626c46dfaf503c589013d6396a3e6871117c7c024d37f16a8d0b2a7def9f8ed.json
│ │ │ ├── 66421295027f05400bb53e4358105d230806576136cf07e345dd220db2073c4b.json
│ │ │ ├── 676c9e0736ad6864480d4a884e157e9a9ceb4e5f9441635b19809ed518542406.json
│ │ │ ├── 68a0a14e828ca575c2150f6de6961bf8d326b1ce1beb6902a7aa369b07f7e17a.json
│ │ │ ├── 6aca9a95bddf4258695b867248b32cbce4622ea32acb9b5330fda6c8a31f40af.json
│ │ │ ├── 718bb1cd939e26c4b7e6b940c3acd97304f46e13b606e081086dd6657e9d3db2.json
│ │ │ ├── 744052775cf90e30dac587e6b809d41a8cc37adc29c500eecee2727f428cbf5a.json
│ │ │ ├── 7794d17cdf3672c5508ce0b07b0622513134f71115f13dd5e65ddae9f2b54862.json
│ │ │ ├── 77cf218283607bfac37623e1bb4e6f33cae670df7d6995d432bca34c5dfb0e43.json
│ │ │ ├── 7b870ce8970377661fbc70050c35a7325434b30be994cd3ade1ad36aabc027e9.json
│ │ │ ├── 803b63dc14be19794ed3eda644b58c1ddfee8dbd1c3f7e18b21ada4564d46f35.json
│ │ │ ├── 853f6a700b98d71d390b7d366e27133a22772fbdf11863158349c1b0625bbc72.json
│ │ │ ├── 8567635651a5e7104394951bbbba040e5c7f3ba11084fb6e81328f4905100a65.json
│ │ │ ├── 8823085c58bdb7dca853d7a661e51d80446d906528ee8f715d57f748fd533afc.json
│ │ │ ├── 91e1f4c91ab33df30e4111bbed3051c2713a56cea03eca072280c750a1e913a5.json
│ │ │ ├── 95be86b56c9f5f688bfb396933972ec68f056ccbdc10bee6610d2c6722761d5a.json
│ │ │ ├── 9909147bdf0a349a396980379c5fb05b53b488c1c9e27bcaa0c6d8cc2757fbcc.json
│ │ │ ├── 99bf0054f11a9c58c13a44f9cf962a706ebe85e2a5fe637ddad558cbaafe92d8.json
│ │ │ ├── a1e4350b0157d85e74c9f661b2d0510434212d7f36fbc1eddacdaf5a62520dd3.json
│ │ │ ├── a2e6e4b902733b08c8c4a4cfcfc8ef85a4d1188106290a809bd77ef54f6d3b2f.json
│ │ │ ├── acdd905b048175b96ff61d93fd81d650b26bda3cf12e1f0cbd2820ae73f4f2f9.json
│ │ │ ├── adde4652d213ade69fd79fab1f667f1ed5189fd79a649ba90240abfa605b6210.json
│ │ │ ├── b25e641e43bf2d8fd5729a97ac478122d328f6459b179d5ab2ffcadfc6ce02c3.json
│ │ │ ├── c035d6f372fd396936f958e08b2b2afee7db8bfd6a87a50952df3e643b4cc69d.json
│ │ │ ├── c03bc36fc4c19495050b64122ffa310f812e2ab2aa32f5e01ad0ac9b7ae046e2.json
│ │ │ ├── c9f153318fe61fb66b52b29c940a2decc5def5e2c19069e084ccfc0b0f5705b3.json
│ │ │ ├── caf6ba1641579294233ca97cb423216881258fc0bb27598e71af0425e777fad1.json
│ │ │ ├── cb4bebfaa5a88b83ea171543ddc3b0c02a1e5cf3f33c1efa9b51d5da50faf170.json
│ │ │ ├── cfb292c0f41dbc4a2c0fb39016760f6c23c248a7bbffea19ac6bcab7bf25292d.json
│ │ │ ├── d3cdda901f5ae18d0d636419bd15fd4c5c45dfd6b0f35b0a708f10953874f047.json
│ │ │ ├── d5ac259ebfc8696f4e809d472bac01c9ad4f05ecaa6a633a6066944737462d11.json
│ │ │ ├── d6f772f62c859028bada2fe328498364e82c1d36ed256910623577c6fcd5696c.json
│ │ │ ├── d8d241571255658030d3e30c3d5670fbc5b9d5e0f4d7c0f23656aab3d6920753.json
│ │ │ ├── d94bbf50e75423e35f37c42dff284c2589ce81445e3245e5810e5adad8194684.json
│ │ │ ├── de019f1d2995412fd461393c644f07c743cf81d087249ef2db974576238ab1c7.json
│ │ │ ├── df353403c7fb59ed88c52269261b3dd9b75f681f8bb5431b4f07006d6c08aa7c.json
│ │ │ ├── e24ac6cc7566dbe6d1410cbb58d1270f7cf4f9e662c0f4c214838314662b7178.json
│ │ │ ├── e7a897d6a332e140a75a46dea0a4dbf84aa0f89e274919ed4e0b9a027ac9b823.json
│ │ │ ├── e89112e7735fccc5ad9ebe6a96454953aed0ba2501cabfaa80b742c2bf371cbc.json
│ │ │ ├── ea6c513079941938a685ead1b654fe822569c27f1c82a48ab7692e2105484689.json
│ │ │ ├── f02f1bfd75adaea87b91dedc59430b99015b5ed0e2bbf24418a31146ffcbca9b.json
│ │ │ ├── f0f863b7a3527d2848b81dfcc05c898a7a2a1ab5e1213f100aeae00b8a5e1ba3.json
│ │ │ ├── f3bbb5229763f689be0dd350b96e1067861fdaa62a976a1a8f74ae18c1bb5bcb.json
│ │ │ ├── f8d0f5a82750f890c97d61233f0ff3cfeb5c1de8f9ea9a621d2106c673225960.json
│ │ │ ├── fa9cf0726928f0e85dd8f10a9c7784bb3262ab1c94ad479f7335aa4dbd8829fa.json
│ │ │ ├── fb2f9f71c85f5a98796736c54977e50eb55df1721b6b2c65631687cfc0ecc15d.json
│ │ │ ├── fec22760875c460a453f839c1be6691e0fd8c546f68d07f7dfcfc6223de97207.json
│ │ │ ├── ff97e1130a00d06429e1ab3a008ebcb09dc90fba2aebca040644ed1a141e1897.json
│ │ │ ├── models-0037f2d2065a360cfcc36c35f138318cfc6508e743ff9423da4b7b1d7bfd4f3f-0da7d1b1.json
│ │ │ ├── models-0037f2d2065a360cfcc36c35f138318cfc6508e743ff9423da4b7b1d7bfd4f3f-fb68f5a6.json
│ │ │ ├── models-009fb75503cf565d6c97f70deb8235432b0020b93d55e3b33ea093664c4bbc82-0da7d1b1.json
│ │ │ ├── models-009fb75503cf565d6c97f70deb8235432b0020b93d55e3b33ea093664c4bbc82-fb68f5a6.json
│ │ │ ├── models-01c34acb0e353356c80b5e435c8c804b7580ea306d174ff03715391f41c892ee-46bed5ab.json
│ │ │ ├── models-01e6ee9852f532d9b0d82dde2e7c831d698e81dea1be69433050d42643f35edc-fb68f5a6.json
│ │ │ ├── models-0335306fb7f0265981b82bf50165d8bacf577330daf430c4a254ef2d1bfdfd18-46bed5ab.json
│ │ │ ├── models-10370bf5307b2fc971b8e53bdcc4e9eb4d3d76fe8ecdb31231b59576a612e972-0da7d1b1.json
│ │ │ ├── models-10370bf5307b2fc971b8e53bdcc4e9eb4d3d76fe8ecdb31231b59576a612e972-fb68f5a6.json
│ │ │ ├── models-1106454ace71638147e2be1ba5e7d4e526937f4e63adb2ac05921a316dfaa658-46bed5ab.json
│ │ │ ├── models-1312e0d8579e9b0e6dcb222272de34115277db71c6c560872fa13722197f881f-0da7d1b1.json
│ │ │ ├── models-1312e0d8579e9b0e6dcb222272de34115277db71c6c560872fa13722197f881f-fb68f5a6.json
│ │ │ ├── models-134e731d073e9e07eb9782bbe292167f8ad08157a15150ce92135854d04050fc-fb68f5a6.json
│ │ │ ├── models-14c0905df1b177d2f85b30b0285b0ffdc88d1a7b290e2155fb7a01f3c1436ca0-fb68f5a6.json
│ │ │ ├── models-1bc879637162ba23badeea66c4c25a638869a3e90d16ef3e84dea1a613e7192e-fb68f5a6.json
│ │ │ ├── models-225a503c2b6f296c7df691fa63e9ede8269778abcf6d894fedb46e16805839d5-46bed5ab.json
│ │ │ ├── models-2b2dde71a8ea4bd9d2b5f90ae87abf440db0f43f5e1e7ea206ef6879c3ffd70d-46bed5ab.json
│ │ │ ├── models-2b9bac5da1a03c0b572bc019cc0c50904d49e6193990ca245908f4535bcaab43-fb68f5a6.json
│ │ │ ├── models-300fb014e9202fbb69f30de745c66e4d4d40ec61b1e14e1cfcfb208f85b28d3a-46bed5ab.json
│ │ │ ├── models-3532d5e560a156778eb8a83a6c50c447171cb510ece62cec23931e7743c9be34-46bed5ab.json
│ │ │ ├── models-394c30370fe5b724c5fe1292984373b281d47b2ac0d49e8b598f13cf100b3ad8-0da7d1b1.json
│ │ │ ├── models-394c30370fe5b724c5fe1292984373b281d47b2ac0d49e8b598f13cf100b3ad8-fb68f5a6.json
│ │ │ ├── models-3f4208962fdb2be3e7057777fc93a149890bd1dfa8a92597e176f23658e86cd8-fb68f5a6.json
│ │ │ ├── models-4014362c14027c4d23582b5fcea46cb6c1f7d50dc4616645395613b50f1a9775-46bed5ab.json
│ │ │ ├── models-41aa7b7ed809837ff355100f3fdd784fecb8224d5509032304a9e7d56d083fe4-46bed5ab.json
│ │ │ ├── models-46f81dcc7e77ca9cdaefc9c5a99ee4c6fe0388113fa77bcd9bf533dc79002f66-46bed5ab.json
│ │ │ ├── models-4a729b00af209ad60846d1904e5973ad081aa5f595de50f5ef1aae304cb67ef3-fb68f5a6.json
│ │ │ ├── models-4f62bcb9cdf74f4c2ed804038def162f18ad384182b0f174918607e9ed3c1515-fb68f5a6.json
│ │ │ ├── models-54b420cdb98a0149a618088f55746e26b7bf6e7c5ebf5fa07c13ec9e366521d3-fb68f5a6.json
│ │ │ ├── models-593e833723c0415f0e7ea0ea0eaa42b5b5bafa2d90d6c61af81f763401980e02-46bed5ab.json
│ │ │ ├── models-613f5d11a8cda7126115f96650334fde0a0457a6b4a2605bc15eec9b50a6956c-fb68f5a6.json
│ │ │ ├── models-61949aa4091b4823c67547cacf24f2647f681f2fc671361e145c697c40bc1b04-46bed5ab.json
│ │ │ ├── models-62a361f55d61a98ea0863e9acfb5ab5d540c5d19e791415ee476474f7f1ed90f-fb68f5a6.json
│ │ │ ├── models-668fc72f70ac72d5c112fe79d86d5c790611456b3f0102832f27e6edd420ab54-fb68f5a6.json
│ │ │ ├── models-69d7f5ed40488fe30d45483b2e4bc9e4cd3006c09053928965bbe4a4a3ae65e4-46bed5ab.json
│ │ │ ├── models-702eee4572e9b17ff0b0fdd55b10021f7077f0afcba922d6a53db0b537542518-0da7d1b1.json
│ │ │ ├── models-702eee4572e9b17ff0b0fdd55b10021f7077f0afcba922d6a53db0b537542518-fb68f5a6.json
│ │ │ ├── models-723d37a5bceab199cff076a0dcc2d4ee7596b7c800f13c64f6a6ecdbf4ed2f3a-fb68f5a6.json
│ │ │ ├── models-753b5deb1ef3a596e2356c046dad0b193d6d88e7aacb1b29b3214eb7f77ed7d8-46bed5ab.json
│ │ │ ├── models-768c497339830cf86ddd7843f33d0ed06b3bce3ef2ae9f854364b534ba8cafb7-0da7d1b1.json
│ │ │ ├── models-768c497339830cf86ddd7843f33d0ed06b3bce3ef2ae9f854364b534ba8cafb7-fb68f5a6.json
│ │ │ ├── models-77284a8e459a73cfd9d0c86233eb59a5c18196922e6f26f4007f936cc697b06a-46bed5ab.json
│ │ │ ├── models-7b0f2493d699e58cdfe0a9dab38f4423771c8ebced2020b1e15cbb35470c1ca2-0da7d1b1.json
│ │ │ ├── models-7b0f2493d699e58cdfe0a9dab38f4423771c8ebced2020b1e15cbb35470c1ca2-fb68f5a6.json
│ │ │ ├── models-7ed97509ff199eabe1380caa36b9e5934e9d04a9cafcfa2d21d20f6f85679ae4-fb68f5a6.json
│ │ │ ├── models-805e6b510b1ab33505a1af85c0d2a766cd3415512212d80f6292ca0ef5c359e1-0da7d1b1.json
│ │ │ ├── models-805e6b510b1ab33505a1af85c0d2a766cd3415512212d80f6292ca0ef5c359e1-fb68f5a6.json
│ │ │ ├── models-860b7e8309e0761e20e845be75c0a28d759384a367f6308f2a921702318a5dba-fb68f5a6.json
│ │ │ ├── models-872fd6319bbe46948974d7276b658a81c44d3e965773b3de4d8efd04b6e5614d-46bed5ab.json
│ │ │ ├── models-8753db95656df7c68e9dcb3d1ba02a99c580f969d10e8828fb364cd12933ea27-46bed5ab.json
│ │ │ ├── models-8903569d538f9836ac6251d90c4668d3057e8e0ced847a08fd7a6faedb5710c3-0da7d1b1.json
│ │ │ ├── models-8903569d538f9836ac6251d90c4668d3057e8e0ced847a08fd7a6faedb5710c3-fb68f5a6.json
│ │ │ ├── models-893ffcb19a1fa42ef4426b5805c7dc293e3189a0fbcf38d043491f88e3e809b6-46bed5ab.json
│ │ │ ├── models-89fa3b75abb1cae4b26e994a96b32a5f9ad2d7b29ed070c3be84181eef926e91-46bed5ab.json
│ │ │ ├── models-8aa8c593dd64639678c294146fd56804393856c6e85197e6317ebd88351be21d-fb68f5a6.json
│ │ │ ├── models-8d3288fc92b2484367956bb825c97e33864eb76e4c156a6188f93785559c96a0-46bed5ab.json
│ │ │ ├── models-8fc4c7b563b9bd423b74dcb4683039248f41d86c02703bd2dce845d972c9ae6f-0da7d1b1.json
│ │ │ ├── models-8fc4c7b563b9bd423b74dcb4683039248f41d86c02703bd2dce845d972c9ae6f-fb68f5a6.json
│ │ │ ├── models-95f4acb1a62e2bd85e7f18059d5e56c75d16bd262e08c79e1f38e91c7854d3b4-46bed5ab.json
│ │ │ ├── models-99ae704b53e3e3150cac5cd579e446e6545a4ab6a63048ce00ee1fbe5fbf1b4e-fb68f5a6.json
│ │ │ ├── models-9a36a281899f0800f085473f5f0185b09a02022607b965ac08b4db2e9e7eabc9-fb68f5a6.json
│ │ │ ├── models-9beac41c66cbe8568bb72b5ba0f5608597ef8a14b42585c22b1e7c45526537c1-0da7d1b1.json
│ │ │ ├── models-9beac41c66cbe8568bb72b5ba0f5608597ef8a14b42585c22b1e7c45526537c1-fb68f5a6.json
│ │ │ ├── models-9c821d96aad27b9f6c5dac2f91fb2bb78a2b0c79907bb9747d414b03a1f8cead-d70d7e1a.json
│ │ │ ├── models-a495ae010d48bb3649c822e3299e819c164c2311db231c81296ff4c72e6f81cb-fb68f5a6.json
│ │ │ ├── models-a77b3cb7370fd9f46e6ea12d72e1d9a8e7515f745289e93e5eb4a21d0e7b71b7-0da7d1b1.json
│ │ │ ├── models-a77b3cb7370fd9f46e6ea12d72e1d9a8e7515f745289e93e5eb4a21d0e7b71b7-fb68f5a6.json
│ │ │ ├── models-a82e913e058618dcb30b269a54d4e6a9cb1e0017a42efe04480874fe957194d4-0da7d1b1.json
│ │ │ ├── models-a82e913e058618dcb30b269a54d4e6a9cb1e0017a42efe04480874fe957194d4-fb68f5a6.json
│ │ │ ├── models-abb01b74df9fff58bd349e040b7820e63838e24879f938c17fd9f26f1eef950f-46bed5ab.json
│ │ │ ├── models-bb7e1baaf1de300e77c145d4e3a99e8aef07e02dd94e5a77e259c2fe5fc530c9-46bed5ab.json
│ │ │ ├── models-bee98cb55c3b74854d0bb71b23b7e01bbb9f1580b413a26dc3afbf9da8b7d995-fb68f5a6.json
│ │ │ ├── models-c3d9f0302c09cecba4c3797ec2d65e358910e6194e13d1001fd3567ab2eff6aa-0da7d1b1.json
│ │ │ ├── models-c3d9f0302c09cecba4c3797ec2d65e358910e6194e13d1001fd3567ab2eff6aa-fb68f5a6.json
│ │ │ ├── models-c6e251660301fe3f503b4c31dcb551087ca9118e65b97bd894954847723a9be0-fb68f5a6.json
│ │ │ ├── models-c6f34bdce0f26e0ada80a58334b9ca257193d775293d0c4875f9124338d97604-46bed5ab.json
│ │ │ ├── models-c83195611de40104907693cf2038c683828810075e311cb5b3bdb8fd0bae3cfd-46bed5ab.json
│ │ │ ├── models-cb1f7d5cd412fddb3395ef125bbcdac95c85585f23684e71abf142004b164bbc-fb68f5a6.json
│ │ │ ├── models-cbecbec285766025f2bebca94904e63578190f33b47eb6f32cb4635a1b43e3cf-fb68f5a6.json
│ │ │ ├── models-d650458718dae3a10405ce1d241f0e1ceeeae8edf516cf10c611edcdf64035e3-fb68f5a6.json
│ │ │ ├── models-d8acc76e3d1b54eac9754a9d3a72c571fe3078b227a257aa15afdba946b69665-fb68f5a6.json
│ │ │ ├── models-d9ff5f5ffaa7a64101936007fbe61cf2ed54f67609b54b56d92cb949234e3799-0da7d1b1.json
│ │ │ ├── models-d9ff5f5ffaa7a64101936007fbe61cf2ed54f67609b54b56d92cb949234e3799-fb68f5a6.json
│ │ │ ├── models-da380037dc0fe8ae61b838baf268e616057e46f8424df0a9b52f94e48cef4a7f-fb68f5a6.json
│ │ │ ├── models-da9dca38a81a1843fbff973486d236edeb313dd51973d6d2ffeef17f537e0d3c-46bed5ab.json
│ │ │ ├── models-e42ca9261e3cee9c877322a51791ab6f113478170f8a21cd0a971c53b330e999-0da7d1b1.json
│ │ │ ├── models-e42ca9261e3cee9c877322a51791ab6f113478170f8a21cd0a971c53b330e999-fb68f5a6.json
│ │ │ ├── models-e5255919e39635597ad57c723896f9d258abaad9908b22ccd03c126ce597a5db-0da7d1b1.json
│ │ │ ├── models-e5255919e39635597ad57c723896f9d258abaad9908b22ccd03c126ce597a5db-fb68f5a6.json
│ │ │ ├── models-e6664ff0c07b13aa2af6a85925f3841eef3907bc4a55f8bc352a8c960e782ada-0da7d1b1.json
│ │ │ ├── models-e6664ff0c07b13aa2af6a85925f3841eef3907bc4a55f8bc352a8c960e782ada-fb68f5a6.json
│ │ │ ├── models-edbd3344609a0fa1e97f75ede14a094a34db0dd6cb52975abae9f6e7832c6760-fb68f5a6.json
│ │ │ ├── models-f182a33b6677ebe191e02633a5ec99078e993b9c4cde002f14961d0323375da5-46bed5ab.json
│ │ │ ├── models-f6a9f5d7181cf078717443564e4de54e08845224d96b9c8150fb5cfda2068e82-0da7d1b1.json
│ │ │ ├── models-f6a9f5d7181cf078717443564e4de54e08845224d96b9c8150fb5cfda2068e82-fb68f5a6.json
│ │ │ ├── models-f936269fe152d95db3fb80fb10482e3cc79cfd6a28ebdf1a7a8b220ba2de641b-fb68f5a6.json
│ │ │ └── models-ffc656dd661bb32a3c18233e301db9638dbeca5ae50e65da8439663a4840cd8b-46bed5ab.json
│ │ ├── test_openai_completion.py
│ │ ├── test_openai_embeddings.py
│ │ ├── test_openai_vision_inference.py
│ │ ├── test_provider_data_routing.py
│ │ ├── test_provider_error_recording.py
│ │ ├── test_rerank.py
│ │ ├── test_tools_with_schemas.py
│ │ └── test_vision_inference.py
│ ├── inspect/
│ │ ├── __init__.py
│ │ └── test_inspect.py
│ ├── openresponses/
│ │ ├── CONFORMANCE_GAPS.md
│ │ ├── README.md
│ │ └── recordings/
│ │ ├── 55f733f042c071060e387ebfbc1608711de845ad6b91147aaa730461f07a81ec.json
│ │ ├── 820da126137b9202a258d501c62ff0143ec1e063725192da3ff1f928b4ac77c7.json
│ │ ├── daa6aa31302e051d9e6b91fef28ebc33b1d197174d2ce6c01e65ae9e40418bd1.json
│ │ ├── ef5b96003ec131801cc83298609b019942e2350592237c29204313214f5e64da.json
│ │ ├── f3390346d060f9a2c0fd64488d9d2800c31d46f2580072893325a28e750411c6.json
│ │ ├── fbd9ff6f12e8a99fb58be7c5f96c02b899f9c2d6e017f9ff4c16b729cf94a884.json
│ │ └── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-489e004e.json
│ ├── providers/
│ │ ├── __init__.py
│ │ ├── nvidia/
│ │ │ ├── __init__.py
│ │ │ ├── recordings/
│ │ │ │ └── 994675a9a4b0456488a4e4bad002da9d93410810698946032c4aaf9584cfd3de.json
│ │ │ └── test_datastore.py
│ │ ├── recordings/
│ │ │ └── 1748d5358e4c3440db43059e7fe37918bea64f182bf3d38effdebd59139129c7.json
│ │ ├── test_providers.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ └── sqlstore/
│ │ ├── __init__.py
│ │ └── test_authorized_sqlstore.py
│ ├── recordings/
│ │ └── README.md
│ ├── responses/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── fixtures/
│ │ │ ├── __init__.py
│ │ │ ├── fixtures.py
│ │ │ └── test_cases.py
│ │ ├── helpers.py
│ │ ├── recordings/
│ │ │ ├── 0049f595245d956f4e6cf3235d3662adc3298f4bbea3091dfe2163bd5f794064.json
│ │ │ ├── 00588476aab42f55dfddd055fa3df3a00e28e480ee3af017c5b9ed3134942c39.json
│ │ │ ├── 007c4711219f0fe25bd410d6dd8b18eae1251c3e83ab1f8d1d85ce86f5e197f3.json
│ │ │ ├── 008c7f9317b753a832cc8ccd2f0edb02c3f3e1c627674b60562eea08af29953d.json
│ │ │ ├── 00913934356fb4f196f8c21081154c67a7197dcc26e0326cf72448334c21424d.json
│ │ │ ├── 00cc2202e2906845aec8fe97f0e31e55abd32a289a516722ccab502c4e312c2c.json
│ │ │ ├── 015724ca07c08ab6036371bba01fdb9cd0681f7b751201af634fc71126a65650.json
│ │ │ ├── 016649fb7a8cbe74ed25c21a851cfa34c2a07801db9c0db2fc8c04df9ce48a78.json
│ │ │ ├── 018f6de6f875c5b7621e91094b798caae955444967ea1d25a4131b930b4afcdb.json
│ │ │ ├── 01e56bfa18d2d96353bec01e47d2ec48c8c353b43d3bf50a69558fa734af528c.json
│ │ │ ├── 0215dfd77ce628396b4f4fdac55a1153a8cf07039b367d546d703a36853233b4.json
│ │ │ ├── 021f4574092531de3da38054756f3731606e80e55e55280ae879e36da59c37d7.json
│ │ │ ├── 02549b1a19b2a9ed27b71ec2894bb4326acc1fd18759577fd379177ae15fb009.json
│ │ │ ├── 02572a9b8224678477b9c9f3635b54e56fc441fe46b8a89fa4ae32acdd7e199f.json
│ │ │ ├── 0265ed3ce3530445a2bea88d19a6d7b53626f98859f728a78d59b40631f4c75a.json
│ │ │ ├── 02b32fe03919cf862d4f97088b58b41f62662aab6d30c0af57da645edbbe84b6.json
│ │ │ ├── 02c93bb3c314427bae2b7a7a6f054792b9f22d2cb4522eab802810be8672d3dc.json
│ │ │ ├── 02d867ead262c260fda392e9a4d3a4213ee244060f723eaf848b13d622110a15.json
│ │ │ ├── 02e846d83678946e7b7dd7610496f8989621648e55c78588b033a64040266f49.json
│ │ │ ├── 037825dcdfce61ddb6b1e1b0862e850e00b63d52f4b841378dff24bbc57eed40.json
│ │ │ ├── 0395392588ddbe3f43a8ce87b8c20eeb7e38f599152fd55529112c084647862d.json
│ │ │ ├── 03c7af9e0894502969b7594fc1883bf23893038d897049ba4e925b4f78dc0cfc.json
│ │ │ ├── 03e698e81e5b964bc25404cd529dfa644c1ff8fb368ba2406c961f0dca8644ac.json
│ │ │ ├── 042cf79a7f1d22972569a4969f9820aa80ee9c31ae3e91bfb68a2e6b7cdeee7c.json
│ │ │ ├── 042cf899bac1fa3795c4389829da8f204994ac07a6361ddb292877ce4754cdff.json
│ │ │ ├── 0488f776f8f8ff9f64a6ce7f58da44a8a6434fe95751ddbc2a2119bf9b0fa9e6.json
│ │ │ ├── 04a4a7bca9616ce3a12839f049e55f378278789635d39c72ab395660583a2f68.json
│ │ │ ├── 04e3aeca211526ed3d06727f6c85a559e7dee074a0c56f7e44133a0d35fe8997.json
│ │ │ ├── 04e73108f170161ddf4c1342dd0851b20f8e0ec58119110773dfedb73c202c7a.json
│ │ │ ├── 04fd3246709dd77da971901d980c54496b38400b6bd0719623ec1df5549da552.json
│ │ │ ├── 050f63320eeea2dc946617884f63e55d84fd718af642afa609c36154deb34dce.json
│ │ │ ├── 05434d44cd8a093bcb70e8978fc7a35ecf13e14a531c0d08c025e798dc6796d7.json
│ │ │ ├── 0558b37ab0724e4f3ae74aa9da95a4f204201d3a25f0b764d1faa4e521059bac.json
│ │ │ ├── 05b1f8bc6a1a631defe23e76734035b6f63837c2355cd12dc5a1f281ca787f93.json
│ │ │ ├── 05c37817925706480d7fe873f7314268a54ea84fb246669a4f189065195f7176.json
│ │ │ ├── 061c5b2d944ab8fb9f13f22c73700e2cfb4dde4e8145421fdeb1cfbb048bdd67.json
│ │ │ ├── 0638d98040397341d5751f9c35e293f4b3ebf969974f85ef78c842d81a1f26f6.json
│ │ │ ├── 063e0f8d00175332c87901571ab32dd3a134fc626b8120400d65a13b7bee3a82.json
│ │ │ ├── 064011776e028eca5829b2a87b728b0e5f8fd6927adf3c1b69a2e40012ade3de.json
│ │ │ ├── 0652618307804555ec2837e1bd33023c38e865065de8ade26677251fdcb4e456.json
│ │ │ ├── 06662bc18ba37c09d43166a2c109f4e3bdafa508d8e28a5b1acefaf5ecdb5a09.json
│ │ │ ├── 06817602766493c1d23793e64a4ea987a2cca2cbb2c4cbc4d6299b0da19cdcf2.json
│ │ │ ├── 069150b2c058c9bac208758b1ee2635fb503d3824ab6c76ef9ad73189e05bb03.json
│ │ │ ├── 06a5c5087cd45efed03386d4f4d07b0d3d9f3c92ae64f90780801e90f01dd4ae.json
│ │ │ ├── 06b76c5e20553e7f5e8071052ed478609d4d547cdf4ab9ec9de079a2d639f8c4.json
│ │ │ ├── 070e546bcc2914eaed4507f178955044e14cb6530ef9c3545c0fce743f769f86.json
│ │ │ ├── 0791f2de9772c3f535004fa8e01caf7b1d0f4cdb31c8ee4121a318c2189b66f9.json
│ │ │ ├── 07f3549209693a11ae4641838e4dd4961c18145506c28a8eb7f5968c7b08344f.json
│ │ │ ├── 0853241924af5459004c1b9c6fd434f2346a184c77a236754d89ecedf305857b.json
│ │ │ ├── 0886826933da12cd17dd391d9df69df1a8f4e492eb979dbda443a1646cdfdaf7.json
│ │ │ ├── 09104a5dfc7ea8ad6711a6b9b70da699d0049576a3916cbbc251a32a5c8a746a.json
│ │ │ ├── 09352154e00f2ff0dc8108149a87e1bb4ecd50cfbe3e1f3da5569ce487a19d77.json
│ │ │ ├── 096b6c830aef2065753f27bc75d059bc18b1b49376544a37a81cebb750a3d3e0.json
│ │ │ ├── 0995df80c05acd7a1c386b09d5b4520ffff5233bf1fdd222607ec879cb5bcdb1.json
│ │ │ ├── 09bea0a3a8171cde93422ebab490e91c904220f1a412b6356f10d23880ed1c15.json
│ │ │ ├── 09f38b94a0c7291d59d96ded055659fd913c84b596ffdd88acf9ae4254d7c7b8.json
│ │ │ ├── 0a4aca0cd075369aaf6133ee82d9d940455cb083c0fd1330c666a12d74df6f89.json
│ │ │ ├── 0ac07d10ce3f810b5455a86f78f426bdbe4429c01ad7d551e2d4dcea6d7c29dc.json
│ │ │ ├── 0add7d74aed8f1026ef0e94c8cab69018e471a70cecb89dbd8e45cc958e876d1.json
│ │ │ ├── 0b061bd80790c17b1aba506125f4b231a4dc379e1d6bb4b1de1c9bddf92aa664.json
│ │ │ ├── 0b45257ef8ece1b2ae98dc4f3fb078d4b5e96f823be88e4463707d499e013262.json
│ │ │ ├── 0b4cde2f51981de925cb14c1c64de5b8e55978745bc4964cdf932baed4a730c9.json
│ │ │ ├── 0bd29115b417b14d97c480addd0c71e19c1a839d10c4a11a4c01793ddfa45553.json
│ │ │ ├── 0c061c29d08a4d45de6bd68a6f467876891f99d404bc427bc63f8a526e9cd9b6.json
│ │ │ ├── 0c0d70512798931f4f47001e13238d782edf6ea12e4716ba256e864e4b97c48f.json
│ │ │ ├── 0c0fcabd8bc215d7448270998f7eb7a5a628b49c284d5d1f2a8ac9c13c992b00.json
│ │ │ ├── 0c5c1f77be37a3ec1a04e740650be3ef901e37bf8659081a5bcd24ff715570a3.json
│ │ │ ├── 0c77c2b1e469224f518a5ec201e74ab97228239e13585cb82ca4fe747bed0523.json
│ │ │ ├── 0c81f5d5c9e09daecd5eceaeae22bf228addd43f95f4a9ede8bd5a3cfbd091af.json
│ │ │ ├── 0c8ee6c3729c9be854298a55ce789d3d84c08d1b510d1a2657cc1d3ad3387e38.json
│ │ │ ├── 0caed0fc68925ad15a1464ff71041d91e3db067c94e54d2b18ad4215556d4172.json
│ │ │ ├── 0cc8136680970a3debd033e13f2240f63aba5417ed5c7d965f26749cd544f971.json
│ │ │ ├── 0cf61dba7a2106cbd2b127892cbfbde929a2a32eb46dc42cbecea37dc6e7d617.json
│ │ │ ├── 0cfaf068f17082684adb234fa8dce33568fc73f43ed2a9d0858f97ffa2347fda.json
│ │ │ ├── 0d6e30ab00dcbdae990c0d45a518eb9b14592b110e8deeca91a81d7b1b20dc59.json
│ │ │ ├── 0da61583f411df05cfeecd59d10cfe20e3c2bb35814e46e629f6c924866f91e8.json
│ │ │ ├── 0ddc7ea2766519d129ef116afe868bef0126ff1f967a5099e8ebdead00194c10.json
│ │ │ ├── 0e069ac4958a27166824c203440be5f00d2d9902ed223e6339bfb9f976155f8b.json
│ │ │ ├── 0e4aae7a7e786f3075baaac712f46e45d3569f869064a6130cfb5c404a47d3fa.json
│ │ │ ├── 0e86b02f9e8cf35b0aaa722e3addefa75f9bce5fd16a041d88d00c0da3991eb1.json
│ │ │ ├── 0ea914a3ceb9360a1b9206a8975af2c3174cb58c0bfbf904559dc29bc1de0218.json
│ │ │ ├── 0f1241e957d1016bf65c80a3de2a51e9a786eb96687e88389b3173ad193b621e.json
│ │ │ ├── 0f506b15f4022be5009e8b76896ed437f51ed472a864fe7156f802156a271ea3.json
│ │ │ ├── 0f90df508e5a66d31c314a01451dd49df685ae5854d6301814ef25a8adeac69c.json
│ │ │ ├── 0fc6f2fc571f913d714368eeb5c4313b9af1c9854e7cfcc55e4de64900fb46e2.json
│ │ │ ├── 1067b5553e9d4e95ff8262668a05b9b55abfc0b099ef85cea0e542cc035d178d.json
│ │ │ ├── 10ea1350fd8ea2d96cb9db7bbe4d760161651934c82214999e81efd54115ea49.json
│ │ │ ├── 11307cc3a43466733c0853d3580ceb0bdbea1f5c97cb75880a636de21e533969.json
│ │ │ ├── 1163ba5617d2c09f55120a3d036236e01d5b033b27ec352dc2a9942fccbfdbae.json
│ │ │ ├── 116ed17c13a01f9150a0842c96b9309bdf34dd825ae1104dfbd09efb0adf6dd3.json
│ │ │ ├── 117b6e0315dafcf727486fbc9cbd2d250701ec9cd25e085197bb7cc03d246c67.json
│ │ │ ├── 120e3c92e4b813b4c1ebd176510a55bb97eec35dae694e618011e703b0e8d714.json
│ │ │ ├── 124feaca00083bd97cac2baec0fab3fc82413a2ac18639a1bd6c1b5b79f4ce40.json
│ │ │ ├── 129d2d0d89afe483b8dddd8ab5145c2494f7d803e3cb25a91a2c686d00eb1a18.json
│ │ │ ├── 12ac7d085d93e919a32a9ea811de705485c3e91b8301021bc7de2250e7f41961.json
│ │ │ ├── 12acea0a386d6c3e977a03fa3346e4b817e8689191f9eb20537676b725bc7bbc.json
│ │ │ ├── 12d6702f31197285bb4536daf4b982ae7b097ceb278766139bde1c6f940c0e68.json
│ │ │ ├── 12e1a8be1d528315241fa27a74d16d98f6efc6eb9386d1f2e141fb5d5fafba80.json
│ │ │ ├── 13b63e16e27cfadd02daa39ee42147d8e4725ee4df82bd7f36d90164ee2c5684.json
│ │ │ ├── 13fa45ecb341a7586d9d8b64a4db50100deeea137997bf2fe98b90f4002ffb2f.json
│ │ │ ├── 140ac1fa1c5c3828494c3963a00960b313f0a0f9ac514f6b1d3cb05e75746475.json
│ │ │ ├── 14388ff51603f9525b188a0753bfefed632311bae8c49a6cfbd219e677baeeb8.json
│ │ │ ├── 1489591da67e505cdd2c1fddb0c3fb8372e880782d7783dd24b13689686a54e1.json
│ │ │ ├── 149e68a5c212401a54ae4ce9c2d29bc2c9da80cc1ef0ed170e8708907b39adf7.json
│ │ │ ├── 150df862dce0eca74f49d37425ebbcc7a6cef552b5979a9643b651982d36ba76.json
│ │ │ ├── 151492808e695b22f265792c75d5778306597dd67be425d5be0db6265c584825.json
│ │ │ ├── 15f4d677d61a2eecaedd1aafaa3925d76f5e98199f0c6baf6736bb140e008cff.json
│ │ │ ├── 161554eb7fcf41c31b537b6cb53596d7e67b2abe95bfceac75f6b66e9448179a.json
│ │ │ ├── 162cb2a93bc8369ffd7679bd159c4062a591867037ae8394b578805a40dee7da.json
│ │ │ ├── 1642ef6f9c208c7e3ba238eeaa8303ac9a3a7ace96668cf2bdb6abb3f0451dd8.json
│ │ │ ├── 1647e36a2858a870b989f2259b42d3ea0341329954649d0c7d1632e4ff42b0d7.json
│ │ │ ├── 1654833023fae3ff9a9491f73cf42963f20f553d1690ebb28a29be31fe8a7c11.json
│ │ │ ├── 165e9cf79ea62532e59c69b49cfffb12d9174cfb14bc29d938835c28051504f1.json
│ │ │ ├── 167c03e75de0db3f3050e4e21494c99f8a3489f0719f2bd1644ba1b86a596c99.json
│ │ │ ├── 16ce219b19e6362174921500985e4ccb0f0c56b84608b334a3dca1e9941ce765.json
│ │ │ ├── 16cfbabba7a70fdd0ccb7cb4559d7d26ce6ebdd3e32f7a3f8cb56598284d1405.json
│ │ │ ├── 16d377643c429f2ccafa70491ce3aa344f1fa299b101ac5278e26d9196cc73a5.json
│ │ │ ├── 1702652cac6469d0e5df4864869c67030872d76a761741cf86862bf66e57065d.json
│ │ │ ├── 175a594469fd2c66751bd037a78fa3d6453e7b8bbb2a55f7baf6147997026931.json
│ │ │ ├── 17c14c8e7ab3580cf93507d4b5d8aa8c80bf1fc3f5f05ac968a65c03d298d6d6.json
│ │ │ ├── 17cf0143efe13139537802fe97b1d5e86dafd5e23479728505924440ce9b11d6.json
│ │ │ ├── 1835c304644cae219d3ad846527238dac24eb28fb330c7c2c99b7adb745986a0.json
│ │ │ ├── 1859574ce147d00d177819dae081faa87e201e2fe1d73f8129cf18f731a18278.json
│ │ │ ├── 188705add7555fa052ec4ca5bf38a89018fef8b3830d94cc4777873245b12cd6.json
│ │ │ ├── 18a250243e707f6332d0d6fdceefc105a1ea2490d3aa62d9246ce80119442d16.json
│ │ │ ├── 18b7055b44a458eaacade8fe3cb54a3b854f31523c86a2167d4f4faac784ba96.json
│ │ │ ├── 18c009bf2c4bd7e3764c8451dc3de30c39ea2e18ce6c0030df02507f73d0e237.json
│ │ │ ├── 18c1f9278c111f75ab18eab1b034e9df75f79b7577c0f4fcfa39d5a71310fc17.json
│ │ │ ├── 190bb37daf20fe01aa707ef3f57b551d525aea42f7421b915c3ec4da08c35268.json
│ │ │ ├── 19510c47c85d1b8bd022343b8ca94285c7a62f880609bed5044e396e5ad1aaba.json
│ │ │ ├── 1956d802ac07ea40ca67b9e174867c6048ed243f527bb1a3abcd26d0bbc37ae3.json
│ │ │ ├── 198251b7386f26340b9b72a6b4f62341351c7053051a3d8892c64cc68870b457.json
│ │ │ ├── 1992b257e243bece1040beef88de55c84241b0f071053538fb1ebba9fd3de744.json
│ │ │ ├── 1997dc007d202497ce456683d24ddde3553f0db5d5a673146d8bb99c072e77cd.json
│ │ │ ├── 19a7361ce53104552ff21c7f7966bb1eb9344e5ef4358f82f57c731137f54fec.json
│ │ │ ├── 1a18859263bd730f2863e4793b893f2d2414462c73bd25e3b71f88969932ccc3.json
│ │ │ ├── 1a5a9da6382b176bc38f4f8a71701400d59ac9148fb1fda532b67e1dfde0ed0a.json
│ │ │ ├── 1ae6ff4c9ed730840e2eb4a3cca944d53d86d57d3950daf1a31361ac30f84429.json
│ │ │ ├── 1b7afa7b1da7bc91e5e824e8d870bc2851bf0fa44ba7bfb3539918dce51df234.json
│ │ │ ├── 1b7b199d0b13c7f7987a40bca471b3301cb6edf8cf8c0007bdcbd2e42f1f44f7.json
│ │ │ ├── 1bd6a8bd326911c3116794e0f82225cd8a3cc40526e5a5eb9596152415fea5a0.json
│ │ │ ├── 1c2f1886bc9e8d8b03ca0c0a851dc75324b82c23994345182ed0690fa3806ca6.json
│ │ │ ├── 1c41ca441b62282305626afca195f7d7f48159f74296a7bdac015190f9f2cd66.json
│ │ │ ├── 1c9a58d5f9ba8c463ffdb9a7ba9d9aa54e468871af2e4c208c72152615d8c15f.json
│ │ │ ├── 1cdc648f141908660ac0aea8c3c5c936d1433533afe08d99773f01074efb23a4.json
│ │ │ ├── 1ce6d4a8ec438d4a6a3618e5e6929b2db20e03a629092274039f33f909bd481d.json
│ │ │ ├── 1d068d919c3c24e3df15ae1ea6f13a83923004c74793f1960a89a82511d5c568.json
│ │ │ ├── 1d26abcfafb8b5f6a8432cf986b94948218816bca4ed48672837270d93f9cffb.json
│ │ │ ├── 1d7ac4e6845c5de75adeb6f1c64675e041b492b87a87a37980ebd7f595c4c946.json
│ │ │ ├── 1dbd102b81c7dee87b189664823f2e43f6105ae3111ad9cf843899f495f8bf76.json
│ │ │ ├── 1de430b82609f8ae11dbb2189e2a0fb33c2ecb34ce97edcb3638319705b81299.json
│ │ │ ├── 1e171766576921b1462c0773e012b63fbc42df98f9612af5eef7613e2b967900.json
│ │ │ ├── 1e1f2ffc8f1a909a3bcb5950e4a9f0fce0904aa582d6cc9ffa05675c5f15551f.json
│ │ │ ├── 1e3fb6de137baa727cc6e3dfa2acc579f3f8bcfcabeff00dc57100fdb8740502.json
│ │ │ ├── 1e4f9812d1426b4ebf2a80e9cbd90478df16385c1e95fb60583b061bfbb4b3fc.json
│ │ │ ├── 1e693031dd0ab008cfda5b09869f62c37a9e3a69b48f8e94d04e66ff6334d88b.json
│ │ │ ├── 1ea7cc5187458766875162465c2f6986e26710f664c5b095b59e824dd9af5ee8.json
│ │ │ ├── 1ee76d32cd93de4095cbd338ff54dcb7929f891e6b35078db6835382d99e2066.json
│ │ │ ├── 1f7f8b37e212395c5f1eb2a39ec58ab9ada974e86c36ec9f4697cab567ee7788.json
│ │ │ ├── 1f892d97540da0c89210681ec35ae8585b2db4a15e164fe24488e6e7170638ac.json
│ │ │ ├── 1fb43f712a85605c8f305fc7fd2809bc236819689eb2c0880facf630fd956e17.json
│ │ │ ├── 1fc2f169cd6a3766bda92e746c19c7861ed65d1fa4d73f87905495c7b85d7bbf.json
│ │ │ ├── 2030f3dcdedee6706b44e3d9588acbb55cf8ce876978239bc4c304cb8ca94624.json
│ │ │ ├── 20323de24f1a4e79bf9052d36139ab3321e987f7b27cafd37b4874bbb5d980f2.json
│ │ │ ├── 21b7d927ecf24baf2d65b507be7fd938b473fbf134666d42942441dbaafb20f5.json
│ │ │ ├── 2275a89d487c5c8483f0c7e2b20f5a49b55d1454794a448ea96c9dbe7f9a40a9.json
│ │ │ ├── 2288d41a381af958f1fef53d8cacd5e6e3f5df56120e4d2e64ccb497be1678da.json
│ │ │ ├── 2331aa9455bc848b0a0c83d79b691893f2998c95e84648d113d88823435057bf.json
│ │ │ ├── 2354da662fbea01ca7d54bb433b45d79e93f6ab34c4ddc90582793fa9d5d32eb.json
│ │ │ ├── 23573ed156f7a8ebb033471190db97e4dee2b3e9a2e40de908072c98c7670d02.json
│ │ │ ├── 23b6c5e498bb0103b73a2e728cb5dd18be5bf915ecaa9fbfcf86e93b00d3f5d1.json
│ │ │ ├── 23c233b2a81318e949a7589b578df22f040f8903832101618e930b91786375d5.json
│ │ │ ├── 241122b73beaaddbaa57799a8f383672bc058a85aa657e08310da6d9f88ab917.json
│ │ │ ├── 24136a7e247fbd9f686918fa0feb61397e47a584a51d96d4677f80c2f1cf6029.json
│ │ │ ├── 2443581bf4a71f7b26e3aef9715a65a1cb5ab62249e691e77dcfec2e00be302b.json
│ │ │ ├── 24500d64280af82115fd76ba49461f47f4546933e0ca5bd2b16553b9b4236111.json
│ │ │ ├── 24598d026352a4f3b82711af9bfd05b7864462fde03bbaa0c691185c3f0cde87.json
│ │ │ ├── 24a6974ff4a2be4714f101344b4632246eaf3ac27076d3e0dd4ece7359d86d90.json
│ │ │ ├── 24b0da19314c006dbb0d50fc0584644666528b69340917b19ce00e8e4b1d5df0.json
│ │ │ ├── 250cf8ad076dde286f82f04efce4fa2a81e84fc65e7c55b8a7a454e26bd401b1.json
│ │ │ ├── 2520083e446e18ff8420591c1871b8b558d36074cded75ce79c8f92038708082.json
│ │ │ ├── 252cb81b9f7b79655aadec9ee730a86bc769e0a50fe0d3a32d1e8a2fb51ac97d.json
│ │ │ ├── 25420cfc641cd935131f3c9c5af873af5a901391dc820af839c53f4e4f94579d.json
│ │ │ ├── 256215277d288407e08176fe22b6c6b5307261c8f4a54bd08786e386f745ab74.json
│ │ │ ├── 2574d7576d30dd9987202bcfbfcac6cff8f26729576addabdf6f57762b963f5d.json
│ │ │ ├── 25b4b134c4763373b0826bf166f76eb24417b8891db1e58085d6723547fd3a4a.json
│ │ │ ├── 264aae2d652fc05d5a70f91f9bbed01cb877a000d3e4598e767db9afeb7e7420.json
│ │ │ ├── 2683dd0ee16ab942012e8afc66ed6eeb5f76db7de266876ca029d6f163788741.json
│ │ │ ├── 26cd3e8855f16d85983a88d3c6cd93adfe2e67a203a3aab32b8422cfd0fa1d9b.json
│ │ │ ├── 2704a17ede94d814b27b46866ae8f30609a189e0915b1ab90d4636a75f2551aa.json
│ │ │ ├── 272a8749689b1e529aa6c70dce1c4d10349009306b4bcaf8135760b7ab5174a0.json
│ │ │ ├── 273c77d363ae91cc56dc5d8684df70c0a9d6b0908b2ec690ed61abb6737246bc.json
│ │ │ ├── 27dea747700cf454b525994be12276279fc9b82643bb7f71f243353738c3428e.json
│ │ │ ├── 28c592207a8d83a159ab798f9c6c522ddafc496a583fa09a89f152be994e3a99.json
│ │ │ ├── 28f5e1d16e2f5c3f2054c9805e939c4bf2ac2bf430d7e37b38b30bec1a86e28a.json
│ │ │ ├── 290be8fab89724d1e37c17608b318f4c0d8ddada26db9aae18245d9eb83be3c9.json
│ │ │ ├── 2952eca2f5e8bc4012fc3d08fa9528ec5e42a32b78610b66d65d6e3cdb5eaba0.json
│ │ │ ├── 29930c44299481fbb5cff6accc571b289138a3b217b41bdda4fc2fece61626cc.json
│ │ │ ├── 29ab0b407d3d3f6bb893470702b7bffe012b864e04f6df6f52adadfd3a50896e.json
│ │ │ ├── 29d5f14e3bf201120041d87b27f2cc8b0b3c995ae5a7127d5c52976edb25b696.json
│ │ │ ├── 29e7fbedd6c3c118065173df693aa90dd6817f525fe66956056cbf1f74dde98c.json
│ │ │ ├── 29f4ac79badc92ccb3a5db12d78dc8acf5ed796c240dcc3c3ba41f9c85b042f2.json
│ │ │ ├── 2a5737c927ae892ce268742e79b4d2ce8ae1e4620fca7b854f32649897616f7e.json
│ │ │ ├── 2a8db6a0b5b1216512eb53f1ecddd35b01a5c82672abd909531a93eba9d133dc.json
│ │ │ ├── 2ae4ac48e566408d1a721e9a5e9fcdb5a629b013094ca4e48b262a4034c67e6e.json
│ │ │ ├── 2ae577def36d67899eac4aa37151c7bc00b2272f1fba1790c0c6d793749144a1.json
│ │ │ ├── 2bd4c8dc08b3ee3ffce696864f0bd9f35d82223c7d1cab613ab2e818d79d6f9b.json
│ │ │ ├── 2be285fca6418dd1fa70616c6ed18f8cec97298a28388f1395120b7ffab4db26.json
│ │ │ ├── 2be4057eade9b382f2ac8666d66dbd7decea6bd3b998af0a57468122d9b96198.json
│ │ │ ├── 2bedd41f7dcdc9abc6b83b8ffa0590ef4a6e150778ced3521062224a7c402b3b.json
│ │ │ ├── 2c449bd39e76692d4b8e4a56658f6be60c747c15d8522c7eb5d85e07316426a8.json
│ │ │ ├── 2c5c4252117b75dc7f3c709c8ae9c855d15b70c9870ce29bf19f67aec9e355c1.json
│ │ │ ├── 2c7ef062cd359c27bf13edcc081b47d2d30f85486facb326c6566433a1a7937f.json
│ │ │ ├── 2ca746fb731a8a7e36641b1ffc15ea03d4143f4af8a6f0f41a9f9d816db5cb3c.json
│ │ │ ├── 2d066b20c0d783edbaff5a4ca1f3c60e0ed30ea0a29c3e78e454088ae745511c.json
│ │ │ ├── 2db3cd122caffe22de1b1bb1c5c8c35bf581540722a26ff169e995e5eaaef202.json
│ │ │ ├── 2dc865d055f3ce6d4438143a67da353cef0e3ea0e3c6044c04018e1718853084.json
│ │ │ ├── 2dd03a2bcecc997e2013ceb3452b84e654152bea216755fd0d6f3aba0864ec89.json
│ │ │ ├── 2e11fe36495f20ae61c37cd6b9f8d6bab6903f4b55230ce8feb88aad99204818.json
│ │ │ ├── 2e1939c376f00646141ffc9896f65fc6e439e8a9d9c6529452347eb946d6e227.json
│ │ │ ├── 2e1a2df457eb0cce9fb4d8dad19e54e5b23ac1365f933299313cd86a6133437e.json
│ │ │ ├── 2e502e37804fbf574d7bc441125d51e857c66f3d8008c02eb5a0dc14e24da178.json
│ │ │ ├── 2e5e7036d47b65fd51825c13201732bf8505856dd6485db1e5627cb907aeba51.json
│ │ │ ├── 2e7eae043082d093f891ec0d8e00dd732b9723e4eb1d8fd77ef456d6fe68b89b.json
│ │ │ ├── 2e8dc780e070a2cb8a3ca46f203cb1ab94bd6dce1e9046123b922d73a3d14718.json
│ │ │ ├── 2ed23a4289840f93202f94e7e7027118869d34d768ad87ba072e92e8a43a52f2.json
│ │ │ ├── 2ed89c9e5775d0b8e4045e937a9ccb5060d30972fae86b49a3fb440333507343.json
│ │ │ ├── 2ee96a9645725e1cfe4b15216af797feb3b6f35004c002338db6079b83407ebe.json
│ │ │ ├── 2ef8c1553191dcb1412e4c81ca7000e0dd676c57d5bd94f6bb7f2f46cdbe6cda.json
│ │ │ ├── 2f1d64bc69fdd3ff62a0de4f5f2e2ed466eb84d5be4ff4882fb7dbfc790eccab.json
│ │ │ ├── 2f3a9eb141496d900e53265c9f8cf4c89116409ad15b3fc040c678ade8685258.json
│ │ │ ├── 2f5d0087ba947141d94b9ba6462c03ff01d8f4948fedd8fd84cabfa80f5f0373.json
│ │ │ ├── 2f5e2a269b18b5d5dbdfd0201283f6eef3622e922768b77c809039dac56f6036.json
│ │ │ ├── 2fa72534cefd5c8baeb7e65efd1e9f6bdb8710a974804a5bc79fd8bca669464f.json
│ │ │ ├── 2fd083157cf52488ca04094158a5c53cd4bc56d0fa4c4cfe0511207258a524c8.json
│ │ │ ├── 300131ac745a934e5c9b78f82b5a18110fa043acaf98b1521631478fe6b80198.json
│ │ │ ├── 300c5041332a0ad2990a05df88a6b6842e02157d807564c136dc71cffe2b78cc.json
│ │ │ ├── 3011cd619ad4008f0797ad1824a05604d5ee5a9f31d4ab0f5be5454b54b8e47e.json
│ │ │ ├── 302881895eae2384296096186c02053183a19c75d8a55f0d19ae51e36c7aa673.json
│ │ │ ├── 302b9a7e33b5e584ddffd841d097425b4026d50c61ddf894b8e9dfa73a4e533f.json
│ │ │ ├── 304cb7205bb99e0e1655d5fe3b3e4a0e0f891320ccb4ccee98d74eb21bbe4986.json
│ │ │ ├── 3060a49bb203ddf1fb7efe24bede3eb96de9678160d1bf471b446bfe265e8eb4.json
│ │ │ ├── 308dc73ac6f24a41129c10634710e6bb80b350fce0fb614cbc1b3c5a985b62d0.json
│ │ │ ├── 3093cf45d8165b79856a2b701966b6801d885e15cb2a9a98c1999c356e252769.json
│ │ │ ├── 313a0a99663819dae4f084bd4d20abac411fb82bff7ab286db6a9f99e7bfabe4.json
│ │ │ ├── 313ecfe661c7fafd3e6938d5a3b66aabdbe02bb183275bac85d65a5c3c345750.json
│ │ │ ├── 316f6fa2633f59c48223aa11ae63e85d175b2dec5be2c7cd8bb9d4ea721fcee1.json
│ │ │ ├── 3177a984c900c2bdc2785b502bded6791b1054ce0f36e967eb3793b5608344f3.json
│ │ │ ├── 317de5f0aaa03f9abae6314dc29eca5201aab446340c65043208327d998ca489.json
│ │ │ ├── 3183b7beec7e4e89f8051a2aec67b4a1f3b48fb71f8682967d35e19498eb9386.json
│ │ │ ├── 318c5361647df0245c074cd2c7d6f50e862aeddbbeaeb256ef1add34de7c1dc8.json
│ │ │ ├── 31e78ed05055cb19395732f546c979260e4c91f7d9d41c2e83e729656a63f15e.json
│ │ │ ├── 3227461850f0266226230fdd6a63f18a216b13ff9bb86f21b98dd4b4451420ca.json
│ │ │ ├── 323876f8295d532ee891e7458d6f5d144f555b672c4f8d74429e193f99bff07b.json
│ │ │ ├── 324a86d9532b6f77379808b61bb3a1cea15fb84da6df730d4137380bed896531.json
│ │ │ ├── 32e2303e84b9485225a7c0a627775bea29619e5a0a308e173938a4849928f97a.json
│ │ │ ├── 332dd23ab2a8214048120f32b4c22dcdf697539633bbf36c655f8c84a6b6ce86.json
│ │ │ ├── 334cee9d473635bb4220061b0e366ca4673bcefff36aacb8f03043a76fe984ae.json
│ │ │ ├── 33708f6c8738c44e88d5523f9b3204abea75a1b46ccc9b1e4ec4d64df6359751.json
│ │ │ ├── 337afd7fa7cb2e0a79e3b1a7d35f36c74f2f4227d5c6e557239178b3b8ca6e81.json
│ │ │ ├── 33c001a51c328139e50703841154841dd61858e6ef3295b6baa8b8fd7454e272.json
│ │ │ ├── 33c94864582a3f1fc9239bc825f1b2c7a1f757570c23b395f5c45574525e89a2.json
│ │ │ ├── 33fc9c1ca178dcc83a03695acf43d87c1abf1f5970344499a2ac1cecf94dd91b.json
│ │ │ ├── 342a73be8ad9e12288ab5898158cfce867fe60fb6898caf914c84111fbfe37b3.json
│ │ │ ├── 343e93a6b3c8ceddd8598527bc6c93337ad372aa51f7f0235f68c4a322686898.json
│ │ │ ├── 3448d4d96f9c2cdb4e4e32a1df6dc919657d1f901340dcc8e539b8571cf3e118.json
│ │ │ ├── 347dfb6429c91d208fd7a40c65c820b9fb6be6829542814b9b0bd49fad13085d.json
│ │ │ ├── 34a1b84c2a8546684f4c4d596662df62d17b1259684141dab22de4ec174e4c5c.json
│ │ │ ├── 34e4e39881b66b9992c02a78f332caadf9923087d58872b2feed6bb878322521.json
│ │ │ ├── 34e831b4f3adfd1712553e3760144099c66b1b98474f257795a057dbba472929.json
│ │ │ ├── 34f72905dd46c1a1c288e576b21a3d2d96675c4a8b75473893dcdf1138d602e3.json
│ │ │ ├── 3513d30281e2005d7b01e1bb1f881d41e1bd0f00536c82f09670a9d4701a2471.json
│ │ │ ├── 35214ec40ebeef19701bcea467106e03d40d6e3887c8a39aa0e4e0261580635c.json
│ │ │ ├── 354405fd4255ae9210d875c30b8c9e00a75d79046a954e4c5858e36c4fbd70c5.json
│ │ │ ├── 3552115a25ef5fbe83681d28fdf32bc1a28b74eb8dbb81e248a182a24113159c.json
│ │ │ ├── 35d5f2cce7be33d08b67067d5dda582b7bbe7da15b3da8dd29b60d2d26c3e47b.json
│ │ │ ├── 36227626ccb4052b05432d2df019201ee2618d7bef82982cca22b5cf71a30c2f.json
│ │ │ ├── 36289b4fcb7e3281bd6949f6ef8831a0545995a811631284ff57e4c2e78ff5f3.json
│ │ │ ├── 3652b7501c7495c927e111017e49065ef3db995d52cf7792e14c9a4a814e54be.json
│ │ │ ├── 3693338697dedbaa8f81fb8b53623c25eadf867d773ea128f954914b733984ad.json
│ │ │ ├── 36ac7e15a7b9479cf293a524e1c0032a0a0c45c1eb3a046bee95d5c6d76851be.json
│ │ │ ├── 36efb89328689ea14d26dfa98218c83f2cf2b0e6d617bdbe92929ea316212762.json
│ │ │ ├── 36f79c954dd58f4d87655b32311e5db9c6f9cbdf05a8f5640af728e90cf3ef50.json
│ │ │ ├── 370511eee131d6150b1f5cbab9e9821869131bc8d52b82b007584e8d88ba6bfa.json
│ │ │ ├── 371d167f1e267835b9fba0ff3e7ad1f9eb7c4d9dedaf22a6a019487855cb6c9f.json
│ │ │ ├── 378274b391ed3f419eca944093cdc2e374139cd6f6a4035301244f47e6843136.json
│ │ │ ├── 38bccd9c81001cf43918e42713e8b94f2434ba3905d82d9fd7e9be919b7fd680.json
│ │ │ ├── 38ce200f84f011d14e690df5f401f2d1da91510c13abb3cd495da2303d299074.json
│ │ │ ├── 39cb6a0b7caf461718605ddb92021e3274bb3b197307a687763cf2c2d8e984d1.json
│ │ │ ├── 39efbba5d24bbe4df1d47b570034ba61a2e317b6a737548fbf288cac6c7ab7f3.json
│ │ │ ├── 3a1698100e80a8596a36d8b4855dc7f6b02a1f512aae5b770bcb2a0a8493d207.json
│ │ │ ├── 3a40c6af4aa800f0cb090c5c8a8d4bd42faf85704360a5b3561b66aab834e0ba.json
│ │ │ ├── 3a42633341bcc27e13a6d7e05736adfecfdfa96b8c44c59e4542c7c4e1806156.json
│ │ │ ├── 3a614b92971bca0336040a8f660bf9af3c43653b2e405caeaecf4ab52c5862ff.json
│ │ │ ├── 3a69a96734960de4036a541396d1ca4dc4dc08c4f584758a7b0a483676f20a6a.json
│ │ │ ├── 3a7d58b7c9b3c2425328282fff4308f99f13bd9b18a3363e2ca301c5df119915.json
│ │ │ ├── 3a98065369191c0dee80f8ba81442fab5f0d43ff9cc38a9ef9c094fc40265d98.json
│ │ │ ├── 3aa2233e21470cd1c2667b6e4e31cf680d89b3b3c936882767e4500b0cf6d517.json
│ │ │ ├── 3ad5c85a4df455be7cc724d789dd9b804be74e28c36069860db48e39e36b080c.json
│ │ │ ├── 3add3f42b8c048e7bf19c84e2ee595627fc794619c8c0f2de19273d41bc71d60.json
│ │ │ ├── 3ae0877c874cb4dac4d29ed4985b1e6fa46f297c52614bd07c7de299168ec74a.json
│ │ │ ├── 3b08be27f7397da1523a7e0d67f546c43bfd337ed49e9985f185090b6d19c0bd.json
│ │ │ ├── 3b2bea41eef9cf973ab1dd7bda9874e927658bfcc54af5e26b5793e394eacd8c.json
│ │ │ ├── 3b5e9fb97c39a76a8168144b535f0ea2dba1f444850f32eab3b929159d16d738.json
│ │ │ ├── 3b6ad0d16f48f24f9fcbfe5290471ecde6344108f9dd5973d7824b6666835ef3.json
│ │ │ ├── 3b7b32bc0606836757173d152a23001e9cd98ae306f35fea7fd5a4cea47ad38f.json
│ │ │ ├── 3b96e64fe276ea4b3dbec9583c65426aa70b2b0172968cb6e0aabf55e32f9497.json
│ │ │ ├── 3bff34d175e1b70af1bb9b101b6d95e563d20c9b666fca6c23005d8f94312e84.json
│ │ │ ├── 3cc58466163409f7044471fb2a27413151487768ad8d178b4c1c766ebf757a48.json
│ │ │ ├── 3ce539b9c91363a808bb0f8e673b11ac9e68a2f29f26fe6aa5acf8042001d5b1.json
│ │ │ ├── 3ceeae13f0ee4e4fe2e61cd621542fa810c9a59ed72ff0bd5080994efba93692.json
│ │ │ ├── 3cfb5014bce495291b574ba4916097621b9df352df86bca634a82e76ebe57324.json
│ │ │ ├── 3d235218c3711ad77b5e65859defe5592e1c9e09a28f483ce6881106311b8a75.json
│ │ │ ├── 3d3c43d9096b687183989d7ed41915862a01d180e8a90969599d591fec1b8489.json
│ │ │ ├── 3dc78dad9273a3afe608b7c1ab7834e6fddf7833c7c452216b97f1d5514adbc1.json
│ │ │ ├── 3de708c0e47a81dc57473c1d484f9d12ae5d03a816b4ee265da4926a95cd8847.json
│ │ │ ├── 3dec1b35f0f03f6662218aa0a00caa44322dc48b1bd12d32056a8a68ad91cbbc.json
│ │ │ ├── 3e0f3aa56ce9d3b0fa6eee604905f3179790e705f2947f24df2b529998d5b588.json
│ │ │ ├── 3e6f3ade3616452dff6859262a790208b35f3ed9fd6bb2560b6f0afd89cc34ab.json
│ │ │ ├── 3e7e965b70fed9e8f85a01a6590a610cbf7ba70618238040493c711b6ff57be5.json
│ │ │ ├── 3e85d726f8264678af4b790643e62ec7480fd71c5a581a7b898d8c721cafacda.json
│ │ │ ├── 3e8babd50b8d4faa6ee6438d7f5274c48e4021a6a15f1aa30958da55f7e3eaec.json
│ │ │ ├── 3eba936eb977a1c961e0c2be712b13074395d796775e03c478fd936e91254e82.json
│ │ │ ├── 3ed6efbe5576710ae29b86b55179f0145dd1362f6fea1165b7c21d6327b77839.json
│ │ │ ├── 3ed99dfd444f0c10455e30c89ab3fcbf9b88e06914a50ed08b016b1369ad83c4.json
│ │ │ ├── 3ee6d0afb6ad1acd790dbe6eec107818a568b24c8fd33336f1d9e9c52b2b8b3c.json
│ │ │ ├── 3f0f16eece4220a551b261ccb4d1d808fb79dc6263ce0ff9d8e3d50f97c2c524.json
│ │ │ ├── 3fa2aa1a135494f5413c79f846afc40b1d1f26721ec1d58a4d5eb4b23506df9d.json
│ │ │ ├── 3fe9f5568bccdcf7bf07616a0239015945daa4d9b1b49d6be4e35a5a189927f8.json
│ │ │ ├── 402241ca2f6c2739b24cf651176624356edb78619c81017d450f3876eb193928.json
│ │ │ ├── 4078aa36a9cbcb50c445a46d69fb9126952d1c85f3d413125b034730e51b6508.json
│ │ │ ├── 407c7fa0eb5af7f95095041bcea799a9fa1ca5fd22738253f817facc1d972cd1.json
│ │ │ ├── 40985d2e0ff82751e23c442f40346889f32138a4931f7ff275d6f93aaba6b21c.json
│ │ │ ├── 40a18e2b7f5168f032cfecb3eae7a173e04ec8a5ee6f058d983ad88322777f24.json
│ │ │ ├── 40a41380ede0dd4635618b64a166f89979aa6c479a626155f36045a677abe944.json
│ │ │ ├── 4145ca17956b44d9af8a25a55e568cdda43e818e81e23381c37734cdcee2183a.json
│ │ │ ├── 41737281281293e6a3f36a028ef890f06fbb6d15d36a01d60251e4259c46e63a.json
│ │ │ ├── 4173b26415a0a66021c6c07ed6167a1caa9a297993276e64c603912a5059ec7d.json
│ │ │ ├── 41c35e2da08cd335d087f9b52f5e402845714315155d11708794a864d2995876.json
│ │ │ ├── 4209504265b6f72a6c39f3b641b317ed91744b6c02e9136bbbaf6e3ff963b42d.json
│ │ │ ├── 421ce6fd2164126f39d5017309708dfa0d7dd12acbf847211d6c73e18a73d294.json
│ │ │ ├── 4265295820dec8336bda372375b4b64b3a930f7ec3df34b59cb0bafd6305f34f.json
│ │ │ ├── 4282a67bb455d71806483364e685b51715dba6b4436281f3c89efb725349e3be.json
│ │ │ ├── 42c357284497af596ae6c9341b0c189daa31e88b25d0381a985f24203b7a5a38.json
│ │ │ ├── 42c962b4d7e9745cb63bfa0183602baa56cc845299ce1316bd0d1064482c0348.json
│ │ │ ├── 42d6592364a8060cd2277758f48f2a1c8d372ffedc872a62bb2da99438c6d831.json
│ │ │ ├── 42fb3f8511a39e5cea762d7938474eeb22fd8864742090663628c962b99fce27.json
│ │ │ ├── 42fb7697d9990d7b6bb3f1c4898b6de4353e5e24823073da304a870e5155f90a.json
│ │ │ ├── 42fc91568f646799065572381a62ffbe66be514138f194d9365148d95351bb78.json
│ │ │ ├── 430a49246c97c29bd958f383627f53ec795fd77ef818827e16691689151bf17c.json
│ │ │ ├── 436039b9bd78d795fe43610ba51875025701bd363939f36299cf66846167b173.json
│ │ │ ├── 436f384e96b2832c4d9c97fee526191d404a1d07c5fee984e7105bf38c215636.json
│ │ │ ├── 43ab59d33816f38f180ba19480d55d6c87f80e9b805d429bc1307ab0b5254c20.json
│ │ │ ├── 43b267e6780ca5bbd3a3f1ed3d40a7e25083c1b4f036c9716b79dca707dd5123.json
│ │ │ ├── 43f424df929f565d2255c6d491d4bd19d8b1e30993882dad557fbdb655c65149.json
│ │ │ ├── 447fc05a167695f50b05f47ae544cd081a23523599af63df7639d365f40bdac0.json
│ │ │ ├── 44a158fa5fc509d1d5a7fba3394d4fcd5e6bbd4bc63a704095da8be678188f5f.json
│ │ │ ├── 44a892380e524ac66cb0cbfad33bc8ef4899e57bf86a8bc6f5e8b0ba5c3a21cc.json
│ │ │ ├── 44b81b484e581b850ac2d2dc5165774ca67ae97245dcb8ed6c2e00ff5de01976.json
│ │ │ ├── 454a64d08460d26028e99324c80366c46163710158867d4f2178b3fe3b2f76a7.json
│ │ │ ├── 456673fd514b80abfa8bb13c25acb9fa640daa3a1e1b5eef7a96863a592cc7fa.json
│ │ │ ├── 45dfe46d8b1dfc461498b9d3c4d8f0dac55204c9b7b28f729efa37467c38bf43.json
│ │ │ ├── 463ab0e2f2914026cfa3c742259c43af318468eb4ef84fd4008ebb40824b7e86.json
│ │ │ ├── 463f6367d35055466e6ae9ba90c0c683a130259a5f5eab916ffa236c6ef27248.json
│ │ │ ├── 4650d201938acc678efd813c1dbec228ac4b5afae36ec723dcb9564e539886bc.json
│ │ │ ├── 465c28d63ba5cd074adb2db63d45716514a4d92e4ea10d7f464c15aff216b289.json
│ │ │ ├── 46800172f5b9ea2f710ee60cca24864b2a901c374c11a457ea72556c5aaeeba9.json
│ │ │ ├── 46aa9ba6a7cab5983175a48a453571676858d5fd0ec623b99f9e53e864734296.json
│ │ │ ├── 46f11a688f7e3e6d3644b160bbab0ea9abe9a9cd60f1962b4500362afda33be1.json
│ │ │ ├── 46f43938f3658c0cf1bad4bfcabdd8cf72687976f08224d702189c8144725b6a.json
│ │ │ ├── 473a89338a3c2779476c5954f5a92d358bbc98b9bdb8328f780395b788a62aa3.json
│ │ │ ├── 4740076b06b248d49f8f6d7e7624fb687c056d792a57cfd2e4138a898cba623b.json
│ │ │ ├── 475dd18c74125335442fb41e08c128cd7a9690b605b7d27ae156b007097c61b6.json
│ │ │ ├── 4766d7f55e90c5b811ce89a88376bb3538d94185276d53bbebb309f598f39057.json
│ │ │ ├── 47782ab5af0977ed7633dad0a2a6c4681b31d4475ac99831d44ae4844e1d67f6.json
│ │ │ ├── 477c745d2921045459b8502e67c9e4d9be1b877c4664ca74c777c084a87827ad.json
│ │ │ ├── 47a5bf0b0f9b40325cd7c6ac0c48ea8876c123a8e7a934468a68a67f22dcbbd6.json
│ │ │ ├── 48207c7a59e508ad69d682ac37d1848151725fc82a5b7b5a088819e6a858cc5a.json
│ │ │ ├── 48a79d3a2c6b879da045b11f3c3e05d3fc28b6dba27b9adae1cf91d47c03b11c.json
│ │ │ ├── 48cb7e4f789b3e1ba64b81d6910f9f4cb4b5c8b30bbd9ac8beb437c1ad817e35.json
│ │ │ ├── 48cda1e432d9f9c3ce773147998fe5621478e542632f882fee067fd068c410dd.json
│ │ │ ├── 48cde3202f97f2746d3a3749dd0037a45fb04456e3d43192784d4b7e5cb6e4c4.json
│ │ │ ├── 4917625b5334cb87a15d982b6c93b728b7d3797f3752f26bde737a0b51d3f9db.json
│ │ │ ├── 4939ff88e2872cb647b040ef390a97b85be71cf3d6fb65dbc271ccec0b377736.json
│ │ │ ├── 496f69b756e28d4e42073df60398bf9e6c7e45fb252fc64b890f7aab67d13330.json
│ │ │ ├── 4983d2d71a27e4b8a28dda27ee8e4f0058208cb2fa32aa9067ee1dc44ba2e607.json
│ │ │ ├── 498c5faf43eb2a35c10bd7134b79c7bd82bb8ced98b63a1f91dbaff14ce0ce32.json
│ │ │ ├── 49b77def0466ad21229d2404e9ccf2272789fc1e8876447b441bc400933c5f21.json
│ │ │ ├── 4a1ce541c393752effc446bdb99ea9fb1131024363482d196a969c8170e75db4.json
│ │ │ ├── 4a2a4271219b2dccee297eb4f1645cde4396fa5a1ab8663b8f19a593bde65710.json
│ │ │ ├── 4a527f09605280d0ebd2c451d6824d03e2ba97947f2572a78c46e727d58b5d50.json
│ │ │ ├── 4a5cf7e035639dced02db46f9510e15c6cdc9fed56c690e9bf1f8400c067a69d.json
│ │ │ ├── 4a672623ff7ad13a3d7664ac05f711d144a40d3e87fd1d52ab0166e0e170bdcb.json
│ │ │ ├── 4b000cdf2ebe9aa11b02e89e2c2a8ae7c66f25090b24b991a5ad6655e0867868.json
│ │ │ ├── 4b7d758e7ce50d55e8eb509e0906d435f827374c975ac24e425d63caf8856179.json
│ │ │ ├── 4b86dc1917e640e5182698ab1d5a3c56c50feee76a8e822c1d5a6dfb75c0f2c5.json
│ │ │ ├── 4b8850a4f08216a91da78226564e4b86528fa868bc943729dac1560eb93436d4.json
│ │ │ ├── 4b8c467466927f82165a998713bb6e6ef70416caeaff03f85a2de3c0a26d8f81.json
│ │ │ ├── 4bb45a63aa8965307650aed9af24f20642198493fc243584573cfde1eefb1480.json
│ │ │ ├── 4bd9686cbf81b6a27194acc59ad2140a420726a9146740ae783d3c1e4411bb0c.json
│ │ │ ├── 4bedee024b0d2542d73ee504ba4b17c51183af4dcbaa1e90a0279a5574025c49.json
│ │ │ ├── 4bfb69854afd4e4815a2dccd41b3cbc0bd753380ff23e58a66775e639c42aa6d.json
│ │ │ ├── 4c01a4ae8b53a9fa1fa7e36c1a37470e4cd70eae8f9b51aa8df3fca36d5a7a03.json
│ │ │ ├── 4c066cc184fbc2fe6198779f33089ed0f0e48ec789e9df317c77dd78048c254e.json
│ │ │ ├── 4cd1a193073181114548ec3016d17eec2cee4b36af58ba34d8a718e9628f9dc3.json
│ │ │ ├── 4ce67bc3cfaf160d645601d87f02c094098376a733a8a25dcc787103ef6e4755.json
│ │ │ ├── 4d24b5ada1f5f330c756d3b49d3895798ddae36a55552be9a4ee7c8324e9f300.json
│ │ │ ├── 4d5133d50a38473b90fdf516e3adf8516201aab56ca81cb9323b794de759955f.json
│ │ │ ├── 4d5f7df57851017e001b77776bf2e65383c2f273f8fe1169042e0fc94f0d7dc2.json
│ │ │ ├── 4d660b9a6e9fb502736aaa943074e6d96dd284c472e3576429b7863023ea5b8c.json
│ │ │ ├── 4d708fb371577c8b21ea7668b3f875505c370e8181aec6895447c329657d6f73.json
│ │ │ ├── 4d749d8c25ad190e43e17c57cec0bf2f4641c80e86242a8021af9d041488b6a7.json
│ │ │ ├── 4df785f53374dbe97f58479796d8036bc75fc43349c42af4d62f2d60f063ebcb.json
│ │ │ ├── 4e8227df667f21264aa881506eb04b590d00074941a5b760c1d7ba1fb0139b3e.json
│ │ │ ├── 4ea82013cd3f1e38b35ab621ba3fe384351d75c9763b7d9a21b5e83ae0f4584f.json
│ │ │ ├── 4ef0ca8811d51e146f437b764131c202bd9d79a503ac78b0a3b80bd547b22a89.json
│ │ │ ├── 4f46489a9532e9f6c0b8457067383e9deb599d5b51001b6f4c13f32342011b26.json
│ │ │ ├── 4fa03ffc47e6cc72d0b3e8a95e85067cdc4aaf749ec4faa563257afefd472481.json
│ │ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .coveragerc
================================================
[run]
omit =
*/tests/*
*/llama_stack/providers/*
*/llama_stack/templates/*
.venv/*
*/llama_stack/cli/scripts/*
*/llama_stack_ui/*
*/llama_stack/distribution/ui/*
*/llama_stack/strong_typing/*
*/llama_stack/env.py
*/__init__.py
================================================
FILE: .dockerignore
================================================
.venv
__pycache__
*.pyc
*.pyo
*.pyd
*.so
.git
.gitignore
htmlcov*
.coverage
coverage*
.cache
.mypy_cache
.pytest_cache
.ruff_cache
uv.lock
node_modules
build
/tmp
================================================
FILE: .gitattributes
================================================
tests/**/recordings/** linguist-generated=true
================================================
FILE: .github/CODEOWNERS
================================================
# Each line is a file pattern followed by one or more owners.
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence,
* @ashwinb @raghotham @ehhuang @leseb @bbrowning @mattf @franciscojavierarceo @cdoern
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: 🐛 Bug Report
description: Create a report to help us reproduce and fix the bug
labels: ["bug"]
body:
- type: markdown
attributes:
value: >
#### Before submitting a bug, please make sure the issue hasn't been already addressed by searching through [the
existing and past issues](https://github.com/meta-llama/llama-stack/issues).
- type: textarea
id: system-info
attributes:
label: System Info
description: |
Please share your system info with us. You can use the following command to capture your environment information
python -m "torch.utils.collect_env"
placeholder: |
PyTorch version, CUDA version, GPU type, #num of GPUs...
validations:
required: true
- type: checkboxes
id: information-scripts-examples
attributes:
label: Information
description: 'The problem arises when using:'
options:
- label: "The official example scripts"
- label: "My own modified scripts"
- type: textarea
id: bug-description
attributes:
label: 🐛 Describe the bug
description: |
Please provide a clear and concise description of what the bug is.
Please also paste or describe the results you observe instead of the expected results.
placeholder: |
A clear and concise description of what the bug is.
```llama stack
# Command that you used for running the examples
```
Description of the results
validations:
required: true
- type: textarea
attributes:
label: Error logs
description: |
If you observe an error, please paste the error message including the **full** traceback of the exception. It may be relevant to wrap error messages in ```` ```triple quotes blocks``` ````.
placeholder: |
```
The error message you got, with the full traceback.
```
validations:
required: true
- type: textarea
id: expected-behavior
validations:
required: true
attributes:
label: Expected behavior
description: "A clear and concise description of what you would expect to happen."
- type: markdown
attributes:
value: >
Thanks for contributing 🎉!
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Have you read the docs?
url: https://llamastack.github.io/providers/external/index.html
about: Much help can be found in the docs
- name: Start a discussion
url: https://github.com/llamastack/llama-stack/discussions/new/
about: Start a discussion on a topic
- name: Chat on Discord
url: https://discord.gg/llama-stack
about: Maybe chatting with the community can help
================================================
FILE: .github/ISSUE_TEMPLATE/discussion.yml
================================================
name: 💬 Discussion
description: Open up a topic for discussion in the community
labels: ["discussion"]
body:
- type: textarea
id: discussion-topic
attributes:
label: What would you like to discuss with the community?
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: 🚀 Feature request
description: Request a new llama-stack feature
labels: ["enhancement"]
body:
- type: textarea
id: feature-pitch
attributes:
label: 🚀 Describe the new functionality needed
description: >
A clear and concise description of _what_ needs to be built.
validations:
required: true
- type: textarea
id: feature-motivation
attributes:
label: 💡 Why is this needed? What if we don't build it?
description: >
A clear and concise description of _why_ this functionality is needed.
validations:
required: true
- type: textarea
id: other-thoughts
attributes:
label: Other thoughts
description: >
Any thoughts about how this may result in complexity in the codebase, or other trade-offs.
================================================
FILE: .github/ISSUE_TEMPLATE/tech-debt.yml
================================================
name: 🔧 Tech Debt
description: Something that is functional but should be improved or optimizied
labels: ["tech-debt"]
body:
- type: textarea
id: tech-debt-explanation
attributes:
label: 🤔 What is the technical debt you think should be addressed?
description: >
A clear and concise description of _what_ needs to be addressed - ensure you are describing
constitutes [technical debt](https://en.wikipedia.org/wiki/Technical_debt) and is not a bug
or feature request.
validations:
required: true
- type: textarea
id: tech-debt-motivation
attributes:
label: 💡 What is the benefit of addressing this technical debt?
description: >
A clear and concise description of _why_ this work is needed.
validations:
required: true
- type: textarea
id: other-thoughts
attributes:
label: Other thoughts
description: >
Any thoughts about how this may result in complexity in the codebase, or other trade-offs.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# What does this PR do?
<!-- Provide a short summary of what this PR does and why. Link to relevant issues if applicable. -->
<!-- If resolving an issue, uncomment and update the line below -->
<!-- Closes #[issue-number] -->
## Test Plan
<!-- Describe the tests you ran to verify your changes with result summaries. *Provide clear instructions so the plan can be easily re-executed.* -->
<!-- For API changes, include:
1. A testing script (Python, curl, etc.) that exercises the new/modified endpoints
2. The output from running your script
Example:
```python
...
...
```
Output:
```
<paste actual output here>
```
-->
================================================
FILE: .github/TRIAGERS.md
================================================
# This file documents Triage members in the Llama Stack community
================================================
FILE: .github/actions/install-llama-stack-client/action.yml
================================================
name: Install llama-stack-client
description: Install llama-stack-client based on branch context and client-version input
inputs:
client-version:
description: 'Client version to install on non-release branches (latest or published). Ignored on release branches.'
required: false
default: ""
sdk_install_url:
description: 'URL to install Python SDK from (for testing preview builds). If provided, overrides client-version.'
required: false
default: ""
branch:
description: 'Explicit branch override (used by scheduled CI to pass the matrix branch)'
required: false
default: ""
outputs:
install-after-sync:
description: 'Whether to install client after uv sync'
value: ${{ steps.configure.outputs.install-after-sync }}
install-source:
description: 'Where to install client from after sync'
value: ${{ steps.configure.outputs.install-source }}
runs:
using: "composite"
steps:
- name: Configure client installation
id: configure
shell: bash
run: |
# If sdk_install_url is provided (e.g., from Stainless preview), use it directly
if [ -n "${{ inputs.sdk_install_url }}" ]; then
echo "Using provided sdk_install_url: ${{ inputs.sdk_install_url }}"
echo "install-after-sync=true" >> $GITHUB_OUTPUT
echo "install-source=${{ inputs.sdk_install_url }}" >> $GITHUB_OUTPUT
exit 0
fi
# Determine the branch we're working with
# Use explicit branch input if provided (for scheduled CI), otherwise detect from GitHub context
if [ -n "${{ inputs.branch }}" ]; then
BRANCH="${{ inputs.branch }}"
else
BRANCH="${{ github.base_ref || github.ref }}"
BRANCH="${BRANCH#refs/heads/}"
fi
# Trim leading/trailing whitespace (git branch -r output includes padding)
BRANCH="$(echo "$BRANCH" | xargs)"
echo "Working with branch: $BRANCH"
# On release branches: install client from the matching release branch in the client repo
# On non-release branches: install based on client-version after sync
if [[ "$BRANCH" =~ ^release-[0-9]+\.[0-9]+\.x$ ]]; then
echo "Detected release branch: $BRANCH"
# Check if matching branch exists in client repo
if ! git ls-remote --exit-code --heads https://github.com/llamastack/llama-stack-client-python.git "$BRANCH" > /dev/null 2>&1; then
echo "::error::Branch $BRANCH not found in llama-stack-client-python repository"
echo "::error::Please create the matching release branch in llama-stack-client-python before testing"
exit 1
fi
echo "install-after-sync=true" >> $GITHUB_OUTPUT
echo "install-source=git+https://github.com/llamastack/llama-stack-client-python.git@$BRANCH" >> $GITHUB_OUTPUT
elif [ "${{ inputs.client-version }}" = "latest" ]; then
# Install from main git after sync
echo "install-after-sync=true" >> $GITHUB_OUTPUT
echo "install-source=git+https://github.com/llamastack/llama-stack-client-python.git@main" >> $GITHUB_OUTPUT
elif [ "${{ inputs.client-version }}" = "published" ]; then
# Use published version from PyPI (installed by sync)
echo "install-after-sync=false" >> $GITHUB_OUTPUT
elif [ -n "${{ inputs.client-version }}" ]; then
echo "::error::Invalid client-version: ${{ inputs.client-version }}"
exit 1
fi
================================================
FILE: .github/actions/run-and-record-tests/action.yml
================================================
name: 'Run and Record Tests'
description: 'Run integration tests and handle recording/artifact upload'
inputs:
stack-config:
description: 'Stack configuration to use'
required: true
setup:
description: 'Setup to use for tests (e.g., ollama, gpt, vllm)'
required: false
default: ''
inference-mode:
description: 'Inference mode (record or replay)'
required: true
suite:
description: 'Test suite to use: base, responses, vision, etc.'
required: false
default: ''
subdirs:
description: 'Comma-separated list of test subdirectories to run; overrides suite'
required: false
default: ''
pattern:
description: 'Regex pattern to pass to pytest -k'
required: false
default: ''
target-branch:
description: 'Target branch for recording commits (for PRs, use the PR head branch)'
required: false
default: ''
is-fork-pr:
description: 'Whether this is a fork PR (recordings cannot be pushed to forks)'
required: false
default: 'false'
skip-commit:
description: 'Skip committing recordings (upload as artifacts instead)'
required: false
default: 'false'
runs:
using: 'composite'
steps:
- name: Check Storage and Memory Available Before Tests
if: ${{ always() }}
shell: bash
run: |
free -h
df -h
- name: Run Integration Tests
shell: bash
env:
INPUT_STACK_CONFIG: ${{ inputs.stack-config }}
INPUT_INFERENCE_MODE: ${{ inputs.inference-mode }}
INPUT_SETUP: ${{ inputs.setup }}
INPUT_SUITE: ${{ inputs.suite }}
INPUT_SUBDIRS: ${{ inputs.subdirs }}
INPUT_PATTERN: ${{ inputs.pattern }}
run: |
SCRIPT_ARGS="--stack-config ${INPUT_STACK_CONFIG} --inference-mode ${INPUT_INFERENCE_MODE}"
# Add optional arguments only if they are provided
if [ -n "${INPUT_SETUP}" ]; then
SCRIPT_ARGS="${SCRIPT_ARGS} --setup ${INPUT_SETUP}"
fi
if [ -n "${INPUT_SUITE}" ]; then
SCRIPT_ARGS="${SCRIPT_ARGS} --suite ${INPUT_SUITE}"
fi
if [ -n "${INPUT_SUBDIRS}" ]; then
SCRIPT_ARGS="${SCRIPT_ARGS} --subdirs ${INPUT_SUBDIRS}"
fi
if [ -n "${INPUT_PATTERN}" ]; then
SCRIPT_ARGS="${SCRIPT_ARGS} --pattern ${INPUT_PATTERN}"
fi
echo "=== Running command ==="
echo "uv run --no-sync ./scripts/integration-tests.sh $SCRIPT_ARGS"
echo ""
uv run --no-sync ./scripts/integration-tests.sh $SCRIPT_ARGS | tee "pytest-${INPUT_INFERENCE_MODE}.log"
- name: Commit and push recordings
if: ${{ inputs.skip-commit != 'true' && (inputs.inference-mode == 'record' || inputs.inference-mode == 'record-if-missing') }}
shell: bash
env:
INPUT_TARGET_BRANCH: ${{ inputs.target-branch }}
INPUT_IS_FORK_PR: ${{ inputs.is-fork-pr }}
INPUT_SETUP: ${{ inputs.setup }}
INPUT_SUITE: ${{ inputs.suite }}
FALLBACK_REF: ${{ github.ref_name }}
run: |
echo "Checking for recording changes"
git status --porcelain tests/integration/recordings/ tests/integration/*/recordings/
if [[ -n $(git status --porcelain tests/integration/recordings/ tests/integration/*/recordings/) ]]; then
echo "New recordings detected"
# Determine target branch: use target-branch input if provided, otherwise use current branch
TARGET_BRANCH="${INPUT_TARGET_BRANCH}"
if [ -z "$TARGET_BRANCH" ]; then
TARGET_BRANCH="${FALLBACK_REF}"
fi
echo "Target branch: $TARGET_BRANCH"
# Check if this is a fork PR
if [ "$INPUT_IS_FORK_PR" = "true" ]; then
echo "::warning::This is a fork PR. Recordings were updated locally but cannot be pushed to the fork."
echo "::warning::Please download the workflow artifacts and commit the recordings manually."
else
echo "Committing and pushing recordings to branch: $TARGET_BRANCH"
# Configure git
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add tests/integration/recordings/ tests/integration/*/recordings/
git commit -m "Recordings update from CI (setup: ${INPUT_SETUP}, suite: ${INPUT_SUITE})"
git fetch origin "$TARGET_BRANCH"
git rebase "origin/$TARGET_BRANCH"
echo "Rebased successfully"
git push origin "HEAD:$TARGET_BRANCH"
echo "Pushed successfully to $TARGET_BRANCH"
fi
else
echo "No recording changes"
fi
- name: Write docker logs to file
if: ${{ always() }}
shell: bash
env:
INPUT_INFERENCE_MODE: ${{ inputs.inference-mode }}
run: |
# Ollama logs (if ollama container exists)
sudo docker logs ollama > "ollama-${INPUT_INFERENCE_MODE}.log" 2>&1 || true
# vllm logs (if vllm container exists)
sudo docker logs vllm > "vllm-${INPUT_INFERENCE_MODE}.log" 2>&1 || true
# Note: distro container logs are now dumped in integration-tests.sh before container is removed
- name: Upload logs
if: ${{ always() }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: logs-${{ github.run_id }}-${{ github.run_attempt || '1' }}-${{ strategy.job-index || github.job }}-${{ github.action }}
path: |
*.log
retention-days: 1
================================================
FILE: .github/actions/setup-ollama/action.yml
================================================
name: Setup Ollama
description: Start Ollama
inputs:
suite:
description: 'Test suite to use: base, responses, vision, etc.'
required: false
default: ''
runs:
using: "composite"
steps:
- name: Start Ollama
shell: bash
run: |
if [ "${{ inputs.suite }}" == "vision" ]; then
image="ollama-with-vision-model"
else
image="ollama-with-models"
fi
echo "Starting Ollama with image: $image"
docker run -d --name ollama -p 11434:11434 docker.io/llamastack/$image
echo "Verifying Ollama status..."
timeout 30 bash -c 'while ! curl -s -L http://127.0.0.1:11434; do sleep 1 && echo "."; done'
================================================
FILE: .github/actions/setup-runner/action.yml
================================================
name: Setup runner
description: Prepare a runner for the tests (install uv, python, project dependencies, etc.)
inputs:
python-version:
description: The Python version to use
required: false
default: "3.12"
client-version:
description: The llama-stack-client-python version to test against (latest or published)
required: false
default: "latest"
sdk_install_url:
description: 'URL to install Python SDK from (for testing preview builds). If provided, overrides client-version.'
required: false
default: ""
branch:
description: 'Explicit branch override (used by scheduled CI to pass the matrix branch)'
required: false
default: ""
runs:
using: "composite"
steps:
- name: Install uv
uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
with:
python-version: ${{ inputs.python-version }}
enable-cache: ${{ env.UV_NO_CACHE != 'true' }}
- name: Configure client installation
id: client-config
uses: ./.github/actions/install-llama-stack-client
with:
client-version: ${{ inputs.client-version }}
sdk_install_url: ${{ inputs.sdk_install_url }}
branch: ${{ inputs.branch }}
- name: Install dependencies
shell: bash
run: |
echo "Updating project dependencies via uv sync"
uv sync --all-groups
echo "Installing ad-hoc dependencies"
uv pip install faiss-cpu
# Install specific client version after sync if needed
if [ "${{ steps.client-config.outputs.install-after-sync }}" = "true" ]; then
echo "Installing llama-stack-client from: ${{ steps.client-config.outputs.install-source }}"
uv pip install ${{ steps.client-config.outputs.install-source }}
fi
echo "Installed llama packages"
uv pip list | grep llama
================================================
FILE: .github/actions/setup-test-environment/action.yml
================================================
name: 'Setup Test Environment'
description: 'Common setup steps for integration tests including dependencies, providers, and build'
inputs:
python-version:
description: 'Python version to use'
required: true
client-version:
description: 'Client version (latest or published)'
required: true
sdk_install_url:
description: 'URL to install Python SDK from (for testing preview builds). If provided, overrides client-version.'
required: false
default: ''
setup:
description: 'Setup to configure (ollama, vllm, gpt, etc.)'
required: false
default: 'ollama'
suite:
description: 'Test suite to use: base, responses, vision, etc.'
required: false
default: ''
inference-mode:
description: 'Inference mode (record or replay)'
required: true
branch:
description: 'Explicit branch override (used by scheduled CI to pass the matrix branch)'
required: false
default: ''
runs:
using: 'composite'
steps:
- name: Install dependencies
uses: ./.github/actions/setup-runner
with:
python-version: ${{ inputs.python-version }}
client-version: ${{ inputs.client-version }}
sdk_install_url: ${{ inputs.sdk_install_url }}
branch: ${{ inputs.branch }}
- name: Setup ollama
if: ${{ (inputs.setup == 'ollama' || inputs.setup == 'ollama-vision') && inputs.inference-mode == 'record' }}
uses: ./.github/actions/setup-ollama
with:
suite: ${{ inputs.suite }}
- name: Setup vllm
if: ${{ inputs.setup == 'vllm' && inputs.inference-mode == 'record' }}
uses: ./.github/actions/setup-vllm
- name: Start Postgres service
if: ${{ contains(inputs.setup, 'postgres') }}
shell: bash
run: |
sudo docker rm -f postgres-ci || true
sudo docker run -d --name postgres-ci \
-e POSTGRES_USER=llamastack \
-e POSTGRES_PASSWORD=llamastack \
-e POSTGRES_DB=llamastack \
-p 5432:5432 \
postgres:16
echo "Waiting for Postgres to become ready..."
for i in {1..30}; do
if sudo docker exec postgres-ci pg_isready -U llamastack -d llamastack >/dev/null 2>&1; then
echo "Postgres is ready"
break
fi
if [ "$i" -eq 30 ]; then
echo "Postgres failed to start in time"
sudo docker logs postgres-ci || true
exit 1
fi
sleep 2
done
- name: Verify client installation
shell: bash
run: |
echo "Verifying llama-stack-client installation:"
uv pip show llama-stack-client || echo "llama-stack-client not found"
echo ""
echo "All installed llama packages:"
uv pip list | grep llama || true
- name: Build Llama Stack
shell: bash
run: |
# Client is already installed by setup-runner (handles both main and release branches)
echo "Building Llama Stack"
LLAMA_STACK_DIR=. \
uv run --no-sync llama stack list-deps ci-tests | xargs -L1 uv pip install
- name: Configure git for commits
shell: bash
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
================================================
FILE: .github/actions/setup-typescript-client/action.yml
================================================
name: Setup TypeScript client
description: Conditionally checkout and link llama-stack-client-typescript based on client-version
inputs:
client-version:
description: 'Client version (latest or published)'
required: true
outputs:
ts-client-path:
description: 'Path or version to use for TypeScript client'
value: ${{ steps.set-path.outputs.ts-client-path }}
runs:
using: "composite"
steps:
- name: Checkout TypeScript client (latest)
if: ${{ inputs.client-version == 'latest' }}
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
repository: llamastack/llama-stack-client-typescript
ref: main
path: .ts-client-checkout
- name: Set TS_CLIENT_PATH
id: set-path
shell: bash
run: |
if [ "${{ inputs.client-version }}" = "latest" ]; then
echo "ts-client-path=${{ github.workspace }}/.ts-client-checkout" >> $GITHUB_OUTPUT
elif [ "${{ inputs.client-version }}" = "published" ]; then
echo "ts-client-path=^0.3.2" >> $GITHUB_OUTPUT
else
echo "::error::Invalid client-version: ${{ inputs.client-version }}"
exit 1
fi
================================================
FILE: .github/actions/setup-vllm/action.yml
================================================
name: Setup VLLM
description: Start VLLM
runs:
using: "composite"
steps:
- name: Start VLLM
shell: bash
run: |
# Start vllm container
docker run -d \
--name vllm \
-p 8000:8000 \
--privileged=true \
quay.io/higginsd/vllm-cpu:65393ee064-qwen3 \
--host 0.0.0.0 \
--port 8000 \
--enable-auto-tool-choice \
--tool-call-parser hermes \
--model /root/.cache/Qwen3-0.6B \
--served-model-name Qwen/Qwen3-0.6B \
--max-model-len 8192
# Wait for vllm to be ready
echo "Waiting for vllm to be ready..."
timeout 900 bash -c 'until curl -f http://localhost:8000/health; do
echo "Waiting for vllm..."
sleep 5
done'
================================================
FILE: .github/dependabot.yml
================================================
# GitHub Dependabot configuration
version: 2
updates:
# Enable version updates for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/" # Will use the default workflow location of `.github/workflows`
schedule:
interval: "weekly"
day: "saturday"
commit-message:
prefix: chore(github-deps)
- package-ecosystem: "uv"
directory: "/"
schedule:
interval: "weekly"
day: "saturday"
labels:
- type/dependencies
- python
commit-message:
prefix: chore(python-deps)
- package-ecosystem: npm
directory: "/llama_stack_ui"
schedule:
interval: "weekly"
day: "saturday"
labels:
- type/dependencies
- javascript
commit-message:
prefix: chore(ui-deps)
================================================
FILE: .github/mergify.yml
================================================
pull_request_rules:
- name: ping author on conflicts and add 'needs-rebase' label
conditions:
- conflict
- -closed
- -label~=stale
actions:
label:
add:
- needs-rebase
comment:
message: >
This pull request has merge conflicts that must be resolved before it
can be merged. @{{author}} please rebase it.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork
- name: remove 'needs-rebase' label when conflict is resolved
conditions:
- -conflict
- -closed
actions:
label:
remove:
- needs-rebase
- name: automatically update PRs that are 3+ commits behind main
conditions:
- base=main
- "#commits-behind>=3"
- -conflict
- -draft
- -closed
actions:
update: {}
- name: auto-merge on stable release branches
conditions:
- base~=^release-[0-9]+\.[0-9]+\.x$
- check-success=ci-status
- "#approved-reviews-by>=1"
- "#changes-requested-reviews-by=0"
- -conflict
- -draft
- -closed
actions:
merge:
method: squash
- name: auto-approve dependabot github-deps PRs
conditions:
- author=dependabot[bot]
- title~=^chore\(github-deps\)
- -conflict
- -draft
- -closed
actions:
review:
type: APPROVE
- name: auto-merge dependabot github-deps PRs
conditions:
- author=dependabot[bot]
- title~=^chore\(github-deps\)
- check-success=ci-status
- "#approved-reviews-by>=1"
- -conflict
- -draft
- -closed
actions:
merge:
method: squash
================================================
FILE: .github/workflows/README.md
================================================
# Llama Stack CI
Llama Stack uses GitHub Actions for Continuous Integration (CI). Below is a table detailing what CI the project includes and the purpose.
| Name | File | Purpose |
| ---- | ---- | ------- |
| Backward Compatibility Check | [backward-compat.yml](backward-compat.yml) | Check backward compatibility for config.yaml files |
| Build Distribution Images | [build-distributions.yml](build-distributions.yml) | Build Distribution Images |
| CI Status | [ci-status.yml](ci-status.yml) | Aggregate CI check status |
| CodeQL Workflow Security Scan | [codeql.yml](codeql.yml) | CodeQL Workflow Security Scan |
| Commit Recordings | [commit-recordings.yml](commit-recordings.yml) | Commit Recordings |
| Documentation Build | [docs-build.yml](docs-build.yml) | Build and validate documentation |
| Installer CI | [install-script-ci.yml](install-script-ci.yml) | Test the installation script |
| Integration Auth Tests | [integration-auth-tests.yml](integration-auth-tests.yml) | Run the integration test suite with Kubernetes authentication |
| Integration Responses & Conversations Auth Tests | [integration-responses-conversations-auth-tests.yml](integration-responses-conversations-auth-tests.yml) | Run responses and conversations auth tests with Kubernetes authentication |
| SqlStore Integration Tests | [integration-sql-store-tests.yml](integration-sql-store-tests.yml) | Run the integration test suite with SqlStore |
| Integration Tests (Replay) | [integration-tests.yml](integration-tests.yml) | Run the integration test suites from tests/integration in replay mode |
| Vector IO Integration Tests | [integration-vector-io-tests.yml](integration-vector-io-tests.yml) | Run the integration test suite with various VectorIO providers |
| OpenAPI Generator SDK Validation | [openapi-generator-validation.yml](openapi-generator-validation.yml) | Validate OpenAPI Generator SDK generation |
| OpenResponses Conformance Tests | [openresponses-conformance.yml](openresponses-conformance.yml) | Run OpenResponses conformance tests against llama-stack Responses API |
| Post-release automation | [post-release.yml](post-release.yml) | Post-release automation |
| Pre-commit | [pre-commit.yml](pre-commit.yml) | Run pre-commit checks |
| Prepare release | [prepare-release.yml](prepare-release.yml) | Prepare release |
| Test Llama Stack Build | [providers-build.yml](providers-build.yml) | Test llama stack build |
| Test llama stack list-deps | [providers-list-deps.yml](providers-list-deps.yml) | Test llama stack list-deps |
| Build, test, and publish packages | [pypi.yml](pypi.yml) | Build, test, and publish packages |
| Integration Tests (Record) | [record-integration-tests.yml](record-integration-tests.yml) | Auto-record missing test recordings for PR |
| Release Branch Scheduled CI | [release-branch-scheduled-ci.yml](release-branch-scheduled-ci.yml) | Scheduled CI checks for active release branches |
| Check semantic PR titles | [semantic-pr.yml](semantic-pr.yml) | Ensure that PR titles follow the conventional commit spec |
| Stainless SDK Builds | [stainless-builds.yml](stainless-builds.yml) | Build Stainless SDK from OpenAPI spec changes |
| Close stale issues and PRs | [stale_bot.yml](stale_bot.yml) | Run the Stale Bot action |
| Test External Providers Installed via Module | [test-external-provider-module.yml](test-external-provider-module.yml) | Test External Provider installation via Python module |
| Test External API and Providers | [test-external.yml](test-external.yml) | Test the External API and Provider mechanisms |
| UI Tests | [ui-unit-tests.yml](ui-unit-tests.yml) | Run the UI test suite |
| Unit Tests | [unit-tests.yml](unit-tests.yml) | Run the unit test suite |
================================================
FILE: .github/workflows/backward-compat.yml
================================================
name: Backward Compatibility Check
run-name: Check backward compatibility for config.yaml files
on:
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.[0-9]+.[0-9]+'
- 'release-[0-9]+.[0-9]+.[0-9]+'
- 'release-[0-9]+.[0-9]+'
paths:
- 'src/llama_stack/core/datatypes.py'
- 'src/llama_stack/providers/datatypes.py'
- 'src/llama_stack/distributions/**/config.yaml'
- 'tests/backward_compat/**'
- '.github/workflows/backward-compat.yml'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check-main-compatibility:
name: Check Compatibility with main
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0 # Need full history to access main branch
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
with:
enable-cache: true
- name: Install dependencies
run: |
uv sync --group dev
- name: Extract config.yaml files from main branch
id: extract_configs
run: |
# Get list of config.yaml paths from main
git fetch origin main
CONFIG_PATHS=$(git ls-tree -r --name-only origin/main | grep "src/llama_stack/distributions/.*/config.yaml$" || true)
if [ -z "$CONFIG_PATHS" ]; then
echo "No config.yaml files found in main branch"
exit 1
fi
# Extract all configs to a temp directory
mkdir -p /tmp/main_configs
echo "Extracting configs from main branch:"
while IFS= read -r config_path; do
if [ -z "$config_path" ]; then
continue
fi
# Extract filename for storage
filename=$(basename $(dirname "$config_path"))
echo " - $filename (from $config_path)"
git show origin/main:"$config_path" > "/tmp/main_configs/${filename}.yaml"
done <<< "$CONFIG_PATHS"
echo ""
echo "Extracted $(ls /tmp/main_configs/*.yaml | wc -l) config files"
- name: Test all configs from main
id: test_configs
continue-on-error: true
run: |
# Run pytest once with all configs parameterized
if COMPAT_TEST_CONFIGS_DIR=/tmp/main_configs uv run pytest tests/backward_compat/test_run_config.py -v; then
echo "failed=false" >> $GITHUB_OUTPUT
else
echo "failed=true" >> $GITHUB_OUTPUT
exit 1
fi
- name: Check for breaking change acknowledgment
id: check_ack
if: steps.test_configs.outputs.failed == 'true'
run: |
echo "Breaking changes detected. Checking for acknowledgment..."
# Check PR title for '!:' marker (conventional commits)
PR_TITLE="${{ github.event.pull_request.title }}"
if [[ "$PR_TITLE" =~ ^[a-z]+\!: ]]; then
echo "✓ Breaking change acknowledged in PR title"
echo "acknowledged=true" >> $GITHUB_OUTPUT
exit 0
fi
# Check commit messages for BREAKING CHANGE:
if git log origin/main..HEAD --format=%B | grep -q "BREAKING CHANGE:"; then
echo "✓ Breaking change acknowledged in commit message"
echo "acknowledged=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "✗ Breaking change NOT acknowledged"
echo "acknowledged=false" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
- name: Evaluate results
if: always()
run: |
FAILED="${{ steps.test_configs.outputs.failed }}"
ACKNOWLEDGED="${{ steps.check_ack.outputs.acknowledged }}"
if [[ "$FAILED" == "true" ]]; then
if [[ "$ACKNOWLEDGED" == "true" ]]; then
echo ""
echo "⚠️ WARNING: Breaking changes detected but acknowledged"
echo ""
echo "This PR introduces backward-incompatible changes to config.yaml."
echo "The changes have been properly acknowledged."
echo ""
exit 0 # Pass the check
else
echo ""
echo "❌ ERROR: Breaking changes detected without acknowledgment"
echo ""
echo "This PR introduces backward-incompatible changes to config.yaml"
echo "that will break existing user configurations."
echo ""
echo "To acknowledge this breaking change, do ONE of:"
echo " 1. Add '!:' to your PR title (e.g., 'feat!: change xyz')"
echo " 2. Add the 'breaking-change' label to this PR"
echo " 3. Include 'BREAKING CHANGE:' in a commit message"
echo ""
exit 1 # Fail the check
fi
fi
test-integration-main:
name: Run Integration Tests with main Config
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Extract ci-tests config.yaml from main
run: |
git fetch origin main
git show origin/main:src/llama_stack/distributions/ci-tests/config.yaml > /tmp/main-ci-tests-config.yaml
echo "Extracted ci-tests config.yaml from main branch"
- name: Setup test environment
uses: ./.github/actions/setup-test-environment
with:
python-version: '3.12'
client-version: 'latest'
setup: 'ollama'
suite: 'base'
inference-mode: 'replay'
- name: Run integration tests with main config
id: test_integration
continue-on-error: true
uses: ./.github/actions/run-and-record-tests
with:
stack-config: /tmp/main-ci-tests-config.yaml
setup: 'ollama'
inference-mode: 'replay'
suite: 'base'
- name: Check for breaking change acknowledgment
id: check_ack
if: steps.test_integration.outcome == 'failure'
run: |
echo "Integration tests failed. Checking for acknowledgment..."
# Check PR title for '!:' marker (conventional commits)
PR_TITLE="${{ github.event.pull_request.title }}"
if [[ "$PR_TITLE" =~ ^[a-z]+\!: ]]; then
echo "✓ Breaking change acknowledged in PR title"
echo "acknowledged=true" >> $GITHUB_OUTPUT
exit 0
fi
# Check commit messages for BREAKING CHANGE:
if git log origin/main..HEAD --format=%B | grep -q "BREAKING CHANGE:"; then
echo "✓ Breaking change acknowledged in commit message"
echo "acknowledged=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "✗ Breaking change NOT acknowledged"
echo "acknowledged=false" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
- name: Evaluate integration test results
if: always()
run: |
TEST_FAILED="${{ steps.test_integration.outcome == 'failure' }}"
ACKNOWLEDGED="${{ steps.check_ack.outputs.acknowledged }}"
if [[ "$TEST_FAILED" == "true" ]]; then
if [[ "$ACKNOWLEDGED" == "true" ]]; then
echo ""
echo "⚠️ WARNING: Integration tests failed with main config but acknowledged"
echo ""
exit 0 # Pass the check
else
echo ""
echo "❌ ERROR: Integration tests failed with main config without acknowledgment"
echo ""
echo "To acknowledge this breaking change, do ONE of:"
echo " 1. Add '!:' to your PR title (e.g., 'feat!: change xyz')"
echo " 2. Include 'BREAKING CHANGE:' in a commit message"
echo ""
exit 1 # Fail the check
fi
fi
test-integration-release:
name: Run Integration Tests with Latest Release (Informational)
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Get latest release
id: get_release
run: |
# Get the latest release from GitHub
LATEST_TAG=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' 2>/dev/null || echo "")
if [ -z "$LATEST_TAG" ]; then
echo "No releases found, skipping release compatibility check"
echo "has_release=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Latest release: $LATEST_TAG"
echo "has_release=true" >> $GITHUB_OUTPUT
echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
- name: Extract ci-tests config.yaml from release
if: steps.get_release.outputs.has_release == 'true'
id: extract_config
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
# Try with src/ prefix first (newer releases), then without (older releases)
if git show "$RELEASE_TAG:src/llama_stack/distributions/ci-tests/config.yaml" > /tmp/release-ci-tests-config.yaml 2>/dev/null; then
echo "Extracted ci-tests config.yaml from release $RELEASE_TAG (src/ path)"
echo "has_config=true" >> $GITHUB_OUTPUT
elif git show "$RELEASE_TAG:llama_stack/distributions/ci-tests/config.yaml" > /tmp/release-ci-tests-config.yaml 2>/dev/null; then
echo "Extracted ci-tests config.yaml from release $RELEASE_TAG (old path)"
echo "has_config=true" >> $GITHUB_OUTPUT
else
echo "::warning::ci-tests/config.yaml not found in release $RELEASE_TAG"
echo "has_config=false" >> $GITHUB_OUTPUT
fi
- name: Setup test environment
if: steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
uses: ./.github/actions/setup-test-environment
with:
python-version: '3.12'
client-version: 'latest'
setup: 'ollama'
suite: 'base'
inference-mode: 'replay'
- name: Run integration tests with release config (PR branch)
id: test_release_pr
if: steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
continue-on-error: true
uses: ./.github/actions/run-and-record-tests
with:
stack-config: /tmp/release-ci-tests-config.yaml
setup: 'ollama'
inference-mode: 'replay'
suite: 'base'
- name: Checkout main branch to test baseline
if: steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
run: |
git checkout origin/main
- name: Setup test environment for main
if: steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
uses: ./.github/actions/setup-test-environment
with:
python-version: '3.12'
client-version: 'latest'
setup: 'ollama'
suite: 'base'
inference-mode: 'replay'
- name: Run integration tests with release config (main branch)
id: test_release_main
if: steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
continue-on-error: true
uses: ./.github/actions/run-and-record-tests
with:
stack-config: /tmp/release-ci-tests-config.yaml
setup: 'ollama'
inference-mode: 'replay'
suite: 'base'
- name: Report results and post PR comment
if: always() && steps.get_release.outputs.has_release == 'true' && steps.extract_config.outputs.has_config == 'true'
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
PR_OUTCOME="${{ steps.test_release_pr.outcome }}"
MAIN_OUTCOME="${{ steps.test_release_main.outcome }}"
if [[ "$PR_OUTCOME" == "failure" && "$MAIN_OUTCOME" == "success" ]]; then
# NEW breaking change - PR fails but main passes
echo "::error::🚨 This PR introduces a NEW breaking change!"
# Check if we already posted a comment (to avoid spam on every push)
EXISTING_COMMENT=$(gh pr view ${{ github.event.pull_request.number }} --json comments --jq '.comments[] | select(.body | contains("🚨 New Breaking Change Detected") and contains("Integration tests")) | .id' | head -1)
if [[ -z "$EXISTING_COMMENT" ]]; then
gh pr comment ${{ github.event.pull_request.number }} --body "## 🚨 New Breaking Change Detected
**Integration tests against release \`$RELEASE_TAG\` are now failing**
⚠️ This PR introduces a breaking change that affects compatibility with the latest release.
- Users on release \`$RELEASE_TAG\` may not be able to upgrade
- Existing configurations may break
The tests pass on \`main\` but fail with this PR's changes.
> **Note:** This is informational only and does not block merge.
> Consider whether this breaking change is acceptable for users." || echo "Could not post PR comment (expected for fork PRs)"
else
echo "Comment already exists, skipping to avoid spam"
fi
cat >> $GITHUB_STEP_SUMMARY <<EOF
## 🚨 NEW Breaking Change Detected
**Integration tests against release \`$RELEASE_TAG\` FAILED**
⚠️ **This PR introduces a NEW breaking change**
- Tests **PASS** on main branch ✅
- Tests **FAIL** on PR branch ❌
- Users on release \`$RELEASE_TAG\` may not be able to upgrade
- Existing configurations may break
> **Note:** This is informational only and does not block merge.
> Consider whether this breaking change is acceptable for users.
EOF
elif [[ "$PR_OUTCOME" == "failure" ]]; then
# Existing breaking change - both PR and main fail
echo "::warning::Breaking change already exists in main branch"
cat >> $GITHUB_STEP_SUMMARY <<EOF
## ⚠️ Release Compatibility Test Failed (Existing Issue)
**Integration tests against release \`$RELEASE_TAG\` FAILED**
- Tests **FAIL** on main branch ❌
- Tests **FAIL** on PR branch ❌
- This breaking change already exists in main (not introduced by this PR)
> **Note:** This is informational only.
EOF
else
# Success - tests pass
cat >> $GITHUB_STEP_SUMMARY <<EOF
## ✅ Release Compatibility Test Passed
Integration tests against release \`$RELEASE_TAG\` passed successfully.
This PR maintains compatibility with the latest release.
EOF
fi
env:
GH_TOKEN: ${{ github.token }}
check-schema-release-compatibility:
name: Check Schema Compatibility with Latest Release (Informational)
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
with:
enable-cache: true
- name: Install dependencies
run: |
uv sync --group dev
- name: Get latest release
id: get_release
run: |
# Get the latest release from GitHub
LATEST_TAG=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' 2>/dev/null || echo "")
if [ -z "$LATEST_TAG" ]; then
echo "No releases found, skipping release compatibility check"
echo "has_release=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Latest release: $LATEST_TAG"
echo "has_release=true" >> $GITHUB_OUTPUT
echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
- name: Extract configs from release
if: steps.get_release.outputs.has_release == 'true'
id: extract_release_configs
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
# Get config.yaml files from the release (try both src/ and old path)
CONFIG_PATHS=$(git ls-tree -r --name-only "$RELEASE_TAG" | grep "llama_stack/distributions/.*/config.yaml$" || true)
if [ -z "$CONFIG_PATHS" ]; then
echo "::warning::No config.yaml files found in release $RELEASE_TAG"
echo "has_configs=false" >> $GITHUB_OUTPUT
exit 0
fi
# Extract all configs to a temp directory
mkdir -p /tmp/release_configs
echo "Extracting configs from release $RELEASE_TAG:"
while IFS= read -r config_path; do
if [ -z "$config_path" ]; then
continue
fi
filename=$(basename $(dirname "$config_path"))
echo " - $filename (from $config_path)"
git show "$RELEASE_TAG:$config_path" > "/tmp/release_configs/${filename}.yaml" 2>/dev/null || true
done <<< "$CONFIG_PATHS"
echo ""
echo "Extracted $(ls /tmp/release_configs/*.yaml 2>/dev/null | wc -l) config files"
echo "has_configs=true" >> $GITHUB_OUTPUT
- name: Test against release configs (PR branch)
id: test_schema_pr
if: steps.get_release.outputs.has_release == 'true' && steps.extract_release_configs.outputs.has_configs == 'true'
continue-on-error: true
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
COMPAT_TEST_CONFIGS_DIR=/tmp/release_configs uv run pytest tests/backward_compat/test_run_config.py -v --tb=short
- name: Checkout main branch to test baseline
if: steps.get_release.outputs.has_release == 'true' && steps.extract_release_configs.outputs.has_configs == 'true'
run: |
git checkout origin/main
- name: Install dependencies for main
if: steps.get_release.outputs.has_release == 'true' && steps.extract_release_configs.outputs.has_configs == 'true'
run: |
uv sync --group dev
- name: Test against release configs (main branch)
id: test_schema_main
if: steps.get_release.outputs.has_release == 'true' && steps.extract_release_configs.outputs.has_configs == 'true'
continue-on-error: true
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
COMPAT_TEST_CONFIGS_DIR=/tmp/release_configs uv run pytest tests/backward_compat/test_run_config.py -v --tb=short
- name: Report results and post PR comment
if: always() && steps.get_release.outputs.has_release == 'true' && steps.extract_release_configs.outputs.has_configs == 'true'
run: |
RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
PR_OUTCOME="${{ steps.test_schema_pr.outcome }}"
MAIN_OUTCOME="${{ steps.test_schema_main.outcome }}"
if [[ "$PR_OUTCOME" == "failure" && "$MAIN_OUTCOME" == "success" ]]; then
# NEW breaking change - PR fails but main passes
echo "::error::🚨 This PR introduces a NEW schema breaking change!"
# Check if we already posted a comment (to avoid spam on every push)
EXISTING_COMMENT=$(gh pr view ${{ github.event.pull_request.number }} --json comments --jq '.comments[] | select(.body | contains("🚨 New Schema Breaking Change Detected")) | .id' | head -1)
if [[ -z "$EXISTING_COMMENT" ]]; then
gh pr comment ${{ github.event.pull_request.number }} --body "## 🚨 New Schema Breaking Change Detected
**Schema validation against release \`$RELEASE_TAG\` is now failing**
⚠️ This PR introduces a schema breaking change that affects compatibility with the latest release.
- Users on release \`$RELEASE_TAG\` will not be able to upgrade
- Existing config.yaml configurations will fail validation
The tests pass on \`main\` but fail with this PR's changes.
> **Note:** This is informational only and does not block merge.
> Consider whether this breaking change is acceptable for users." || echo "Could not post PR comment (expected for fork PRs)"
else
echo "Comment already exists, skipping to avoid spam"
fi
cat >> $GITHUB_STEP_SUMMARY <<EOF
## 🚨 NEW Schema Breaking Change Detected
**Schema validation against release \`$RELEASE_TAG\` FAILED**
⚠️ **This PR introduces a NEW schema breaking change**
- Tests **PASS** on main branch ✅
- Tests **FAIL** on PR branch ❌
- Users on release \`$RELEASE_TAG\` will not be able to upgrade
- Existing config.yaml configurations will fail validation
> **Note:** This is informational only and does not block merge.
> Consider whether this breaking change is acceptable for users.
EOF
elif [[ "$PR_OUTCOME" == "failure" ]]; then
# Existing breaking change - both PR and main fail
echo "::warning::Schema breaking change already exists in main branch"
cat >> $GITHUB_STEP_SUMMARY <<EOF
## ⚠️ Release Schema Compatibility Failed (Existing Issue)
**Schema validation against release \`$RELEASE_TAG\` FAILED**
- Tests **FAIL** on main branch ❌
- Tests **FAIL** on PR branch ❌
- This schema breaking change already exists in main (not introduced by this PR)
> **Note:** This is informational only.
EOF
else
# Success - tests pass
cat >> $GITHUB_STEP_SUMMARY <<EOF
## ✅ Release Schema Compatibility Passed
All config.yaml configs from release \`$RELEASE_TAG\` are compatible.
This PR maintains backward compatibility with the latest release.
EOF
fi
env:
GH_TOKEN: ${{ github.token }}
================================================
FILE: .github/workflows/build-distributions.yml
================================================
name: Build Distribution Images
on:
workflow_dispatch:
inputs:
version:
description: 'Distribution version tag (e.g., "0.2.12" or "latest")'
required: true
type: string
distributions:
description: 'Comma-separated list of distributions to build (leave empty for all)'
required: false
type: string
platforms:
description: 'Comma-separated list of platforms (default: linux/amd64,linux/arm64)'
required: false
type: string
default: 'linux/amd64,linux/arm64'
permissions:
contents: read
actions: write
env:
IMAGE_PREFIX: llamastack/distribution
jobs:
generate-matrix:
runs-on: ubuntu-latest
outputs:
distros: ${{ steps.set-matrix.outputs.distros }}
version: ${{ steps.set-version.outputs.version }}
platforms: ${{ steps.set-platforms.outputs.platforms }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set version
id: set-version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
version="${{ github.event.inputs.version }}"
else
# Extract version from tag (e.g., v0.2.12 -> 0.2.12)
version="${GITHUB_REF#refs/tags/v}"
fi
echo "version=$version" >> $GITHUB_OUTPUT
echo "Building for version: $version"
- name: Set platforms
id: set-platforms
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.platforms }}" ]; then
platforms="${{ github.event.inputs.platforms }}"
else
platforms="linux/amd64,linux/arm64"
fi
echo "platforms=$platforms" >> $GITHUB_OUTPUT
echo "Building for platforms: $platforms"
- name: Generate Distribution List
id: set-matrix
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.distributions }}" ]; then
# Use provided distributions
distros=$(echo "${{ github.event.inputs.distributions }}" | tr ',' '\n' | jq -R -s -c 'split("\n") | map(select(length > 0))')
else
# Get all distributions, excluding ci-tests and __pycache__
distros=$(ls src/llama_stack/distributions/*/*build.yaml 2>/dev/null | \
awk -F'/' '{print $(NF-1)}' | \
grep -v '^ci-tests$' | \
grep -v '^__pycache__$' | \
jq -R -s -c 'split("\n") | map(select(length > 0))')
fi
echo "distros=$distros" >> $GITHUB_OUTPUT
echo "Building distributions: $distros"
build:
needs: generate-matrix
runs-on: ubuntu-24.04
strategy:
matrix:
distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }}
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd
- name: Build distribution image
env:
DISTRO_NAME: ${{ matrix.distro }}
IMAGE_TAG: ${{ needs.generate-matrix.outputs.version }}
PLATFORMS: ${{ needs.generate-matrix.outputs.platforms }}
run: |
LOCAL_IMAGE_NAME="${IMAGE_PREFIX}-${DISTRO_NAME}:${IMAGE_TAG}"
echo "Verifying build for: ${LOCAL_IMAGE_NAME}"
echo "Requested platforms: ${PLATFORMS}"
# Build arguments
BUILD_ARGS="--build-arg INSTALL_MODE=pypi --build-arg DISTRO_NAME=${DISTRO_NAME}"
# Add UV index configuration if available (for release branches)
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="${BUILD_ARGS} --build-arg UV_EXTRA_INDEX_URL=${UV_EXTRA_INDEX_URL}"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="${BUILD_ARGS} --build-arg UV_INDEX_STRATEGY=${UV_INDEX_STRATEGY}"
fi
# Build for native platform only (--load only works for single platform)
# This verifies the build works, but maintainers should build multi-arch manually
docker buildx build \
--platform linux/amd64 \
--load \
-f containers/Containerfile \
${BUILD_ARGS} \
--tag "${LOCAL_IMAGE_NAME}" \
.
echo "Successfully built: ${LOCAL_IMAGE_NAME}"
================================================
FILE: .github/workflows/ci-status.yml
================================================
name: CI Status
run-name: Aggregate CI check status
on:
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
ci-status:
runs-on: ubuntu-latest
timeout-minutes: 60
permissions:
checks: read
steps:
- name: Wait for CI checks to complete
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const sha = context.payload.pull_request?.head.sha ?? context.sha;
const owner = context.repo.owner;
const repo = context.repo.repo;
// Wait for other workflows to get queued
core.info('Waiting 60s for CI workflows to get queued...');
await new Promise(r => setTimeout(r, 60000));
const excludedChecks = new Set([
'ci-status',
'Run Integration Tests with Latest Release (Informational)',
'Check Schema Compatibility with Latest Release (Informational)',
]);
const excludedApps = new Set(['mergify']);
const terminalStatuses = new Set(['completed']);
const successConclusions = new Set(['success', 'skipped', 'neutral']);
const failureConclusions = new Set(['failure', 'cancelled', 'timed_out']);
while (true) {
const { data: checkRuns } = await github.rest.checks.listForRef({
owner,
repo,
ref: sha,
per_page: 100,
});
// Filter to only GitHub Actions checks, excluding ourselves and bots
const relevant = checkRuns.check_runs.filter(cr => {
if (excludedChecks.has(cr.name)) return false;
if (cr.app && excludedApps.has(cr.app.slug)) return false;
// Only include GitHub Actions checks
if (!cr.app || cr.app.slug !== 'github-actions') return false;
return true;
});
if (relevant.length === 0) {
core.info('No other CI checks found yet, waiting...');
await new Promise(r => setTimeout(r, 30000));
continue;
}
const pending = relevant.filter(cr => !terminalStatuses.has(cr.status));
const completed = relevant.filter(cr => terminalStatuses.has(cr.status));
core.info(`Checks: ${completed.length} completed, ${pending.length} pending out of ${relevant.length} total`);
for (const cr of completed) {
core.info(` ✓ ${cr.name}: ${cr.conclusion}`);
}
for (const cr of pending) {
core.info(` ⏳ ${cr.name}: ${cr.status}`);
}
if (pending.length > 0) {
core.info('Waiting 30s for pending checks...');
await new Promise(r => setTimeout(r, 30000));
continue;
}
// All checks completed — evaluate conclusions
const failed = completed.filter(cr => failureConclusions.has(cr.conclusion));
if (failed.length > 0) {
for (const cr of failed) {
core.error(`${cr.name} concluded with: ${cr.conclusion}`);
}
core.setFailed(`${failed.length} CI check(s) failed.`);
return;
}
const succeeded = completed.filter(cr => successConclusions.has(cr.conclusion));
core.info(`All ${succeeded.length} CI checks passed.`);
return;
}
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL Workflow Security Scan"
on:
pull_request:
# PRs are checked for new issues
branches: [ "main" ]
# Limit scans to changes in the .github directory, bash scripts are not scanned anyway
paths:
- '.github/**'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# actions is the most specific language option for
# codeql does NOT support Bash
# In case javascript is used in workflows, that should be added or replace
language: [ 'actions' ]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
# Initializes CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v3
with:
languages: ${{ matrix.language }}
# "security-extended" is recommended for higher severity coverage - not necessary can be removed to speed up
queries: security-extended
# Scans the code and uploads results to GitHub Security tab.
# The "Fail on High" logic is handled by Branch Protection Rules in Settings
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v3
with:
category: "/language:${{ matrix.language }}"
================================================
FILE: .github/workflows/commit-recordings.yml
================================================
# Commits recordings from the record-integration-tests.yml workflow back to PRs.
# This workflow runs with elevated permissions but only executes trusted code from the base repo.
# Triggered via workflow_run after record-integration-tests.yml completes successfully.
name: Commit Recordings
on:
workflow_run:
workflows: ["Integration Tests (Record)"]
types:
- completed
permissions:
contents: write
pull-requests: write
actions: read
jobs:
commit-recordings:
runs-on: ubuntu-latest
# Only run if the recording workflow succeeded
if: github.event.workflow_run.conclusion == 'success'
steps:
- name: Download workflow artifacts
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
const fs = require('fs');
const path = require('path');
// Download all recording artifacts
for (const artifact of artifacts.data.artifacts) {
if (artifact.name.startsWith('recordings-')) {
console.log(`Downloading artifact: ${artifact.name}`);
const download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: artifact.id,
archive_format: 'zip',
});
const artifactPath = path.join(process.env.GITHUB_WORKSPACE, `${artifact.name}.zip`);
fs.writeFileSync(artifactPath, Buffer.from(download.data));
}
}
- name: Extract artifacts
run: |
mkdir -p recordings-temp
for zipfile in recordings-*.zip; do
if [ -f "$zipfile" ]; then
echo "Extracting $zipfile"
unzip -o "$zipfile" -d recordings-temp/
fi
done
- name: Download PR metadata artifact
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
const metadataArtifact = artifacts.data.artifacts.find(a => a.name.startsWith('pr-metadata-'));
if (metadataArtifact) {
console.log(`Found PR metadata artifact: ${metadataArtifact.name}`);
const download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: metadataArtifact.id,
archive_format: 'zip',
});
const fs = require('fs');
fs.writeFileSync('pr-metadata.zip', Buffer.from(download.data));
} else {
console.log('No PR metadata artifact found');
}
- name: Extract PR metadata
run: |
if [ -f pr-metadata.zip ]; then
unzip -o pr-metadata.zip
echo "PR metadata contents:"
cat pr-info.json
else
echo "No PR metadata file to extract"
fi
- name: Get PR information
id: pr-info
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const fs = require('fs');
let prNumber = null;
let headRepo = null;
let headRef = null;
let headSha = null;
// Try to load from metadata artifact first
if (fs.existsSync('pr-info.json')) {
try {
const metadata = JSON.parse(fs.readFileSync('pr-info.json', 'utf8'));
prNumber = parseInt(metadata.pr_number, 10);
headRepo = metadata.pr_head_repo;
headRef = metadata.pr_head_ref;
headSha = metadata.pr_head_sha;
console.log(`Loaded PR info from metadata: PR #${prNumber}`);
} catch (e) {
console.log(`Failed to parse metadata: ${e.message}`);
}
}
// Fallback: check if triggered by pull_request event
if (!prNumber) {
const runInfo = await github.rest.actions.getWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.event.workflow_run.id }},
});
if (runInfo.data.event === 'pull_request' && runInfo.data.pull_requests.length > 0) {
const pr = runInfo.data.pull_requests[0];
prNumber = pr.number;
const prData = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
headRepo = prData.data.head.repo.full_name;
headRef = prData.data.head.ref;
headSha = prData.data.head.sha;
} else {
console.log('No PR metadata and not a pull_request event, skipping commit');
core.setOutput('skip', 'true');
return;
}
}
core.setOutput('pr_number', prNumber);
core.setOutput('head_repo', headRepo);
core.setOutput('head_ref', headRef);
core.setOutput('head_sha', headSha);
core.setOutput('is_fork_pr', headRepo !== `${context.repo.owner}/${context.repo.repo}`);
- name: Preserve artifacts before checkout
if: steps.pr-info.outputs.skip != 'true' && steps.pr-info.outputs.is_fork_pr != 'true'
run: mv recordings-temp /tmp/recordings-temp 2>/dev/null || true
- name: Checkout PR branch (same-repo)
if: steps.pr-info.outputs.skip != 'true' && steps.pr-info.outputs.is_fork_pr != 'true'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ steps.pr-info.outputs.head_repo }}
ref: ${{ steps.pr-info.outputs.head_ref }}
fetch-depth: 0
token: ${{ github.token }}
- name: Restore artifacts after checkout
if: steps.pr-info.outputs.skip != 'true' && steps.pr-info.outputs.is_fork_pr != 'true'
run: mv /tmp/recordings-temp recordings-temp 2>/dev/null || true
- name: Checkout PR branch (fork)
if: steps.pr-info.outputs.skip != 'true' && steps.pr-info.outputs.is_fork_pr == 'true'
env:
# RELEASE_PAT has repo scope, which allows cloning and pushing to fork
# PR branches when maintainerCanModify is enabled. github.token can't do this.
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
HEAD_REPO: ${{ steps.pr-info.outputs.head_repo }}
HEAD_REF: ${{ steps.pr-info.outputs.head_ref }}
run: |
# Move artifacts out of the way before cloning, then restore after.
mv recordings-temp /tmp/recordings-temp 2>/dev/null || true
# Clean up workspace files (artifacts, metadata) to ensure empty directory for clone
rm -f recordings-*.zip pr-metadata.zip pr-info.json
git clone --depth 1 --branch "${HEAD_REF}" "https://x-access-token:${GH_TOKEN}@github.com/${HEAD_REPO}.git" .
mv /tmp/recordings-temp recordings-temp 2>/dev/null || true
- name: Copy recordings to repo
if: steps.pr-info.outputs.skip != 'true'
run: |
if [ -d "recordings-temp" ]; then
echo "Copying recordings from artifacts to repo"
# Handle old artifact structure (if tests/integration path exists)
if [ -d "recordings-temp/tests/integration" ]; then
echo "Using old artifact structure (tests/integration/...)"
if [ -d "recordings-temp/tests/integration/recordings" ]; then
mkdir -p "tests/integration/recordings"
cp -r recordings-temp/tests/integration/recordings/* tests/integration/recordings/ 2>/dev/null || true
fi
for dir in recordings-temp/tests/integration/*/recordings/; do
if [ -d "$dir" ]; then
module_dir=$(basename $(dirname "$dir"))
echo "Copying recordings for $module_dir"
mkdir -p "tests/integration/$module_dir/recordings"
cp -r "$dir"* "tests/integration/$module_dir/recordings/" 2>/dev/null || true
fi
done
else
# Handle new flattened artifact structure (*/recordings/)
echo "Using flattened artifact structure (*/recordings/)"
for dir in recordings-temp/*/recordings/; do
if [ -d "$dir" ]; then
module_dir=$(basename $(dirname "$dir"))
echo "Copying recordings for $module_dir"
mkdir -p "tests/integration/$module_dir/recordings"
cp -r "$dir"* "tests/integration/$module_dir/recordings/" 2>/dev/null || true
fi
done
# Also handle top-level recordings directory if it exists
if [ -d "recordings-temp/recordings" ]; then
echo "Copying top-level recordings"
mkdir -p "tests/integration/recordings"
cp -r recordings-temp/recordings/* tests/integration/recordings/ 2>/dev/null || true
fi
fi
fi
- name: Commit and push recordings
id: commit
if: steps.pr-info.outputs.skip != 'true'
env:
GH_TOKEN: ${{ steps.pr-info.outputs.is_fork_pr == 'true' && secrets.RELEASE_PAT || github.token }}
PR_NUMBER: ${{ steps.pr-info.outputs.pr_number }}
HEAD_REPO: ${{ steps.pr-info.outputs.head_repo }}
HEAD_REF: ${{ steps.pr-info.outputs.head_ref }}
IS_FORK_PR: ${{ steps.pr-info.outputs.is_fork_pr }}
BASE_REPO: ${{ github.repository }}
run: |
# Configure git
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# Check if there are recording changes
if [[ -z $(git status --porcelain tests/integration/recordings/ tests/integration/*/recordings/) ]]; then
echo "No recording changes to commit"
echo "pushed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
echo "Recording changes detected, committing..."
git add tests/integration/recordings/ tests/integration/*/recordings/
git commit -m "Recordings update from CI
Co-Authored-By: github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
# Push to PR branch
if [ "$IS_FORK_PR" = "true" ]; then
echo "This is a fork PR, checking maintainer permissions..."
# Check if maintainer can modify
MAINTAINER_CAN_MODIFY=$(gh pr view "$PR_NUMBER" --repo "$BASE_REPO" --json maintainerCanModify --jq '.maintainerCanModify')
if [ "$MAINTAINER_CAN_MODIFY" = "true" ]; then
echo "Maintainer can modify - pushing to fork PR branch"
git push "https://x-access-token:${GH_TOKEN}@github.com/${HEAD_REPO}.git" "HEAD:${HEAD_REF}"
echo "Successfully pushed recordings to fork PR"
echo "pushed=true" >> "$GITHUB_OUTPUT"
else
echo "::warning::Cannot push to fork PR: 'Allow edits from maintainers' is not enabled"
echo "::warning::Contributor needs to check 'Allow edits from maintainers' when creating the PR"
echo "pushed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
else
echo "Pushing to same-repo PR branch: $HEAD_REF"
git push origin "HEAD:${HEAD_REF}"
echo "Successfully pushed recordings"
echo "pushed=true" >> "$GITHUB_OUTPUT"
fi
- name: Comment on PR
if: steps.commit.outputs.pushed == 'true'
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
env:
PR_NUMBER: ${{ steps.pr-info.outputs.pr_number }}
with:
script: |
const prNumber = parseInt(process.env.PR_NUMBER, 10);
const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const COMMENT_MARKER = '<!-- commit-recordings-bot -->';
const message = `${COMMENT_MARKER}\n✅ **Recordings committed successfully**\n\nRecordings from the integration tests have been committed to this PR.\n\n[View commit workflow](${runUrl})`;
try {
// Find existing bot comment
let existing = null;
for await (const response of github.paginate.iterator(github.rest.issues.listComments, {
issue_number: prNumber,
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100,
})) {
existing = response.data.find(c => c.body.includes(COMMENT_MARKER));
if (existing) break;
}
if (existing) {
await github.rest.issues.updateComment({
comment_id: existing.id,
owner: context.repo.owner,
repo: context.repo.repo,
body: message,
});
} else {
await github.rest.issues.createComment({
issue_number: prNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: message,
});
}
} catch (error) {
core.warning(`Could not post PR comment: ${error.message}`);
}
================================================
FILE: .github/workflows/docs-build.yml
================================================
name: Documentation Build
run-name: Build and validate documentation
on:
schedule:
- cron: '0 0 * * *' # Daily at 12 AM UTC
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
docs-build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [22]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: 'docs/package-lock.json'
- name: Cache node_modules
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
id: cache-node-modules
with:
path: docs/node_modules
key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('docs/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-${{ matrix.node-version }}-modules-
- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
working-directory: docs
run: npm ci
- name: Generate API documentation
working-directory: docs
run: npm run gen-api-docs all
- name: Build documentation
working-directory: docs
run: npm run build
- name: Upload build artifacts
if: success()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: docs-build
path: docs/build/
retention-days: 7
================================================
FILE: .github/workflows/install-script-ci.yml
================================================
name: Installer CI
run-name: Test the installation script
on:
pull_request:
paths:
- 'scripts/install.sh'
push:
paths:
- 'scripts/install.sh'
schedule:
- cron: '0 2 * * *' # every day at 02:00 UTC
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
- name: Run ShellCheck on install.sh
run: shellcheck scripts/install.sh
smoke-test-on-dev:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Build a single provider
run: |
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=starter"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker build . \
-f containers/Containerfile \
$BUILD_ARGS \
--tag llama-stack:starter-ci
- name: Run installer end-to-end
run: |
IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1)
./scripts/install.sh --image $IMAGE_ID
================================================
FILE: .github/workflows/integration-auth-tests.yml
================================================
name: Integration Auth Tests
run-name: Run the integration test suite with Kubernetes authentication
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'distributions/**'
- 'src/llama_stack/**'
- '!src/llama_stack_ui/**'
- 'tests/integration/**'
- 'uv.lock'
- 'pyproject.toml'
- 'requirements.txt'
- '.github/workflows/integration-auth-tests.yml' # This workflow
- 'scripts/integration-auth-tests.sh'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
test-matrix:
runs-on: ubuntu-latest
strategy:
matrix:
auth-provider: [oauth2_token]
fail-fast: false # we want to run all tests regardless of failure
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Install minikube
if: ${{ matrix.auth-provider == 'kubernetes' }}
uses: medyagh/setup-minikube@e9e035a86bbc3caea26a450bd4dbf9d0c453682e # v0.0.21
- name: Start minikube
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
minikube start
kubectl get pods -A
- name: Configure Kube Auth
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
kubectl create namespace llama-stack
for account in llama-stack-auth llama-stack-user1 llama-stack-user2; do
kubectl create serviceaccount $account -n llama-stack
kubectl create token $account -n llama-stack > $account-token
done
- name: Set Kubernetes Config
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
echo "KUBERNETES_API_SERVER_URL=$(kubectl get --raw /.well-known/openid-configuration| jq -r .jwks_uri)" >> $GITHUB_ENV
echo "KUBERNETES_CA_CERT_PATH=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.certificate-authority}')" >> $GITHUB_ENV
echo "KUBERNETES_ISSUER=$(kubectl get --raw /.well-known/openid-configuration| jq -r .issuer)" >> $GITHUB_ENV
echo "KUBERNETES_AUDIENCE=$(kubectl create token llama-stack-auth -n llama-stack --duration=1h | cut -d. -f2 | base64 -d | jq -r '.aud[0]')" >> $GITHUB_ENV
echo "TOKEN=$(cat llama-stack-auth-token)" >> $GITHUB_ENV
- name: Set Kube Auth Config and run server
env:
INFERENCE_MODEL: "meta-llama/Llama-3.2-3B-Instruct"
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
run_dir=$(mktemp -d)
cat <<EOF > $run_dir/config.yaml
version: '2'
image_name: kube
distro_name: kube
apis:
- files
- inference
providers:
files:
- provider_id: builtin-files
provider_type: inline::localfs
config:
storage_dir: $run_dir/files
metadata_store:
table_name: files_metadata
backend: sql_default
storage:
backends:
kv_default:
type: kv_sqlite
db_path: $run_dir/kvstore.db
sql_default:
type: sql_sqlite
db_path: $run_dir/sql_store.db
stores:
metadata:
namespace: registry
backend: kv_default
inference:
table_name: inference_store
backend: sql_default
conversations:
table_name: openai_conversations
backend: sql_default
prompts:
namespace: prompts
backend: kv_default
server:
port: 8321
auth:
access_policy:
- permit:
actions: [read, delete]
resource: sql_record::openai_files::*
when:
- user with system:serviceaccount:llama-stack:llama-stack-user1 in roles
- user in owners roles
description: User1 can read and delete their Files
- permit:
actions: [read]
resource: regex:sql_record::openai_files::file-[a-f0-9-]+
when:
- user in owners roles
description: Owners can read their Files
route_policy:
- permit:
paths: ["/v1/health", "/v1/version"]
description: Public endpoints (no auth required)
- permit:
paths: regex:^/v1/(files|providers)(/.*)?$
description: Authenticated users can access files and providers endpoints (regex test)
- forbid:
paths: "*"
description: Forbid all other routes by default
EOF
yq eval '.server.auth.provider_config.type = "${{ matrix.auth-provider }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.tls_cafile = "${{ env.KUBERNETES_CA_CERT_PATH }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.issuer = "${{ env.KUBERNETES_ISSUER }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.audience = "${{ env.KUBERNETES_AUDIENCE }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.jwks.uri = "${{ env.KUBERNETES_API_SERVER_URL }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.jwks.token = "${{ env.TOKEN }}"' -i $run_dir/config.yaml
cat $run_dir/config.yaml
# avoid line breaks in the server log, especially because we grep it below.
export LLAMA_STACK_LOG_WIDTH=200
nohup uv run llama stack run $run_dir/config.yaml > server.log 2>&1 &
- name: Wait for Llama Stack server to be ready
run: |
echo "Waiting for Llama Stack server..."
for i in {1..30}; do
# Note: /v1/health does not require authentication
if curl -s -L http://localhost:8321/v1/health | grep -q "OK"; then
echo "Llama Stack server is up!"
if grep -q "Enabling authentication with provider: ${{ matrix.auth-provider }}" server.log; then
echo "Llama Stack server is configured to use ${{ matrix.auth-provider }} auth"
exit 0
else
echo "Llama Stack server is not configured to use ${{ matrix.auth-provider }} auth"
cat server.log
exit 1
fi
fi
sleep 1
done
echo "Llama Stack server failed to start"
cat server.log
exit 1
- name: Test auth
run: |
# Run the auth tests
./scripts/integration-auth-tests.sh
================================================
FILE: .github/workflows/integration-responses-conversations-auth-tests.yml
================================================
name: Integration Responses & Conversations Auth Tests
run-name: Run responses and conversations auth tests with Kubernetes authentication
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'distributions/**'
- 'src/llama_stack/**'
- '!src/llama_stack_ui/**'
- 'tests/integration/**'
- 'uv.lock'
- 'pyproject.toml'
- 'requirements.txt'
- '.github/workflows/integration-responses-conversations-auth-tests.yml' # This workflow
- 'scripts/integration-responses-conversations-auth-tests.sh'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
test-matrix:
runs-on: ubuntu-latest
strategy:
matrix:
auth-provider: [oauth2_token]
fail-fast: false # we want to run all tests regardless of failure
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Install minikube
if: ${{ matrix.auth-provider == 'kubernetes' }}
uses: medyagh/setup-minikube@e9e035a86bbc3caea26a450bd4dbf9d0c453682e # v0.0.21
- name: Start minikube
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
minikube start
kubectl get pods -A
- name: Configure Kube Auth
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
kubectl create namespace llama-stack
for account in llama-stack-auth llama-stack-user1 llama-stack-user2; do
kubectl create serviceaccount $account -n llama-stack
kubectl create token $account -n llama-stack > $account-token
done
- name: Set Kubernetes Config
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
echo "KUBERNETES_API_SERVER_URL=$(kubectl get --raw /.well-known/openid-configuration| jq -r .jwks_uri)" >> $GITHUB_ENV
echo "KUBERNETES_CA_CERT_PATH=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.certificate-authority}')" >> $GITHUB_ENV
echo "KUBERNETES_ISSUER=$(kubectl get --raw /.well-known/openid-configuration| jq -r .issuer)" >> $GITHUB_ENV
echo "KUBERNETES_AUDIENCE=$(kubectl create token llama-stack-auth -n llama-stack --duration=1h | cut -d. -f2 | base64 -d | jq -r '.aud[0]')" >> $GITHUB_ENV
echo "TOKEN=$(cat llama-stack-auth-token)" >> $GITHUB_ENV
- name: List response recordings (replay)
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
echo "Response recordings in checkout:"
ls -la tests/integration/responses/recordings/ || true
- name: Set Kube Auth Config and run server
env:
OPENAI_API_KEY: "dummy-key-for-replay-mode"
# Enable replay so the server uses checked-in recordings instead of calling the API
LLAMA_STACK_TEST_INFERENCE_MODE: "replay"
# Pin recording dir to workspace so the server finds tests/integration/*/recordings/
LLAMA_STACK_TEST_RECORDING_DIR: ${{ github.workspace }}/tests/integration/common
# Tell the server to sync test context from client headers so recordings
# are looked up in the correct per-test-directory (e.g. responses/recordings/)
LLAMA_STACK_TEST_STACK_CONFIG_TYPE: "server"
if: ${{ matrix.auth-provider == 'oauth2_token' }}
run: |
run_dir=$(mktemp -d)
cat <<EOF > $run_dir/config.yaml
version: '2'
image_name: kube
distro_name: kube
apis:
- files
- inference
- vector_io
- tool_runtime
- agents
providers:
files:
- provider_id: builtin-files
provider_type: inline::localfs
config:
storage_dir: $run_dir/files
metadata_store:
table_name: files_metadata
backend: sql_default
inference:
- provider_id: openai
provider_type: remote::openai
config:
api_key: \${env.OPENAI_API_KEY}
vector_io:
- provider_id: faiss
provider_type: inline::faiss
config:
persistence:
namespace: vector_io::faiss
backend: kv_default
tool_runtime:
- provider_id: rag-runtime
provider_type: inline::rag-runtime
config: {}
agents:
- provider_id: builtin
provider_type: inline::builtin
config:
persistence:
agent_state:
namespace: agents
backend: kv_default
responses:
table_name: responses
backend: sql_default
max_write_queue_size: 10000
num_writers: 4
storage:
backends:
kv_default:
type: kv_sqlite
db_path: $run_dir/kvstore.db
sql_default:
type: sql_sqlite
db_path: $run_dir/sql_store.db
stores:
metadata:
namespace: registry
backend: kv_default
inference:
table_name: inference_store
backend: sql_default
conversations:
table_name: openai_conversations
backend: sql_default
prompts:
namespace: prompts
backend: kv_default
models:
- model_id: openai/gpt-4o
model_type: llm
provider_id: openai
server:
port: 8321
auth:
access_policy:
- permit:
actions: [read]
resource: model::*
description: Any authenticated user can use configured models (inference, responses)
- permit:
actions: [create]
resource: sql_record::openai_files::*
description: Any authenticated user can create files
- permit:
actions: [read, delete]
resource: sql_record::openai_files::*
when:
- user is owner
description: Users can read and delete their own files
- permit:
actions: [create]
resource: sql_record::openai_conversations::*
description: Any authenticated user can create conversations
- permit:
actions: [read, update, delete]
resource: sql_record::openai_conversations::*
when:
- user is owner
description: Users can access their own conversations
- permit:
actions: [create]
resource: sql_record::conversation_items::*
description: Any authenticated user can create conversation items
- permit:
actions: [read, update, delete]
resource: sql_record::conversation_items::*
when:
- user is owner
description: Users can access items in their own conversations
- permit:
actions: [create]
resource: sql_record::responses::*
description: Any authenticated user can create responses
- permit:
actions: [read, update, delete]
resource: sql_record::responses::*
when:
- user is owner
description: Users can access their own responses
EOF
yq eval '.server.auth.provider_config.type = "${{ matrix.auth-provider }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.tls_cafile = "${{ env.KUBERNETES_CA_CERT_PATH }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.issuer = "${{ env.KUBERNETES_ISSUER }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.audience = "${{ env.KUBERNETES_AUDIENCE }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.jwks.uri = "${{ env.KUBERNETES_API_SERVER_URL }}"' -i $run_dir/config.yaml
yq eval '.server.auth.provider_config.jwks.token = "${{ env.TOKEN }}"' -i $run_dir/config.yaml
cat $run_dir/config.yaml
# avoid line breaks in the server log, especially because we grep it below.
export LLAMA_STACK_LOG_WIDTH=200
# OPENAI_API_KEY is set via env at step level
nohup uv run llama stack run $run_dir/config.yaml > server.log 2>&1 &
- name: Wait for Llama Stack server to be ready
run: |
echo "Waiting for Llama Stack server..."
for i in {1..30}; do
# Note: /v1/health does not require authentication
if curl -s -L http://localhost:8321/v1/health | grep -q "OK"; then
echo "Llama Stack server is up!"
if grep -q "Enabling authentication with provider: ${{ matrix.auth-provider }}" server.log; then
echo "Llama Stack server is configured to use ${{ matrix.auth-provider }} auth"
exit 0
else
echo "Llama Stack server is not configured to use ${{ matrix.auth-provider }} auth"
cat server.log
exit 1
fi
fi
sleep 1
done
echo "Llama Stack server failed to start"
cat server.log
exit 1
- name: Test auth
run: |
export INFERENCE_MODEL=openai/gpt-4o
# Run the auth tests
./scripts/integration-responses-conversations-auth-tests.sh
- name: Server log on failure
if: failure()
run: |
echo "=== Llama Stack server log (last 500 lines) ==="
tail -500 server.log
================================================
FILE: .github/workflows/integration-sql-store-tests.yml
================================================
name: SqlStore Integration Tests
run-name: Run the integration test suite with SqlStore
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'src/llama_stack/providers/utils/sqlstore/**'
- 'tests/integration/sqlstore/**'
- 'uv.lock'
- 'pyproject.toml'
- 'requirements.txt'
- '.github/workflows/integration-sql-store-tests.yml' # This workflow
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
test-postgres:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12", "3.13"]
fail-fast: false
services:
postgres:
image: postgres:15
env:
POSTGRES_USER: llamastack
POSTGRES_PASSWORD: llamastack
POSTGRES_DB: llamastack
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
with:
python-version: ${{ matrix.python-version }}
- name: Run SqlStore Integration Tests
env:
ENABLE_POSTGRES_TESTS: "true"
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_DB: llamastack
POSTGRES_USER: llamastack
POSTGRES_PASSWORD: llamastack
run: |
uv run pytest -sv tests/integration/providers/utils/sqlstore/
- name: Upload test logs
if: ${{ always() }}
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: postgres-test-logs-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.python-version }}
path: |
*.log
retention-days: 1
================================================
FILE: .github/workflows/integration-tests.yml
================================================
name: Integration Tests (Replay)
run-name: Run the integration test suites from tests/integration in replay mode
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
types: [opened, synchronize, reopened]
paths:
- 'src/llama_stack/**'
- '!src/llama_stack_ui/**'
- 'tests/**'
- 'uv.lock'
- 'pyproject.toml'
- '.github/workflows/integration-tests.yml' # This workflow
- '.github/actions/setup-ollama/action.yml'
- '.github/actions/setup-test-environment/action.yml'
- '.github/actions/run-and-record-tests/action.yml'
- 'scripts/integration-tests.sh'
- 'scripts/generate_ci_matrix.py'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
schedule:
# If changing the cron schedule, update the provider in the test-matrix job
- cron: '0 0 * * *' # (test latest client) Daily at 12 AM UTC
workflow_dispatch:
inputs:
test-all-client-versions:
description: 'Test against both the latest and published versions'
type: boolean
default: false
test-setup:
description: 'Test against a specific setup'
type: string
default: 'ollama'
workflow_call:
inputs:
sdk_install_url:
required: false
type: string
description: 'URL to install Python SDK from (for testing preview builds)'
matrix_key:
required: false
type: string
default: 'default'
description: 'Matrix configuration key from ci_matrix.json (e.g., "default", "stainless")'
matrix_json:
required: false
type: string
description: 'Pre-defined matrix JSON. If provided, skips generate_ci_matrix.py execution.'
pr_head_sha:
required: false
type: string
description: 'The SHA of the pull request head to checkout'
pr_head_ref:
required: false
type: string
description: 'The branch name of the pull request head (for recording commits)'
is_fork_pr:
required: false
type: boolean
default: false
description: 'Whether this is a fork PR (cannot push recordings to forks)'
disable_cache:
required: false
type: boolean
default: false
description: 'Disable caching (for security in pull_request_target contexts)'
test-all-client-versions:
required: false
type: boolean
default: false
description: 'Test against both the latest and published versions'
concurrency:
# Skip concurrency for pushes to main - each commit should be tested independently
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
# Limit permissions of the GITHUB_TOKEN to the minimum required.
# Default mode is 'replay' which only needs read access.
# When called via workflow_call (e.g., from stainless-builds.yml with record-if-missing),
# the caller's permissions apply.
permissions:
contents: read
jobs:
generate-matrix:
# Skip matrix generation if matrix_json is provided (e.g., from pull_request_target callers)
if: ${{ inputs.matrix_json == '' }}
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.pr_head_sha || github.event.pull_request.head.sha || github.sha }}
- name: Generate test matrix
id: set-matrix
run: |
# Generate matrix from CI_MATRIX in tests/integration/ci_matrix.json
# Supports schedule-based, manual input, and workflow_call overrides
MATRIX=$(PYTHONPATH=. python3 scripts/generate_ci_matrix.py \
--schedule "${{ github.event.schedule }}" \
--test-setup "${{ github.event.inputs.test-setup || '' }}" \
--matrix-key "${{ inputs.matrix_key || 'default' }}")
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
echo "Generated matrix: $MATRIX"
run-replay-mode-tests:
needs: generate-matrix
# Always run even if generate-matrix was skipped (when matrix_json is provided)
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
# When disable_cache is true, set UV_NO_CACHE to prevent uv from using cached packages.
# This is a security measure for pull_request_target contexts to prevent cache poisoning.
env:
UV_NO_CACHE: ${{ inputs.disable_cache == true }}
name: ${{ format('Integration Tests ({0}, {1}, {2}, client={3}, {4})', matrix.client, matrix.config.setup, matrix.python-version, matrix.client-version, matrix.config.suite) }}
strategy:
fail-fast: false
matrix:
client: [library, docker, server]
# Use Python 3.13 only on nightly schedule (daily latest client test), otherwise use 3.12
python-version: ${{ github.event.schedule == '0 0 * * *' && fromJSON('["3.12", "3.13"]') || fromJSON('["3.12"]') }}
node-version: [22]
client-version: ${{ (github.event.schedule == '0 0 * * *' || github.event.inputs.test-all-client-versions == 'true' || inputs.test-all-client-versions == true) && fromJSON('["published", "latest"]') || fromJSON('["latest"]') }}
# Test configurations: Either from matrix_json input or generated from ci_matrix.json
config: ${{ fromJSON(inputs.matrix_json || needs.generate-matrix.outputs.matrix).include }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.pr_head_sha || github.event.pull_request.head.sha || github.sha }}
# Note: Using full repo path with pinned SHA ensures actions are loaded from
# a trusted commit, not from PR checkout. This is critical for security when
# called from pull_request_target workflows.
- name: Setup test environment
if: ${{ matrix.config.allowed_clients == null || contains(matrix.config.allowed_clients, matrix.client) }}
uses: llamastack/llama-stack/.github/actions/setup-test-environment@d35ac34a22bc87ebf52728793f7081d0cb2d8db7
with:
python-version: ${{ matrix.python-version }}
client-version: ${{ matrix.client-version }}
sdk_install_url: ${{ inputs.sdk_install_url || '' }}
setup: ${{ matrix.config.setup }}
suite: ${{ matrix.config.suite }}
inference-mode: ${{ matrix.config.inference_mode || 'replay' }}
- name: Setup Node.js for TypeScript client tests
if: ${{ matrix.client == 'server' }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: ${{matrix.node-version}}
cache: ${{ inputs.disable_cache && '' || 'npm' }}
cache-dependency-path: tests/integration/client-typescript/package-lock.json
package-manager-cache: ${{ !inputs.disable_cache }}
- name: Setup TypeScript client
if: ${{ matrix.client == 'server' }}
id: setup-ts-client
uses: llamastack/llama-stack/.github/actions/setup-typescript-client@d35ac34a22bc87ebf52728793f7081d0cb2d8db7
with:
client-version: ${{ matrix.client-version }}
- name: Run tests
if: ${{ matrix.config.allowed_clients == null || contains(matrix.config.allowed_clients, matrix.client) }}
uses: llamastack/llama-stack/.github/actions/run-and-record-tests@d35ac34a22bc87ebf52728793f7081d0cb2d8db7
env:
OPENAI_API_KEY: dummy
AZURE_API_KEY: replay-mode-dummy-key
AZURE_API_BASE: https://dummy.openai.azure.com/openai/v1
WATSONX_API_KEY: replay-mode-dummy-key
WATSONX_BASE_URL: https://us-south.ml.cloud.ibm.com
WATSONX_PROJECT_ID: replay-mode-dummy-project
AWS_BEARER_TOKEN_BEDROCK: replay-mode-dummy-key
AWS_DEFAULT_REGION: us-west-2
TS_CLIENT_PATH: ${{ steps.setup-ts-client.outputs.ts-client-path || '' }}
with:
stack-config: >-
${{ matrix.config.stack_config
|| (matrix.client == 'library' && 'ci-tests')
|| (matrix.client == 'server' && 'server:ci-tests')
|| 'docker:ci-tests' }}
setup: ${{ matrix.config.setup }}
inference-mode: ${{ matrix.config.inference_mode || 'replay' }}
suite: ${{ matrix.config.suite }}
target-branch: ${{ inputs.pr_head_ref || '' }}
is-fork-pr: ${{ inputs.is_fork_pr && 'true' || (github.event_name != 'merge_group' && github.event.pull_request.head.repo.full_name != github.repository && 'true' || 'false') }}
================================================
FILE: .github/workflows/integration-vector-io-tests.yml
================================================
name: Vector IO Integration Tests
run-name: Run the integration test suite with various VectorIO providers
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'src/llama_stack/**'
- '!src/llama_stack_ui/**'
- 'tests/integration/vector_io/**'
- 'tests/integration/conftest.py' # Test configuration that affects vector IO tests
- 'uv.lock'
- 'pyproject.toml'
- 'requirements.txt'
- '.github/workflows/integration-vector-io-tests.yml' # This workflow
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
schedule:
- cron: '0 0 * * *' # (test on python 3.13) Daily at 12 AM UTC
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
test-matrix:
runs-on: ubuntu-latest
strategy:
matrix:
vector-io-provider: ["inline::faiss", "inline::sqlite-vec", "inline::milvus", "remote::chromadb", "remote::pgvector", "remote::weaviate", "remote::qdrant", "remote::elasticsearch"]
python-version: ${{ github.event.schedule == '0 0 * * *' && fromJSON('["3.12", "3.13"]') || fromJSON('["3.12"]') }}
fail-fast: false # we want to run all tests regardless of failure
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
with:
python-version: ${{ matrix.python-version }}
- name: Setup Chroma
if: matrix.vector-io-provider == 'remote::chromadb'
run: |
docker run --rm -d --pull always \
--name chromadb \
-p 8000:8000 \
-v ~/chroma:/chroma/chroma \
-e IS_PERSISTENT=TRUE \
-e ANONYMIZED_TELEMETRY=FALSE \
chromadb/chroma:latest
- name: Setup Weaviate
if: matrix.vector-io-provider == 'remote::weaviate'
run: |
docker run --rm -d --pull always \
--name weaviate \
-p 8080:8080 -p 50051:50051 \
cr.weaviate.io/semitechnologies/weaviate:1.32.0
- name: Start PGVector DB
if: matrix.vector-io-provider == 'remote::pgvector'
run: |
docker run -d \
--name pgvector \
-e POSTGRES_USER=llamastack \
-e POSTGRES_PASSWORD=llamastack \
-e POSTGRES_DB=llamastack \
-p 5432:5432 \
pgvector/pgvector:pg17
- name: Wait for PGVector to be ready
if: matrix.vector-io-provider == 'remote::pgvector'
run: |
echo "Waiting for Postgres to be ready..."
for i in {1..30}; do
if docker exec pgvector pg_isready -U llamastack > /dev/null 2>&1; then
echo "Postgres is ready!"
break
fi
echo "Not ready yet... ($i)"
sleep 1
done
- name: Enable pgvector extension
if: matrix.vector-io-provider == 'remote::pgvector'
run: |
PGPASSWORD=llamastack psql -h localhost -U llamastack -d llamastack \
-c "CREATE EXTENSION IF NOT EXISTS vector;"
- name: Setup Qdrant
if: matrix.vector-io-provider == 'remote::qdrant'
run: |
docker run --rm -d --pull always \
--name qdrant \
-p 6333:6333 \
qdrant/qdrant
- name: Wait for Qdrant to be ready
if: matrix.vector-io-provider == 'remote::qdrant'
run: |
echo "Waiting for Qdrant to be ready..."
for i in {1..30}; do
if curl -s http://localhost:6333/collections | grep -q '"status":"ok"'; then
echo "Qdrant is ready!"
exit 0
fi
sleep 2
done
echo "Qdrant failed to start"
docker logs qdrant
exit 1
- name: Wait for ChromaDB to be ready
if: matrix.vector-io-provider == 'remote::chromadb'
run: |
echo "Waiting for ChromaDB to be ready..."
for i in {1..30}; do
if curl -s http://localhost:8000/api/v2/heartbeat | grep -q "nanosecond heartbeat"; then
echo "ChromaDB is ready!"
exit 0
fi
sleep 2
done
echo "ChromaDB failed to start"
docker logs chromadb
exit 1
- name: Wait for Weaviate to be ready
if: matrix.vector-io-provider == 'remote::weaviate'
run: |
echo "Waiting for Weaviate to be ready..."
for i in {1..30}; do
if curl -s http://localhost:8080 | grep -q "https://weaviate.io/developers/weaviate/current/"; then
echo "Weaviate is ready!"
exit 0
fi
sleep 2
done
echo "Weaviate failed to start"
docker logs weaviate
exit 1
- name: Setup Elasticsearch
if: matrix.vector-io-provider == 'remote::elasticsearch'
id: setup-elasticsearch
run: |
curl -fsSL https://elastic.co/start-local | sh -s -- -v 9.2.0 --esonly
source elastic-start-local/.env
echo "ELASTICSEARCH_API_KEY=$ES_LOCAL_API_KEY" >> "$GITHUB_ENV"
- name: Build Llama Stack
run: |
uv run --no-sync llama stack list-deps ci-tests | xargs -L1 uv pip install
- name: Check Storage and Memory Available Before Tests
if: ${{ always() }}
run: |
free -h
df -h
- name: Run Vector IO Integration Tests
env:
ENABLE_CHROMADB: ${{ matrix.vector-io-provider == 'remote::chromadb' && 'true' || '' }}
CHROMADB_URL: ${{ matrix.vector-io-provider == 'remote::chromadb' && 'http://localhost:8000' || '' }}
ENABLE_PGVECTOR: ${{ matrix.vector-io-provider == 'remote::pgvector' && 'true' || '' }}
PGVECTOR_HOST: ${{ matrix.vector-io-provider == 'remote::pgvector' && 'localhost' || '' }}
PGVECTOR_PORT: ${{ matrix.vector-io-provider == 'remote::pgvector' && '5432' || '' }}
PGVECTOR_DB: ${{ matrix.vector-io-provider == 'remote::pgvector' && 'llamastack' || '' }}
PGVECTOR_USER: ${{ matrix.vector-io-provider == 'remote::pgvector' && 'llamastack' || '' }}
PGVECTOR_PASSWORD: ${{ matrix.vector-io-provider == 'remote::pgvector' && 'llamastack' || '' }}
ENABLE_QDRANT: ${{ matrix.vector-io-provider == 'remote::qdrant' && 'true' || '' }}
QDRANT_URL: ${{ matrix.vector-io-provider == 'remote::qdrant' && 'http://localhost:6333' || '' }}
ENABLE_WEAVIATE: ${{ matrix.vector-io-provider == 'remote::weaviate' && 'true' || '' }}
WEAVIATE_CLUSTER_URL: ${{ matrix.vector-io-provider == 'remote::weaviate' && 'localhost:8080' || '' }}
ELASTICSEARCH_URL: ${{ matrix.vector-io-provider == 'remote::elasticsearch' && 'http://localhost:9200' || '' }}
run: |
uv run --no-sync \
pytest -sv --stack-config="files=inline::localfs,inference=inline::sentence-transformers,vector_io=${{ matrix.vector-io-provider }}" \
tests/integration/vector_io
- name: Check Storage and Memory Available After Tests
if: ${{ always() }}
run: |
free -h
df -h
- name: Create sanitized provider name
if: ${{ always() }}
run: |
echo "SANITIZED_PROVIDER=$(echo "${{ matrix.vector-io-provider }}" | tr ':' '_')" >> $GITHUB_ENV
- name: Write ChromaDB logs to file
if: ${{ always() && matrix.vector-io-provider == 'remote::chromadb' }}
run: |
docker logs chromadb > chromadb.log
- name: Write Qdrant logs to file
if: ${{ always() && matrix.vector-io-provider == 'remote::qdrant' }}
run: |
docker logs qdrant > qdrant.log
- name: Write Elasticsearch logs to file
if: ${{ always() && matrix.vector-io-provider == 'remote::elasticsearch' }}
run: |
docker logs es-local-dev > elasticsearch.log
- name: Upload all logs to artifacts
if: ${{ always() }}
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: vector-io-logs-${{ github.run_id }}-${{ github.run_attempt }}-${{ env.SANITIZED_PROVIDER }}-${{ matrix.python-version }}
path: |
*.log
retention-days: 1
================================================
FILE: .github/workflows/openapi-generator-validation.yml
================================================
name: OpenAPI Generator SDK Validation
run-name: Validate OpenAPI Generator SDK generation
on:
pull_request:
paths:
# OpenAPI Generator files
- 'client-sdks/openapi/Makefile'
- 'client-sdks/openapi/merge_stainless_config.py'
- 'client-sdks/openapi/build_hierarchy.py'
- 'client-sdks/openapi/patch_hierarchy.py'
- 'client-sdks/openapi/patches.yml'
- 'client-sdks/openapi/openapi-config.json'
- 'client-sdks/openapi/openapitools.json'
- 'client-sdks/openapi/README.md'
# Stainless source files (our inputs)
- 'client-sdks/stainless/openapi.yml'
- 'client-sdks/stainless/config.yml'
# This workflow itself
- '.github/workflows/openapi-generator-validation.yml'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'client-sdks/openapi/**'
- 'client-sdks/stainless/openapi.yml'
- 'client-sdks/stainless/config.yml'
- '.github/workflows/openapi-generator-validation.yml'
workflow_dispatch:
inputs:
test_macos:
description: 'Force macOS testing (expensive)'
type: boolean
default: true
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
determine-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Check which files changed
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
critical:
- 'client-sdks/openapi/Makefile'
- 'client-sdks/openapi/merge_stainless_config.py'
- 'client-sdks/openapi/build_hierarchy.py'
- 'client-sdks/openapi/patch_hierarchy.py'
- 'client-sdks/openapi/patches.yml'
- 'client-sdks/openapi/openapitools.json'
- 'client-sdks/stainless/openapi.yml'
- 'client-sdks/stainless/config.yml'
- name: Determine test matrix
id: set-matrix
run: |
# Always test on Linux
MATRIX='{"os":["ubuntu-latest"]}'
# Include macOS if:
# 1. Manual workflow_dispatch with test_macos=true
# 2. Push to main/release branches
# 3. Critical files changed in PR
INCLUDE_MACOS="false"
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
INCLUDE_MACOS="${{ inputs.test_macos }}"
elif [ "${{ github.event_name }}" = "push" ]; then
# Always test macOS on main/release branches
INCLUDE_MACOS="true"
elif [ "${{ steps.filter.outputs.critical }}" = "true" ]; then
# Critical files changed in PR
INCLUDE_MACOS="true"
fi
if [ "$INCLUDE_MACOS" = "true" ]; then
MATRIX='{"os":["ubuntu-latest","macos-latest"]}'
fi
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
echo "Testing on platforms: $MATRIX"
validate-sdk-generation:
needs: determine-matrix
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.determine-matrix.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Python environment
uses: ./.github/actions/setup-runner
with:
python-version: '3.12'
- name: Set up Java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'temurin'
java-version: '11'
- name: Set up Node.js (Linux only)
if: runner.os == 'Linux'
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '22'
- name: Install openapi-generator-cli (Linux)
if: runner.os == 'Linux'
run: npm install -g @openapitools/openapi-generator-cli
- name: Install openapi-generator-cli (macOS)
if: runner.os == 'macOS'
run: brew install openapi-generator
- name: Verify installations
working-directory: client-sdks/openapi
run: |
set -e
GENERATOR_CMD=$([ "${{ runner.os }}" = "macOS" ] && echo "openapi-generator" || echo "openapi-generator-cli")
echo "=== Java version ==="
java -version
echo "=== OpenAPI Generator version ==="
$GENERATOR_CMD version
echo "=== SDK version from pyproject.toml ==="
VERSION_OUTPUT=$(make version)
echo "$VERSION_OUTPUT"
# Extract version string
VERSION=$(echo "$VERSION_OUTPUT" | sed 's/SDK version: //')
# Check version is at least 5 characters (e.g., "0.5.0")
if [ ${#VERSION} -lt 5 ]; then
echo "Error: Version string too short: '$VERSION'"
exit 1
fi
echo "Version validation passed: $VERSION"
- name: Run dependency check
working-directory: client-sdks/openapi
run: make check-generator
- name: Generate OpenAPI spec
working-directory: client-sdks/openapi
run: make openapi
- name: Validate generated OpenAPI spec
working-directory: client-sdks/openapi
run: |
set -e
# Check that openapi.yml was generated
if [ ! -f openapi.yml ]; then
echo "Error: openapi.yml was not generated"
exit 1
fi
echo "OpenAPI spec generated successfully"
ls -lh openapi.yml
- name: Generate Python SDK
working-directory: client-sdks/openapi
run: make sdk
- name: Validate generated SDK
working-directory: client-sdks/openapi
run: |
set -e
# Check SDK directory was generated
if [ ! -d sdks/python ]; then
echo "Error: SDK directory was not generated"
exit 1
fi
# Check we generated a substantial number of Python files (> 10)
PY_FILE_COUNT=$(find sdks/python -name "*.py" | wc -l)
echo "Generated Python files: $PY_FILE_COUNT"
if [ "$PY_FILE_COUNT" -le 10 ]; then
echo "Error: Too few Python files generated (expected > 10, got $PY_FILE_COUNT)"
exit 1
fi
echo "SDK validation passed: $PY_FILE_COUNT Python files generated"
# Show directory structure for debugging
echo "=== Generated SDK structure ==="
find sdks/python -type f -name "*.py" | head -20
================================================
FILE: .github/workflows/openresponses-conformance.yml
================================================
name: OpenResponses Conformance Tests
run-name: Run OpenResponses conformance tests against llama-stack Responses API
# This job is OPTIONAL and informational — it tracks progress toward full
# conformance with the OpenResponses spec (https://openresponses.org).
# Failures are expected while gaps remain in the Responses API implementation.
# See: https://github.com/llamastack/llama-stack/issues/4818
#
# Inference calls are replayed from checked-in recordings under
# tests/integration/openresponses/recordings/. To add or update recordings,
# run the server locally with LLAMA_STACK_TEST_INFERENCE_MODE=record-if-missing
# pointed at that directory, run the compliance tests, and commit the results.
on:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'src/llama_stack/providers/inline/agents/**'
- 'src/llama_stack/apis/agents/**'
- 'tests/integration/openresponses/**'
- '.github/workflows/openresponses-conformance.yml'
pull_request:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
paths:
- 'src/llama_stack/providers/inline/agents/**'
- 'src/llama_stack/apis/agents/**'
- 'tests/integration/openresponses/**'
- '.github/workflows/openresponses-conformance.yml'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
openresponses-conformance:
name: OpenResponses Conformance
runs-on: ubuntu-latest
env:
# Dummy key satisfies config parsing; actual inference is replayed from recordings
OPENAI_API_KEY: "dummy-key-for-replay-mode"
INFERENCE_MODEL: "openai/gpt-4o-mini"
LLAMA_STACK_PORT: 8321
LLAMA_STACK_TEST_INFERENCE_MODE: "replay"
LLAMA_STACK_TEST_RECORDING_DIR: ${{ github.workspace }}/tests/integration/openresponses
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Check for recordings
id: check-recordings
run: |
RECORDINGS_DIR="${{ github.workspace }}/tests/integration/openresponses/recordings"
COUNT=$(find "$RECORDINGS_DIR" -name "*.json" 2>/dev/null | wc -l)
echo "recordings_count=$COUNT" >> $GITHUB_OUTPUT
if [ "$COUNT" -eq 0 ]; then
echo "::warning::No recordings found in tests/integration/openresponses/recordings/."
echo "::warning::Run the server locally with LLAMA_STACK_TEST_INFERENCE_MODE=record-if-missing"
echo "::warning::and commit the resulting recordings to enable conformance testing in CI."
else
echo "Found $COUNT recording(s)"
fi
- name: Install dependencies
uses: ./.github/actions/setup-runner
with:
python-version: '3.12'
- name: Install ci-tests distro provider dependencies
run: uv run llama stack list-deps ci-tests --format uv | sh
- name: Start Llama Stack server
run: |
mkdir -p /tmp/llama-stack-conformance
export LLAMA_STACK_LOG_WIDTH=200
nohup uv run llama stack run ci-tests --port $LLAMA_STACK_PORT \
> /tmp/llama-stack-conformance/server.log 2>&1 &
echo "Server PID: $!"
- name: Wait for Llama Stack server to be ready
run: |
echo "Waiting for Llama Stack server..."
for i in {1..60}; do
if curl -s http://localhost:$LLAMA_STACK_PORT/v1/health | grep -q "OK"; then
echo "Llama Stack server is ready!"
exit 0
fi
sleep 2
done
echo "Llama Stack server failed to start in 120 seconds"
cat /tmp/llama-stack-conformance/server.log
exit 1
- name: Setup Bun
uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 #v2.0.0
- name: Clone OpenResponses repository
run: |
git clone --depth=1 https://github.com/openresponses/openresponses.git /tmp/openresponses
- name: Install OpenResponses dependencies
working-directory: /tmp/openresponses
run: bun install
- name: Run OpenResponses conformance tests
id: run-tests
run: |
cd /tmp/openresponses
bun run bin/compliance-test.ts \
--base-url "http://localhost:$LLAMA_STACK_PORT/v1" \
--api-key "llama-stack" \
--model "$INFERENCE_MODEL" \
--json > /tmp/openresponses-results.json 2>/dev/null || true
echo "=== OpenResponses Conformance Test Output ==="
bun run bin/compliance-test.ts \
--base-url "http://localhost:$LLAMA_STACK_PORT/v1" \
--api-key "llama-stack" \
--model "$INFERENCE_MODEL" \
--verbose 2>&1 | tee /tmp/openresponses-output.txt || true
- name: Generate conformance report
if: always()
run: |
{
echo "## OpenResponses Conformance Test Results"
echo ""
echo "> **Note:** These tests are **informational only** and track progress toward full"
echo "> [OpenResponses](https://www.openresponses.org) API conformance."
echo "> Failures are expected while gaps remain in the Responses API implementation."
echo "> See [#4818](https://github.com/llamastack/llama-stack/issues/4818)."
echo ""
echo "**Model:** \`$INFERENCE_MODEL\`"
echo "**Recordings:** ${{ steps.check-recordings.outputs.recordings_count }} file(s) in \`tests/integration/openresponses/recordings/\`"
echo ""
} >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.check-recordings.outputs.recordings_count }}" -eq 0 ]; then
{
echo "### No Recordings Found"
echo ""
echo "To enable conformance testing, generate recordings locally:"
echo '```bash'
echo "OPENAI_API_KEY=\$YOUR_KEY bash scripts/record-openresponses-conformance.sh"
echo ""
echo "# Then commit the recordings"
echo "git add tests/integration/openresponses/recordings/"
echo "git commit -m 'chore: add OpenResponses conformance recordings'"
echo '```'
echo "Commit the resulting \`tests/integration/openresponses/recordings/*.json\` files."
} >> $GITHUB_STEP_SUMMARY
elif [ -f /tmp/openresponses-results.json ] && jq -e '.summary' /tmp/openresponses-results.json > /dev/null 2>&1; then
PASSED=$(jq -r '.summary.passed' /tmp/openresponses-results.json)
FAILED=$(jq -r '.summary.failed' /tmp/openresponses-results.json)
TOTAL=$(jq -r '.summary.total' /tmp/openresponses-results.json)
{
echo "### Summary"
echo ""
echo "| Metric | Count |"
echo "|--------|-------|"
echo "| ✅ Passed | $PASSED |"
echo "| ❌ Failed | $FAILED |"
echo "| **Total** | **$TOTAL** |"
echo ""
echo "### Test Details"
echo ""
echo "| Test | Status | Duration |"
echo "|------|--------|----------|"
jq -r '.results[] | "| \(.name) | \(if .status == "passed" then "✅ Pass" else "❌ Fail" end) | \(.duration // "—")ms |"' \
/tmp/openresponses-results.json
echo ""
} >> $GITHUB_STEP_SUMMARY
if [ "$FAILED" -gt 0 ]; then
{
echo "### Failure Details"
echo ""
jq -r '.results[] | select(.status == "failed") | "**\(.name)**\n" + ((.errors // []) | map("- \(.)") | join("\n")) + "\n"' \
/tmp/openresponses-results.json
} >> $GITHUB_STEP_SUMMARY
fi
else
{
echo "### Results"
echo ""
echo "Could not parse structured results."
if [ -f /tmp/openresponses-output.txt ]; then
echo ""
echo "<details><summary>Raw output</summary>"
echo ""
echo '```'
cat /tmp/openresponses-output.txt
echo '```'
echo ""
echo "</details>"
fi
} >> $GITHUB_STEP_SUMMARY
fi
- name: Upload conformance test results
if: always()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: openresponses-conformance-results-${{ github.run_id }}
path: |
/tmp/openresponses-results.json
/tmp/openresponses-output.txt
retention-days: 30
if-no-files-found: warn
- name: Print server log on failure
if: failure()
run: |
echo "=== Llama Stack server log (last 200 lines) ==="
tail -200 /tmp/llama-stack-conformance/server.log || true
================================================
FILE: .github/workflows/post-release.yml
================================================
# =============================================================================
# Post-Release Automation
# =============================================================================
#
# Triggered after the pypi.yml workflow succeeds for a release event. Automates:
# A) Tagging main with the next dev tag (e.g., v0.5.1-dev after v0.5.0)
# B) Bumping fallback_version on main via PR (main is a protected branch)
# C) Updating npm lockfile on the release branch via PR
#
# =============================================================================
name: Post-release automation
on:
workflow_run:
workflows: ["Build, test, and publish packages"]
types:
- completed
workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g., v0.6.0). Use to re-run post-release steps after a failure.'
required: true
type: string
permissions:
contents: write
pull-requests: write
jobs:
post-release:
name: Post-release housekeeping
# Only run when:
# - workflow_dispatch (manual testing), OR
# - the pypi.yml workflow completed successfully AND was triggered by a release
if: |
github.event_name == 'workflow_dispatch' || (
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'release'
)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
token: ${{ secrets.RELEASE_PAT }}
- name: Parse release version
id: parse
env:
GH_TOKEN: ${{ github.token }}
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
TAG="${{ inputs.tag }}"
else
# The triggering workflow was a release event — find the tag from the
# commit SHA that the workflow ran on, or fall back to the latest release.
HEAD_SHA="${{ github.event.workflow_run.head_sha }}"
TAG=$(git tag --points-at "$HEAD_SHA" 2>/dev/null | grep '^v' | head -1)
if [ -z "$TAG" ]; then
# Fallback: query the latest published release via GitHub API
TAG=$(gh api repos/${{ github.repository }}/releases/latest --jq '.tag_name')
fi
if [ -z "$TAG" ]; then
echo "::error::Could not determine release tag"
exit 1
fi
fi
# Strip 'v' prefix
VERSION="${TAG#v}"
# Split into components
MAJOR="${VERSION%%.*}"
REST="${VERSION#*.}"
MINOR="${REST%%.*}"
PATCH="${REST#*.}"
# Strip any pre-release suffix from patch (e.g., rc1)
PATCH="${PATCH%%[a-zA-Z-]*}"
NEXT_PATCH=$((PATCH + 1))
NEXT_DEV_TAG="v${MAJOR}.${MINOR}.${NEXT_PATCH}-dev"
NEXT_FALLBACK="${MAJOR}.${MINOR}.${NEXT_PATCH}.dev0"
RELEASE_BRANCH="release-${MAJOR}.${MINOR}.x"
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "major=${MAJOR}" >> $GITHUB_OUTPUT
echo "minor=${MINOR}" >> $GITHUB_OUTPUT
echo "patch=${PATCH}" >> $GITHUB_OUTPUT
echo "next_patch=${NEXT_PATCH}" >> $GITHUB_OUTPUT
echo "next_dev_tag=${NEXT_DEV_TAG}" >> $GITHUB_OUTPUT
echo "next_fallback=${NEXT_FALLBACK}" >> $GITHUB_OUTPUT
echo "release_branch=${RELEASE_BRANCH}" >> $GITHUB_OUTPUT
echo "Release version: ${VERSION}"
echo "Next dev tag: ${NEXT_DEV_TAG}"
echo "Next fallback: ${NEXT_FALLBACK}"
echo "Release branch: ${RELEASE_BRANCH}"
# -----------------------------------------------------------------------
# Step A: Tag main with the next dev tag
# -----------------------------------------------------------------------
- name: Push dev tag to main
run: |
DEV_TAG="${{ steps.parse.outputs.next_dev_tag }}"
# Check if tag already exists
if git rev-parse "$DEV_TAG" >/dev/null 2>&1; then
echo "Tag $DEV_TAG already exists, skipping"
exit 0
fi
# Tag the HEAD of main
MAIN_SHA=$(git rev-parse origin/main)
git tag "$DEV_TAG" "$MAIN_SHA"
git push origin "$DEV_TAG"
echo "Pushed tag $DEV_TAG to main ($MAIN_SHA)"
- name: Set up uv
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
# -----------------------------------------------------------------------
# Step B: Bump fallback_version on main and open PR
# -----------------------------------------------------------------------
- name: Create fallback_version bump PR
env:
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
run: |
NEXT_FALLBACK="${{ steps.parse.outputs.next_fallback }}"
VERSION="${{ steps.parse.outputs.version }}"
BRANCH="post-release/bump-fallback-${VERSION}"
# Check if PR already exists
EXISTING=$(gh pr list --head "$BRANCH" --state open --json number --jq '.[0].number')
if [ -n "$EXISTING" ]; then
echo "PR #${EXISTING} already exists for $BRANCH, skipping"
exit 0
fi
git checkout -b "$BRANCH" origin/main
# Update fallback_version in root pyproject.toml
sed -i "s/^fallback_version = .*/fallback_version = \"${NEXT_FALLBACK}\"/" pyproject.toml
# Update fallback_version in src/llama_stack_api/pyproject.toml
sed -i "s/^fallback_version = .*/fallback_version = \"${NEXT_FALLBACK}\"/" src/llama_stack_api/pyproject.toml
# Bump llama-stack-client minimum version to match the release
sed -i "s/\"llama-stack-client>=.*\"/\"llama-stack-client>=${VERSION}\"/" pyproject.toml
# Regenerate lockfile to resolve the updated client version
uv lock
# Check if there are changes
if git diff --quiet; then
echo "No changes to fallback_version, skipping PR"
exit 0
fi
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git add pyproject.toml src/llama_stack_api/pyproject.toml uv.lock
git commit -s -m "chore: bump fallback_version to ${NEXT_FALLBACK} after ${VERSION} release"
git push origin "$BRANCH"
gh pr create \
--base main \
--head "$BRANCH" \
--title "chore: bump fallback_version to ${NEXT_FALLBACK}" \
--body "$(cat <<EOF
Automated post-release version bump after v${VERSION}.
Updates fallback_version in both pyproject.toml files to ${NEXT_FALLBACK}.
This PR was created automatically by the post-release workflow.
EOF
)"
echo "Created PR for fallback_version bump to ${NEXT_FALLBACK}"
# -----------------------------------------------------------------------
# Step C: Update npm lockfile on release branch via PR
# -----------------------------------------------------------------------
- name: Set up Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Create npm lockfile update PR for release branch
env:
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
run: |
VERSION="${{ steps.parse.outputs.version }}"
RELEASE_BRANCH="${{ steps.parse.outputs.release_branch }}"
BRANCH="post-release/npm-lockfile-${VERSION}"
# Check if release branch exists
if ! git rev-parse "origin/${RELEASE_BRANCH}" >/dev/null 2>&1; then
echo "Release branch ${RELEASE_BRANCH} does not exist, skipping npm update"
exit 0
fi
# Check if PR already exists
EXISTING=$(gh pr list --head "$BRANCH" --state open --json number --jq '.[0].number')
if [ -n "$EXISTING" ]; then
echo "PR #${EXISTING} already exists for $BRANCH, skipping"
exit 0
fi
git checkout -b "$BRANCH" "origin/${RELEASE_BRANCH}"
# Regenerate uv lockfile so pre-commit passes
uv lock
# Update npm lockfile
cd src/llama_stack_ui
npm install "llama-stack-client@^${VERSION}"
cd ../..
# Check if there are changes
if git diff --quiet; then
echo "No npm lockfile changes, skipping PR"
exit 0
fi
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git add uv.lock src/llama_stack_ui/package.json src/llama_stack_ui/package-lock.json
git commit -s -m "chore: update llama-stack-client to ^${VERSION} in UI lockfile"
git push origin "$BRANCH"
gh pr create \
--base "$RELEASE_BRANCH" \
--head "$BRANCH" \
--title "chore: update llama-stack-client to ^${VERSION} in UI lockfile" \
--body "$(cat <<EOF
Automated post-release npm lockfile update after v${VERSION}.
Updates llama-stack-client to ^${VERSION} in the UI package lockfile.
This PR was created automatically by the post-release workflow.
EOF
)"
echo "Created PR for npm lockfile update on ${RELEASE_BRANCH}"
================================================
FILE: .github/workflows/pre-commit.yml
================================================
name: Pre-commit
run-name: Run pre-commit checks
on:
pull_request:
merge_group:
push:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
pre-commit:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [22]
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# For dependabot PRs, we need to checkout with a token that can push changes
token: ${{ github.actor == 'dependabot[bot]' && secrets.GITHUB_TOKEN || github.token }}
# Fetch enough history for api-conformance check (needs HEAD~1 for comparison)
# Full history for dependabot PRs to allow commits
fetch-depth: ${{ github.actor == 'dependabot[bot]' && 0 || 2 }}
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.12'
cache: pip
cache-dependency-path: |
**/requirements*.txt
.pre-commit-config.yaml
- name: Set up Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: ${{matrix.node-version}}
cache: 'npm'
cache-dependency-path: 'src/llama_stack_ui/'
- name: Set up uv
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
- name: Install npm dependencies
run: npm ci
working-directory: src/llama_stack_ui
- name: Install pre-commit
run: python -m pip install 'pre-commit>=4.4.0'
- name: Cache pre-commit
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v4
with:
path: ~/.cache/pre-commit
key: pre-commit-3|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
# Install oasdiff: https://github.com/oasdiff/oasdiff, a tool for detecting breaking changes in OpenAPI specs.
- name: Install oasdiff
run: |
curl -fsSL https://raw.githubusercontent.com/oasdiff/oasdiff/main/install.sh | sh
cp /usr/local/bin/oasdiff ~/oasdiff
- name: Run pre-commit
id: precommit
run: |
set +e
pre-commit run --show-diff-on-failure --color=always --all-files 2>&1 | tee /tmp/precommit.log
status=${PIPESTATUS[0]}
echo "status=$status" >> $GITHUB_OUTPUT
exit 0
env:
SKIP: no-commit-to-branch,mypy
RUFF_OUTPUT_FORMAT: github
- name: Check pre-commit results
if: steps.precommit.outputs.status != '0'
run: |
echo "::error::Pre-commit hooks failed. Please run 'pre-commit run --all-files' locally and commit the fixes."
echo ""
echo "Failed hooks output:"
cat /tmp/precommit.log
exit 1
- name: Debug
run: |
echo "github.ref: ${{ github.ref }}"
echo "github.actor: ${{ github.actor }}"
- name: Commit changes for dependabot PRs
if: github.actor == 'dependabot[bot]'
run: |
if ! git diff --exit-code || [ -n "$(git ls-files --others --exclude-standard)" ]; then
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
# Ensure we're on the correct branch
git checkout -B ${{ github.head_ref }}
git add -A
git commit -m "Apply pre-commit fixes"
# Pull latest changes from the PR branch and rebase our commit on top
git pull --rebase origin ${{ github.head_ref }}
# Push to the PR branch
git push origin ${{ github.head_ref }}
echo "Pre-commit fixes committed and pushed"
else
echo "No changes to commit"
fi
- name: Verify no uncommitted changes
if: github.actor != 'dependabot[bot]'
run: |
if ! git diff --exit-code; then
echo "::error::There are uncommitted changes after pre-commit. Please run 'pre-commit run --all-files' locally and commit the fixes."
echo "::warning::Files with changes:"
git diff --name-status
exit 1
fi
- name: Verify if there are any new files after pre-commit
if: github.actor != 'dependabot[bot]'
run: |
unstaged_files=$(git ls-files --others --exclude-standard)
if [ -n "$unstaged_files" ]; then
echo "::error::There are new untracked files after pre-commit. Please run 'pre-commit run --all-files' locally and commit the fixes."
echo "::warning::New files:"
echo "$unstaged_files"
exit 1
fi
- name: Configure client installation
id: client-config
uses: ./.github/actions/install-llama-stack-client
- name: Sync dev + type_checking dependencies
run: |
uv sync --group dev --group type_checking
# Install specific client version after sync if needed
if [ "${{ steps.client-config.outputs.install-after-sync }}" = "true" ]; then
echo "Installing llama-stack-client from: ${{ steps.client-config.outputs.install-source }}"
uv pip install ${{ steps.client-config.outputs.install-source }}
fi
- name: Run mypy (full type_checking)
run: |
set +e
uv run --group dev --group type_checking mypy
status=$?
if [ $status -ne 0 ]; then
echo "::error::Full mypy failed. Reproduce locally with 'uv run pre-commit run mypy-full --hook-stage manual --all-files'."
fi
exit $status
- name: Check if any unused recordings
run: |
set -e
PYTHONPATH=$PWD uv run ./scripts/cleanup_recordings.py --delete
changes=$(git status --short tests/integration | grep 'recordings' || true)
if [ -n "$changes" ]; then
echo "::error::Unused integration recordings detected. Run 'PYTHONPATH=$(pwd) uv run ./scripts/cleanup_recordings.py --delete' locally and commit the deletions."
echo "$changes"
exit 1
fi
================================================
FILE: .github/workflows/prepare-release.yml
================================================
# =============================================================================
# Pre-Release Preparation
# =============================================================================
#
# Triggered via workflow_dispatch to prepare a release branch for publishing.
# Takes a version (e.g., "0.5.1") and target release branch as input.
#
# Automates:
# - Updating fallback_version to the release version in both pyproject.toml files
# - Updating llama-stack-client pins to the release version
# - Committing all changes directly to the release branch
#
# =============================================================================
name: Prepare release
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., "0.5.1")'
required: true
type: string
release_branch:
description: 'Target release branch (e.g., "release-0.5.x")'
required: true
type: string
permissions:
contents: write
jobs:
prepare-release:
name: Prepare release v${{ inputs.version }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ inputs.release_branch }}
fetch-depth: 0
- name: Validate inputs
run: |
VERSION="${{ inputs.version }}"
BRANCH="${{ inputs.release_branch }}"
# Validate version format (X.Y.Z)
if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
echo "::error::Invalid version format: ${VERSION}. Expected X.Y.Z (e.g., 0.5.1)"
exit 1
fi
# Validate branch exists
if ! git rev-parse "origin/${BRANCH}" >/dev/null 2>&1; then
echo "::error::Branch ${BRANCH} does not exist"
exit 1
fi
echo "Preparing release v${VERSION} on ${BRANCH}"
- name: Update version files and commit directly to release branch
run: |
VERSION="${{ inputs.version }}"
RELEASE_BRANCH="${{ inputs.release_branch }}"
# --- Update fallback_version in both pyproject.toml files ---
sed -i "s/^fallback_version = .*/fallback_version = \"${VERSION}\"/" pyproject.toml
sed -i "s/^fallback_version = .*/fallback_version = \"${VERSION}\"/" src/llama_stack_api/pyproject.toml
# --- Update llama-stack-client pins in pyproject.toml ---
# Update the pin in [project.optional-dependencies] and [dependency-groups]
# Match patterns like: "llama-stack-client>=X.Y.Z" or "llama-stack-client==X.Y.Z"
sed -i -E "s/\"llama-stack-client[><=!]+[0-9]+\.[0-9]+\.[0-9]+[^\"]*\"/\"llama-stack-client==${VERSION}\"/" pyproject.toml
# Show what changed
echo "=== Changes ==="
git diff
# Check if there are changes
if git diff --quiet; then
echo "::warning::No changes detected. Version may already be set to ${VERSION}."
exit 0
fi
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git add pyproject.toml src/llama_stack_api/pyproject.toml
git commit -s -m "chore: prepare release v${VERSION}"
git push origin "HEAD:${RELEASE_BRANCH}"
echo "Committed version updates directly to ${RELEASE_BRANCH}"
================================================
FILE: .github/workflows/providers-build.yml
================================================
name: Test Llama Stack Build
run-name: Test llama stack build
on:
push:
branches:
- main
paths:
- 'src/llama_stack/cli/stack/build.py'
- 'src/llama_stack/cli/stack/_build.py'
- 'src/llama_stack/core/build.*'
- 'src/llama_stack/core/*.sh'
- '.github/workflows/providers-build.yml'
- 'src/llama_stack/distributions/**'
- 'pyproject.toml'
- 'containers/Containerfile'
- '.dockerignore'
pull_request:
paths:
- 'src/llama_stack/cli/stack/build.py'
- 'src/llama_stack/cli/stack/_build.py'
- 'src/llama_stack/core/build.*'
- 'src/llama_stack/core/*.sh'
- '.github/workflows/providers-build.yml'
- 'src/llama_stack/distributions/**'
- 'pyproject.toml'
- 'containers/Containerfile'
- '.dockerignore'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
schedule:
- cron: '0 0 * * *' # Daily at 12 AM UTC
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }}
cancel-in-progress: true
jobs:
generate-matrix:
runs-on: ubuntu-latest
outputs:
distros: ${{ steps.set-matrix.outputs.distros }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Generate Distribution List
id: set-matrix
run: |
distros=$(ls -d src/llama_stack/distributions/*/ 2>/dev/null | \
awk -F'/' '{print $(NF-1)}' | \
grep -v '^__pycache__$' | \
grep -v '^ci-tests$' | \
jq -R -s -c 'split("\n") | map(select(length > 0))')
echo "distros=$distros" >> "$GITHUB_OUTPUT"
build:
needs: generate-matrix
runs-on: ubuntu-latest
strategy:
matrix:
distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }}
image-type: [venv, container]
fail-fast: false # We want to run all jobs even if some fail
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Install distribution into venv
if: matrix.image-type == 'venv'
run: |
uv run llama stack list-deps ${{ matrix.distro }} | xargs -L1 uv pip install
- name: Build container image
if: matrix.image-type == 'container'
run: |
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=${{ matrix.distro }}"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker build . \
-f containers/Containerfile \
$BUILD_ARGS \
--tag llama-stack:${{ matrix.distro }}-ci
build-arm64:
if: github.event_name == 'schedule'
needs: generate-matrix
runs-on: ubuntu-latest
strategy:
matrix:
distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }}
fail-fast: false # We want to run all jobs even if some fail
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd
- name: Build ARM64 container image
run: |
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=${{ matrix.distro }}"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker buildx build --platform linux/arm64 --load . \
-f containers/Containerfile \
$BUILD_ARGS \
--tag llama-stack:${{ matrix.distro }}-arm64-ci
build-single-provider:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Build a single provider
run: |
uv pip install -e .
uv run --no-sync llama stack list-deps --providers inference=remote::ollama | xargs -L1 uv pip install
build-custom-container-distribution:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Build container image
run: |
BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "python:3.12-slim"' src/llama_stack/distributions/ci-tests/config.yaml)
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests"
BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE"
BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker build . \
-f containers/Containerfile \
$BUILD_ARGS \
-t llama-stack:ci-tests
- name: Inspect the container image entrypoint
run: |
IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1)
if [ -z "$IMAGE_ID" ]; then
echo "No image found"
exit 1
fi
entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID)
echo "Entrypoint: $entrypoint"
if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then
echo "Entrypoint is not correct"
exit 1
fi
build-ubi9-container-distribution:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Pin distribution to UBI9 base
run: |
yq -i '
.distribution_spec.container_image = "registry.access.redhat.com/ubi9:latest"
' src/llama_stack/distributions/ci-tests/config.yaml
- name: Build UBI9 container image
run: |
BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "registry.access.redhat.com/ubi9:latest"' src/llama_stack/distributions/ci-tests/config.yaml)
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests"
BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE"
BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker build . \
-f containers/Containerfile \
$BUILD_ARGS \
-t llama-stack:ci-tests-ubi9
- name: Inspect UBI9 image
run: |
IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1)
if [ -z "$IMAGE_ID" ]; then
echo "No image found"
exit 1
fi
entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID)
echo "Entrypoint: $entrypoint"
if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then
echo "Entrypoint is not correct"
exit 1
fi
echo "Checking /etc/os-release in $IMAGE_ID"
docker run --rm --entrypoint sh "$IMAGE_ID" -c \
'source /etc/os-release && echo "$ID"' \
| grep -qE '^(rhel|ubi)$' \
|| { echo "Base image is not UBI 9!"; exit 1; }
build-starter-ubi9-arm64-container:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Set up QEMU for ARM64 emulation
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd
- name: Build starter distribution on UBI9 ARM64
run: |
BASE_IMAGE="registry.access.redhat.com/ubi9:latest"
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=starter"
BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE"
if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL"
fi
if [ -n "${UV_INDEX_STRATEGY:-}" ]; then
BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY"
fi
docker buildx build --platform linux/arm64 --load . \
-f containers/Containerfile \
$BUILD_ARGS \
--tag llama-stack:starter-ubi9-arm64
- name: Inspect starter UBI9 ARM64 image
run: |
IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1)
if [ -z "$IMAGE_ID" ]; then
echo "No image found"
exit 1
fi
entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID)
echo "Entrypoint: $entrypoint"
if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then
echo "Entrypoint is not correct"
exit 1
fi
echo "Checking /etc/os-release in $IMAGE_ID"
docker run --rm --platform linux/arm64 --entrypoint sh "$IMAGE_ID" -c \
'source /etc/os-release && echo "$ID"' \
| grep -qE '^(rhel|ubi)$' \
|| { echo "Base image is not UBI 9!"; exit 1; }
================================================
FILE: .github/workflows/providers-list-deps.yml
================================================
name: Test llama stack list-deps
run-name: Test llama stack list-deps
on:
push:
branches:
- main
paths:
- 'src/llama_stack/cli/stack/list_deps.py'
- 'src/llama_stack/cli/stack/_list_deps.py'
- 'src/llama_stack/core/build.*'
- 'src/llama_stack/core/*.sh'
- '.github/workflows/providers-list-deps.yml'
- 'src/llama_stack/templates/**'
- 'pyproject.toml'
pull_request:
paths:
- 'src/llama_stack/cli/stack/list_deps.py'
- 'src/llama_stack/cli/stack/_list_deps.py'
- 'src/llama_stack/core/build.*'
- 'src/llama_stack/core/*.sh'
- '.github/workflows/providers-list-deps.yml'
- 'src/llama_stack/templates/**'
- 'pyproject.toml'
merge_group:
branches:
- main
- 'release-[0-9]+.[0-9]+.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
generate-matrix:
runs-on: ubuntu-latest
outputs:
distros: ${{ steps.set-matrix.outputs.distros }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Generate Distribution List
id: set-matrix
run: |
distros=$(ls -d src/llama_stack/distributions/*/ 2>/dev/null | \
awk -F'/' '{print $(NF-1)}' | \
grep -v '^__pycache__$' | \
grep -v '^ci-tests$' | \
jq -R -s -c 'split("\n") | map(select(length > 0))')
echo "distros=$distros" >> "$GITHUB_OUTPUT"
list-deps:
needs: generate-matrix
runs-on: ubuntu-latest
strategy:
matrix:
distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }}
image-type: [venv, container]
fail-fast: false # We want to run all jobs even if some fail
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Print dependencies
run: |
uv run llama stack list-deps ${{ matrix.distro }}
- name: Install Distro using llama stack list-deps
run: |
# USE_COPY_NOT_MOUNT is set to true since mounting is not supported by docker buildx, we use COPY instead
# LLAMA_STACK_DIR is set to the current directory so we are building from the source
USE_COPY_NOT_MOUNT=true LLAMA_STACK_DIR=. uv run llama stack list-deps ${{ matrix.distro }} | xargs -L1 uv pip install
- name: Print dependencies in the image
if: matrix.image-type == 'venv'
run: |
uv pip list
show-single-provider:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: Show a single provider
run: |
USE_COPY_NOT_MOUNT=true LLAMA_STACK_DIR=. uv run llama stack list-deps --providers inference=remote::ollama
list-deps-from-config:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
uses: ./.github/actions/setup-runner
- name: list-des from Config
env:
USE_COPY_NOT_MOUNT: "true"
LLAMA_STACK_DIR: "."
run: |
uv run llama stack list-deps src/llama_stack/distributions/ci-tests/config.yaml
================================================
FILE: .github/workflows/pypi.yml
================================================
# =============================================================================
# Unified PyPI/NPM Release Workflow
# =============================================================================
#
# This workflow builds, tests, and publishes all llama-stack packages:
# - llama-stack (PyPI)
# - llama-stack-api (PyPI)
# - llama-stack-client-python (PyPI, from external repo)
# - llama-stack-client-typescript (npm, from external repo)
#
# =============================================================================
# REQUIRED SECRETS
# =============================================================================
#
# 1. NPM_TOKEN - npm Access Token
# Purpose: Publish llama-stack-client package to npmjs.org (production only)
#
# How to create:
# - Log in to https://www.npmjs.com/
# - Profile > Access Tokens > Generate New Token > Classic Token
# - Select type: Automation
#
# Add to repo: Settings > Secrets and variables > Actions > New repository secret
# Name: NPM_TOKEN
#
# Note: Token owner must have publish access to llama-stack-client on npm
#
# 2. DOCKERHUB_USERNAME - DockerHub username
# Purpose: Authenticate with DockerHub to push distribution images
#
# 3. DOCKERHUB_TOKEN - DockerHub access token
# Purpose: Authenticate with DockerHub to push distribution images
#
# How to create:
# - Log in to https://hub.docker.com/
# - Account Settings > Security > New Access Token
# - Select access permission: Read & Write
#
# Add to repo: Settings > Secrets and variables > Actions > New repository secret
# Names: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN
#
# =============================================================================
# WORKFLOW INPUTS (workflow_dispatch)
# =============================================================================
#
# dry_run:
# - test-pypi: Publish to test.pypi.org, npm pack only (default)
# - build-only: Build and validate only, no publishing
# - off: Production publish to pypi.org and npmjs.org
#
# version: Optional version override (e.g., "0.2.0rc1")
#
# packages:
# - all: Build all packages
# - llama-stack-only: Build only llama-stack and llama-stack-api
# - clients-only: Build only client packages
#
# client_ref: Git ref for client repos. Auto-detected from branch:
# - On release-X.Y.x branches or vX.Y.Z tags: uses matching release-X.Y.x
# - Otherwise: defaults to main
# - Explicit value overrides auto-detection
#
# docker_only: Skip package build/test/publish; only build and push Docker
# images. Use this to retry Docker publishing after a run where packages
# published successfully but image builds failed. Requires "version" to be
# set to the already-published version.
#
# =============================================================================
name: Build, test, and publish packages
on:
push:
branches:
- main
- "release-**"
tags:
- "v*"
pull_request:
branches:
- main
- "release-**"
release:
types:
- published
schedule:
# Nightly at midnight UTC - for test.pypi.org publishing
- cron: '0 0 * * *'
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run mode'
required: false
type: choice
options:
- 'test-pypi' # Publish to test.pypi.org (default for testing)
- 'build-only' # Build and validate only, no publishing anywhere
- 'off' # Production publish (use with caution!)
default: 'test-pypi'
version:
description: 'Version override (e.g., "0.2.0rc1"). Leave empty for auto-detection.'
required: false
type: string
packages:
description: 'Which packages to build/publish'
required: false
type: choice
options:
- all
- llama-stack-only
- clients-only
default: 'all'
client_ref:
description: 'Git ref for client repos (branch/tag/sha). Default: main'
required: false
type: string
default: 'main'
docker_only:
description: 'Skip package build/publish; only build and push Docker images (requires version)'
required: false
type: boolean
default: false
env:
LC_ALL: en_US.UTF-8
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
# Compute version once, shared by all build jobs.
# This ensures external packages (client-python, client-typescript) get the
# same version as local packages during nightly/manual runs.
compute-version:
name: Compute version
permissions:
contents: read
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout local repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
- name: Compute package version
id: version
run: |
if [ -n "${{ inputs.version }}" ]; then
VERSION="${{ inputs.version }}"
elif [ "${{ github.event_name }}" == "release" ]; then
VERSION="${GITHUB_REF#refs/tags/v}"
else
# Use git describe to get version from nearest tag (e.g., v0.5.1-dev)
# Falls back to fallback_version in pyproject.toml if no tags are reachable
RAW=$(git describe --tags --match 'v*' --abbrev=0 2>/dev/null || echo "")
if [ -n "$RAW" ]; then
BASE="${RAW#v}" # strip 'v' prefix
BASE="${BASE%-dev}" # strip any -dev suffix from the tag
else
# Fallback: read from pyproject.toml (e.g., source tarballs without git history)
BASE=$(python3 -c "
import tomllib, pathlib
p = tomllib.loads(pathlib.Path('pyproject.toml').read_text())
v = p.get('tool', {}).get('setuptools_scm', {}).get('fallback_version', '0.0.0.dev0')
print(v.split('.dev')[0])
")
fi
DATE=$(date -u +%Y%m%d)
VERSION="${BASE}.dev${DATE}"
fi
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "Computed version: ${VERSION}"
# Build and validate release artifacts
build-package:
name: Build ${{ matrix.package }}
if: inputs.docker_only != true
needs: compute-version
permissions:
contents: read
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# Local packages (in this repo)
- package: llama-stack-api
path: src/llama_stack_api
type: local
registry: pypi
- package: llama-stack
path: .
type: local
registry: pypi
# External packages (client SDKs from other repos)
- package: llama-stack-client-python
repo: llamastack/llama-stack-client-python
type: external
registry: pypi
- package: llama-stack-client-typescript
repo: llamastack/llama-stack-client-typescript
type: external
registry: npm
steps:
# Skip check for package selection
- name: Check if package should be built
id: should-build
run: |
PACKAGES="${{ inputs.packages || 'all' }}"
PACKAGE="${{ matrix.package }}"
TYPE="${{ matrix.type }}"
if [ "$PACKAGES" == "all" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
elif [ "$PACKAGES" == "llama-stack-only" ] && [ "$TYPE" == "local" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
elif [ "$PACKAGES" == "clients-only" ] && [ "$TYPE" == "external" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
else
echo "skip=true" >> $GITHUB_OUTPUT
echo "::notice::Skipping $PACKAGE (packages=$PACKAGES)"
fi
# === LOCAL PACKAGE STEPS ===
- name: Checkout local repo
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0 # for setuptools-scm
- name: Install dependent PRs if needed
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local'
uses: depends-on/depends-on-action@826c144163ac67bf08347590a5f81afd45da63ca # main
with:
token: ${{ secrets.GITHUB_TOKEN }}
# === DETERMINE CLIENT REF ===
# Use release branch from client repos when running on a release branch,
# unless client_ref is explicitly provided via workflow_dispatch.
- name: Determine client ref
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external'
id: client-ref
run: |
if [ -n "${{ inputs.client_ref }}" ] && [ "${{ inputs.client_ref }}" != "main" ]; then
# Explicit override from workflow_dispatch
echo "ref=${{ inputs.client_ref }}" >> $GITHUB_OUTPUT
echo "Using explicit client_ref: ${{ inputs.client_ref }}"
elif [[ "$GITHUB_REF" == refs/heads/release-* ]]; then
# Running on a release branch — use the same branch name in client repos
BRANCH="${GITHUB_REF#refs/heads/}"
echo "ref=$BRANCH" >> $GITHUB_OUTPUT
echo "Using release branch: $BRANCH"
elif [[ "$GITHUB_REF" == refs/tags/v* ]]; then
# Running from a version tag — derive release branch (e.g., v0.5.1 -> release-0.5.x)
TAG="${GITHUB_REF#refs/tags/v}"
MAJOR_MINOR="${TAG%.*}"
BRANCH="release-${MAJOR_MINOR}.x"
echo "ref=$BRANCH" >> $GITHUB_OUTPUT
echo "Using derived release branch from tag: $BRANCH"
else
echo "ref=main" >> $GITHUB_OUTPUT
echo "Using default: main"
fi
# === EXTERNAL PACKAGE STEPS ===
- name: Checkout external repo
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ matrix.repo }}
ref: ${{ steps.client-ref.outputs.ref }}
path: external-repo
fetch-depth: 0
# === PYTHON SETUP (for all Python packages) ===
- name: Set up Python
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'pypi'
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
- name: Install uv
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'pypi'
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
- name: Install build dependencies
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'pypi'
run: uv pip install --system setuptools setuptools-scm wheel build
# === NODE SETUP (for npm packages) ===
- name: Set up Node.js
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'npm'
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
# === LOCAL PYTHON PACKAGE BUILD ===
- name: Check for missing package entries (llama-stack-api)
if: steps.should-build.outputs.skip != 'true' && matrix.package == 'llama-stack-api'
working-directory: src/llama_stack_api
run: |
for f in *.py; do
[[ "$f" == "__init__.py" ]] && continue
grep -q "llama_stack_api.${f%.py}" pyproject.toml || echo "::warning::Missing from py-modules: ${f%.py}"
done
for d in */; do
[[ "$d" =~ ^(__pycache__|dist|build|.*egg-info|\..*)/$ ]] && continue
grep -q "llama_stack_api.${d%/}" pyproject.toml || echo "::warning::Missing from packages: ${d%/}"
done
- name: Build local Python package
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local' && matrix.registry == 'pypi'
run: uv build --out-dir dist --no-build-isolation
working-directory: ${{ matrix.path }}
env:
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ needs.compute-version.outputs.version }}
# === EXTERNAL PYTHON PACKAGE BUILD ===
- name: Build external Python package
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external' && matrix.registry == 'pypi'
working-directory: external-repo
run: |
VERSION="${{ needs.compute-version.outputs.version }}"
echo "Setting version to $VERSION"
sed -i "s/^version = .*/version = \"$VERSION\"/" pyproject.toml
# Also update __version__ in _version.py if it exists
VERSION_FILE=$(find . -name "_version.py" -path "*/llama_stack_client/*" | head -1)
if [ -n "$VERSION_FILE" ]; then
sed -i "s/__version__ = .*/__version__ = \"$VERSION\"/" "$VERSION_FILE"
fi
# Use python -m build for better compatibility
uv pip install --system build
python -m build --outdir dist
# === NPM PACKAGE BUILD ===
- name: Build TypeScript package
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'npm'
working-directory: external-repo
run: |
VERSION="${{ needs.compute-version.outputs.version }}"
# Convert PEP 440 dev version to valid semver for npm
# e.g. 0.4.5.dev20260202 -> 0.4.5-dev.20260202
NPM_VERSION=$(echo "$VERSION" | sed 's/\.dev/-dev./')
echo "Setting version to $NPM_VERSION (from $VERSION)"
npm version "$NPM_VERSION" --no-git-tag-version
npm install
npm run build
# === PYTHON PACKAGE VALIDATION ===
- name: Install validation tools
if: steps.should-build.outputs.skip != 'true' && matrix.registry == 'pypi'
run: uv pip install --system twine check-wheel-contents
- name: Check wheel contents (local)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local' && matrix.registry == 'pypi'
run: check-wheel-contents --ignore W002,W004 ${{ matrix.path }}/dist/*.whl
- name: Check wheel contents (external)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external' && matrix.registry == 'pypi'
run: check-wheel-contents --ignore W002,W004 external-repo/dist/*.whl
- name: Validate package with twine (local)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local' && matrix.registry == 'pypi'
run: twine check ${{ matrix.path }}/dist/*
- name: Validate package with twine (external)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external' && matrix.registry == 'pypi'
run: twine check external-repo/dist/*
# === LIST AND UPLOAD ARTIFACTS ===
- name: List dist contents (local)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local'
run: ls -la ${{ matrix.path }}/dist/
- name: List dist contents (external Python)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external' && matrix.registry == 'pypi'
run: ls -la external-repo/dist/
- name: List package contents (external npm)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external' && matrix.registry == 'npm'
working-directory: external-repo
run: |
npm pack --dry-run
mkdir -p dist
npm pack --pack-destination dist
ls -la dist/
- name: Upload artifacts (local)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'local'
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: Packages-${{ matrix.package }}
path: ${{ matrix.path }}/dist/*
- name: Upload artifacts (external)
if: steps.should-build.outputs.skip != 'true' && matrix.type == 'external'
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: Packages-${{ matrix.package }}
path: external-repo/dist/*
# Functional tests - install and verify packages work
test-package:
name: Test packages (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
needs: build-package
strategy:
matrix:
python-version: ['3.12', '3.13']
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0
with:
python-version: ${{ matrix.python-version }}
- name: Set up Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '20'
- name: Download llama-stack-api artifacts
id: download-api
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
name: Packages-llama-stack-api
path: dist-api
continue-on-error: true
- name: Download llama-stack artifacts
id: download-stack
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
name: Packages-llama-stack
path: dist-stack
continue-on-error: true
- name: Download llama-stack-client-python artifacts
id: download-client-python
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
name: Packages-llama-stack-client-python
path: dist-client-python
continue-on-error: true
- name: Download llama-stack-client-typescript artifacts
id: download-client-ts
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
name: Packages-llama-stack-client-typescript
path: dist-client-ts
continue-on-error: true
- name: Create venv and install Python packages
run: |
uv venv .venv
source .venv/bin/activate
# Install available Python packages
if [ -d "dist-api" ] && ls dist-api/*.whl 1>/dev/null 2>&1; then
echo "Installing llama-stack-api..."
uv pip install dist-api/*.whl
fi
if [ -d "dist-client-python" ] && ls dist-client-python/*.whl 1>/dev/null 2>&1; then
echo "Installing llama-stack-client..."
uv pip install dist-client-python/*.whl
fi
if [ -d "dist-stack" ] && ls dist-stack/*.whl 1>/dev/null 2>&1; then
echo "Installing llama-stack..."
uv pip install dist-stack/*.whl
fi
- name: List Wheel Contents (llama-stack-api)
if: steps.download-api.outcome == 'success'
run: |
source .venv/bin/activate
python -m zipfile -l dist-api/*.whl
- name: Verify Llama Stack package
if: steps.download-stack.outcome == 'success'
run: |
source .venv/bin/activate
uv pip list
uv pip show llama-stack
command -v llama
llama stack list-apis
llama stack list-providers inference
llama stack list-deps starter
- name: Verify packages are importable
run: |
source .venv/bin/activate
if [ -d "dist-stack" ] && ls dist-stack/*.whl 1>/dev/null 2>&1; then
python -c "import llama_stack; print(f'llama_stack imported successfully from {llama_stack.__file__}')"
fi
if [ -d "dist-api" ] && ls dist-api/*.whl 1>/dev/null 2>&1; then
python -c "import llama_stack_api; print(f'llama_stack_api imported successfully from {llama_stack_api.__file__}')"
fi
if [ -d "dist-client-python" ] && ls dist-client-python/*.whl 1>/dev/null 2>&1; then
python -c "import llama_stack_client; print(f'llama_stack_client imported successfully from {llama_stack_client.__file__}')"
fi
- name: Verify TypeScript package
if: steps.download-client-ts.outcome == 'success'
run: |
if [ -d "dist-client-ts" ] && ls dist-client-ts/*.tgz 1>/dev/null 2>&1; then
echo "TypeScript package tarball found:"
ls -la dist-client-ts/*.tgz
# Create a test directory and install the package
mkdir -p ts-test
cd ts-test
npm init -y
npm install ../dist-client-ts/*.tgz
echo "TypeScript package installed successfully"
# Verify the package is importable
node -e "const pkg = require('llama-stack-client'); console.log('llama-stack-client package loaded successfully');" || echo "Package may use ES modules, skipping require test"
fi
# Publish packages to PyPI/npm
# Order: llama-stack-client-python, llama-stack-client-typescript, llama-stack-api, llama-stack
publish-packages:
name: Publish ${{ matrix.package }}
if: |
github.repository_owner == 'llamastack' &&
(inputs.dry_run || 'test-pypi') != 'build-only' && (
github.event_name == 'workflow_dispatch' ||
github.event.action == 'published' ||
github.event_name == 'schedule'
)
permissions:
contents: write # for gh release upload
id-token: write # for PyPI trusted publishing
runs-on: ubuntu-latest
needs: test-package
strategy:
max-parallel: 1
matrix:
include:
# Order matters! Dependencies are published first
- package: llama-stack-client-python
registry: pypi
type: external
- package: llama-stack-client-typescript
registry: npm
type: external
- package: llama-stack-api
registry: pypi
type: local
- package: llama-stack
registry: pypi
type: local
steps:
# Skip check for package selection
- name: Check if package should be published
id: should-publish
run: |
PACKAGES="${{ inputs.packages || 'all' }}"
PACKAGE="${{ matrix.package }}"
TYPE="${{ matrix.type }}"
if [ "$PACKAGES" == "all" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
elif [ "$PACKAGES" == "llama-stack-only" ] && [ "$TYPE" == "local" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
elif [ "$PACKAGES" == "clients-only" ] && [ "$TYPE" == "external" ]; then
echo "skip=false" >> $GITHUB_OUTPUT
else
echo "skip=true" >> $GITHUB_OUTPUT
echo "::notice::Skipping publish for $PACKAGE (packages=$PACKAGES)"
fi
- name: Download build artifacts
if: steps.should-publish.outputs.skip != 'true'
id: download
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
with:
name: Packages-${{ matrix.package }}
path: dist
continue-on-error: true
- name: Check if artifacts exist
if: steps.should-publish.outputs.skip != 'true'
id: check-artifacts
run: |
if [ -d "dist" ] && [ "$(ls -A dist 2>/dev/null)" ]; then
echo "has_artifacts=true" >> $GITHUB_OUTPUT
echo "Artifacts found:"
ls -la dist/
else
echo "has_artifacts=false" >> $GITHUB_OUTPUT
echo "::warning::No artifacts found for ${{ matrix.package }}. Skipping publish."
fi
# === PYPI PUBLISHING ===
- name: Determine PyPI target
if: steps.should-publish.outputs.skip != 'true' && matrix.registry == 'pypi' && steps.check-artifacts.outputs.has_artifacts == 'true'
id: pypi-target
run: |
DRY_RUN="${{ inputs.dry_run }}"
EVENT="${{ github.event_name }}"
# Determine target registry
if [ "$EVENT" == "release" ]; then
echo "url=https://upload.pypi.org/legacy/" >> $GITHUB_OUTPUT
echo "target=pypi.org" >> $GITHUB_OUTPUT
echo "is_production=true" >> $GITHUB_OUTPUT
elif [ "$DRY_RUN" == "off" ]; then
echo "url=https://upload.pypi.org/legacy/" >> $GITHUB_OUTPUT
echo "target=pypi.org" >> $GITHUB_OUTPUT
echo "is_production=true" >> $GITHUB_OUTPUT
else
echo "url=https://test.pypi.org/legacy/" >> $GITHUB_OUTPUT
echo "target=test.pypi.org" >> $GITHUB_OUTPUT
echo "is_production=false" >> $GITHUB_OUTPUT
fi
- name: Sign artifacts with Sigstore (production only)
if: |
steps.should-publish.outputs.skip != 'true' &&
matrix.registry == 'pypi' &&
steps.check-artifacts.outputs.has_artifacts == 'true' &&
steps.pypi-target.outputs.is_production == 'true'
uses: sigstore/gh-action-sigstore-python@a5caf349bc536fbef3668a10ed7f5cd309a4b53d # v3.2.0
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
release-signing-artifacts: false
- name: Upload artifacts to GitHub release (production only)
if: |
steps.should-publish.outputs.skip != 'true' &&
matrix.registry == 'pypi' &&
steps.check-artifacts.outputs.has_artifacts == 'true' &&
steps.pypi-target.outputs.is_production == 'true' &&
github.event_name == 'release'
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
gh release upload '${{ github.ref_name }}' dist/* --repo '${{ github.repository }}' || true
- name: Remove sigstore signatures before PyPI upload
if: |
steps.should-publish.outputs.skip != 'true' &&
matrix.registry == 'pypi' &&
steps.check-artifacts.outputs.has_artifacts == 'true' &&
steps.pypi-target.outputs.is_production == 'true'
run: rm -f ./dist/*.sigstore.json
- name: Upload to PyPI
Showing preview only (306K chars total). Download the full file or copy to clipboard to get everything.
gitextract_g2qf32pc/
├── .coveragerc
├── .dockerignore
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ ├── discussion.yml
│ │ ├── feature-request.yml
│ │ └── tech-debt.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── TRIAGERS.md
│ ├── actions/
│ │ ├── install-llama-stack-client/
│ │ │ └── action.yml
│ │ ├── run-and-record-tests/
│ │ │ └── action.yml
│ │ ├── setup-ollama/
│ │ │ └── action.yml
│ │ ├── setup-runner/
│ │ │ └── action.yml
│ │ ├── setup-test-environment/
│ │ │ └── action.yml
│ │ ├── setup-typescript-client/
│ │ │ └── action.yml
│ │ └── setup-vllm/
│ │ └── action.yml
│ ├── dependabot.yml
│ ├── mergify.yml
│ └── workflows/
│ ├── README.md
│ ├── backward-compat.yml
│ ├── build-distributions.yml
│ ├── ci-status.yml
│ ├── codeql.yml
│ ├── commit-recordings.yml
│ ├── docs-build.yml
│ ├── install-script-ci.yml
│ ├── integration-auth-tests.yml
│ ├── integration-responses-conversations-auth-tests.yml
│ ├── integration-sql-store-tests.yml
│ ├── integration-tests.yml
│ ├── integration-vector-io-tests.yml
│ ├── openapi-generator-validation.yml
│ ├── openresponses-conformance.yml
│ ├── post-release.yml
│ ├── pre-commit.yml
│ ├── prepare-release.yml
│ ├── providers-build.yml
│ ├── providers-list-deps.yml
│ ├── pypi.yml
│ ├── record-integration-tests.yml
│ ├── release-branch-scheduled-ci.yml
│ ├── semantic-pr.yml
│ ├── stainless-builds.yml
│ ├── stale_bot.yml
│ ├── test-external-provider-module.yml
│ ├── test-external.yml
│ ├── ui-unit-tests.yml
│ └── unit-tests.yml
├── .gitignore
├── .pre-commit-config.yaml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── RELEASE_NOTES.md
├── RELEASE_PROCESS.md
├── SECURITY.md
├── benchmarking/
│ ├── k8s-benchmark/
│ │ ├── README.md
│ │ ├── apply.sh
│ │ ├── openai-mock-server.py
│ │ ├── results/
│ │ │ ├── guidellm-benchmark-stack-s1-sw1-v1-20250922-103408.txt
│ │ │ ├── guidellm-benchmark-stack-s1-sw2-v1-20250922-104457.txt
│ │ │ ├── guidellm-benchmark-stack-s1-sw4-v1-20250922-105539.txt
│ │ │ └── guidellm-benchmark-vllm-v1-20250922-111127.txt
│ │ ├── scripts/
│ │ │ ├── generate_charts.py
│ │ │ ├── run-all-benchmarks.sh
│ │ │ └── run-guidellm-benchmark.sh
│ │ ├── stack-configmap.yaml
│ │ ├── stack-k8s.yaml.template
│ │ └── stack_run_config.yaml
│ └── vertical-scaling/
│ ├── README.md
│ ├── locustfile.py
│ ├── mock-server.py
│ └── run-benchmark.sh
├── client-sdks/
│ ├── openapi/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build_hierarchy.py
│ │ ├── merge_stainless_config.py
│ │ ├── openapi-config.json.template
│ │ ├── openapitools.json
│ │ ├── patch_hierarchy.py
│ │ ├── patches.yml
│ │ └── templates/
│ │ └── python/
│ │ ├── README.mustache
│ │ ├── README_onlypackage.mustache
│ │ ├── __init__.mustache
│ │ ├── __init__api.mustache
│ │ ├── __init__model.mustache
│ │ ├── __init__package.mustache
│ │ ├── _exceptions.mustache
│ │ ├── _types.mustache
│ │ ├── _version.mustache
│ │ ├── api.mustache
│ │ ├── api_client.mustache
│ │ ├── api_doc.mustache
│ │ ├── api_doc_example.mustache
│ │ ├── api_response.mustache
│ │ ├── api_test.mustache
│ │ ├── async_api_client.mustache
│ │ ├── async_api_response.mustache
│ │ ├── async_stream.mustache
│ │ ├── asyncio/
│ │ │ └── rest.mustache
│ │ ├── common_README.mustache
│ │ ├── configuration.mustache
│ │ ├── exceptions.mustache
│ │ ├── exports_api.mustache
│ │ ├── exports_model.mustache
│ │ ├── exports_package.mustache
│ │ ├── git_push.sh.mustache
│ │ ├── gitignore.mustache
│ │ ├── httpx/
│ │ │ └── rest.mustache
│ │ ├── lib/
│ │ │ ├── .keep
│ │ │ ├── __init__.py
│ │ │ ├── _utils.py
│ │ │ ├── agents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent.py
│ │ │ │ ├── client_tool.py
│ │ │ │ ├── event_logger.py
│ │ │ │ ├── event_synthesizer.py
│ │ │ │ ├── react/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent.py
│ │ │ │ │ ├── prompts.py
│ │ │ │ │ └── tool_parser.py
│ │ │ │ ├── tool_parser.py
│ │ │ │ ├── turn_events.py
│ │ │ │ └── types.py
│ │ │ ├── cli/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── configure.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── datasets/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── datasets.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── register.py
│ │ │ │ │ └── unregister.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── eval.py
│ │ │ │ │ ├── run_benchmark.py
│ │ │ │ │ ├── run_scoring.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── eval_tasks/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── eval_tasks.py
│ │ │ │ │ └── list.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── inference.py
│ │ │ │ ├── inspect/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── llama_stack_client.py
│ │ │ │ ├── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── models.py
│ │ │ │ ├── post_training/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── post_training.py
│ │ │ │ ├── providers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ └── providers.py
│ │ │ │ ├── scoring_functions/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ └── scoring_functions.py
│ │ │ │ ├── shields/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── shields.py
│ │ │ │ ├── toolgroups/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── toolgroups.py
│ │ │ │ └── vector_stores/
│ │ │ │ ├── __init__.py
│ │ │ │ └── vector_stores.py
│ │ │ ├── inference/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── event_logger.py
│ │ │ │ └── utils.py
│ │ │ ├── inline/
│ │ │ │ └── inline.py
│ │ │ ├── stream_printer.py
│ │ │ └── tools/
│ │ │ ├── __init__.py
│ │ │ └── mcp_oauth.py
│ │ ├── llama_stack_client.mustache
│ │ ├── model.mustache
│ │ ├── model_anyof.mustache
│ │ ├── model_doc.mustache
│ │ ├── model_enum.mustache
│ │ ├── model_generic.mustache
│ │ ├── model_oneof.mustache
│ │ ├── model_test.mustache
│ │ ├── partial_api.mustache
│ │ ├── partial_api_args.mustache
│ │ ├── partial_header.mustache
│ │ ├── partial_model_postponed_imports.mustache
│ │ ├── partial_model_wrapper_methods.mustache
│ │ ├── py.typed.mustache
│ │ ├── pyproject.mustache
│ │ ├── python_doc_auth_partial.mustache
│ │ ├── requirements.mustache
│ │ ├── rest.mustache
│ │ ├── setup.mustache
│ │ ├── setup_cfg.mustache
│ │ ├── signing.mustache
│ │ ├── stream.mustache
│ │ ├── test-requirements.mustache
│ │ ├── tornado/
│ │ │ └── rest.mustache
│ │ └── tox.mustache
│ └── stainless/
│ ├── README.md
│ ├── config.yml
│ └── openapi.yml
├── conftest.py
├── containers/
│ └── Containerfile
├── docs/
│ ├── README.md
│ ├── blog/
│ │ ├── 2026-01-13-introducing-llama-stack.md
│ │ ├── 2026-01-30-how-to-get-started.md
│ │ ├── 2026-03-01-building-agentic-flows.md
│ │ ├── 2026-03-18-responses-api.md
│ │ ├── building-agentic-flows/
│ │ │ ├── design/
│ │ │ │ └── user_service_v2.md
│ │ │ ├── postmortems/
│ │ │ │ ├── 2025-01-search-indexing-incident.md
│ │ │ │ └── 2025-02-checkout-outage.md
│ │ │ └── runbooks/
│ │ │ └── deployment_rollback.md
│ │ └── self_improving_agent.py
│ ├── docs/
│ │ ├── advanced_apis/
│ │ │ ├── evaluation.mdx
│ │ │ └── scoring.mdx
│ │ ├── api-openai/
│ │ │ ├── conformance.mdx
│ │ │ ├── index.mdx
│ │ │ └── provider_matrix.md
│ │ ├── api-overview.md
│ │ ├── building_applications/
│ │ │ ├── agent.mdx
│ │ │ ├── agent_execution_loop.mdx
│ │ │ ├── evals.mdx
│ │ │ ├── index.mdx
│ │ │ ├── playground.mdx
│ │ │ ├── rag.mdx
│ │ │ ├── responses_vs_agents.mdx
│ │ │ ├── safety.mdx
│ │ │ ├── telemetry.mdx
│ │ │ └── tools.mdx
│ │ ├── concepts/
│ │ │ ├── apis/
│ │ │ │ ├── api_leveling.mdx
│ │ │ │ ├── api_providers.mdx
│ │ │ │ ├── external.mdx
│ │ │ │ └── index.mdx
│ │ │ ├── architecture.mdx
│ │ │ ├── distributions.mdx
│ │ │ ├── evaluation_concepts.mdx
│ │ │ ├── file_operations_vector_stores.mdx
│ │ │ ├── index.mdx
│ │ │ ├── resources.mdx
│ │ │ └── vector_stores_configuration.mdx
│ │ ├── contributing/
│ │ │ ├── index.mdx
│ │ │ ├── new_api_provider.mdx
│ │ │ ├── new_vector_database.mdx
│ │ │ └── testing/
│ │ │ └── record-replay.mdx
│ │ ├── deploying/
│ │ │ ├── aws_eks_deployment.mdx
│ │ │ ├── index.mdx
│ │ │ └── kubernetes_deployment.mdx
│ │ ├── distributions/
│ │ │ ├── building_distro.mdx
│ │ │ ├── configuration.mdx
│ │ │ ├── customizing_run_yaml.mdx
│ │ │ ├── eks/
│ │ │ │ ├── apply.sh
│ │ │ │ └── gp3-topology-aware.yaml
│ │ │ ├── importing_as_library.mdx
│ │ │ ├── index.mdx
│ │ │ ├── k8s/
│ │ │ │ ├── apply.sh
│ │ │ │ ├── chroma-k8s.yaml.template
│ │ │ │ ├── hf-token-secret.yaml.template
│ │ │ │ ├── ingress-k8s.yaml.template
│ │ │ │ ├── postgres-k8s.yaml.template
│ │ │ │ ├── stack-configmap.yaml
│ │ │ │ ├── stack-k8s.yaml.template
│ │ │ │ ├── stack_run_config.yaml
│ │ │ │ ├── ui-k8s.yaml.template
│ │ │ │ ├── vllm-k8s.yaml.template
│ │ │ │ └── vllm-safety-k8s.yaml.template
│ │ │ ├── list_of_distributions.mdx
│ │ │ ├── llama_stack_ui.mdx
│ │ │ ├── ondevice_distro/
│ │ │ │ ├── android_sdk.md
│ │ │ │ └── ios_sdk.md
│ │ │ ├── remote_hosted_distro/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── oci.md
│ │ │ │ └── watsonx.md
│ │ │ ├── self_hosted_distro/
│ │ │ │ ├── dell-tgi.md
│ │ │ │ ├── dell.md
│ │ │ │ ├── nvidia.md
│ │ │ │ ├── passthrough.md
│ │ │ │ └── starter.md
│ │ │ └── starting_llama_stack_server.mdx
│ │ ├── getting_started/
│ │ │ ├── demo_script.py
│ │ │ ├── detailed_tutorial.mdx
│ │ │ ├── libraries.mdx
│ │ │ └── quickstart.mdx
│ │ ├── index.mdx
│ │ ├── providers/
│ │ │ ├── agents/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_builtin.mdx
│ │ │ ├── batches/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_reference.mdx
│ │ │ ├── datasetio/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_localfs.mdx
│ │ │ │ ├── remote_huggingface.mdx
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── eval/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_builtin.mdx
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── external/
│ │ │ │ ├── external-providers-guide.mdx
│ │ │ │ ├── external-providers-list.mdx
│ │ │ │ └── index.mdx
│ │ │ ├── file_processors/
│ │ │ │ ├── index.mdx
│ │ │ │ └── inline_pypdf.mdx
│ │ │ ├── files/
│ │ │ │ ├── files.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_localfs.mdx
│ │ │ │ ├── openai_file_operations_quick_reference.md
│ │ │ │ ├── openai_file_operations_support.md
│ │ │ │ ├── remote_openai.mdx
│ │ │ │ └── remote_s3.mdx
│ │ │ ├── index.mdx
│ │ │ ├── inference/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_sentence-transformers.mdx
│ │ │ │ ├── inline_transformers.mdx
│ │ │ │ ├── remote_anthropic.mdx
│ │ │ │ ├── remote_azure.mdx
│ │ │ │ ├── remote_bedrock.mdx
│ │ │ │ ├── remote_cerebras.mdx
│ │ │ │ ├── remote_databricks.mdx
│ │ │ │ ├── remote_fireworks.mdx
│ │ │ │ ├── remote_gemini.mdx
│ │ │ │ ├── remote_groq.mdx
│ │ │ │ ├── remote_hf_endpoint.mdx
│ │ │ │ ├── remote_hf_serverless.mdx
│ │ │ │ ├── remote_llama-cpp-server.mdx
│ │ │ │ ├── remote_llama-cpp.mdx
│ │ │ │ ├── remote_llama-openai-compat.mdx
│ │ │ │ ├── remote_llama-server.mdx
│ │ │ │ ├── remote_nvidia.mdx
│ │ │ │ ├── remote_oci.mdx
│ │ │ │ ├── remote_ollama.mdx
│ │ │ │ ├── remote_openai.mdx
│ │ │ │ ├── remote_passthrough.mdx
│ │ │ │ ├── remote_runpod.mdx
│ │ │ │ ├── remote_sambanova-openai-compat.mdx
│ │ │ │ ├── remote_sambanova.mdx
│ │ │ │ ├── remote_tgi.mdx
│ │ │ │ ├── remote_together.mdx
│ │ │ │ ├── remote_vertexai.mdx
│ │ │ │ ├── remote_vllm.mdx
│ │ │ │ └── remote_watsonx.mdx
│ │ │ ├── openai.mdx
│ │ │ ├── openai_responses_limitations.mdx
│ │ │ ├── post_training/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_huggingface-cpu.mdx
│ │ │ │ ├── inline_huggingface-gpu.mdx
│ │ │ │ ├── inline_huggingface.mdx
│ │ │ │ ├── inline_torchtune-cpu.mdx
│ │ │ │ ├── inline_torchtune-gpu.mdx
│ │ │ │ ├── inline_torchtune.md
│ │ │ │ └── remote_nvidia.mdx
│ │ │ ├── safety/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_code-scanner.mdx
│ │ │ │ ├── inline_llama-guard.mdx
│ │ │ │ ├── inline_prompt-guard.mdx
│ │ │ │ ├── remote_bedrock.mdx
│ │ │ │ ├── remote_nvidia.mdx
│ │ │ │ ├── remote_passthrough.mdx
│ │ │ │ └── remote_sambanova.mdx
│ │ │ ├── scoring/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_basic.mdx
│ │ │ │ ├── inline_braintrust.mdx
│ │ │ │ └── inline_llm-as-judge.mdx
│ │ │ ├── tool_runtime/
│ │ │ │ ├── index.mdx
│ │ │ │ ├── inline_file-search.mdx
│ │ │ │ ├── inline_rag-runtime.mdx
│ │ │ │ ├── remote_bing-search.mdx
│ │ │ │ ├── remote_brave-search.mdx
│ │ │ │ ├── remote_model-context-protocol.mdx
│ │ │ │ ├── remote_tavily-search.mdx
│ │ │ │ └── remote_wolfram-alpha.mdx
│ │ │ └── vector_io/
│ │ │ ├── index.mdx
│ │ │ ├── inline_builtin.mdx
│ │ │ ├── inline_chromadb.mdx
│ │ │ ├── inline_faiss.mdx
│ │ │ ├── inline_milvus.mdx
│ │ │ ├── inline_qdrant.mdx
│ │ │ ├── inline_sqlite-vec.mdx
│ │ │ ├── inline_sqlite_vec.mdx
│ │ │ ├── remote_chromadb.mdx
│ │ │ ├── remote_elasticsearch.mdx
│ │ │ ├── remote_milvus.mdx
│ │ │ ├── remote_oci.mdx
│ │ │ ├── remote_pgvector.mdx
│ │ │ ├── remote_qdrant.mdx
│ │ │ └── remote_weaviate.mdx
│ │ └── references/
│ │ ├── evals_reference/
│ │ │ └── index.mdx
│ │ ├── index.mdx
│ │ ├── llama_cli_reference/
│ │ │ ├── download_models.md
│ │ │ └── index.md
│ │ ├── llama_stack_client_cli_reference.md
│ │ └── python_sdk_reference/
│ │ └── index.md
│ ├── docusaurus.config.ts
│ ├── getting_started.ipynb
│ ├── getting_started_llama_api.ipynb
│ ├── license_header.txt
│ ├── notebooks/
│ │ ├── Llama_Stack_Agent_Workflows.ipynb
│ │ ├── Llama_Stack_RAG_Lifecycle.ipynb
│ │ ├── bedrock_inference_example.ipynb
│ │ ├── crewai/
│ │ │ └── Llama_Stack_CrewAI.ipynb
│ │ ├── langchain/
│ │ │ └── Llama_Stack_LangChain.ipynb
│ │ ├── llamastack_agents_getting_started_examples.ipynb
│ │ ├── microsoft_agent_framework/
│ │ │ └── microsoft_agent_framework_llama_stack_integration.ipynb
│ │ ├── nvidia/
│ │ │ ├── beginner_e2e/
│ │ │ │ ├── README.md
│ │ │ │ ├── config.py
│ │ │ │ └── sample_data/
│ │ │ │ ├── sample_content_safety_test_data/
│ │ │ │ │ ├── content_safety_input.jsonl
│ │ │ │ │ └── content_safety_input_50.jsonl
│ │ │ │ ├── sample_squad_data/
│ │ │ │ │ ├── testing/
│ │ │ │ │ │ └── testing.jsonl
│ │ │ │ │ ├── training/
│ │ │ │ │ │ └── training.jsonl
│ │ │ │ │ └── validation/
│ │ │ │ │ └── validation.jsonl
│ │ │ │ └── sample_squad_messages/
│ │ │ │ ├── testing/
│ │ │ │ │ └── testing.jsonl
│ │ │ │ ├── training/
│ │ │ │ │ └── training.jsonl
│ │ │ │ └── validation/
│ │ │ │ └── validation.jsonl
│ │ │ └── tool_calling/
│ │ │ ├── 1_data_preparation.ipynb
│ │ │ ├── 3_model_evaluation.ipynb
│ │ │ ├── 4_adding_safety_guardrails.ipynb
│ │ │ ├── README.md
│ │ │ └── config.py
│ │ ├── oci/
│ │ │ ├── OCI_LlamaStack_Agents_Demo.ipynb
│ │ │ ├── OCI_LlamaStack_Demo.ipynb
│ │ │ └── OCI_ObjectStore_Demo.ipynb
│ │ └── responses-api-agent-migration.ipynb
│ ├── original_rfc.md
│ ├── package.json
│ ├── quick_start.ipynb
│ ├── releases/
│ │ ├── GENERATE.md
│ │ └── RELEASE_NOTES_0.5.md
│ ├── scripts/
│ │ └── sync-files.js
│ ├── sidebars.ts
│ ├── source/
│ │ └── providers/
│ │ ├── agents/
│ │ │ └── index.md
│ │ └── inference/
│ │ └── index.md
│ ├── src/
│ │ ├── components/
│ │ │ ├── CodeFromFile.jsx
│ │ │ └── HomepageFeatures/
│ │ │ ├── index.js
│ │ │ └── styles.module.css
│ │ ├── css/
│ │ │ └── custom.css
│ │ └── pages/
│ │ ├── index.js
│ │ ├── index.module.css
│ │ └── markdown-page.md
│ ├── static/
│ │ ├── deprecated-llama-stack-spec.html
│ │ ├── deprecated-llama-stack-spec.yaml
│ │ ├── experimental-llama-stack-spec.yaml
│ │ ├── llama-stack-spec.html
│ │ ├── llama-stack-spec.yaml
│ │ ├── openai-coverage.json
│ │ ├── openai-spec-2.3.0.yml
│ │ ├── openresponses-spec.json
│ │ ├── site.webmanifest
│ │ ├── stainless-llama-stack-spec.html
│ │ └── stainless-llama-stack-spec.yaml
│ ├── supplementary/
│ │ ├── deprecated/
│ │ │ └── agents-api.md
│ │ ├── experimental/
│ │ │ └── agents-api.md
│ │ └── stable/
│ │ └── agents-api.md
│ ├── tsconfig.json
│ └── zero_to_hero_guide/
│ ├── 00_Inference101.ipynb
│ ├── 01_Local_Cloud_Inference101.ipynb
│ ├── 02_Prompt_Engineering101.ipynb
│ ├── 03_Image_Chat101.ipynb
│ ├── 04_Tool_Calling101.ipynb
│ ├── 05_Memory101.ipynb
│ ├── 06_Safety101.ipynb
│ ├── 07_Agents101.ipynb
│ ├── README.md
│ └── Tool_Calling101_Using_Together_Llama_Stack_Server.ipynb
├── pyproject.toml
├── scripts/
│ ├── check-api-conformance.sh
│ ├── check-init-py.sh
│ ├── check-workflows-use-hashes.sh
│ ├── cleanup_recordings.py
│ ├── diagnose_recordings.py
│ ├── distro_codegen.py
│ ├── docker.sh
│ ├── gen-ci-docs.py
│ ├── generate_ci_matrix.py
│ ├── generate_openai_coverage_docs.py
│ ├── generate_prompt_format.py
│ ├── get_setup_env.py
│ ├── install.sh
│ ├── integration-auth-tests.sh
│ ├── integration-responses-conversations-auth-tests.sh
│ ├── integration-tests.sh
│ ├── normalize_recordings.py
│ ├── openai_coverage.py
│ ├── openapi_generator/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── _legacy_order.py
│ │ ├── app.py
│ │ ├── endpoints.py
│ │ ├── main.py
│ │ ├── schema_collection.py
│ │ ├── schema_filtering.py
│ │ ├── schema_transforms.py
│ │ ├── stainless_config/
│ │ │ ├── __init__.py
│ │ │ └── generate_config.py
│ │ └── state.py
│ ├── provider_codegen.py
│ ├── provider_compat_matrix.py
│ ├── record-openresponses-conformance.sh
│ ├── responses_test_coverage.py
│ ├── run-ui-linter.sh
│ ├── run_openapi_generator.sh
│ ├── telemetry/
│ │ ├── README.md
│ │ ├── grafana-dashboards.yaml
│ │ ├── grafana-datasources.yaml
│ │ ├── llama-stack-dashboard.json
│ │ ├── llama-stack-tool-runtime-metrics.json
│ │ ├── llama-stack-vector-io-metrics.json
│ │ ├── otel-collector-config.yaml
│ │ ├── prometheus.yml
│ │ └── setup_telemetry.sh
│ ├── unit-tests.sh
│ └── uv-run-with-index.sh
├── src/
│ ├── llama_stack/
│ │ ├── __init__.py
│ │ ├── cli/
│ │ │ ├── __init__.py
│ │ │ ├── llama.py
│ │ │ ├── scripts/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── install-wheel-from-presigned.sh
│ │ │ │ └── run.py
│ │ │ ├── stack/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _list_deps.py
│ │ │ │ ├── list_apis.py
│ │ │ │ ├── list_deps.py
│ │ │ │ ├── list_providers.py
│ │ │ │ ├── list_stacks.py
│ │ │ │ ├── remove.py
│ │ │ │ ├── run.py
│ │ │ │ ├── stack.py
│ │ │ │ └── utils.py
│ │ │ ├── subcommand.py
│ │ │ ├── table.py
│ │ │ └── utils.py
│ │ ├── core/
│ │ │ ├── __init__.py
│ │ │ ├── access_control/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── access_control.py
│ │ │ │ ├── conditions.py
│ │ │ │ └── datatypes.py
│ │ │ ├── admin.py
│ │ │ ├── build.py
│ │ │ ├── client.py
│ │ │ ├── common.sh
│ │ │ ├── configure.py
│ │ │ ├── connectors/
│ │ │ │ ├── __init__.py
│ │ │ │ └── connectors.py
│ │ │ ├── conversations/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conversations.py
│ │ │ │ └── validation.py
│ │ │ ├── datatypes.py
│ │ │ ├── distribution.py
│ │ │ ├── exceptions/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mapping.py
│ │ │ │ └── translation.py
│ │ │ ├── external.py
│ │ │ ├── id_generation.py
│ │ │ ├── inspect.py
│ │ │ ├── library_client.py
│ │ │ ├── prompts/
│ │ │ │ ├── __init__.py
│ │ │ │ └── prompts.py
│ │ │ ├── providers.py
│ │ │ ├── request_headers.py
│ │ │ ├── resolver.py
│ │ │ ├── routers/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── datasets.py
│ │ │ │ ├── eval_scoring.py
│ │ │ │ ├── inference.py
│ │ │ │ ├── safety.py
│ │ │ │ ├── tool_runtime.py
│ │ │ │ └── vector_io.py
│ │ │ ├── routing_tables/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── benchmarks.py
│ │ │ │ ├── common.py
│ │ │ │ ├── datasets.py
│ │ │ │ ├── models.py
│ │ │ │ ├── scoring_functions.py
│ │ │ │ ├── shields.py
│ │ │ │ ├── toolgroups.py
│ │ │ │ └── vector_stores.py
│ │ │ ├── server/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth.py
│ │ │ │ ├── auth_providers.py
│ │ │ │ ├── fastapi_router_registry.py
│ │ │ │ ├── quota.py
│ │ │ │ ├── routes.py
│ │ │ │ └── server.py
│ │ │ ├── stack.py
│ │ │ ├── start_stack.sh
│ │ │ ├── storage/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── datatypes.py
│ │ │ │ ├── kvstore/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── kvstore.py
│ │ │ │ │ ├── mongodb/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── mongodb.py
│ │ │ │ │ ├── postgres/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── postgres.py
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── redis.py
│ │ │ │ │ └── sqlite/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sqlite.py
│ │ │ │ └── sqlstore/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── authorized_sqlstore.py
│ │ │ │ ├── sqlalchemy_sqlstore.py
│ │ │ │ └── sqlstore.py
│ │ │ ├── store/
│ │ │ │ ├── __init__.py
│ │ │ │ └── registry.py
│ │ │ ├── task.py
│ │ │ ├── testing_context.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── config_dirs.py
│ │ │ ├── config_resolution.py
│ │ │ ├── context.py
│ │ │ ├── dynamic.py
│ │ │ ├── exec.py
│ │ │ ├── image_types.py
│ │ │ ├── model_utils.py
│ │ │ ├── prompt_for_config.py
│ │ │ ├── serialize.py
│ │ │ └── type_inspection.py
│ │ ├── distributions/
│ │ │ ├── __init__.py
│ │ │ ├── ci-tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── ci_tests.py
│ │ │ │ ├── config.yaml
│ │ │ │ └── run-with-postgres-store.yaml
│ │ │ ├── dell/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── dell.py
│ │ │ │ ├── doc_template.md
│ │ │ │ └── run-with-safety.yaml
│ │ │ ├── nvidia/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── doc_template.md
│ │ │ │ ├── nvidia.py
│ │ │ │ └── run-with-safety.yaml
│ │ │ ├── oci/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ ├── doc_template.md
│ │ │ │ └── oci.py
│ │ │ ├── open-benchmark/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.yaml
│ │ │ │ └── open_benchmark.py
│ │ │ ├── postgres-demo/
│ │ │ │ └── config.yaml
│ │ │ ├── starter/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── run-with-postgres-store.yaml
│ │ │ │ └── starter.py
│ │ │ ├── starter-gpu/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── build.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── run-with-postgres-store.yaml
│ │ │ │ └── starter_gpu.py
│ │ │ ├── template.py
│ │ │ └── watsonx/
│ │ │ ├── __init__.py
│ │ │ ├── config.yaml
│ │ │ └── watsonx.py
│ │ ├── env.py
│ │ ├── log.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ └── llama/
│ │ │ ├── __init__.py
│ │ │ ├── sku_list.py
│ │ │ └── sku_types.py
│ │ ├── providers/
│ │ │ ├── __init__.py
│ │ │ ├── inline/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── builtin/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── responses/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── openai_responses.py
│ │ │ │ │ │ ├── streaming.py
│ │ │ │ │ │ ├── tool_executor.py
│ │ │ │ │ │ ├── types.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ └── safety.py
│ │ │ │ ├── batches/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── reference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── batches.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── datasetio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── localfs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── datasetio.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── builtin/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── eval.py
│ │ │ │ ├── file_processor/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── pypdf/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── pypdf.py
│ │ │ │ ├── files/
│ │ │ │ │ └── localfs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── files.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── sentence_transformers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── sentence_transformers.py
│ │ │ │ │ └── transformers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── transformers.py
│ │ │ │ ├── ios/
│ │ │ │ │ └── inference/
│ │ │ │ │ ├── LocalInferenceImpl/
│ │ │ │ │ │ ├── LocalInference.h
│ │ │ │ │ │ ├── LocalInference.swift
│ │ │ │ │ │ ├── Parsing.swift
│ │ │ │ │ │ ├── PromptTemplate.swift
│ │ │ │ │ │ └── SystemPrompts.swift
│ │ │ │ │ └── LocalInferenceImpl.xcodeproj/
│ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ └── project.xcworkspace/
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata/
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ ├── safety/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── code_scanner/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── code_scanner.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── llama_guard/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama_guard.py
│ │ │ │ │ └── prompt_guard/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── prompt_guard.py
│ │ │ │ ├── scoring/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── basic/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── scoring.py
│ │ │ │ │ │ ├── scoring_fn/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── docvqa_scoring_fn.py
│ │ │ │ │ │ │ ├── equality_scoring_fn.py
│ │ │ │ │ │ │ ├── fn_defs/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── docvqa.py
│ │ │ │ │ │ │ │ ├── equality.py
│ │ │ │ │ │ │ │ ├── ifeval.py
│ │ │ │ │ │ │ │ ├── regex_parser_math_response.py
│ │ │ │ │ │ │ │ ├── regex_parser_multiple_choice_answer.py
│ │ │ │ │ │ │ │ └── subset_of.py
│ │ │ │ │ │ │ ├── ifeval_scoring_fn.py
│ │ │ │ │ │ │ ├── regex_parser_math_response_scoring_fn.py
│ │ │ │ │ │ │ ├── regex_parser_scoring_fn.py
│ │ │ │ │ │ │ └── subset_of_scoring_fn.py
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── ifeval_utils.py
│ │ │ │ │ │ └── math_utils.py
│ │ │ │ │ ├── braintrust/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── braintrust.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── scoring_fn/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fn_defs/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── answer_correctness.py
│ │ │ │ │ │ ├── answer_relevancy.py
│ │ │ │ │ │ ├── answer_similarity.py
│ │ │ │ │ │ ├── context_entity_recall.py
│ │ │ │ │ │ ├── context_precision.py
│ │ │ │ │ │ ├── context_recall.py
│ │ │ │ │ │ ├── context_relevancy.py
│ │ │ │ │ │ ├── factuality.py
│ │ │ │ │ │ └── faithfulness.py
│ │ │ │ │ └── llm_as_judge/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── scoring.py
│ │ │ │ │ └── scoring_fn/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── fn_defs/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── llm_as_judge_405b_simpleqa.py
│ │ │ │ │ │ └── llm_as_judge_base.py
│ │ │ │ │ └── llm_as_judge_scoring_fn.py
│ │ │ │ ├── tool_runtime/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── file_search/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── context_retriever.py
│ │ │ │ │ └── file_search.py
│ │ │ │ └── vector_io/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chroma/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── faiss/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── faiss.py
│ │ │ │ ├── milvus/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── qdrant/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── config.py
│ │ │ │ └── sqlite_vec/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ └── sqlite_vec.py
│ │ │ ├── registry/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents.py
│ │ │ │ ├── batches.py
│ │ │ │ ├── datasetio.py
│ │ │ │ ├── eval.py
│ │ │ │ ├── file_processors.py
│ │ │ │ ├── files.py
│ │ │ │ ├── inference.py
│ │ │ │ ├── safety.py
│ │ │ │ ├── scoring.py
│ │ │ │ ├── tool_runtime.py
│ │ │ │ └── vector_io.py
│ │ │ ├── remote/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agents/
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── datasetio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── huggingface/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── huggingface.py
│ │ │ │ │ └── nvidia/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── datasetio.py
│ │ │ │ ├── eval/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── nvidia/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── eval.py
│ │ │ │ ├── files/
│ │ │ │ │ ├── openai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── files.py
│ │ │ │ │ └── s3/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── files.py
│ │ │ │ ├── inference/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── anthropic/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anthropic.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── azure/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── azure.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── bedrock/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bedrock.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── cerebras/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── cerebras.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── databricks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── databricks.py
│ │ │ │ │ ├── fireworks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── fireworks.py
│ │ │ │ │ ├── gemini/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── gemini.py
│ │ │ │ │ ├── groq/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── groq.py
│ │ │ │ │ ├── llama_cpp_server/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama_cpp_server.py
│ │ │ │ │ ├── llama_openai_compat/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── llama.py
│ │ │ │ │ ├── nvidia/
│ │ │ │ │ │ ├── NVIDIA.md
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── nvidia.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── oci/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── auth.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── oci.py
│ │ │ │ │ ├── ollama/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── ollama.py
│ │ │ │ │ ├── openai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── openai.py
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── passthrough.py
│ │ │ │ │ ├── runpod/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── runpod.py
│ │ │ │ │ ├── sambanova/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── sambanova.py
│ │ │ │ │ ├── tgi/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── tgi.py
│ │ │ │ │ ├── together/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── together.py
│ │ │ │ │ ├── vertexai/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ ├── converters.py
│ │ │ │ │ │ ├── utils.py
│ │ │ │ │ │ └── vertexai.py
│ │ │ │ │ ├── vllm/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── vllm.py
│ │ │ │ │ └── watsonx/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── watsonx.py
│ │ │ │ ├── safety/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── bedrock/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bedrock.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── nvidia/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── nvidia.py
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── passthrough.py
│ │ │ │ │ └── sambanova/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── sambanova.py
│ │ │ │ ├── tool_runtime/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── bing_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bing_search.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── brave_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── brave_search.py
│ │ │ │ │ │ └── config.py
│ │ │ │ │ ├── model_context_protocol/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── model_context_protocol.py
│ │ │ │ │ ├── tavily_search/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── config.py
│ │ │ │ │ │ └── tavily_search.py
│ │ │ │ │ └── wolfram_alpha/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── wolfram_alpha.py
│ │ │ │ └── vector_io/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── chroma/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── chroma.py
│ │ │ │ │ └── config.py
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── elasticsearch.py
│ │ │ │ ├── milvus/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── milvus.py
│ │ │ │ ├── oci/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── oci26ai.py
│ │ │ │ ├── pgvector/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── pgvector.py
│ │ │ │ ├── qdrant/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ └── qdrant.py
│ │ │ │ └── weaviate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── config.py
│ │ │ │ └── weaviate.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── bedrock/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── client.py
│ │ │ │ ├── config.py
│ │ │ │ └── refreshable_boto_session.py
│ │ │ ├── common/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── data_schema_validator.py
│ │ │ │ └── data_url.py
│ │ │ ├── datasetio/
│ │ │ │ ├── __init__.py
│ │ │ │ └── url_utils.py
│ │ │ ├── files/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── form_data.py
│ │ │ │ └── sanitize.py
│ │ │ ├── inference/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── embedding_mixin.py
│ │ │ │ ├── http_client.py
│ │ │ │ ├── inference_store.py
│ │ │ │ ├── model_registry.py
│ │ │ │ ├── openai_compat.py
│ │ │ │ ├── openai_mixin.py
│ │ │ │ ├── prompt_adapter.py
│ │ │ │ └── stream_utils.py
│ │ │ ├── memory/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── file_utils.py
│ │ │ │ ├── openai_vector_store_mixin.py
│ │ │ │ └── vector_store.py
│ │ │ ├── pagination.py
│ │ │ ├── responses/
│ │ │ │ ├── __init__.py
│ │ │ │ └── responses_store.py
│ │ │ ├── safety.py
│ │ │ ├── scheduler.py
│ │ │ ├── scoring/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aggregation_utils.py
│ │ │ │ ├── base_scoring_fn.py
│ │ │ │ └── basic_scoring_utils.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mcp.py
│ │ │ │ └── ttl_dict.py
│ │ │ └── vector_io/
│ │ │ ├── __init__.py
│ │ │ ├── filters.py
│ │ │ └── vector_utils.py
│ │ ├── telemetry/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── helpers.py
│ │ │ ├── tool_runtime_metrics.py
│ │ │ └── vector_io_metrics.py
│ │ └── testing/
│ │ ├── __init__.py
│ │ ├── api_recorder.py
│ │ ├── exception_utils.py
│ │ └── providers/
│ │ ├── __init__.py
│ │ ├── _config.py
│ │ ├── ollama.py
│ │ └── openai.py
│ ├── llama_stack_api/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── admin/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── agents/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── batches/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── benchmarks/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── content_types.py
│ │ │ ├── errors.py
│ │ │ ├── job_types.py
│ │ │ ├── responses.py
│ │ │ ├── type_system.py
│ │ │ └── upload_safety.py
│ │ ├── connectors/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── conversations/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datasetio/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datasets/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── datatypes.py
│ │ ├── eval/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── compat.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── file_processors/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── files/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── filters.py
│ │ ├── inference/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── inspect_api/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── internal/
│ │ │ ├── __init__.py
│ │ │ ├── kvstore.py
│ │ │ └── sqlstore.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── openai_responses.py
│ │ ├── prompts/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── providers/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── py.typed
│ │ ├── pyproject.toml
│ │ ├── rag_tool.py
│ │ ├── resource.py
│ │ ├── router_utils.py
│ │ ├── safety/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── datatypes.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── schema_utils.py
│ │ ├── scoring/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── scoring_functions/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── shields/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── tools.py
│ │ ├── validators.py
│ │ ├── vector_io/
│ │ │ ├── __init__.py
│ │ │ ├── api.py
│ │ │ ├── fastapi_routes.py
│ │ │ └── models.py
│ │ ├── vector_stores.py
│ │ └── version.py
│ └── llama_stack_ui/
│ ├── .dockerignore
│ ├── .gitignore
│ ├── .nvmrc
│ ├── .prettierignore
│ ├── .prettierrc
│ ├── Containerfile
│ ├── README.md
│ ├── app/
│ │ ├── api/
│ │ │ ├── auth/
│ │ │ │ └── [...nextauth]/
│ │ │ │ └── route.ts
│ │ │ └── v1/
│ │ │ └── [...path]/
│ │ │ └── route.ts
│ │ ├── auth/
│ │ │ └── signin/
│ │ │ └── page.tsx
│ │ ├── chat-playground/
│ │ │ ├── chunk-processor.test.tsx
│ │ │ ├── page.test.tsx
│ │ │ └── page.tsx
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ ├── logs/
│ │ │ ├── chat-completions/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── files/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── responses/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ └── vector-stores/
│ │ │ ├── [id]/
│ │ │ │ ├── files/
│ │ │ │ │ └── [fileId]/
│ │ │ │ │ ├── contents/
│ │ │ │ │ │ ├── [contentId]/
│ │ │ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── page.test.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── page.tsx
│ │ └── prompts/
│ │ └── page.tsx
│ ├── bin/
│ │ └── cli.js
│ ├── components/
│ │ ├── chat-completions/
│ │ │ ├── chat-completion-detail.test.tsx
│ │ │ ├── chat-completion-detail.tsx
│ │ │ ├── chat-completion-table.test.tsx
│ │ │ ├── chat-completions-table.tsx
│ │ │ └── chat-messasge-item.tsx
│ │ ├── chat-playground/
│ │ │ ├── chat-message.tsx
│ │ │ ├── chat.tsx
│ │ │ ├── conversations.test.tsx
│ │ │ ├── conversations.tsx
│ │ │ ├── interrupt-prompt.tsx
│ │ │ ├── markdown-renderer.tsx
│ │ │ ├── message-components.tsx
│ │ │ ├── message-input.tsx
│ │ │ ├── message-list.tsx
│ │ │ ├── prompt-suggestions.tsx
│ │ │ ├── typing-indicator.tsx
│ │ │ └── vector-db-creator.tsx
│ │ ├── files/
│ │ │ ├── csv-viewer.tsx
│ │ │ ├── file-detail.tsx
│ │ │ ├── file-editor.tsx
│ │ │ ├── file-upload-zone.test.tsx
│ │ │ ├── file-upload-zone.tsx
│ │ │ ├── files-management.test.tsx
│ │ │ ├── files-management.tsx
│ │ │ └── json-viewer.tsx
│ │ ├── layout/
│ │ │ ├── app-sidebar.tsx
│ │ │ ├── detail-layout.tsx
│ │ │ ├── logs-layout.tsx
│ │ │ └── page-breadcrumb.tsx
│ │ ├── logs/
│ │ │ ├── logs-table-scroll.test.tsx
│ │ │ ├── logs-table.test.tsx
│ │ │ └── logs-table.tsx
│ │ ├── prompts/
│ │ │ ├── index.ts
│ │ │ ├── prompt-editor.test.tsx
│ │ │ ├── prompt-editor.tsx
│ │ │ ├── prompt-list.test.tsx
│ │ │ ├── prompt-list.tsx
│ │ │ ├── prompt-management.test.tsx
│ │ │ ├── prompt-management.tsx
│ │ │ └── types.ts
│ │ ├── providers/
│ │ │ └── session-provider.tsx
│ │ ├── responses/
│ │ │ ├── grouping/
│ │ │ │ └── grouped-items-display.tsx
│ │ │ ├── hooks/
│ │ │ │ └── function-call-grouping.ts
│ │ │ ├── items/
│ │ │ │ ├── function-call-item.tsx
│ │ │ │ ├── generic-item.tsx
│ │ │ │ ├── grouped-function-call-item.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── item-renderer.tsx
│ │ │ │ ├── message-item.tsx
│ │ │ │ └── web-search-item.tsx
│ │ │ ├── responses-detail.test.tsx
│ │ │ ├── responses-detail.tsx
│ │ │ ├── responses-table.test.tsx
│ │ │ ├── responses-table.tsx
│ │ │ └── utils/
│ │ │ └── item-types.ts
│ │ ├── ui/
│ │ │ ├── audio-visualizer.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── breadcrumb.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── collapsible.tsx
│ │ │ ├── copy-button.tsx
│ │ │ ├── dropdown-menu.tsx
│ │ │ ├── file-preview.tsx
│ │ │ ├── input.tsx
│ │ │ ├── label.tsx
│ │ │ ├── mode-toggle.tsx
│ │ │ ├── select.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── sheet.tsx
│ │ │ ├── sidebar.tsx
│ │ │ ├── sign-in-button.tsx
│ │ │ ├── skeleton.tsx
│ │ │ ├── sonner.tsx
│ │ │ ├── table.tsx
│ │ │ ├── tabs.tsx
│ │ │ ├── textarea.tsx
│ │ │ ├── theme-provider.tsx
│ │ │ └── tooltip.tsx
│ │ └── vector-stores/
│ │ ├── vector-store-detail.test.tsx
│ │ ├── vector-store-detail.tsx
│ │ └── vector-store-editor.tsx
│ ├── components.json
│ ├── e2e/
│ │ └── logs-table-scroll.spec.ts
│ ├── eslint.config.mjs
│ ├── hooks/
│ │ ├── use-audio-recording.ts
│ │ ├── use-auth-client.ts
│ │ ├── use-auto-scroll.ts
│ │ ├── use-autosize-textarea.ts
│ │ ├── use-copy-to-clipboard.ts
│ │ ├── use-infinite-scroll.ts
│ │ ├── use-mobile.ts
│ │ └── use-pagination.ts
│ ├── instrumentation.ts
│ ├── jest.config.ts
│ ├── jest.setup.ts
│ ├── lib/
│ │ ├── audio-utils.ts
│ │ ├── auth.ts
│ │ ├── config-validator.ts
│ │ ├── contents-api.ts
│ │ ├── file-utils.test.ts
│ │ ├── file-utils.ts
│ │ ├── file-validation.test.ts
│ │ ├── file-validation.ts
│ │ ├── format-message-content.test.ts
│ │ ├── format-message-content.ts
│ │ ├── format-tool-call.tsx
│ │ ├── message-content-utils.ts
│ │ ├── truncate-text.ts
│ │ ├── types.ts
│ │ └── utils.tsx
│ ├── next.config.ts
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.mjs
│ ├── scripts/
│ │ └── postbuild.js
│ ├── tsconfig.json
│ └── types/
│ └── next-auth.d.ts
└── tests/
├── README.md
├── __init__.py
├── backward_compat/
│ ├── test_eval_compat.py
│ └── test_run_config.py
├── common/
│ └── mcp.py
├── containers/
│ ├── ollama-with-models.containerfile
│ └── ollama-with-vision-model.containerfile
├── external/
│ ├── config.yaml
│ ├── kaze.yaml
│ ├── llama-stack-api-weather/
│ │ ├── pyproject.toml
│ │ └── src/
│ │ └── llama_stack_api_weather/
│ │ ├── __init__.py
│ │ └── weather.py
│ ├── llama-stack-provider-kaze/
│ │ ├── pyproject.toml
│ │ └── src/
│ │ └── llama_stack_provider_kaze/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── kaze.py
│ ├── llama-stack-provider-lmeval/
│ │ └── config.yaml
│ ├── ramalama-stack/
│ │ └── run.yaml
│ └── weather.yaml
├── integration/
│ ├── README.md
│ ├── __init__.py
│ ├── admin/
│ │ ├── __init__.py
│ │ └── test_admin.py
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 007a9180a7aa38e17c1135ebf1f75e0d5ce1ea58e2261deba8c41e51196078ec.json
│ │ │ ├── 00bf38cb0b6eef2963c49f52798781840456635d0510be615cda65f93cd1cdfb.json
│ │ │ ├── 00cf12ddd414ae82d68c2d2b50190f96785f0d0a0c9f5cf72f1f8aea5e28073e.json
│ │ │ ├── 01175978d117633394f2fa36371296b78af269f38656a12fd35a6195efc45787.json
│ │ │ ├── 01bf932b8a65a67fef755e75e11b3b0a3dd2150681781018d1dda3aba98650b2.json
│ │ │ ├── 025c36f9316fb9ea6f443ab59c8463be6e6e5b451d7775ff4a836c7333935d92.json
│ │ │ ├── 0275b5b0278c3188f5530957d25d7eb8ab8a9a14c0b9b31d9a70ad342b02353d.json
│ │ │ ├── 0296b14ead5c7f2a75097f7b09ff885cf4af074892820cecdd12423c50c3e088.json
│ │ │ ├── 02ab36ff31c11b6b9d69b884bb1b9753e850967eb2271313f15b3ad6c76d5cd3.json
│ │ │ ├── 0311a3d28199fad227964fad455d78e114ff228c7465a0f6dd7c330cad546caf.json
│ │ │ ├── 0337d2703fe8be2ba88a3dd79f1513c9890ca8b0543d3f284c1d54ffb8fc7b0b.json
│ │ │ ├── 042da9b89effc00fd0b794b9ae8066633f8f6d9797f5c082a7100d9a1fea81a3.json
│ │ │ ├── 046d92297df0f53e06c3a32b0ce8456db8f8753acb2decc6682abd46fd564b61.json
│ │ │ ├── 046e8977a61fe17d5e8c9c172606cfd69f0b2f698c265eb7fdb0a707d0ca1532.json
│ │ │ ├── 04fee8655462fb880c100f5451213e16e172176a0a6638064b5747ac18522a6e.json
│ │ │ ├── 0668cd9a5e4ee1b55a756010e9e47d76a645467102aa4908c0eece9b143f5df8.json
│ │ │ ├── 06d0af3070a2ba9296c0f3b60ccdc79123811cb94a827bc9c88ef65f24b10969.json
│ │ │ ├── 06db9a91cd42d3ef84a70fcfdc4954c28aa6eb02c09343f6471c2da40d593fe3.json
│ │ │ ├── 06fbd886c2452ec541ae4bf9f29ae579d67d2101bce9c9a608c3455cb0bc4b29.json
│ │ │ ├── 0794c247b2ab1d5ff70625a5faadfdbad3173789631e4c80702252c91a3b5293.json
│ │ │ ├── 07b6ab1d1df4147f5b79645350102e159005d659ab0298c618ab24b015ff9cc9.json
│ │ │ ├── 07c7c181a2aae0a917ae8c2e3cb3480ed3f3d08e84095fdbef32e81cc6d264b5.json
│ │ │ ├── 08178fddf8cfbe725fb743179f5c931478660aaac5fd3ebb5a88e17c8a621817.json
│ │ │ ├── 087220875d68214d741bf859380450713328f5b634fe2f0228996cc4429f45e3.json
│ │ │ ├── 08be528a20c883061233c18ca2d555700e990e2a3de2ecd7ee0448a9bdc8a631.json
│ │ │ ├── 095b37e65a5a78904f225bdefc904d3e20145a4dab1be0cf07d17a416d85e58d.json
│ │ │ ├── 098f818f486be6d6a65bbdf925e3de1718205ccb186f74a9612bffb60f1ffe9c.json
│ │ │ ├── 09b1056e0b0bbf517fc3aaf99f6541fc3bc5ed92b6bb6209efb47f86159bfab6.json
│ │ │ ├── 09f0dcbfd49b53bcc25388544c7275f19e632fe1ce929a605da6aa6706e3a2de.json
│ │ │ ├── 0a45299f33e179ae4e1058fcb9a6526cea3d5c4f47ee30660a453e114cbf0b85.json
│ │ │ ├── 0a4917fbf84f0492f08bdbd0025091b4b7646fd121a01c41c679e897d622257e.json
│ │ │ ├── 0a5ed7514cf28b03a358f3839a7bd206d9a51e411b2a650843c369096ca2c5f2.json
│ │ │ ├── 0a6c06d8101a5f5cf0150c06455ef55d1c3ab8539eb0723790aaa08cccc52c08.json
│ │ │ ├── 0b0fd3a29a2317c588f5375767a0f9ac186d2c1240f921925f9abb8a69d6856b.json
│ │ │ ├── 0b453ed159b4288b7373f8532072d8d41054199fd3f67ce3a8b48b3f4aa89160.json
│ │ │ ├── 0b82e7800c3e3fb9e9df13cd16d74141ba30c55017c7e9e39c54150dcbbb3788.json
│ │ │ ├── 0bc90b6640d8ece3ddb8ac7a29b65c00276e24738ab6c8513e63ee690714a0cc.json
│ │ │ ├── 0be803de6641bd7638bcb91bbd1b40d3a360e5c5403386055d5c93a9303860b3.json
│ │ │ ├── 0c18204f7e189ce0e3b8e8a91a0b74f29757af50c92b98457c15044c4f376994.json
│ │ │ ├── 0c28d26ac990531f57050a1ff948b21d303ec06031771f1baf372c5952a51343.json
│ │ │ ├── 0c77b0fe2dd314d900b36fde318e26657a6a91419f97a31c2beae9e8ae5cc7e7.json
│ │ │ ├── 0d1c21ef897d3e1d41c6bdb870e522ac4472f7f69dad342ec4c2db3561857647.json
│ │ │ ├── 0d79a2171fc69a8c59d9b9aa30c829398194eec3a1133c3e3eb92a42b34e76d1.json
│ │ │ ├── 0dd03b164cc7d62b0219e843a6cf30c3f1e9e4381c7e76a987f36e8a236bc367.json
│ │ │ ├── 0e1115a6442c0e99ef58dcb6442db55925a7c024518e5090fe4cfb5ad344b8c7.json
│ │ │ ├── 0e4ecd8f8f0cfe12054edcd25c61b479a65e9e466f7e4c6a1d9bc665c821e165.json
│ │ │ ├── 0ea967be24fd48a61e2dd2ac9dc1663c32e8410c6498b3efbcf9f7f309718efe.json
│ │ │ ├── 0eb6f1455ae6d30bbbb242eed7f1357fb326c430721738b7b84b1a6f4376a718.json
│ │ │ ├── 0ec64f3ba2370076c0b6c45d281a657ba1a68db4f7269193f7e012672cd02141.json
│ │ │ ├── 0f5443c07d1568fd139b8f3ea0aaa3de23d22b30f353c8ed7e6cfd033d904e04.json
│ │ │ ├── 0fc31328ff6d0d20ce7770dc22062566b07b4ac7dedfef5d521046e54207711a.json
│ │ │ ├── 0fd21a06aa1e22dada1325d6e9f4e7ce3dd40c69ad06a9a618ac2560f3c9993f.json
│ │ │ ├── 0fdd1c67b668497800a18764cbf79bd1300f95ea616b1bb3a29240e4ba664dff.json
│ │ │ ├── 100b10f30530c2d281fec14b3a572fdf7dc260c26606438e14883495f20b0fa2.json
│ │ │ ├── 112bffa0be0c3b55673c84a260876b4a16b9b2e0e3280e3b0aa22badc0bb93a4.json
│ │ │ ├── 116fad54f649a10df405f3c092c628006ab5c11c0091171be3ed492bec19cc9e.json
│ │ │ ├── 11916d75c0bafd01c8c7db15c9559d8783cd3cbfa219dec83aaf5cd38847e2d0.json
│ │ │ ├── 11d104c62115bef2336127ac23bb1443cefc125b85cd2f7879e0c91deb98db71.json
│ │ │ ├── 11e26e730d6f4d150b43967135b4969f8cd585a32527fe0d557a7356578e5e97.json
│ │ │ ├── 1276c415374974487bb8762e78a7fd1932a452b270d517e92b164886ff01d8dd.json
│ │ │ ├── 1307d1ec6c890e124e6d77ca1cf9a6cf50d7b4bab84fc4cb91b2c035c33f8a4e.json
│ │ │ ├── 131e58d0c222adf7513cf86fea3825857bf29e78fa22fbacb8c88ccd7d5e0451.json
│ │ │ ├── 1365fb78a6629d4ef7419c5c48b89161da3a0b78023f005fca61a70abcbab6ed.json
│ │ │ ├── 136c7a2f7a608e5e14e6f7b506d72bbe7d45d2d24101bef7a559cdb30eadc1ad.json
│ │ │ ├── 13f8e348585198ab00335f20d5487e9706f175c17acb004f288f2ef93ee54f67.json
│ │ │ ├── 14b4b1b494ecaa5460d8044b57efa7c5b9d3fe30aa1512a1bdcd34745559047d.json
│ │ │ ├── 159e9958b40dcfd5367b54342e7f66c64d9bf7c0f8abcc27de4c2778844fda9c.json
│ │ │ ├── 15a3aec6df33188afe06a5b1efdddd31ec9d7afbb1ce511bb8b85e49011789a8.json
│ │ │ ├── 15a6ace9bf3235accf433f56ed24fa50022b4473b842cc2d8c552f39ed87ea05.json
│ │ │ ├── 15b23045b5cdfc49228d58e4a082f8402f7c91d15e2240f855cc9b8b4e25352a.json
│ │ │ ├── 1624b61946c49faefe632a635b6c33954b0c3337f5c36a996505d27ef03c0973.json
│ │ │ ├── 164f200f940dd0569b66dbcaf2f0fb408553cf69d4e8a9bcdd7be48003c0a5c3.json
│ │ │ ├── 16ccbbcbf59ea486cc0392bf857597b2308cb2f1cd7d9a49eccd11d41413a21c.json
│ │ │ ├── 16cf4989c967c3d6cdb4675c422c7d7875b58ce3d38b3d5d1603e8baba60fdb8.json
│ │ │ ├── 16da2c98e725a605e52eaf9869353459a9bce7ca6c3ea0edba81f8de8853d3e4.json
│ │ │ ├── 17958bae65cc43664e8127ff47f76d16ed07dd45fe33ff1e9386e1df756420c3.json
│ │ │ ├── 17e4728daa9291fa0bbefe901ca8ba1f18aba89ecf6c0487ea928557dd0efff9.json
│ │ │ ├── 1846efeeb78a89a5c2a0252fb9e586d7335cf6ff2a99de3f16c7222f4ba5b868.json
│ │ │ ├── 190aba7a822f5d67ba23b2d33c558f4a1c36038fc344eda3448a80a6f3f29c3f.json
│ │ │ ├── 197e5045a6e637f45432ecd4ee72c088c9ed14a236088b55827648b6a2e37ebc.json
│ │ │ ├── 19e495545ae18cb8036d576276e9be03ef50e65edb23af19789eac83d7f9f32f.json
│ │ │ ├── 19f222167c94fa6af099b52f7e093a37cc56dd171e2b81755b372b719faaaa1e.json
│ │ │ ├── 1a01039afd7c9fca01db55015aa97e0270ef81657d82c1348b3ffefbb6f25fca.json
│ │ │ ├── 1a5c636e837ffab7b26c0c98fa2e3f3fb35d0c1edb00d4f5b0e7b112fe606e34.json
│ │ │ ├── 1a8629ac3c9e2b3b108343fbd2425f2f4ee13a202d6a4860bfdb4142ad4a7d50.json
│ │ │ ├── 1a8dc64794e2fc4cb778ae78d014fce95aac7956e09eb3ffb3a5d633a716172a.json
│ │ │ ├── 1acb5bf6635045e5a1efab96b3e20bc71e5d71973587271da9ee1e7b5facaa8d.json
│ │ │ ├── 1adb6f4621eaa9e5d350925c3fc8c34fbb3d0af4cf4307d4363ff570c260287b.json
│ │ │ ├── 1afa1ce0a99ce3d98fec0fd309c2c30373208e58d8562b4977a641aecf4f4dec.json
│ │ │ ├── 1bd8001b26759c93336204501e8616c5009e0a670b5267099232f08aa2b20c9c.json
│ │ │ ├── 1c68553ae3f01a07d2c22d4cac5f3e57290d5e633f20adb49e8346aaeb2014f6.json
│ │ │ ├── 1c711fd3707bb96b21004bd8c54fb859caef9b35ba46c1e8ded52629e239d1e9.json
│ │ │ ├── 1d284c256f17ef5a2614963351d0e92d01dda72f137c9515cb98eb5a6a5b14d2.json
│ │ │ ├── 1d80922d01c30958b2aa0974cbfca948c2d12ed008d1b9bc73d2b8f8330e88b4.json
│ │ │ ├── 1d82e9439ae3.json
│ │ │ ├── 1da9a77a827bf013f09a8e0fb0981c73038d5956c774ee404656b33a4a08bb6e.json
│ │ │ ├── 1daf2347763dd31a7456da24bd3c2fec04e2d2e0e0d6f667762c77493870db42.json
│ │ │ ├── 1e17e2fa330014283d36f26784fda965e6094830e82b332490304ba476771807.json
│ │ │ ├── 1e2dbce78b47f70ca192263464099a61a2b65e387093bc570cad26bd8968f0f9.json
│ │ │ ├── 1e3ce968e28ad3e7b88a09ce6efbab0e4edf6a5b26ac3f67b44b316d49b779a5.json
│ │ │ ├── 1e6e4d3cc914541dc57a5b3e54a1aeffcb5fb7c1a29d8055dd2aa3f2eefe3fba.json
│ │ │ ├── 1e79a10a89b081e316d2821675f8b4c407b8d228dda80cbde4238037c50a9ad1.json
│ │ │ ├── 1e7ea09d82a2e90711d56c94b67ef6fd9d41593117fad0d6412b041dcd2e58c4.json
│ │ │ ├── 1e8bed12cfe775d3dde49d4a757114aeb4c7ff130217c4d07a85ddf082f143b7.json
│ │ │ ├── 1ef45eef0c6895501794794ddd911d3d4b0f31f4d5b5300ce8c99fd216bbdc1f.json
│ │ │ ├── 1fa014df26695f6d2db26c652ce8a20389035e206778fbbe9926f3c5642db4ac.json
│ │ │ ├── 204bfbdf3f62f606a2e1fdc54de1cf92cb8f510a56c9c15172d2f61deab696ba.json
│ │ │ ├── 205477727d30890404a99ee4931240212a3a475cb80450bf455d23c6ea258e5c.json
│ │ │ ├── 20588c4f16eaffa6a3db7686240561454586d2ddd840be98787aba163f8d0b6a.json
│ │ │ ├── 208cc861c99a9e609377cc8c4bd75a4d47bf6927d43163f169f35a37723be28c.json
│ │ │ ├── 20b72c0fa9944ead4e5af65fb4e1d80e0e2165ef6b56813b27e8b7a843240fa7.json
│ │ │ ├── 211cc28f80dbf9807235e50b544ac5b3bc12f24766036669363c7bbeb892a617.json
│ │ │ ├── 2124ea5b4e6f9831d1044acfa3c8317fe78c2871723f5c6769134ea656d7cccb.json
│ │ │ ├── 216af1441420051ce57cf88281e55bca00368f5222c25d4a37f9ad09516b8b9a.json
│ │ │ ├── 2172059863d4d17e7525483102a6753617b60a8c33ece637db18061d23086536.json
│ │ │ ├── 217a4e7444bf504049d2ceae1d6ca7171d6d42fee1febefe85026830d6356cfe.json
│ │ │ ├── 22019cf7170f298cbbe644e30b2a1958a02f72fb0d4772a98828c23f9dd03640.json
│ │ │ ├── 222f89f27cc58410959c81ddebbff34b2b92b0053ae2694d64acd85ca330db4b.json
│ │ │ ├── 22affb6141645eca165b6bd431b06e94818db6305bc796e3dc06977e0b59b211.json
│ │ │ ├── 22dfc36fee46563933815412b9619a468814bfc43c30a16a5ee31fc7274e9f88.json
│ │ │ ├── 2375af3ea666306b9a693c440404325186fb4193710c1ae669dbea0be2182092.json
│ │ │ ├── 238285efe96db33e3e48a3775a2fe104b3f418e8da5d0108e6ed04bd1eef8d5a.json
│ │ │ ├── 239ca64fa1413aa677cf3452dbe6bbc373ba06f1fcaeb86566a95e6c00278fd6.json
│ │ │ ├── 23b4dfd4dfe57558372c93cd733914f0b6e85eb9057f162f3687e672d1f19a8f.json
│ │ │ ├── 23cf06367c0c335a7410b904f9ee1eaaa4a7a054f438bb23f347ac96eb7e075b.json
│ │ │ ├── 23e79df4e416c1d2d0227d3afd7ab06ed5e7e8153f444b585ad89c4b87df6566.json
│ │ │ ├── 24a0175ab12e918eabebfa2be5ee73ae74ceb0477331cac011b528c1cc6dd054.json
│ │ │ ├── 257d9ef8ae353a4d096aabf6705b4953393a1138fbf64c382abec5884176a933.json
│ │ │ ├── 25b410a9060e100a6bf5efdf9a23aca0418cd2bc0981cf11e3103bc82cba8425.json
│ │ │ ├── 26a1f441b3e2f282bafbb28acd66923fa2c25314e2a722dda7a800daf9c54aea.json
│ │ │ ├── 26e3525806512070605adf009bf5326588421a84ed775098f1e3766ab6ff009e.json
│ │ │ ├── 27157e78d13c183a22539b939853342c37fb6391557e3052c8cc9284b583dbdf.json
│ │ │ ├── 273ed6250fec691b1c9e6e0f7d04680accba39b6400051e71dc94ca63bff619f.json
│ │ │ ├── 276b5c70b5f3a7bb55ac276b630bb07bdd12c3f9c392534fd3d3df8bb698cba4.json
│ │ │ ├── 27afa8cdbd595531f452965ca94c46b9b378a7f7178ff294d905d01ab356b432.json
│ │ │ ├── 27d1b6d118ee5a5d5699d14e195bb8efeecfe71fd7fb8588a3fb3581e430a8ed.json
│ │ │ ├── 27eb5d58ea53116f946689c8ac04edabd5a48e3d8e30719b14ee09816220c116.json
│ │ │ ├── 27ff70025960841363d81bdef1c99c1ef7b552046b1ede0484db9e80ae1ef8fd.json
│ │ │ ├── 2806e4743a397b372f5167045199557e4f8ae6337668f3d3f5e5e1b02677e161.json
│ │ │ ├── 2825351b31085df4d1186443422464ca27e8d1fbb3b442efcb89ed0bd56bf812.json
│ │ │ ├── 28561c0848c5d46e68aec5b2c6c55862d74bcae2f2ba6ccb69ab41b5532b28a9.json
│ │ │ ├── 28a64dec79d47afaf45c32f4c6e82074f53533bce8f136faa0e0ee3916670d26.json
│ │ │ ├── 28ab3d316be886e823b675db332dca1b1504f5bf166b3670363d3c12566ee035.json
│ │ │ ├── 28cc2057662b6d13ab1becc3f92e5afbdaa19c2192b588a5795a5fa4c09fb588.json
│ │ │ ├── 29147b1c87f6058c56b8f24f0cbf10cf93c240d44e9de53eb389fcf46fbed2f1.json
│ │ │ ├── 295a2ac516b4d96099a63c5e8553a59d1c75295cad3dddb3a641307316e7b576.json
│ │ │ ├── 29672a19586bfb1b5226c42b9ff3bb945c834e3f7d2ffa1fed3da87ca72092c2.json
│ │ │ ├── 2a1473fa95b76ca3508b4c40f6b9b8fc0dd3afaab33b189ecc0e6fbae9720834.json
│ │ │ ├── 2a3f66739156b4fff68b43d2f700991c15b897c5293acbf3c60067dd16055a84.json
│ │ │ ├── 2a5013730936b86b2fd76564de3a35310d648076eaa29de10a0e8efa68d088cf.json
│ │ │ ├── 2ab7dcd7dc9c6992ba9a3f8c7656ce38e7c7ad004201dbf4def2426443f8883c.json
│ │ │ ├── 2ad368a9709cb3474d047e3ea39e1bcd94adeca6e9379702e4adc766576b7c30.json
│ │ │ ├── 2afba0cc539d9a044479e47125e6c419b491e8cf0c093407e6be45a7855843fd.json
│ │ │ ├── 2afdb8ed8f2ca3b800e78b9a83d2cc0c78f1f62322b871df6f75e06358765824.json
│ │ │ ├── 2be85e2b18d0209cb6f18c5fdd2c0b6d30dbda3fa0b66e5d1182081e33d3f5d9.json
│ │ │ ├── 2c5e70d1e2d4c264e34716662cd9de921530b9fe6420aed14fdde7dcbcca04ae.json
│ │ │ ├── 2cc55af01a7b58ba2d6d6edd54c2772f02fd070ee761816097d61618d733516b.json
│ │ │ ├── 2ceaae039e3ca7a62b8da0109fff6e23dbbbf4ad4dff1b519ae92ec7cddc7716.json
│ │ │ ├── 2d1743807397e198919d3300cbbd250808c7c7e3b6cba00e1baa8b6bc777e941.json
│ │ │ ├── 2d5bce103d63e9ffc4dd76ea73a112e8326069fb62baa3c86cf588165897d597.json
│ │ │ ├── 2e48d86e444aeaf649fc94acfcc48bb337eb7921c95edc7a83118f51ff9f37b3.json
│ │ │ ├── 2f373e3a3ab226688558a779b07b9f814bc330231dc6aa7b775ade8d435627df.json
│ │ │ ├── 2f417403cb7c473c4042cb81c5f9c17ab6f64ed0a5a021573a618cabc5a9d0ef.json
│ │ │ ├── 2f6f1fb38ceb4569fd2eb4831482ea6e15c745af104e63e9af128f4e1271d4d0.json
│ │ │ ├── 2fd6dc7a0c872cda11ade6241afbcd42922d71695bf384ca48938ca21f732cff.json
│ │ │ ├── 2fe00c00fa954b91d66e804ecf7c457a30b90b9000afda895ec863ae92f592e2.json
│ │ │ ├── 2feabb513c2826bf3d712684bb6ceb4f6269801f1d3365d92ec6f127e0ef257c.json
│ │ │ ├── 3010ee7f2c82499fedb083a96e54b745fa01e5fb819537690de07a14d25d69ed.json
│ │ │ ├── 3035e2e10eb6f32747adf27d35a9b3b43a8725ea72580828a0136e1d4a2e8b1d.json
│ │ │ ├── 3058f90b3a23057d88b246a18f03d9c88bd560bfe31927d3494c5120196e9e2f.json
│ │ │ ├── 306b7dbc01b7214c32dcaec5e63a27bd1a5d6fdd5dec6308fa28c92813942c9a.json
│ │ │ ├── 309bc06db12fbeb6133c53834a2ce49dcf17267c1a2eca32411843a10fd8dcd6.json
│ │ │ ├── 3144ec31aac7dcfe0813d999eee7e5a7641c95e9c8b8470a4ad10440fa9896e9.json
│ │ │ ├── 316a405c1926775ce2382357e3664761d6663900fd9a99a6705d3e583348b093.json
│ │ │ ├── 3188081713c612d390a71b63c11802894413cdda043e37a01f4db85588333a6b.json
│ │ │ ├── 31b891a312f892bb76ba80974d6b00744680c7f2d17627212db5d205b6353ff8.json
│ │ │ ├── 31d01cb5f1bdbbbbb45e36bc640b77998f082cc9f8293029d42e30cba39bf6c1.json
│ │ │ ├── 323a7c4b3198c084983f16f8f4d040881b2240a31b7f3e741890cd4a02d71633.json
│ │ │ ├── 3318b6ff4b0d1116aaa5ad716af2bbb269e818ecfe3a17fc4fb26a7099fed526.json
│ │ │ ├── 33787fc2dcde809ba7bdd48099b16e4296dd042f59c0402ee4a7780a4c516e3d.json
│ │ │ ├── 34649b63877ba0bf400f924e710902dd68d2623b7620588464ddeaf5c9abeba0.json
│ │ │ ├── 349cfe2cf5befb8052060cc7f244f32151efd159024bb29e61e8f22373f8e49c.json
│ │ │ ├── 34fd105609d2b81d30dbeab7d622708c193a97ce96fca2131fe0b433465ce3f3.json
│ │ │ ├── 35b69775c29f809bef1c8994e061c674a7ffdfbfb56581e64ecaddff01b6cb73.json
│ │ │ ├── 36290f150253ef42ff196867f55cf04c01d0116af5b16eb936ce18407927884f.json
│ │ │ ├── 363c5f5c4f075fb30616196aa1ad2c705a62efe05acc220b5e818104dc9ca8aa.json
│ │ │ ├── 3688e5880531f4333ea95f732adc43291d2c5532bb7bf4c44810b1a3a33264a0.json
│ │ │ ├── 36d833cd3b9bdf6267ac74ede9c0e5ce9115d649016d174800f78bf8885b7ade.json
│ │ │ ├── 374988a090b34be04f9e74f80efaa9ae92cc062d5e967a5d83dd6820e8bf5be1.json
│ │ │ ├── 376531f70c84ce94abacf12db02e8c91d2318fc62d0f05db31a4709196ca309d.json
│ │ │ ├── 37739729d99b4022bbbe700db973823ae983bc6d9b5ae50c62517c463520e07f.json
│ │ │ ├── 38392d9e0ccec92705720ce3aa66f07ae41f782ed959563b01f725a0339a0318.json
│ │ │ ├── 384a05274f63bcb15b1b0f035b73c25d9c943305591a14cb2505bfc21d5d1075.json
│ │ │ ├── 38aa193d2ff3692c73fb33fd03630b7b21b85c31a6d2cb9a745455be6fcc8d23.json
│ │ │ ├── 38f919355d79a4ac65ecada2a2105d1b7a7fe0f8c05249f72c480c05cd28cfae.json
│ │ │ ├── 390e06644027255d74d4c38e52dd6e16e5d5fe1c9e6c5a7e9f0b8b66b9bf529c.json
│ │ │ ├── 39909f03174a2938ef03ac0752c3e85413b38f4d3ecacef0731ed12a327f0bf9.json
│ │ │ ├── 3a1a67912f65.json
│ │ │ ├── 3b27f42cbfcea59970739b7427e66d66a509307aaf36e8a9a07175df3bcbc50c.json
│ │ │ ├── 3b2df3a24ec97849f32583f1cdb68375f95b108740bd33e7aadb490932310986.json
│ │ │ ├── 3b84f58da1b81d002b6e1748cf868b70d832bbc687e429a49e2b267a3f5144ef.json
│ │ │ ├── 3b8b79bf0c528657635d6d3a6cb67d012050fe3670b95fbca14c18d7410c1a81.json
│ │ │ ├── 3b9ee1b6029438f6e3f8feb3b82fb6d6c9a552b48754af642c68b673eb54d510.json
│ │ │ ├── 3bb74e529b05c6cd0969afd1035d143f335a9a69a191036080917581f915d4a3.json
│ │ │ ├── 3bc04693994195edb482dfbf61657e94c2eb4eecc52f3e45971884523a9ae932.json
│ │ │ ├── 3c09965a672fcca3a878305623e34fbd2ebbc6815809201365291a157689b4c3.json
│ │ │ ├── 3c1d8356df28db20b6afe9ba9e7cd4da4b8524e00d5f57b2cb9ce649bf52cab8.json
│ │ │ ├── 3c200fdd38e6876105def4a32df7a27c2ca6d89a7ddcb930f81319365c648e3a.json
│ │ │ ├── 3c3825de4b0a1b6832b2ff5d17fe932c00c7162687a4d3e610a34c8a5f99b2f3.json
│ │ │ ├── 3c73d23f29270290a82a2692af9e969db4f65125238d3721393f09bb618bb711.json
│ │ │ ├── 3c9fbd9010272c6f5066b51555903b58f8d030f86bd3ba4d91aacb9e213b21ca.json
│ │ │ ├── 3d57813664e7444da2f306c82ede7e2311e8916c7bba3bdb76e5a9d9141eabb2.json
│ │ │ ├── 3d6f1c72ebca55b60add8e4a8c5879f84d9d72a5f27053cac838fda20c333fe0.json
│ │ │ ├── 3d7ff3fef259dcbbb6a5ba66ec5a54cc687192622ef79f23906c77082640823e.json
│ │ │ ├── 3db4d31ec81086f12794cb5ff7b853af6e983d046426a368b14772346a27940b.json
│ │ │ ├── 3e04fef809276f32e837a764b8eccce5d3e6e8ec0d611c6aab9354743789679d.json
│ │ │ ├── 3e8a0ac5b47cab9cc0a7c89db84690f9974c966b6c249d44645d1d4bf8268459.json
│ │ │ ├── 3e8acf5db89af88d4f2fb80d5c779515068a28986bc69fe87aada604287820ad.json
│ │ │ ├── 3ec502653be0fd643799d68ecc82655eed00138e30afb4190c8a09014e6a84cf.json
│ │ │ ├── 3ef67b5ce7dbb36bf47c16b906e32b5d5f18f7e46b6425690d680b6536fffcf0.json
│ │ │ ├── 3f442ba52e2b417a0773f3fb89497dbeb83459d5dfb1e2260b6d313b13a6ea87.json
│ │ │ ├── 3f45613d7556f76aaaf56271281a7f73053e21271d49609cac3a1b1ab1b59068.json
│ │ │ ├── 3f47e63f33f29eb86f75fec943c978df1bcf7e9ec8177575c7329f2dc4964557.json
│ │ │ ├── 3fff8a99b56943ddc4abc18ce5fc98ba9f1069185e17cec1c7fc0fa48e768e2c.json
│ │ │ ├── 40bc41cbdada97946ee6e2b701196a8303d3e597ffdea82e7cf83677d5b0dcf7.json
│ │ │ ├── 40e0ba5cfb3f5f2665c2dcc667f8f2c42d90f6036b0c46103d45be21e6a87586.json
│ │ │ ├── 4106e99c6dc0e3bae676c4eb415052045d0f7677dab0cf34967b23e83e5ce882.json
│ │ │ ├── 41183af54f4603a2bf9e21015e3b0d3af2b534e26d606744963aa1091d52b06f.json
│ │ │ ├── 421a91bf6a48824bb19881134b728d4306670c69adc581b880c0921abdf75348.json
│ │ │ ├── 425230118564e6dac13e60bced5a1c66bc25a075b8e46e62236d87b9e9cb8dc5.json
│ │ │ ├── 425bb9c999b72f46ca0302401ea9877381a635a31cbe7345aeb6a34c41362034.json
│ │ │ ├── 4272e19b2f247aefcb305aa1170308e4abfdb2b30b4531324df77efcdaa97670.json
│ │ │ ├── 427a1d45de5490e60cbdc78fe12825cf4e9d2d0a2c23f9a7d3c5b85d8f32a16e.json
│ │ │ ├── 42ab5d3976adf52e402e3c8aa1a54883558c2920f693d72e879cbb08fa485302.json
│ │ │ ├── 439ab7d1bc9f08e91840d999b6760d21de306fe6f5ecbaf969aac5afaa492629.json
│ │ │ ├── 43b0260adbbee6e8e5e174fecd285648392889662235b3c685bcc89f9602ee5b.json
│ │ │ ├── 4409335c53a0cc4576c4f5509ea4fcb73870eb864d239c8bd123d30921b0e8e3.json
│ │ │ ├── 454bf3fdb1e77561835e10fbe85f22e75bf9e4046fa54cd54bf288439fff391f.json
│ │ │ ├── 4568833937981b0daae37327dbb9e64f07dad20ddbce98185e1af04def885238.json
│ │ │ ├── 45f7bb25cd8184f361ab72c0ca3f9391c966d802d60df60d5b5b7c8354d0da6d.json
│ │ │ ├── 46d90bd67f426effa752d1d0bef83161d00784116bb3e5b1b32d75fc46ab62de.json
│ │ │ ├── 4713a39a11f31a3e55e2683d048946f3b55d80d9f58c069c2450df81a596923b.json
│ │ │ ├── 471b044417f6310ad27df1df73aee016d803e8455aff60a67a6b2172b168c0f4.json
│ │ │ ├── 472b1562b4c26bdee3192dadaab67837e2ffd215cc05b27c1fc8f334f4e79e4b.json
│ │ │ ├── 473627b7ee2ffccf3d0b486398a7ad4c1e780e3a3d6fdaee3eeff60f1946e679.json
│ │ │ ├── 479adb30c1b865714ef56eeadf70ba44d19397ef86a307c84d5bddefadf329ee.json
│ │ │ ├── 47e76180fff77913d20570534f1a79ba8d490017855458e4f785efc3219e052a.json
│ │ │ ├── 485c95bf03bc0bc396c03f95b36b74e9b39f805072f8547f82e48d3926875871.json
│ │ │ ├── 48925718d91e9cdb37527cee28f8fce6c0b7136562153cc7e5d359e83798dea3.json
│ │ │ ├── 49096c48201780548c2bb28156f9dbf2ec48e89a25adbe5c646727363344903f.json
│ │ │ ├── 4a06bcd2ff65d1a97f0c63a00d659ad1f7aa6c82610f0290d0eb6c4902b8b503.json
│ │ │ ├── 4a3cc9677fae9a2c232fe61a6474d20f65c83a17414df047327d00d2854ca798.json
│ │ │ ├── 4a5647ecb074af08795167d8b99a9ab7ebdb989a7571c8cada9fc2eb4fc1042d.json
│ │ │ ├── 4a85908aa4cd4a8a1ded4cab2fab74505d8405ce53a163b46915ee0bf70d2c37.json
│ │ │ ├── 4aaef2aa027e14199faac56e7c4dd994ed6d8384002bd8e051e0b12ec76185b4.json
│ │ │ ├── 4ae0db53c44c2bf367a2b47286a7bffcd7fbe8568e3fa6abb5e7573835d30159.json
│ │ │ ├── 4b1c68e2659b76ae76ed79ae7bb36049bb537830b03397322ed08c9cb4785634.json
│ │ │ ├── 4b2802012eabc2cfc9f64ffe08dcd5003056faf4dff2653d918a05b32e08c0c7.json
│ │ │ ├── 4bac0fbf8960d26821d5834d204f4ad39619889e1d3892b4fa9339d144f45b05.json
│ │ │ ├── 4baeed47469b35365c2e5c2d26d5e91c50523443a0a263bd351bc374205294b1.json
│ │ │ ├── 4c5f47d24ea768d724423d7b68c44d026572a16015de436b3cef0ef774442eff.json
│ │ │ ├── 4c992c222a30fa9c5bcbc430794b74841c311e97280fd00e2f7ea405aa7b4194.json
│ │ │ ├── 4ca8bb3b15d2f892248cd09483c2e21daec3c92a8abf1288ca56c5098f305b67.json
│ │ │ ├── 4ca967684e3ebdfd2a4cfacda63d2964e27d350c045173319d3fbc6f86c07627.json
│ │ │ ├── 4cef17ce712d7b0dcf4987620a70d366e44680c7b6d0975afc2ad5588459a54c.json
│ │ │ ├── 4d04a7eb14636050bdf82c302de86789742b377db5de1ce7227ffcb552936ab8.json
│ │ │ ├── 4da32cdf48ae4c3b381e3557edb99afa0ff16a609aaa941737e99606961a6a07.json
│ │ │ ├── 4dcdd7fff806dfc3551a593e4921f8d15695d827f343779cbcf3d4880d81f383.json
│ │ │ ├── 4e3136331b9db4d787ce1e5d938a211fa122139d27322cb3966884c07938f601.json
│ │ │ ├── 4e3555d53967770066bbded92edd400413461cedc1fdd2c824d41b0affe61f66.json
│ │ │ ├── 4e4d8b5933440b8e9c68fbcac841b23100c136a0ba5cc685dc512c32be59b919.json
│ │ │ ├── 4e4e2537f78b5f5f4d30fcb23a79592e2024ca7d3ab03f7b12fe0f0e2d529282.json
│ │ │ ├── 4e8216f5a862384a021bc4b067655c31ddd7d9291a7e5add64f60e4b3a0356cd.json
│ │ │ ├── 4ebf10986c87e50b2fe15ad0f70a28351a7a5964b29f0af3cf7d7772840db554.json
│ │ │ ├── 50444887649535abb825324838eef5ae9528fab5e55798468d7b544ae4f07229.json
│ │ │ ├── 50556539d30abe59bcc1da83315e9bd2f52eec9601552c15aaf625d8b89a92b4.json
│ │ │ ├── 5059ca8ab8b1844d2400fa0562ccc49a112348dff003804e79ee11cc7539cb58.json
│ │ │ ├── 5217a8c6b79f0cb6d6638e2d06193bcc40f30444ef91125093681691d987bc35.json
│ │ │ ├── 524c5f124854cf89a042e7e4dab32e873b3681f858fb103cdefbe34bb554b027.json
│ │ │ ├── 526bcd60789b5638ba9ce23be9e90a7c44bc3cb475616383ebc6bb1bc386d4f5.json
│ │ │ ├── 5276f0c6fd1bb2298fa5adc4fb3fe8a132fd880756ab39edef7fb49c7a63c3f4.json
│ │ │ ├── 52a2664dde376e1cd7e5c3f4e224937053dc7fc574cec364a365bc7c965cd4f5.json
│ │ │ ├── 53c58c29ecc5e74264448e06b41e29b5c34c18f615f0678c5c36ed7363be142e.json
│ │ │ ├── 53cce86a40ba3f67b3798154649165ea139cb6113b8de707ebeed9e379386fde.json
│ │ │ ├── 542b3ea3e6777e437a425f9c2448beb8eb0bfbb616bf60663a526bb9be16af32.json
│ │ │ ├── 54596f570efb862776f95b5f492292761454ac8b8b5267c1f82a5a2eb1a3b4cb.json
│ │ │ ├── 54b895c9eb5d2c1db23581f48071ff98061d9c646218cc67bb24fc1c272afaf4.json
│ │ │ ├── 54bddc0cc7eef2a38b5495cc3487d8ea54078a4e438adcc5602f88edc35229dc.json
│ │ │ ├── 559d2458ea6f3c9769e1f3f43bfb57a12f3221dd8da4567b479ff5038654399d.json
│ │ │ ├── 55c7250c01acd7f27b62fa966eae24af54de6d7e0e393918c58ac7215c60a29f.json
│ │ │ ├── 56009694d683a5a44731338ccefb4d1efbf23dad424d5e2277b6ebd83aa14e5d.json
│ │ │ ├── 5684951287748e2a20fdbd3fd0adc5aec6c5654021766ab6e6db1db222518084.json
│ │ │ ├── 57136dc2f3504bf7a9b4df4a97674fdb664cd4ddeac117afaefc271bb7b85b03.json
│ │ │ ├── 572a17d9d8c2a74b0493566717824c87c2f06ce3b16205f7aa185751f967e53d.json
│ │ │ ├── 57689b52587daa89a33f1e7c5bb76f69fb61792423211aef2c9a0810bafd5297.json
│ │ │ ├── 57970f7c85c6dec2d1f9138e735520e37433006e0b77d1bc9a9c10881e4d136d.json
│ │ │ ├── 58040e156afa7841d05745dc5bd6d120d0529e242ed24b98aaec9de2868808c8.json
│ │ │ ├── 58586892d99c3fc3e3b4674e57e779596550253ca82e67a6311c1bd68a60564a.json
│ │ │ ├── 585a2cf2c22b0db155a6a94052836b34c42f68bf04b1b2cb74ddf00943c0442d.json
│ │ │ ├── 587645b61fdcab43c278bc9b9dd9b2effc1d1d486667132652ca8f273ec0b3c5.json
│ │ │ ├── 593f9404bf5dd926032457757ca6923d5f7d102dcb035740f594147c1b9e7a51.json
│ │ │ ├── 595b6ca2fb280162159d2ce9d7e8cbc8dc2206cfc3eae57db563bf7f3f93f9c1.json
│ │ │ ├── 597a7eab1d38ffb143ff5da1b6d20a5fabbf84fc35939dad3024447a8c10af78.json
│ │ │ ├── 59861219229682235b0897ede7dd2f20fa674794b90e9fbad27cd35189525929.json
│ │ │ ├── 5a3c5d18ff78b18a0c5e3872b2f9b8ed8b8cc69d8dd87eba8f122316427ffd4a.json
│ │ │ ├── 5a3e0338d228235a4581a8abf3961dd0d9d7cc963debb2862ad3b06ef879814d.json
│ │ │ ├── 5a5added980e23c667b6a1ed0c3d3be7c663e8887d3851aaa4d6407e1d5210c3.json
│ │ │ ├── 5a88afff1b0361d715de2d657fc6b5610e7c02d4f84f40fa4ed3b327e6364c98.json
│ │ │ ├── 5a9cb7b526486933d880acd19bf9b15c10e8e80be3926d90b42af729411b7d39.json
│ │ │ ├── 5aa7354a03cea3179535e82597b49b2c72136afbe13ec4420d6e963bd15e6afd.json
│ │ │ ├── 5aae3ab0423943664ef2ed9c26eff938b9ea608ec67a7b7c51219d9d2f954c2a.json
│ │ │ ├── 5b032d6ccd692276eb70dd30289a16a5773e12786ae63e448d2b10c92eadede4.json
│ │ │ ├── 5b058cf2221fcbd97162987ac15e498a95be861954863bf1ea26b8f9ee6bcb7e.json
│ │ │ ├── 5b75907ae5598e7701552ae4510ff5f77f52db04bb592a2f0ce560f5aaaf2ff0.json
│ │ │ ├── 5b93f111740bc8c423fe294bdbf696028215cbe7a8b65aff745bd0f9caa03b7c.json
│ │ │ ├── 5bc4df9e88fb1dc35c07e3f55d4d03fe5fd5be84606898ae337cf39473e63b07.json
│ │ │ ├── 5c01b14de59f079fa01f80f29e831e0ed530983c6d7cb9d69ab2349b48aebda9.json
│ │ │ ├── 5c7817d43543c59709edbada9ca885aa79acb2145f3fbc93ec2f5656b5e94629.json
│ │ │ ├── 5cb19214493752f47d30564e5fe0b22ea3c256a5fcb587c51a3d17f2265c2209.json
│ │ │ ├── 5cc64f10fc39144fc74224249cffb425eb549d747172e4b919cea69c3f30e9f4.json
│ │ │ ├── 5cc7605f9950.json
│ │ │ ├── 5d1bc6f836768b6068d6ec8cdc05b2a5875544daaf7389cc92606062fbe2c778.json
│ │ │ ├── 5d4275f9ac12d2ebe44c20fe75bd2221770892e005cc05f3452b392b0e5a608f.json
│ │ │ ├── 5d46fe29953f16f4d23bb6aca24f0e7e13b9360d3811a62ddb1c723d0eadc451.json
│ │ │ ├── 5d56949732c68803f9e4d60a92fd087e48ba7ccdce0569a97b51a687a4e49b88.json
│ │ │ ├── 5d6da5463a2e9259d1c1ab137c38d1f452151e048f4111d14144d84ddf0b5f11.json
│ │ │ ├── 5daf217a35af0ad3badc6deb23ea9ed04c271153e3eceb3aa64275c4a493a718.json
│ │ │ ├── 5dbea9ad01219a271c867a1cf195fee31353a1847e0ddbcf5527af5732f59ff9.json
│ │ │ ├── 5e063445a6d2455ae33b8aa873ee9be76e334dc3778585ba8cd7c8b42f2c2a33.json
│ │ │ ├── 5e157b7c6b5d67b6e8aed94cb9c9f615150e7987c91ad14e582525be4fe5fea7.json
│ │ │ ├── 5e4ea6b89ff437f9680dd9e31aaa2a5e46d3cc8849c5cc823142d4c0bb2c4c40.json
│ │ │ ├── 5e4f641c83e26f2dcf2f1d0ca2704a56dc78c665e17ebe01bf4c8e8e0459a587.json
│ │ │ ├── 5edf2f0b7a9c875e80e4719f71a1daa94c1287acf164cd81ddd51843d05be718.json
│ │ │ ├── 5f1f435c24de3e8a803e7febba03b64413fbfac2c3cf42a6559b84169795bd50.json
│ │ │ ├── 5f45feb1fe260d8b2b7c89981c4b54c3f64edfe7f6864f9934e4e09db2b74f57.json
│ │ │ ├── 5fc1d5b73610bda664863c069de933e760c20528d5b2bc27a9d0242961f5ec1f.json
│ │ │ ├── 5fe20c6a2cb9dcb59a49e01e405161df5965274b4f92f151c0c44ee46e62cae0.json
│ │ │ ├── 5fe7d2907d3452903fb03e38a7a89f2cb397c1db7abbe0651c9d10dd2a48ecd6.json
│ │ │ ├── 602d09721ce4b8b120ee2eb699d47dd1d2eb515d3cdb9272246706fd6aea8ae0.json
│ │ │ ├── 6052a6721d11477b3a7daa495b15e46095fad0107e184eb2aa13202510a61309.json
│ │ │ ├── 60cc811520747360a4b42a5af506c5019a7980e6dbfc127d3ec8bb94a1a5f22f.json
│ │ │ ├── 61009dfb41f0f532e339afd57b65927165513dc3123ab2d2d8ae109669dcda70.json
│ │ │ ├── 610695da59ffcce0a03a4d4b1ffbf61cf698f39fd41628173fb864e14b3a71c5.json
│ │ │ ├── 6109772bc14ab31de7a6c5094695660a65eaa2d6a6c48c6ccfb6df180f252612.json
│ │ │ ├── 613f9771cdce0943f63e4d2a114c7a5b9b8e2dc9f68e9e5f3eb9b01131f55cac.json
│ │ │ ├── 6160a4e52f644574295bd014c6dfdc32ccd25c5ca620de7ad3d3fbb0525ac7b6.json
│ │ │ ├── 61a465dd0faed868ec3e18fe67c0b088c1e260e344587d3ff15620978cc59687.json
│ │ │ ├── 61e54420f5db4243bad0d9ba7271717533484a6e318cfa02004b0c5d035e77ef.json
│ │ │ ├── 6260b08b40dec4af4bffd49b1b66f83d0b1b401c4ce9295aa0971fa87b50e035.json
│ │ │ ├── 62b029adf7148c081a6706d3f7185dadec1b18c5b6671f6522f37ae616bf143f.json
│ │ │ ├── 63bfce5d980cb543c72b55275926f28d83f42ae26d2d21b8b0250c28d9f2a721.json
│ │ │ ├── 63c8f9a53094eec036d9144c374bdce547a08d382d3098b1d451aec53e07f81a.json
│ │ │ ├── 6405462c8094d2ada59a0fa61e038b11d32d9e654336a0052815f39a9619ab15.json
│ │ │ ├── 6446f5838fb216dcc72e56d44ad62350d66e4f850bc15abb328f1278d1204723.json
│ │ │ ├── 64543b1257403928f487400d6890d9eb6134d4c9b39a4628b3acbd82f15e864a.json
│ │ │ ├── 64578b23282490114a8c141d44b7f778e22c4540df801d539ca8b50d1bf506cc.json
│ │ │ ├── 646b7ef44f194827c7081145225c96fa0c5f871f735b48226a0e4ee684f22100.json
│ │ │ ├── 64b89e56591f462080ff69a3bbdd33913d76bca83c9d55b83b7a8b677f8d150c.json
│ │ │ ├── 64c18179346da8938710437800f44005238b674c02265ea748999b4ec2d7514e.json
│ │ │ ├── 64dc1c9320faa0aaa1e3f81e14c53712525165da4d20d1630cd9f200984865a3.json
│ │ │ ├── 6536e172726b534f7fed9c31fc324e7372ea2792f4cd3ba21362e27ca085dd16.json
│ │ │ ├── 65cce6bd6a81172acc13734c97a7f9e98975e619263a90849e7bb06c2a3405d1.json
│ │ │ ├── 669c19a8d3c9510465f6f0fd0ffcc2b54b940a88eecda1de90a1168045eb3ec4.json
│ │ │ ├── 67846352cedb3a9cd19447bd321662a97a73e28dfe788471752eb146e7c54872.json
│ │ │ ├── 689d91a916fb9ed548e7131754ca8e2dc3d5e1f824137a9a924340518824b3c9.json
│ │ │ ├── 68bdb788e946d6843d06e013aacc2a46cbec728257e61518a12aa2443c5151bf.json
│ │ │ ├── 69c77245f51e505076127ff642915e9125c63386a9de1e5f6624dc619bffea2e.json
│ │ │ ├── 6a3ebb3f16c69638ed83c6e24798c23ae1f75eca5afd40472cd66fef96be3621.json
│ │ │ ├── 6a5f08ff2d7968bc1dfdbd3c751defefb07c515cd20a02326097b5e417e7aad0.json
│ │ │ ├── 6aa47c8f32be4a526685c2db740b26012ca3990230960ae00c75456c03d1f05b.json
│ │ │ ├── 6ae2cd1b110157ebdced948d1f2f45e900fc8acf4e6554cd6a3dcbedfd3b291d.json
│ │ │ ├── 6ae9dbebfa321b7752783269feb45d02df049e49c8ea03c4acf738f6ed08ed4d.json
│ │ │ ├── 6b207540bc67e2b9e6beb091d477d446d91e9837add7e9f4de236627195d41e4.json
│ │ │ ├── 6b7654054f7557e750d00815e6b3b0146ac7043884c071aa116cd4c76879648e.json
│ │ │ ├── 6bb6affc00b01fff5d0178a826a1b1e75613efb564e139e2161e810172604711.json
│ │ │ ├── 6bd85257b4ff9fcc9b1fc9efad66de788896c5fb53456336b9601ba056c06791.json
│ │ │ ├── 6c10f27913878bfac206240e8a84d62da075b580c2b4b5bac6a670363c61a64c.json
│ │ │ ├── 6c2148814595662281d1e5f8f0480d598daa5ea140f369569751f06ba675b6f3.json
│ │ │ ├── 6c4a42d33e45c15fa2cce73ccfe96bedde067b8459d9ab2b1fae0a7d143e8a66.json
│ │ │ ├── 6c6fc337182bb6f0cae17c9cc70e3bebcfa0dfd01dc9d3d8c6ec60fd8e74239c.json
│ │ │ ├── 6d0a2195af0a75eee5f81c9b1a26a517a9280ccc3ace6189043af75b8bb30b15.json
│ │ │ ├── 6daf41fdb4a88729b16257ea383ff367b94308a2cb07e3d690c2bf6f7254c447.json
│ │ │ ├── 6db3a38c4a3f9a600d7463ffa53f4b2c503acabbf7b3a8ab3fc9d25438b35609.json
│ │ │ ├── 6dfb81bb9a38ec1fa13383f9ae481acc84748c9ef05e4e728d3bfd46fe55f788.json
│ │ │ ├── 6e0026f250c4182f5b45ee8a83efacae52b500648f675ccc4f404c56d03927f8.json
│ │ │ ├── 6e3b3f21ef68fc94b64d0effccefda3e9e0b997cd4d6b6e146952769f5d85f14.json
│ │ │ ├── 6e4d606509717b482792c266d884c0215f87addd43734098085134a65b1f447f.json
│ │ │ ├── 6e8169e3cb95046f07020ffa9a35b7a810625af2a7f378d21822f17c8b9ff96e.json
│ │ │ ├── 6eae5f8e86ec87a11c4956c84552231bdd2a33c48f990f1bdaabebe93cab4af1.json
│ │ │ ├── 6ee0acae90b36e942dfb422e5b30059ad2f4b6e619e72c0a2dc2c37bb004a161.json
│ │ │ ├── 6f159751fbdcb74a2dcbc9ce68c9dacb5768db8d887bc626e9d6a3ec2d743dd0.json
│ │ │ ├── 6f5f057acab2b6f3023563ae556ae6fb624b146b9afbea5db3f625520caf56cf.json
│ │ │ ├── 6f729cdc0821e54e1167b0c13ba79fae86b87b359311af5c010942fbc95dd58c.json
│ │ │ ├── 6fc93628ac63a53d030a07d6213864e6ab428ed669fde46c1445854affa453b4.json
│ │ │ ├── 6fe15cf2c60ba0b86a9286e1b8f79c54430fc92bc55b3159939c09b7cb849e0a.json
│ │ │ ├── 70676edc22d29162cdf7f8f34f6de6a35874ab47637d174fb07bca9b62351d97.json
│ │ │ ├── 70a7df1d2e42a3d59f049e9016fbfcb05a3cb9dcc4a0c55bee2bd465c8ce14a0.json
│ │ │ ├── 70d5b83199ae4d5efe2ba3c6b27844ddf77bef0f7b62bd152e1df423911ae9fe.json
│ │ │ ├── 710432676f74ea2c5c27ed6bcd739a7b2d10ed0bc74bd8cddeaf6e67ec021133.json
│ │ │ ├── 711edda4e6262a7e89c022c8d356f024a0a559416f999f07ecd8c490983ee6e2.json
│ │ │ ├── 712573b408b40794dc707458827f2ae34e94edcdfabdcbea6cb03345c45f781b.json
│ │ │ ├── 71ea492a742659af7f49550086defb8ba57120ee187b82a63736ded03c443ff4.json
│ │ │ ├── 726ad976d4261f2878d3d54d77efb8c7803bb51d758a4ded912766bf173791dd.json
│ │ │ ├── 727ab024d50d00ae2f9e8e10676bbc5d3064464c36b96c931a6f08fd778e2c8f.json
│ │ │ ├── 729c9c12ea86ad5a679c95938ea11879075d66318359f9121f8efcab67d4721e.json
│ │ │ ├── 73896f32ec439243c94275fcb8e7e263de022e2eda95588c28ef03fa5b2f9ea4.json
│ │ │ ├── 7421f4e940bf745f6143407a8cbc0aac68ae4985ac3eb32b983fecb31693fdef.json
│ │ │ ├── 7426dc20731ae03a3977786945f34881edb9b902627a1cedf14f956bda72aee8.json
│ │ │ ├── 745b1ca382481fe0150c08e55e0fdff1d832ad44ebb6aa08a44305d43a4e2f16.json
│ │ │ ├── 7464b4db12154bc442b4bbbcfd43e3814c91d0f094953c07bbd7270441607735.json
│ │ │ ├── 746c52e958df8a7140b636a366c9d13efbc39484e9b5a5920c462e53ac4c63cc.json
│ │ │ ├── 74983b9b386dabd493fd1fdc83eff3d2ff33b5de3e2ca4915bf9bfedbbefc00f.json
│ │ │ ├── 74b202bce2945c2f0673b272cfa49aaf6e23deacb10415f673730d8e8f556d80.json
│ │ │ ├── 74c8203d66a949c4ad17943d6a9d7a156418ce40684feea38bc1f58f50da3ad4.json
│ │ │ ├── 750218bdd4fb4366cb138ee562611c59b343be0349acb7726b58dccbe8dbca23.json
│ │ │ ├── 7536460c38ecfb06e8a0974fef891c668558da144619d304a5d38de25486bd58.json
│ │ │ ├── 7553efaec4784c970aeb723506f269dc5e17faf44928f2ab0c3daa15f611abb3.json
│ │ │ ├── 75ae2f583e3eb3920933f9df9ff65fa5cc639daf97fd7d6b53061146a026cc22.json
│ │ │ ├── 7649fdc96cedd460ebe278f2f8c395c22f1bda389d19bb4037da4b7d468e0c7b.json
│ │ │ ├── 76a96703df5a2b1efb7d87faba72386edf12c5fe5b7f59d5ca4be60066180364.json
│ │ │ ├── 76b56f7240f9917ac0dcb7cc3145c0e3c6eb188a98b6bfd1f0cd81e079d4331e.json
│ │ │ ├── 76ce17a06d7460753a049cf2c3c6a62d9c0083b2e055c006549896a07f7c46be.json
│ │ │ ├── 76e24301beb081816b05b41f614ac4b3df78a8b0f9617b685e921fe2b9084a89.json
│ │ │ ├── 76e98cb75ef931d8b98230be177efafcd1e41efa1e63fbab0a2d69566bb51679.json
│ │ │ ├── 7770b77ba6c87977b6a3e979a32f56a23f829d637986257b41027ace632af349.json
│ │ │ ├── 781dc9301b45fb50d885bdfd813990c0d0ad02fb0e73445c52dbd997fde71b2b.json
│ │ │ ├── 7822c6c920ae0e25163aa7457a05f937177b909baea42726ff5b99a30f48de9e.json
│ │ │ ├── 782ecade092991d2615a906a313e1cfd66a920e41b55570709f7603d5b00a00d.json
│ │ │ ├── 78bb859283b9e4dbd4d00ae1a09108ec8fd4abbe327418c10f8f9e13a21f054a.json
│ │ │ ├── 78fb5bccb642e99ad60f259d082a6ec40e77a41131fdb3fac10b4e6488b79a67.json
│ │ │ ├── 7955608a81bbfd541869225386fd28885e6e0ad4c0e3fee6735f4248367478ef.json
│ │ │ ├── 799eef2c9ac071333577d8d50ab1446e39be78d6763fcafb8a1a514cb2ec04a8.json
│ │ │ ├── 79ebb5ab36a0613bb32618e406cae32a41fef4c10fbc35f6033c9facf506d4f2.json
│ │ │ ├── 79eef0892811544a09f4c6eb8ba77030de1c3f09eaa2c0c42bd03831582031ca.json
│ │ │ ├── 7a368e8a77317d21418ec490bf8f2dc1a5ad0ff4a4f49b5eacc775bb833c6503.json
│ │ │ ├── 7a5e4923d34042f41bab1f3ea7aa257f7f29c5adf33b8929f99f577e442a6ed2.json
│ │ │ ├── 7ac2dce2db037fdee005d2308e1d1d480b01454f06579e47c8fdaa78c87c5e6e.json
│ │ │ ├── 7b0bae9b0cb3a81574a8e102c244e0fcfd1b49466bd4ba9564cbac3db02e4214.json
│ │ │ ├── 7b55234e7a23c36582844bf3692da1987389236dcc24db56e7ff6f2bd2fb37df.json
│ │ │ ├── 7b5d272f3e3c2a4f6d55c4201122a1c38b1b866bcadb156fb2d7cf45b61e38b1.json
│ │ │ ├── 7b8cad4efc4bcce16d2cf271e3db9e4d997554e0d149e9ae8232e44357799b92.json
│ │ │ ├── 7ba936935d47de7c2a94549a45b92ad8eb8a1b39b71b6148e04c0f2b9f0612f7.json
│ │ │ ├── 7bc62895b892846aa4d84e7d68ba9fc069fe69221a982c18302faf96830d68d7.json
│ │ │ ├── 7c756c68ac76d4d45ea54795059d300d6592fc1fc64b25e0e6ce31449741ef51.json
│ │ │ ├── 7c7699dde0563759fbe13c84c47d965abc879657d268933f35c18d0b50c0abbb.json
│ │ │ ├── 7c7ff1bdad679df46bb1e7215351b3ded615dc133dfd0294a885683995daa2e9.json
│ │ │ ├── 7ce7f76219625755df5001d9b7c8e97031abc1d3861f81a564abe8817fe03d7b.json
│ │ │ ├── 7d2a01d2f182e2442a42257acd302cb5254340c20c8126110dde82fc56d606ed.json
│ │ │ ├── 7d60dacacb43518674f518bd43bb3f8a0a1b524de084bf72cd130c61d15a9ad9.json
│ │ │ ├── 7d879d3d60569909c59f8a836a427f0ba6dba29a5bb9ac0acf088bd8e08dc901.json
│ │ │ ├── 7de2ae057d69dc504085873fc1dcc96549dfd906493068da020ec3dc0ecb609f.json
│ │ │ ├── 7e1e25658681d2702585a44b07f300d2f7bed5a59663a92fa12bcff24ab665a2.json
│ │ │ ├── 7e757e741674c8b4c1c1ad8f87c5207b7a8a730bbbda0fa0d692cbb6cc12dad2.json
│ │ │ ├── 7ed62ca088a0370a656675466044aea255e315ec204205c2f2b9175b136c5044.json
│ │ │ ├── 7fd156b51621b0d34e088b2143264cb0fc37f1a92db4d2e537ce2c1e5883864b.json
│ │ │ ├── 7fe2adf26b14ba1ec69a756002c6351fd5103f6848a19db5ae5038de2a97a5ed.json
│ │ │ ├── 7fecc1e20a6e7d2644d9635325b040503c9dcd0eb8f1a24993d97ead6c28f844.json
│ │ │ ├── 801020faf1c95926a6e7ded18259004fc2268dd65f7781b6e0f830e5558560b9.json
│ │ │ ├── 80f1f4441b1a956b91b5cc2e6251111aaa2ee77b17a064b802569109d957642c.json
│ │ │ ├── 80f62411a9ad9230babe30730a00138653a1162348ff325def2822cc1b54b8b8.json
│ │ │ ├── 80fbf2bff62e71886fc50a0a83943658aafa9a0fe0eb89428fb43a5c3ae647ae.json
│ │ │ ├── 81c91d970cb7537c31d880a38b9552d8bae0b82a417fab14f53a911a925d1ac0.json
│ │ │ ├── 82550231f6a671c15b3c611b45a2c531bd943c7167d6b61207606b93b74a6037.json
│ │ │ ├── 8344625804c6271d20079d83929380912baca583581cceb4a582fd3a81c0f8b8.json
│ │ │ ├── 834de0980de7338e09a84de95d8d8448d80ece19584897644cdee3af6ffd2b0e.json
│ │ │ ├── 835100ad83c5d3f0fb274c358656e2ddb6c868a1255df5e9bd0d57954fe55832.json
│ │ │ ├── 83f96f250e40b186a033aa1945446d7ada03564b264f1fdd0b32b3ccdea7330f.json
│ │ │ ├── 84107b706f7f4e902f8982672d9af48a3a803ad96317d54093769d2c252079d2.json
│ │ │ ├── 8415bac36cc883d7394e7af6934fc7dea50780be52a3ce9a91cfe58b429da53a.json
│ │ │ ├── 842c0d2e21998d732fdffa6ebc344c5c59b7df08570117252654a79612a9f5c5.json
│ │ │ ├── 846540ecc59fdf4a66bb7521b7d331fa2b691e7c80979e3427d7fcdca2e3492c.json
│ │ │ ├── 84961e630d0c441db1cdc54ed6b0f9a65cdce2c1003c9e281e78a5f55517ffad.json
│ │ │ ├── 8500e40ee6ee6532fe69c5a8d1829f1c7edbe76c777094888fe785f236bd278d.json
│ │ │ ├── 85163515f71bcdb532fd6828c9f16080d1e66048bd048e156b91f6fe377ae090.json
│ │ │ ├── 8533deab326aea070d886bbf142e4d453636f1ae19c3bbb17de0a4c4d8b981e5.json
│ │ │ ├── 859a851e4cfdf6fa83e11a4876af54390c642b01f0121975228cd3edf713562b.json
│ │ │ ├── 85bc7f28df4e80adc546b0b33e571a1d24604bc1825eceb58e8bc050d70ca66c.json
│ │ │ ├── 85cf7486b28ab19df073038478dd0c15105c52edbb6acbcfef1e98a0a300d6ca.json
│ │ │ ├── 85e7aa8adec439d380095cf528c6be230eeea2a99b1f06703fd413ee5750cc7c.json
│ │ │ ├── 86403cf98fbae005fcf3684f1abef4ebcd96a693968017c4ef2a7545464571e4.json
│ │ │ ├── 864496a255af51cb73cf1adfeb1885a421f28e45e31b76971cb2ff5d43f64707.json
│ │ │ ├── 868db6e8a427d63dc71b749257aa40343a2876e37cc0f695fee5f1ae6e1d6ba7.json
│ │ │ ├── 86f08c6b621ad2a143ad9406debe9eaf285165e3231ffbecb99b83d2c1655466.json
│ │ │ ├── 870314ff8d630d8e700d55ac15c745b425463961d16b606aba4c6f6eb76178a4.json
│ │ │ ├── 8723d6de138bf58c4bb99dbb3698a6ac423298eca7f544f76d5baec427e1ccf3.json
│ │ │ ├── 872e677d1fa01d295e2bd9da46d1ea17880f594399d8a1cb9127688b8dfe10a7.json
│ │ │ ├── 8733b9b2c1c165ce97a2548f2eb8e221429318a57340229e19487fe9b1f6bf57.json
│ │ │ ├── 877d845218a47d835e542619cdb889dab6e21348383c7323163fc118167d5705.json
│ │ │ ├── 87a6936c281c4edec68a609fed80fafbbc845a38529057057159a8aa9fc1b774.json
│ │ │ ├── 87cef711eb891a9a41df2cbdff818305025d5f4981b956fd276e5da85b64f9a6.json
│ │ │ ├── 881212eea1a86069e61ad4ae7ed86364c3bededb307d7b893997e051accf1e2f.json
│ │ │ ├── 8825726830280c0cc878e2a705cd11874a002be0e6888b98c8128610c603ba20.json
│ │ │ ├── 884cf9ceb8eab929c6dd546f622974aed879fc5d70782ea412f24b0ea760dec6.json
│ │ │ ├── 889313e50fd10adcb7d5dd2a8d11e9f903cfe44505df480ec4f1a4802c36e354.json
│ │ │ ├── 88cf13699480c670db5c0999c6864a2039c196abee90de0ef359e74f3057cd82.json
│ │ │ ├── 8905c8666c248770e5a5c69928d2d4e788f525ade586e5a81d73101e3bb4de3c.json
│ │ │ ├── 894548f79cf908a5c43e0789d2b79fec50040e1fdf2f890b97dd55f8dcc493c7.json
│ │ │ ├── 8958053f5c5d90145279421c7af5f9eb11777026cd3cf308901bb1af1f77c5ad.json
│ │ │ ├── 898d045503cf5073e730a0a2ed98640f42f5640dc60fd376dabb24882c9cf564.json
│ │ │ ├── 89ba50eeeafd6a1b49ea8866af15d23c5932562609f599a51be2a0fab35b3aa6.json
│ │ │ ├── 89d879fd2f928170132d05029a2670a5ec6ea24b35ad054d4ebd3b651c7dd3fc.json
│ │ │ ├── 89e0fa682612afad44d9878dc0656a36275d9fc80e6db66557dce16df045c662.json
│ │ │ ├── 89f271e9df6164319f53d11cbe1d518d436880b030a97ea9b8c846416612b13c.json
│ │ │ ├── 89f6430a666538bd146f80f7c63e4383eb947fc8708d0a8d8b6cedc85b40c47e.json
│ │ │ ├── 8a218ac9b95202d8300569adf6af6aee511dd5ea148b41b78e24b95945811f3a.json
│ │ │ ├── 8a2b15296a3d9327ef6e3ecc0c7f997923a8819334e1ee5e839ede96c05b8df1.json
│ │ │ ├── 8a73f476d6c54b913594b498862be6cdc51e19fb0040090b84a6ad39e44b5dd5.json
│ │ │ ├── 8a89236161f9ca92d7272a30d88bee86fc57817c6b5e1d8b6a5f4cccbb806d33.json
│ │ │ ├── 8aa2b5b720f1a1b2f22768978d669f497d8ac3c9166a3ffdc5c4892f304d9a08.json
│ │ │ ├── 8b2ae57cfbe9b64bb11e4e91377c15c92c4c7d3255218620da6f0462faeefc73.json
│ │ │ ├── 8b4c24ef7b86b22ca9bbec12fb12e03a36c351ebcdb8b2519255513c0484e36d.json
│ │ │ ├── 8bf6cc56c1cec8fe0bbb8172dafaf11ab58b86e00ed27a0a6b490f7529f89d64.json
│ │ │ ├── 8c41faae008a68ee725152f337d08c2c47023ff9972201c75c779003184a7cd1.json
│ │ │ ├── 8c7b870fd2fb3e6303ca525cda4318de9fbdae4ad15f5805cebb2903381399b3.json
│ │ │ ├── 8cceb684b34782e58d6fa76d69f95982b50c4ca695f2b0337b6d7571c4253c6b.json
│ │ │ ├── 8cd82d1d8dd4211e726a54a077bb7469c76d1e80c98542f58036ceb30783a997.json
│ │ │ ├── 8ce9fe31376d00189ab03b390921eed444cf617265058296e868193071c0e87e.json
│ │ │ ├── 8cfcb33a87c9860a172d7381a1c752a0d73947408054b38f680adaab70e53b41.json
│ │ │ ├── 8da3037194397c09fd2eb264df4edc2ab53fbfb9cd126ec7e2242544bac3d81e.json
│ │ │ ├── 8dc3e2020d04ffad2b9af672025f95f728519849f9f5db6add49772c914eadbf.json
│ │ │ ├── 8e7b85c37d4a090248d5a54e69e9c993d9c2d7acf4007c917c4448861895bb67.json
│ │ │ ├── 8efae6cab6ac05656732f6803fa521b24876ffc8fd2b23918e0698876e6f327f.json
│ │ │ ├── 8efefb173377ad56dd2d549384209ffa9e1552f3384fbf8b3b2ecc285d0f96df.json
│ │ │ ├── 8f0219799e97817f0ee21970b7cac53bd0928b7493cccc8314b3b24389242f48.json
│ │ │ ├── 8fa24a6cd9da0c08857479aa3f34e4705582e76dd67bc285f4769d5d7b6acc6a.json
│ │ │ ├── 8fcec860e799b01a039dd0ae898084408e353489dc19625093d5b4bc4b117caa.json
│ │ │ ├── 906dda40ee87af0af29cb3c992a818edeb52e0c58f3dfc887d4e6f129f541a18.json
│ │ │ ├── 9089127a492cc836daf6bbac7f8e147643a007b8d66f42662e2cfca1bec2faf0.json
│ │ │ ├── 90ee55852dcac0d5a4bc40c765c192aed4bdfa8d4dd7a09f0ed38b78857282a4.json
│ │ │ ├── 913b03812f31b659e7f082ec3bf09607d0c83e2e1226b3e57c7bdfdca942fe60.json
│ │ │ ├── 918071d15f9b74444d889ecc40db1bca5f39943ac3e4c3e4679a182ee3337a3e.json
│ │ │ ├── 91de59891e32b52a6ac64afb7c325b65c7fc2f6ca2facd18c0fddc3a5d21d382.json
│ │ │ ├── 91ea0a4af232e8ec890039630cc810c5656269e8586336cce025ae63bbe8a580.json
│ │ │ ├── 924858cbd18d095db76e7382364371844fe72ba0e736648cd9cbcd5933e7e89a.json
│ │ │ ├── 93eeaf2e8b8ee3944bd0aa0cd10f969637d4e1dad37ba06ed9f92d3d153f415e.json
│ │ │ ├── 945e880e56b6dc2eda9b0627f3d7190ffe2c099d95bb1b60fa0f45677826798e.json
│ │ │ ├── 9482101fb06fc506f4c9e2a327b6914582707e2dbc611164d1599db9954e260e.json
│ │ │ ├── 9512055e0cbff970c02a846dcede99aee78136d159f31a8b9e8ad138f85084d9.json
│ │ │ ├── 954416473cea61d3260f2344ab22837db590827f16694d5900cc2e509dce8030.json
│ │ │ ├── 95a538b07c1e5c36cf833b0bf2c24c2aad8887c0cce29f131b8955d49ac36093.json
│ │ │ ├── 95a749789e3171f15fb62e842aab1e6f7b90f5ef49294ec589c4cc4f766677a9.json
│ │ │ ├── 960f58602f47f074d08bced40d8e2b53444a0ac878445bdbb57d6347eea947c8.json
│ │ │ ├── 961052707b2d39c56d3ac2ee7c71d67fffc2c1398c7d64d8e18a7b28135c42c3.json
│ │ │ ├── 967e2a03e17513166a6db60940f525da73dc51e6070f173112c958d19f1adc67.json
│ │ │ ├── 9695ba37a74e06b354eaf534b8a50469ad28d863f5309da30df231a693b11548.json
│ │ │ ├── 96ee5f375448ed42ddd58a7cf59665e9206fc4d57db74284f078e0d7b8b726a0.json
│ │ │ ├── 98ca5a0d319ac231bd0397b484a575f161a9d996d50d68533f87ca28bd08f1c8.json
│ │ │ ├── 98f7e17eb21e729e143f0087704adaea95bb0f0adff24030074dfcd3baa4c0bd.json
│ │ │ ├── 9941623b98009492cdc37b2966b404c103e5994ed41dd1fcebb4c2ce6877af9a.json
│ │ │ ├── 99d4f70edde26a74f4b3590d532fcbb9546d960ead6093c4ebf980ad8633f910.json
│ │ │ ├── 9a23c502bf93186777c9fb2234dbda85ca059f0bdaf46aba368625f2b781ad61.json
│ │ │ ├── 9a82cdd4c2c930068e0496e03c70c9f637afae4ac79b9c17a472cd77318d8b03.json
│ │ │ ├── 9ae5cdf03e64d484ebb05bf06ffcfce8fec54f1b18bbb9eaaf5407a1072ddd18.json
│ │ │ ├── 9b13e00524b4e4056ffa2ae46eec43ad2bb981bfdcfd473c228ebf8e3d8d46f3.json
│ │ │ ├── 9ba01a24d92620ac886a5db2df8688d6c6edca61f3f9311442b1195f7b849c15.json
│ │ │ ├── 9ba042c097818072535372cd9886f2157ca4dc563b5b987afcf07fdda5ca91fb.json
│ │ │ ├── 9bb024db136ace66f2925ff2ce5345c6d3c1460b75535e8a411e44419157910b.json
│ │ │ ├── 9bc8ef2797b243f9a57b5cdc44b9030871574af42b9a7e172b08e02ad2e3c4a4.json
│ │ │ ├── 9c35ecf7b0ce11d35f39cc190caa5ac006b1180c3299d610d502d8e095f6355a.json
│ │ │ ├── 9c5b3f7877641d8b22b2f7db82d44f20631878bede3007ca6da97daac76b129c.json
│ │ │ ├── 9c92054d5a37bbea2ac19698055e783947b98191f6410a096d9f547aae5c03c9.json
│ │ │ ├── 9c93f6bf11ad1e5d74de5571c1247415898f1b40d05b29edf4dbbe91086f606b.json
│ │ │ ├── 9d8e37f5bb06c037fbf7397ff8280861eac7a6dbd2c193a695107e1b031def8d.json
│ │ │ ├── 9e10b8612a5a69b4911e01ac9dff62d1224fbdc0c02c6af5334be6b2054da062.json
│ │ │ ├── 9eb26fc4f2fb79ccfe7d09fec5e9d988460b8dbaf0b84e41ad4697ddc3a191c4.json
│ │ │ ├── 9ed9b8c6861b40c956931191a2f5296aff9ee2220af99749b91de6ac5e8f1289.json
│ │ │ ├── 9ef4cf2f79947ca5c835382d496d3dee1278084acae52085205e6d365d236357.json
│ │ │ ├── 9f3ca60e271e62dc90930c203fc4f8c0d84c94c6dfd3f93a32f3affa19a8ff66.json
│ │ │ ├── 9f490fa9287d9e22e83bc2e5b3e83d167c903c8c958091fcb222024bc9a67a35.json
│ │ │ ├── a02ef02d05fa58e2714dc1c4e7de674f41bc1162eb4203a498d18b5ee2cef286.json
│ │ │ ├── a07c260cb712d94e4ca0b3d35a39b230ac23c8dcc40eed36c9fd0917bef93924.json
│ │ │ ├── a11d3fc445802cafaffcff7791c6582e0437502aa844182022a2d189b1a524bb.json
│ │ │ ├── a13f258f5588abfb8217ac6c191c1101f9aad430ccf529234040b201c6a6696c.json
│ │ │ ├── a1f2eaf42e937611b0f75448c7ff101b6af3cfb8dad1ed6ffb20632044c6d9f8.json
│ │ │ ├── a2502753c569bbb394b1ca9396c6a8c6a8a16f9975ac92cb7590660dbb18ddf0.json
│ │ │ ├── a2cb9c4a3389f918a08acf7f7adc8f62211799e22ae60198dad20ef9f300f46d.json
│ │ │ ├── a357c8692764a18a6b93b32874ac78b5f8de1746faa1f41efb22d14933407493.json
│ │ │ ├── a3c920cb946721c730ac20c65c9954bbf66591a838c2293ddb7536f90addf848.json
│ │ │ ├── a48cfa6cb2afaa1be0bf05853c3eb55b156fe862dead1fcd4d0d7ef6470dc138.json
│ │ │ ├── a4c45aed0660dbaac088ca59b12b9ffe3dab5517417565c53698f022079ea81d.json
│ │ │ ├── a52c0a478a253c8ae72233d0924b895b8ace6f4b2a04eebefb1d39f9d82eaa7e.json
│ │ │ ├── a58b62cf5fd308bb92e26b275b7b7e76b18e57dc4ba417998f097666b219d7c4.json
│ │ │ ├── a5b2726cff08ca90db1a6b540b9bd9b469bdad35ee68a4cc53bd97bec1003a5c.json
│ │ │ ├── a6b2154bdb5546bc9abd6ac99e69c51307f53d4d0198a9e40819a48d3c3e8018.json
│ │ │ ├── a6b78dc7040a3b8072e6b2988134ad2d8682dfbae2b505a6d0e17d2eb2750340.json
│ │ │ ├── a72640b7420827c0e1904e40b007c088c798cc710596862b4f11c240ec53ce7f.json
│ │ │ ├── a867f61f77ac7d2fcc90314eea91e66c147e48127fdd151297b107f77f64e0eb.json
│ │ │ ├── a9070f1e78634e62e678f3b6cd79ed7060af3721b2231a2958786d56716c666d.json
│ │ │ ├── a935c998630e4f05a638cd6cd97e5493a52b0a976dc7e99d9fef3261f8f755cf.json
│ │ │ ├── a9677d2535a6d837c548a2ba934dcf7ae48cd304b5e4c30c9e7b2da593eb0bb4.json
│ │ │ ├── aa3fc57bdafc9257b1c6983627573330c60d50d26c324f1c15a26dbafdff0d7d.json
│ │ │ ├── ab83fe90a2318e24c516d0f883d7f64e613506f3b7fded7d3411822d8f20aa40.json
│ │ │ ├── ab9d456fd2c5bf9c44ab26131c176d4b455d5d608769396d363598d355a57048.json
│ │ │ ├── ab9fbf67067f638318b8b94ad0cca73905259f7cb182ac9b7024f1888c3b6414.json
│ │ │ ├── abc73b8567134030e5a6cd0202afd8951a5a7976fe4315da5bb2de853a8c3f1a.json
│ │ │ ├── accd741d4b74.json
│ │ │ ├── acfefd50b46f8bdaa9ed89f61bc79063801ebc13f467166db660716be96a7e0b.json
│ │ │ ├── adafd1c9d170436d5a746cf0e75be8d2321f60d2f860d69fbacd86a28b9f99ab.json
│ │ │ ├── ae230a6062d097d51a5a54cb41852f7f33f6b2c7a400039007c0822cac28d434.json
│ │ │ ├── ae5fbe1305cad035af3745bab08c3bfd9549886e65c95ed7887e2d43df42d0ee.json
│ │ │ ├── af0dbc6de10e26971ca3173fd6cdc9553a5691d199b032ab3abdaee6ea30b127.json
│ │ │ ├── af3a19fcbb2de1d9de4748c8f6895c75e3fae88a9941f3db3be73e9b4afe61a9.json
│ │ │ ├── af586c20e57267c3dff9c4ed3b7cf87e94e7c810aa550d4f1afad9cc4bd7ce25.json
│ │ │ ├── afb809422f92036a83c0368451fe08a3e605df24961599d214e3142e8b6f451f.json
│ │ │ ├── afcd08ae84eaf85be553a99b1585914cc7b99f76c11d1cd95311365f7e2520b5.json
│ │ │ ├── b07744ee04bca57741920f6ebfd28946604e21d18d30ac30d9a41956bc8e6639.json
│ │ │ ├── b12d4f926e46f2ed92e1a0cee8fb325f78c031c2c571286f297aaa46f5edb0bf.json
│ │ │ ├── b18dd1210d29067c89111b56b4ac89cd742f9e4b0b5e6618176463b6f943525f.json
│ │ │ ├── b1a8c7b629a05403d15bd3ad42414ab9faa5195baf24d9a2cbb4448b37aa37a8.json
│ │ │ ├── b26ee0191f21251fd2cdf03db2112e39bd5b2236417fef244285bb09ef58079e.json
│ │ │ ├── b28efb19a938e3880936efe24f0725363f7cb24eb9be0551baa3d76d63dedf95.json
│ │ │ ├── b2ef31dcb089fcf39c5a11cf56551c16246fb78e21e7c3e7e17d6f8e93ec97b6.json
│ │ │ ├── b324943b16ab1d5345e7953237b26deaf7633a4d053094aa3160f90b9ee8c423.json
│ │ │ ├── b345730f4ce8dcec94d43d4b234cdddb91996f89adc38c077c351a33ba8ad162.json
│ │ │ ├── b355e30b927b9edcbecad367da5cdd08b2c0df040ef12807516bf2661b2985f3.json
│ │ │ ├── b3c24a0ab429fb3d7e3680a2a689a8eddb2c2aaf826b513fec55dcd70cdf35ea.json
│ │ │ ├── b3e6d9837419a35aa7aa56e64852febe38130ca408e85b1d8eace747c1432c30.json
│ │ │ ├── b4ae7b5fe468a9b049ed53851d94de3dbbb1c06d1d260676b8c61b85cb052a82.json
│ │ │ ├── b4b553e34a48bb226e64867e492d349eb8b743c4adc2ccd9544c8bb430a932bf.json
│ │ │ ├── b4e9598230222a5223f8dfcb9efc11ddff8d8cf8e33916fdfa7d30c3aad8b062.json
│ │ │ ├── b5aa5a7967e6cfe0e1e3aa53ea11c1d3d254efdafa0c982852f8c1b93e4e489c.json
│ │ │ ├── b62c3f8f2acdfcf00c9831f56d7c06627c4cf0c3ea8e9ce39a239d1c79c2a67d.json
│ │ │ ├── b62d824408e5d5f1e278fb6ed654b18a8c50eeed5cfdd125ec110752595649bc.json
│ │ │ ├── b6578a03313d7ae3d2d4e096b9468babd648081b68891f7b4cab19bdb2d0996e.json
│ │ │ ├── b6cd4c6f72a27cce38a55f30a6a72bec1c88af0b7489d38d9aeef815a6489095.json
│ │ │ ├── b6d9e1cf95454a60e222f08f5529acc85403c448892208d2f9d1660fd75699ee.json
│ │ │ ├── b6e2f92f9a42bd574345c2fb6a1fb6411fab2756b155c0dda704956c63eb3164.json
│ │ │ ├── b87a025d37e4631cf736373c2f3620dacaa2b41e1aa0e0a4d4d84b08539a4b72.json
│ │ │ ├── b8c52fedcd0444b1f9d78ee150f8a7ce22d62a334ef235fa5fb90d151ca17ed2.json
│ │ │ ├── b8d1394cf14ac07dbe73d6aeed034b924d65d436ce0589eac5fbfc39ad2d8c3c.json
│ │ │ ├── b94634083f5b502478eb9465d5b29f49bec43271ebb2f394a660bed126918144.json
│ │ │ ├── b94779a78abfc68ffe310b9df0524044c355c1bf57b98dae6e63d44848d71433.json
│ │ │ ├── b95ef0598c13937b9c8a8b4aef933aef0a2a4bebc3f92b4c53320a21796c4cc4.json
│ │ │ ├── b98357785c1a8e285c18ee9ffa5d8281bd6b7bd589afe8cd08da7ed2d32a6329.json
│ │ │ ├── b9b13c917d8c918ff2c68cd38c4ccc49b4658194b3bf684de122375f9d799d59.json
│ │ │ ├── b9cf2277c2014ae47bd0ccd5784220f64b286925c5c92d1d3ed32e2d73a7f7f6.json
│ │ │ ├── ba5af8d56e09c291e8bd26f6f310661efed8f98568b5934ff686c0923d17bf03.json
│ │ │ ├── ba6643acb97baf3e5827c30c3c0c5c93757f351e09250695ee8fdbd305ff2a8c.json
│ │ │ ├── bb08b0234bc8ab5e587336d2b3795d325650440e5f86a3caa930bdd699f8e43d.json
│ │ │ ├── bb45c90bf4f66e08e90c5923ecbdc3df14be190f56a62a053a8577841fc317e0.json
│ │ │ ├── bb544a658bf4d58ce1f1078f125a4e81220daaf17c45c8e9b26063fe77b65e08.json
│ │ │ ├── bb6fdde027740ac5d908d741cf6722128186db06187f1658864b397dd85b7e30.json
│ │ │ ├── bcc2836e70bda8012c7c416bd170b8251baac042272a56cd7696c734fff243aa.json
│ │ │ ├── bd30ce11b71bbfd00ec9f2d6aa9d1068833675a6e0e8bb8ecc0007c01a57144c.json
│ │ │ ├── bd978bcd8997356a248151bfdf1ea2ba4d937215e922091fcba43b3eec385883.json
│ │ │ ├── bec883b835a4ead4c3cd10706fb31385cd36561c42d0184aafd40ea3287b96da.json
│ │ │ ├── bf07c673d163cb6482b2407e9ed0a0305fe2dbba966b668bafa2bf098108fbfe.json
│ │ │ ├── bf3af83c04fabf7428a820a4108d77d7ea22bc5edd24bcd6ebfc33ad93b86da4.json
│ │ │ ├── bf42334ba8ccdec1613a5652f1312468deae5cbb9613419643b8290da2267500.json
│ │ │ ├── bfe299f7d5e2d6752f5f22aef2863ec1886b39a203bd938857cd32225b961e15.json
│ │ │ ├── bfed3bff1ebde7501c487d760a69394d368f2dc507268730451fdc7eb2bde6e5.json
│ │ │ ├── c06e3e9168e15205ae2d1798b9a1c7023b66c8345f4f0e2a3ff89f16761207c6.json
│ │ │ ├── c07068627fabd4b135cea3c95316118e51341c42bcdf35444d937eee97bae329.json
│ │ │ ├── c0a4c5c2dd2ee8fffb29693dd123cd7a0e525f3d8fd4bc88c61e17b412b20d7b.json
│ │ │ ├── c1946fab4bf4700bf1a2c8212edbea4f81e280340c702ccae3ce8b478e9f89c8.json
│ │ │ ├── c1cef185e8d7d5a903cc7b81e622a00555ae0bab9af318079246df5c4795d7c3.json
│ │ │ ├── c2287c0960ed4857e1cda5eba09d20c56a8ab0afe06b25f59c9a4fc14a3e55f7.json
│ │ │ ├── c245aceb066511e357fe0e42911a0dcbcda97468d360089466144518bf27a5af.json
│ │ │ ├── c2482351e08e17b8ff837ed256b2d520cd5d088698a2e1ccf89d76b594c66023.json
│ │ │ ├── c275d023fa3d28f0b2e0ce6aea4ce01002d452bdfeb47cb5fe575099b01bea94.json
│ │ │ ├── c2a65d38d858ec59ec79f4c5a139e96b5652a4e598d4b3a50b17021ed4429e7d.json
│ │ │ ├── c2f33ae4fb9a88045730d790b7490d87ad64eaf7410ea1628e39251051136af1.json
│ │ │ ├── c3333a928f55b11a6c432f175e8c0d449889be37e7cea106adcf82836cc9a702.json
│ │ │ ├── c3aa60d65de45f5b494ee764faa65db8a7a472bf604007244f9e7450af3ea5b8.json
│ │ │ ├── c4084c9d90edfda84b8932542d9ce3c1ff3e58f111ed4f7ed457e1ff0e5c2eaa.json
│ │ │ ├── c470ca9b2638ad25697d3a703618f8e876ffbe4876882cca4765766d14d14826.json
│ │ │ ├── c47ed482b9e4e322e02ba3360187fb643f65a09c4622fc002193d716513f134c.json
│ │ │ ├── c4fbc04f05e51b2011409aba39157632f71d63fc264bfe65f5934974657fc284.json
│ │ │ ├── c5a210bda3708d1e930b61b62244afc25e2164d9f1c3e86ca86cc184e47ddc46.json
│ │ │ ├── c5d9f188e4a5ce31dae6957c44293670ed6aa0c8e1da5fb12cccbaff615c2700.json
│ │ │ ├── c5e10b616118de5535cdb9f3b23d5c97a052b38c1d0991d0d40957a2d26d7de4.json
│ │ │ ├── c61ecf00cb241fd51cdee62362d4ad8dab5c50cdd1305abe99e98cf82233b838.json
│ │ │ ├── c65686eaa1a1d92a625735c9c62fd25a4032e310bf0448712198c6d0583fc890.json
│ │ │ ├── c70e9c79891bf26109bd2ea9d589d4c93b93eb4205d72629ff682d0595355075.json
│ │ │ ├── c7446b903135a28b57098ca75e8a09616be69ff06cb5e962ed9cdb7c52c4f042.json
│ │ │ ├── c75e2552641d7fa3f2f45db014b2e52ebef1cc507c60a492619d95e3c22eae95.json
│ │ │ ├── c767d9255fb4bf45389cb627ffb20e0208868a6289f4d2f69c1d3034fde9e463.json
│ │ │ ├── c794ada97cff86c592db449e4973954668074081cb7ad61c89deb969d93e9094.json
│ │ │ ├── c81723f6c2f113a0b0150056293828fbf091ce4d5d9a0dafa6307ff1af6c1bb1.json
│ │ │ ├── c819f63f56cde3c6e586611342598333b8b5e6d01a31914219868283ffae8514.json
│ │ │ ├── c836313adba02042a668e0f7446a36080a7b55bbe3987de736bb26d324f9d161.json
│ │ │ ├── c870397c2ef426207818a36a0ce9b79125c89c01563004ddeb8d7d5b4aa71231.json
│ │ │ ├── c8b6f1e1ce29dd96b385116335ec06380f14a91dba5db721486a354769255521.json
│ │ │ ├── c8f3506511c99a4ddd8c7d389261ddd9153c5062d6c73ee538292d52afecf33a.json
│ │ │ ├── c9023d5c27b0ec273729b5efcc87cc75fdd32b78752a352c33ad76a1c3310836.json
│ │ │ ├── c964d5ccc1853798da808993bc0d2805a77bb9fa692ca34b5f1a20869bc4baa0.json
│ │ │ ├── c9935e59992e964151e8270e1c602284c721618203b336253a1e978f51b3d136.json
│ │ │ ├── c9a575dacaa3d646847efb52440ff6a57150fff785c3200ced10d51dfea417b7.json
│ │ │ ├── c9ace0e415db4bc8cec4230acab6170feb844977e233088339b11520111fa35f.json
│ │ │ ├── c9c5a9dca92a043ab728b2defc3b00cc87acaff070445e5a4fb82041323af026.json
│ │ │ ├── c9c60b59fdde74a2da2d4473166f13251d242cdf08fb7a0bc239897638217b3d.json
│ │ │ ├── ca4705a6b1c7cde723f95dfa5e66084659adf865e2a6a4b3ed06743be3d84ee3.json
│ │ │ ├── ca8339fafb287d7c41c09f9007db7ea10557ebed135964bd47300dddd075113f.json
│ │ │ ├── cab70ecb8dc421d5650b16ca0efb4d1651b5fd9208c23666d28082a6a81c18a4.json
│ │ │ ├── caf249303788bbf215875e82f577eb2b47cb79565dfe4c80d44a752eb3355e5d.json
│ │ │ ├── cb0915ce016e2f2cdf0e8dfbbf3087f8504623967a34c9dc00be26a05bb2ece7.json
│ │ │ ├── cb338f3d99f7cb7b15f1e860147487529a7bdb9d822752a5efaf4208e52528fc.json
│ │ │ ├── cb73b77f0a724be333a972afab1731dea8a1fee70e62469c5b25e479839910cc.json
│ │ │ ├── cbcdd982c4ff2743c2a89d2188d5f4594e654bfaabaec17b30f3738a76cfd7a8.json
│ │ │ ├── cbf1104a013154f501687d975aa2338f9a63ebb944bc66422159f6790f6f5273.json
│ │ │ ├── cc1bc4ea60dbeb16babfe0f2e2180948147976fae10275b6d0b7825a3146f6d4.json
│ │ │ ├── cc203179f129c20ec392db97acaeb6f6f84b7b52271ba6f8d382ca8b4df4b1d5.json
│ │ │ ├── cc4223c5b4fa93f038904e09ecd82abf3539157ff2197f0da8a5b2d7cf787d9a.json
│ │ │ ├── cd75899ac0ebe19b71a97862e623a9b4ffc709d2bb77b3a1e7e45728679e1fe5.json
│ │ │ ├── cd8dede1bae6783b0da9fa0e23ac24ac64111abd490278344bcb408a8b754cbc.json
│ │ │ ├── ce2fb29da9db1d69871d2c5c83311f9a001e2ca1b37d7e654e37051a4b1ac513.json
│ │ │ ├── ce4cd6ed048f8b76f33c5d5a9981b8180bbf1802472eb825a25603f98df73228.json
│ │ │ ├── ce84b764d28898cb18cd8f0dd41806c04521ea023b07fece5ba628cec080c0c1.json
│ │ │ ├── cf315d327860f159ebe5e98487c619e94f8df615d0b38eb7c44ac02db8fd8bc0.json
│ │ │ ├── cfb6925805d1b2d304117cdbde1191573149954ac33d5b59ccf48b179ac40456.json
│ │ │ ├── cfcb10b04469c51961e536c3778b4c05e7e1fd953e95b402d1832cf3775279f1.json
│ │ │ ├── d03fabbe414834a8278ff61a147076c3724b5c0c6e1b8387459698973575e589.json
│ │ │ ├── d0d555381b39bd7f058cb1789b58bb721edfac5d86ae03e3030e3291d7975dab.json
│ │ │ ├── d136c4241b5eaf29b487168e9fad90d295d5964b9f72208fa31357ee2aa27541.json
│ │ │ ├── d14b1ccefbdad99f31e87bea331b9e12bcbab48877918f917daa66b2ddd8d566.json
│ │ │ ├── d1753a6dd37d5619886666e29c6560712c6639bf0f6779ef88b16db97976b3f6.json
│ │ │ ├── d18c3f556c9352b80d3f84f4128f175c52bcb5d6ac2a110ae9d2653f35f757f8.json
│ │ │ ├── d1cb0072f831acef1d376f846547d4b5a3b314a6ef6836046a8f3834c9b68df5.json
│ │ │ ├── d277afb2a917dd631d5aef7bc14ccbc4951cbd69445d7bab2d4bb15d7d8e7b70.json
│ │ │ ├── d323c0ff73e3f9ca0b0fdb99f1013a595d2b74a55fff8737d9b6516092bd7416.json
│ │ │ ├── d3d13a0574416a631d54e3cc6ea3558f376056ffe775baef3ebabca2a58f0caf.json
│ │ │ ├── d42968deace0c46610bd421ed1b67fe8bbc9d09f6462f7fdcf703474df2246c3.json
│ │ │ ├── d43713c010d752a025b515d7136b461331069834b06341e47299cdad3080fca9.json
│ │ │ ├── d47569a8db568febcffe94eee6fa6e9f17e7533ade5036f250905f8213afe8d7.json
│ │ │ ├── d4fdc9a29bffee5359276c8077f87e59a8978a5e553ac791b794e3f00ba242ff.json
│ │ │ ├── d50f205d64917630d6b8fabd1947c62b513af4147c7607986f351946fde18801.json
│ │ │ ├── d54982af1b313ec3b910166cc543d3af5b1471ae89c076fddc334bd7b95cbb4a.json
│ │ │ ├── d5be1f458c59f1fd4705174c2f0d419668d1e341cf9f617cf2c452ce20be80d7.json
│ │ │ ├── d607f3ca173672957203cee32dee78e1fbf9f0d60a940d212d7f249858f3cdee.json
│ │ │ ├── d686f1f350249cb46f57b251e424a9523b9288aa2a6d769e801b554481c647a2.json
│ │ │ ├── d72cb4ce1646be2a2f783317ff72bd2218d18aeceb13a37f455c4a019a85619e.json
│ │ │ ├── d74045dca1b318fb9102a847d9115625eec1de6b38fde59986ec06b2c51138a0.json
│ │ │ ├── d778d2d36da02db741e239a139d8ae7f922a7ac7dc61a341ea28713d1b521309.json
│ │ │ ├── d77961bb03da7038090a3e069c80805b0df7a5f5fb0c8d8d6860ae70eeb51932.json
│ │ │ ├── d7ccb41b1aa7b2baeb25a8b92108be487ac51f593bdd45cc51983d6e710709e3.json
│ │ │ ├── d7ff8d71af87df7dc357486f48efc5c2382ad65ba96084bb0dae9e8312b671b0.json
│ │ │ ├── d817548f2df4cf952daaa1142fbacd9f4fefb66cd8a30bc09b88b181c459f59c.json
│ │ │ ├── d841db56ba62a7572cd59051f8ae43b47a9a2339901d0a1b0fde34b025440259.json
│ │ │ ├── d89bab8370dc5b552c2b2156e03a9fe530e59bdd5fe1a2faa95ecc24c42b5750.json
│ │ │ ├── d8a4939b120da27841885d4d2f21eb6ea033ba68311487073ee851cfb9e3deed.json
│ │ │ ├── d90403b9ec6b37f3da6b5d67a38227258669d8af71a6c38c9c0ac912345ec4c9.json
│ │ │ ├── d90a1b964ec80f95276dd608b077feece9c5874252e8e405858374cde63252ec.json
│ │ │ ├── d92fb08508997d18852b34b751319108fb0f23a48a24fd289150aed3bd4fd76a.json
│ │ │ ├── d99ee2ad2cd3e1ac7b88a48c47e72495344a21a2192dfe4e8cc823fd81670f00.json
│ │ │ ├── d9a6e3a4b83488a068b6e3d44aa06d93a1e126dc1fdebc7b2704f1df84fe237b.json
│ │ │ ├── da5da0febd0c7a2327687b92f3d30100f49b4377e2d49ebb31581f09a11bd26d.json
│ │ │ ├── da6ec32ed8fb5bf4d957058ddd391a9958c4cfd0ab301bbd7b466a889cfc631b.json
│ │ │ ├── dbc427977ef6a1792cbffc660687ef0f3fadf08af3e02228eb21ea3a0bf5e5a7.json
│ │ │ ├── dbf2a25f9aa80b6ee1002fa08786a0e67b540c3248218727e1e498c233043e79.json
│ │ │ ├── dc295fab3a3f3b5f318c2c430f6e18783cd311313426388a1be027554788baa7.json
│ │ │ ├── dc34532b39089796a5537b8c31d869eef66cd7dce06e16d388360c3a5312e6a4.json
│ │ │ ├── dd318be8983935b0af57eee266bd3c5552c75f74fbf982f60eac62d862100adc.json
│ │ │ ├── dd44766706a93bdeba280bd2da147ce7307dcec03cbf33afcfb1dbefba722d53.json
│ │ │ ├── dd68a9929fe4a70e43796d6c5fd9f050654528c4e0d311e9b521470046100fda.json
│ │ │ ├── ddba827f0ec931a9f5410748bc3c32d83cb453840d1847fa652c375d5c4d5c26.json
│ │ │ ├── ddc00ad2f61d682a109619c52a68ccc6c443f3fdcb639335557aacb2014ca3dc.json
│ │ │ ├── ddd264835206d5c49a45d6ecd6b214424de174ed2cf9a06858ffb7df7f476b58.json
│ │ │ ├── de0d8e177bac4d06361c38bec31d74c792a25e049dca4c2790826e99bdb332d8.json
│ │ │ ├── de37497ebcf4e70cef52185ccf24e3dc6c08494b71aca7ed2462c7861d6cfb54.json
│ │ │ ├── def4979ac9806c84b0c41809b711dbc78e9c278b7eff0bc382661df641d69dc4.json
│ │ │ ├── defed566a70e42a181f836c6e15e35d76fc75d792a006ce6ccc1fefa0bcf0d6c.json
│ │ │ ├── df7eb15a8b834fd2e982fa6a9fcb070e240638ce73f7aaead43cc6f24f111dde.json
│ │ │ ├── df9b40562d9fae8e295c6ebd6bd845170e46e9134b41f2178de152a4f00dfab1.json
│ │ │ ├── e0d5a1f2766babed1f0811f87a68965b1bc26b81d18dae7801fc31bb09df1419.json
│ │ │ ├── e194af0af96d245a5165404dc94b34e1ce2046d1be1921196091122ff5b30d4a.json
│ │ │ ├── e1c94041d79ba2eb25907cb85cde7cb8fdf023fbe997125c0636c4e68ed3b838.json
│ │ │ ├── e1ed192f877e21f914dee3077a37efe787b0dfa9e1f88c8d4055c2c024014c22.json
│ │ │ ├── e28125d63197aff33a01ec2439c8b6cb4e7339315339da2bf6057acfd30a23af.json
│ │ │ ├── e34b99e13d92f2a9d862242bfec1a0529cde52623412cdabf2d67731eca3ec31.json
│ │ │ ├── e39f9635d5fb6a9176e7e0756db9ad7402ecc3f508eab1d1e46fa4c366ad7f05.json
│ │ │ ├── e3edd61ca28c6951cbcb8f4c8689883c78cc4696a73a3c60c12e75755425a04d.json
│ │ │ ├── e41a1c8de2c20674846a287d2f1335c78cd820d74eeeadae79109d677b13f710.json
│ │ │ ├── e445b1b096f1db42df6ba7e0521edb561a9bb702a1395eef01667fea2bd242b0.json
│ │ │ ├── e4f3118873b9897787ca73007b11102fb796438513bae94b9f098aaa12b94c21.json
│ │ │ ├── e5ff20473fddfa1e984f725eb712490400a99c72bb5f8cb7daf89e72a662cde3.json
│ │ │ ├── e611e415816ce2ffc2fc089c4fba96f7db042ed2c05ec609b448618d5cfec056.json
│ │ │ ├── e61543c4717c3481792095f0fb82e3b17545aa562a493cb6b2c3915ccf949e56.json
│ │ │ ├── e639ed0c6cd7ef4a65328bdadb186edf113e2f21dcb3ecf3a8815ecf96b300a5.json
│ │ │ ├── e66621f3c3f4ec937fc1c20ba529513fe1b31e48f6fe06b2540f88b775d06499.json
│ │ │ ├── e677a75428188c8f5f2179a83a7f0ea73f58b995ed121c3a54da711a72839a15.json
│ │ │ ├── e696fe415349aa8373d8ae60d362dcfced5d064679665d1a37ccd049814eb6f1.json
│ │ │ ├── e6b6ad69b0252449d99269294939c0af6aaeb15f4cbb2920cd99e7542adcd7ae.json
│ │ │ ├── e6e147ce89723efeec334e4ea0d9935aba6ec4d8924857b19ad03163b496c077.json
│ │ │ ├── e709ec279d1c80132959ca847ae3dd4d4c6c5d9d1c81584b3896ba4c5ad807a9.json
│ │ │ ├── e71dab31f7dac30e095dd238b2aef62bfe669250a0107da678fd8d0ed38b3790.json
│ │ │ ├── e7789591dfbd4e00d6b32246cdbfef206924e7a0000b7ea0a8743867a9f37f59.json
│ │ │ ├── e78f71ce50cf5f80b048abfd2ded11b683077aca246654d40cef4ecdb1a0548c.json
│ │ │ ├── e7a945de8d75005edaa09a5c068fa0e826855d99591efc9c439951b7c937939f.json
│ │ │ ├── e7afcfe6c763fda2cec2c55a73ed7eaa5e2a72a1f1a78ea80ba8f3952c5f23ed.json
│ │ │ ├── e85cc5b656d03a7cdcb220ba44b447d31bb07a5ff582b33925a0d9800f7929ba.json
│ │ │ ├── e87439f4590e8c56a8ed3841305a4004e263a3aa357250e1f8dc0c1d8354f044.json
│ │ │ ├── e876847435d57844df8edf96ae0b5d7858eeaa0bedd0f883fb08d43bb5b272f6.json
│ │ │ ├── e89b5e4d61923183681f18acf4afca348a8e2f433fb0d6b6abd0be7d316bd573.json
│ │ │ ├── e8a7a22a6f7434ca36e4c6b8dee4546cbbcefccd5c79ea8150c677efc72e6102.json
│ │ │ ├── e8ec0e72cde02bfb8482e4749b24e16d90d3f9b141705f611fd5a90b3448d839.json
│ │ │ ├── e93ce2659faac4fddaa9d419e890a1b593d2994e409c66712ffa5c6b0bf6b8fb.json
│ │ │ ├── e9f395a041e8cb04bd5bc9ddbc47a7915675722eadaabef90e152ffe5683b757.json
│ │ │ ├── ea49e61ffaa092502df8b6022c77b5d58211d7729c5fe3af200df7b4f2441cb3.json
│ │ │ ├── ea983e3fc4f3fa3e3f027781f50bc0ba957969dcd622dc695c48d6fcf7b91905.json
│ │ │ ├── eb558fd3d055ab591c4629b23d79ca4c26adc3f5eac369c723f7b72a7b459f5b.json
│ │ │ ├── eb702e5e86a63eb305a722683a9d717fbbbbd5689a73e98a54f464e4c08ead7c.json
│ │ │ ├── ec2cfc4b6166106730d95eff2fa38db92c089ec4586d6ad8b2957e53095c7ec1.json
│ │ │ ├── ece3c7f548884da69b8cd848f74aeeaee0297e7fa0299d54036fcbbcccf6602f.json
│ │ │ ├── ed2ca06400ac33c4af70013f0acd312b6eea186caaa6e3a1e4a077f19dcf52d6.json
│ │ │ ├── ee03dfa968e9613558e87a20f7f4c504e43f282b1cdbb0318ee6ca99c81cd072.json
│ │ │ ├── ee28f174c77522f517932d5393f76ed053bc8097644f448b141aa3fc500aa5f5.json
│ │ │ ├── ee2f0b7bcb385f763b722ff038242791535db001faf371383c58028bbc83dc05.json
│ │ │ ├── ee3fbbbd3c1710121913f216d467330e89b997331d6dc231ec9aabb9e3239735.json
│ │ │ ├── ee89a17b0f5ab4a00d26af1054d7d74cedcba155943b3c6f4901c8ace6e2253d.json
│ │ │ ├── eefd538cb94a8950a08b4741544ecf79b186412fff53911e277fed7f16119fce.json
│ │ │ ├── ef22139c75c72d77d9ebcb1fd06baa7d2350ea50f61326c6c7728812198282ad.json
│ │ │ ├── ef906c7ac2d45b6a1d5b1f5111925d0cb43620c4a7fdb42a4db2ee8285a9ddd4.json
│ │ │ ├── efabf1bc6b36e0e07b44234bb80647453c6abb5cfb44951d3e6a64c1a436b68d.json
│ │ │ ├── efbdcc90c356e23b53224ef84e37edcb63ec3bd3a72fe389e74abf7e405ca3c7.json
│ │ │ ├── efc1c5750f82a4bd976fc3102edb3a30150333db07ab3d7557f43d059d97fbec.json
│ │ │ ├── f028fd0a4537a6ef0eab0fd8e03d5e13c2ae9a455d36579adba2f75dd2bb93ce.json
│ │ │ ├── f02c015b87620d7981755490c079ad6f4b1c312df8bdbb6128d7022c3875acfd.json
│ │ │ ├── f09e22c0ddd5fadddf5576eda433a4606d83084518337941aa5499b4a1689b9c.json
│ │ │ ├── f0b272b199c448f563fcf42a5aa21b6e1feb3e81b6681e8e8576d3a969675738.json
│ │ │ ├── f18bf33acd7d95dfac39c86031d6cfb81af0d5e02ebda0640cb537aecc6128d1.json
│ │ │ ├── f1912e5bafd37ef76ee98eba1902eaf64419f94aca7114b2791ec62c019fa6b9.json
│ │ │ ├── f1b9cca6577dc85641515a3e12bfb857d247954d11894c7a7a6f700cb9865abf.json
│ │ │ ├── f32bba769d33187504f20ecaa98d6ab400a32da9a7c3d52dd1dc39e5abb088ad.json
│ │ │ ├── f3b88ab91241008692436c658dd230342aac695adde6ab072c9962f6dd40b0b3.json
│ │ │ ├── f41569fd06f964eb74ac7581b3276c9b78f831255cf050abfb2aaf8b8c54ed1b.json
│ │ │ ├── f45f5e2809690356c90a1867bfaef9980b2330406931e31ce8a4738136c46ecd.json
│ │ │ ├── f4894c38303b5bf152c329b51c293cbe58f89b8ef772670856c898c8b56090cf.json
│ │ │ ├── f5649dab562d86fcd39cf6813e951d8772dc6009a4be0c2a1b8333376d730ff3.json
│ │ │ ├── f57187111eaf623131bb05f5147dfe5decfb20a4270e4a030b39673dbcad929f.json
│ │ │ ├── f677c034238cec1bccf4b924c410085f1df445dbd7580883c0544b140c0e5d6c.json
│ │ │ ├── f6af07a99e7452b9ef7acceda04bd675419d7c892098cde6441cebbc4663ef2f.json
│ │ │ ├── f6cad26f54a0817464e12e528630b57d8eaa3d289f494665041b3162afe756c9.json
│ │ │ ├── f6e038efbd67244664fbd7b4810af181d25ee74ae115c847229aff217ea41e66.json
│ │ │ ├── f6fb17fda4f48bd4699344866a1bdfc25ef030f5f5f14587eb08061ecaec3751.json
│ │ │ ├── f70a7ec8b774379f9555d7a2494efbddfee783a3c799d2f648d0bc2ad844f8c0.json
│ │ │ ├── f7174f39c8a2e71b0de698b9dd9ae05a941f49f7f733886cd0cc85984bb99b99.json
│ │ │ ├── f736a77cc103e9437a9c205fa7fa48d79a113ebed98f87f53a3b37c36430b7a1.json
│ │ │ ├── f7409e8c98b48eecdd5769a760c703bb970db9fb3660e2bb6d24b9fadedab9d7.json
│ │ │ ├── f82ce80a86924b02ec40fe8a18501876278f804fe6cab68533f244c530b40a3f.json
│ │ │ ├── f866dbd67894de4b62f58c52d91a7c3a028c28ab7fd8cab7974f98c9ef4bb190.json
│ │ │ ├── f874e8c5ccd08c674707a473a1009e93344f0c617a612890e1faa24cd27dd30d.json
│ │ │ ├── f926d2c62754422f68cedb865afa84884e49699fd9e8c7e5b01fdef9b963dd07.json
│ │ │ ├── f948ecb568b7edf46f1763406a51b7b1cb530f68b40e5e2bede681d507fd524b.json
│ │ │ ├── fa35d855767b5d1215614329c981e2a9fec458c8df022db01860a27f07a176e4.json
│ │ │ ├── fa7dc7b8c4359a8856b40771e91769eb16496e5e7f4e65a5b4f350882c03a344.json
│ │ │ ├── fb2fe81813e47193bb1f45b13698a7d56ad4813738aa045ece453ce0557e1bf6.json
│ │ │ ├── fb6a58633b48453b9274ae5f634ede2243041d20691596e9beb4111a40c9d0f1.json
│ │ │ ├── fb7abb86126b1c96e1f72877080d4511463cf5f03c2a70b7f4bce9ea8fbed9f5.json
│ │ │ ├── fb828dc66f9b21aa5e09a22a5b28b69f60beebb57ea66aab8ce696bcb8e8267f.json
│ │ │ ├── fb8db92aef78078b35ef27b6ceb5ef91bd32c070c3fc56780c7cbd7cbab132c3.json
│ │ │ ├── fc61b5ebd2c55fed7c8f8b75dd878178903911039291a5bb19c207c173b1e695.json
│ │ │ ├── fc9255f62ff2b93456aba64b31c8ea0d56bd404e950723173fb4fac43666b776.json
│ │ │ ├── fca29c7cb550f2bf33d0189153c9ff6f4e265c158dc8c7601ae1149d2e3649fc.json
│ │ │ ├── fcdf4fc8a149289b6e52951586928e4391a6d6743b727e56140d30ec3f3b4beb.json
│ │ │ ├── fd553c8a8897313b46e15f45ba8bd672e947ac01f13b359b6e0a6754ece59fc5.json
│ │ │ ├── fd5a92a5d971a275b8264f18e365f091f8a5573a69c41be2fa839e69c21128b1.json
│ │ │ ├── fdac19ffa6b82581446256ff7dc2975c55e4db65cfa445876876309c74aa667e.json
│ │ │ ├── fdb8dc15344af25a04007bf40b1a0c83d9b54da75853366d9e9fb31009c6acae.json
│ │ │ ├── fdbf3d3343a0e40155ee2e341601fac36ef25cb8652759167249e7753a0b86c5.json
│ │ │ ├── fe8421b8175906beb6aefb1e354cdc3c3bc64145197f146a5877668f53925395.json
│ │ │ ├── fea1ea5622f42cfe111201b01a72a1c144ec096d718b508f0fbf883378835933.json
│ │ │ ├── ff2acaf7fbb3ac4363566533fb3c19ce56234c5d1fea4aa9db7d69d47c748206.json
│ │ │ └── ff67f7f485670538b84fe046af3a98fd2d1aef7e43e35e11209983387fb1f0ee.json
│ │ └── test_openai_responses.py
│ ├── batches/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── recordings/
│ │ │ ├── 3a680a3aabcdeab5d9a7cf137c2d4cb9dbd89b4a42691835373be5655e288f8c.json
│ │ │ ├── 47f3ec3cdc8a216c67662521cd9f0036eeeedff157b39548846c689271d25b79.json
│ │ │ ├── 92d49675c90319c093846b731bdc33d7b261cc73e12a914c9c3661a028c19adc.json
│ │ │ ├── af930233ce6e43f38f2fc6fa0316270c63cddd1b42eb310fde08f51170f2b913.json
│ │ │ └── cb4673f5ab80c45bc13140600f423c7cd5ca750b1a732c92ba6710c2b2742d81.json
│ │ ├── test_batches.py
│ │ ├── test_batches_errors.py
│ │ └── test_batches_idempotency.py
│ ├── ci_matrix.json
│ ├── client-typescript/
│ │ ├── __tests__/
│ │ │ ├── inference.test.ts
│ │ │ └── responses.test.ts
│ │ ├── jest.integration.config.js
│ │ ├── package.json
│ │ ├── run-tests.js
│ │ ├── setup.ts
│ │ ├── suites.json
│ │ └── tsconfig.json
│ ├── common/
│ │ └── recordings/
│ │ ├── 02c93bb3c314427bae2b7a7a6f054792b9f22d2cb4522eab802810be8672d3dc.json
│ │ ├── 0b2c69a5bb37ad55d47d36c33e068b00867d4d5f68e16bc1884b71075b316c72.json
│ │ ├── 1098240ef53bbd378adf8dafbd5838b16eef7d6a7d6e75d24e3c120e25e73750.json
│ │ ├── 224f7e7bd332f0ada326039866d13b7f167d5bfa91ce752022010f1e885d869f.json
│ │ ├── 395c30078677826058a0cbe136dfd07c816854cfb7015ee4ece0e414d16e7e52.json
│ │ ├── 41c28019c2c89e5962ae3043dc7015ee45aa5ee235645768a230a5fa5cd45ad9.json
│ │ ├── 4df315784095a200b2d275c6f8dda8be845e250000208127d20cf8c4f0bc666c.json
│ │ ├── 5b03940f8f14616ba20bf3b695138b785ffc26aed814ef01db492f4a5674d6c5.json
│ │ ├── a4416482053457914b5834398c2664ceb843d8c7deaec80a59d5e20dbb1ca090.json
│ │ ├── a6ad8748dce1ebe53352c6ac4ccd9b209d614ce5c6ff86992b4aed3dc344eafc.json
│ │ ├── ab1a32474062bbad640ce43d02d6b61ed9f174c225597f0241cf120c47c7d2fa.json
│ │ ├── addb54956973bdb2365b2c720e75a55b0be2df284fa147e7ef6cdb7b4c79d620.json
│ │ ├── b2c646582d0a4d9d8986789261c0d630d5b604ee6291cf8aa3d44ab761f2c676.json
│ │ ├── bfc8818f4ad237ba6c9649d47eaff8946e334ea6a2bcb564d74f4f14dbc3497b.json
│ │ ├── c34cccb2af2fb9f02f7136b0dd350e75e7d2a77d222ef26a9bc419e10fa33c56.json
│ │ ├── c4f314b202711805808eb75f1947cb6cca0bf8dbffb0dfabb814f9da0083b3c3.json
│ │ ├── models-3a641f25d65695766fb77e424273f716b852f371e1e87f6e14fd5672b1ab6005-4a65eed3.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-0b98574d.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-0da7d1b1.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-3ff721a4.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-46bed5ab.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-65512f75.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-6a62c598.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-7c709cee.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-826d44c3.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-abd54ea0.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-b848663c.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-de96e712.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-e660ee4a.json
│ │ ├── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-fb68f5a6.json
│ │ ├── models-66c1506ac9a1c3cac55a2dabb6a81f068d753f4a69ae4edeb730b7ca374186c7-74bb7a92.json
│ │ ├── models-66c1506ac9a1c3cac55a2dabb6a81f068d753f4a69ae4edeb730b7ca374186c7-be228ab4.json
│ │ ├── models-83953d70762b611d7b1e6ff232b53374ee7c35538fb0392cf9d92f27815c4fc6-c99eb79a.json
│ │ ├── models-d98e7566147f9d534bc0461f2efe61e3f525c18360a07bb3dda397579e25c27b-a882f554.json
│ │ └── models-d98e7566147f9d534bc0461f2efe61e3f525c18360a07bb3dda397579e25c27b-badf040f.json
│ ├── conftest.py
│ ├── conversations/
│ │ ├── conftest.py
│ │ └── test_openai_conversations.py
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── test_dataset.csv
│ │ ├── test_datasets.py
│ │ └── test_rag_dataset.csv
│ ├── eval/
│ │ ├── __init__.py
│ │ ├── constants.py
│ │ ├── recordings/
│ │ │ ├── 0a2ea52bcc4c7e04d0b4b844ad94bed06bcbaa03d13b228f61e2b36e23093469.json
│ │ │ ├── 171c4dcb3dc848196f5d7fd87efd4626e70673c405ae1cd72b8dd0617104263e.json
│ │ │ ├── 1b2720589d2a4273b5eb2c06b50ab45674040195c15013c9ea43bc6331e1a831.json
│ │ │ ├── 3e5ea35cb3dc92835d230456b6e2fc61593f964148d6c05df5c4a387a5389e6b.json
│ │ │ ├── 58177cd1c0d7d8de9e20515c3e8fe465b66d8436754b30ff4da28c7c03c094a4.json
│ │ │ ├── 6de6d1ebc3128dfaba1efe654ca1453f12cd31ce2e294d20868c0c498b7d9136.json
│ │ │ ├── 752abf1ef7f71bbe7028eae85814e6d567d1e8243e9b0d18f8803cb9b7c8f92f.json
│ │ │ ├── 94e3d8dba56da92e1014a6ee81b61fe8e95d98692c189e7308724338f918678d.json
│ │ │ ├── 9ebe1e04fc3a8d41f88992428a7c99669c7e19b3d551090eb6bec83b33de2a18.json
│ │ │ ├── aa20023c358a0dc718355082cc244a231426700a772b8dc64abf05d8b126a736.json
│ │ │ ├── b52a054b314c8b42634c4a9ef76280591f73cf26c00b7308dde7d19a1ced016c.json
│ │ │ ├── bf6b37511a044df8ad1c6113d3936b1e7f4a9d4f7f8ba8bd844d50265067f417.json
│ │ │ ├── c07b01fe99467efcfa99f6ac9c60acc212cf2ac3bdd4192aabb5f98359236572.json
│ │ │ ├── c4ef767672c890e77ceaa15b6239e9d5a9a5ad6ee7bcad0b12853979b1e43ede.json
│ │ │ ├── cbf92825593fd79fe76e0ad0193ebe742743cd3042654efefa86714e357b86f6.json
│ │ │ └── dcf3c9afad420e66c3cc7434a48169a1235798c2b3ad9abbb29acf1f1b2952fa.json
│ │ └── test_eval.py
│ ├── file_processors/
│ │ ├── __init__.py
│ │ └── test_pypdf_processor.py
│ ├── files/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 108e7edbe4a967fdb8befc0df3d3c10c336afca41aad421e653e4b02eab2a632.json
│ │ │ ├── 12a8beefd95278334e190cfbc8dba722684325cb294aaf45dd42f316d9f6ae5e.json
│ │ │ ├── 1ed03eb1155d3be1507472aca14a1ae10513ccc6b93e7e9d9d50f4cf83b8276b.json
│ │ │ ├── 460d3a62966099de71029d921f76bf7463644b1bd051c7ff5c24f42a2db28c40.json
│ │ │ ├── 47e333d2b4d1585f94f47e173b01ef12a83b887d82856fde50368c85afc4b9fd.json
│ │ │ └── a39e2fb391defd5c25de14caeb5328e102a2c3a0838cb0de0bb62dc04ceb5da0.json
│ │ └── test_files.py
│ ├── fixtures/
│ │ ├── __init__.py
│ │ └── common.py
│ ├── inference/
│ │ ├── __init__.py
│ │ ├── recordings/
│ │ │ ├── 006b190876689a0176b00b7bf60ac4944cd9a2e386d37980a2b2466c851686e5.json
│ │ │ ├── 00bbacbcc8180b2151778cdac99b204e347526bc5509d4972f5fdb4d4bed2434.json
│ │ │ ├── 01996b2b3ce70f76d75def3058c49a7d035920832e5bd9227fe940f7f137ecdf.json
│ │ │ ├── 0241337625808a1602a0b4b1c715c7531cecf2491f2f2129e7e6884e3ffb62bb.json
│ │ │ ├── 0248ff8a1be5ff5ba88046947059ffbde15a1c52adbeea456bb42abdfc931bd1.json
│ │ │ ├── 02fba1826ee7c9b9318645bf6e4514d57cf09e34e40fb2745da54227220ccf35.json
│ │ │ ├── 09e409c5eaa8019936481779229558b1541008447a01ba5fffe8c6f17184e0ae.json
│ │ │ ├── 0a2adfcbd0a23b2d7713b678c5fbf3eff74e4fbf0d1de5740bb983492bea9a2d.json
│ │ │ ├── 0de34091fb19d61b7edfe5f361650789ae2e66f9273ad74925e95b230a862a00.json
│ │ │ ├── 10d6c5e40b605412566675be517b6e4952c1bce8cf0c0d3f0402606c092a6080.json
│ │ │ ├── 12b4c92fd0d85cf140cb3ae3c1f79a6f684b20f57519011742a8b9088e92130a.json
│ │ │ ├── 12ea4e4a2705b0589c186d9d068bac0afa6d2385867afa554c6c672722a4e1c0.json
│ │ │ ├── 1675987cb787dc51be76c547577dd38172be220c805c37ba73ba56fa89cd1121.json
│ │ │ ├── 16daa8302d1a96cfb6ff033d4ee42922c7c4fc75fdc786df222fa9d64d21115d.json
│ │ │ ├── 17fab41a46c9f0fcb34928d4ced8784cece336d19f6323f850005ad5589e1589.json
│ │ │ ├── 1867171238f701f0face022cc6890e82ed01e2bc7376d7e0280d29bc59f3ce00.json
│ │ │ ├── 20032ec4aeb47f2a2711ec6fcada258dd47fcaefd22f8ee6a6c0b07152c551d4.json
│ │ │ ├── 20a2ca7669b281740d72e6bb89199c65c77eaea3ce4bd4115fa642efdb820691.json
│ │ │ ├── 228c053a646f7563791aa7f633bb7353eb3f763add416a69ddb255b16f6ea0a9.json
│ │ │ ├── 2367bed24bc3297a70b3c54a1c3e6267ef53986f8974b83364e43a41c06f76b5.json
│ │ │ ├── 27626d79a55535527b7d7ef07f3da44a52de3d7d2e56297491d1a62ede6d48c5.json
│ │ │ ├── 2825486bdbce4722bbc4a993f9f39e820c16bc8d324dc598be1224dad079ebb7.json
│ │ │ ├── 28a43dc80443ccae98eee165c58522090fd6f0637031153b0105399093d39c52.json
│ │ │ ├── 28b529023374d3345f46c0b183ee352ff5014ff344238bd40b820c61510097eb.json
│ │ │ ├── 28b74a89cdc85de62395836bb21baa777d3197245698f4a7531afa0a15c11d1c.json
│ │ │ ├── 2f35a0e0c10e47f2fa64a13d38902ec16d836a24fcd09e330b68b7aa514a10fc.json
│ │ │ ├── 36968c3ac66be305df6bdac7b747612e4e6645cf3bfcec16f96a41397cbfd5aa.json
│ │ │ ├── 37e10e6ac4dccb3a91333fcfe9a17806950b21da9470c98960495f3b9fe94ecd.json
│ │ │ ├── 3d2d95c9e7f6a2e434c69fb2d5ff50a3cce15ef5f308d5443beebd71a7dc7818.json
│ │ │ ├── 42ad86f93eda42a3a73cddb74e533217ddcff6366b52a52718b86148f0e16a7c.json
│ │ │ ├── 42ba670916ebfdbe86b518ad1692971ccbb2c2e4a30372f43f38f8e1fc22daf0.json
│ │ │ ├── 452805c3c85951c86e4e5dfeef078a2e184866dafee83186cd84932daae1af42.json
│ │ │ ├── 46428a21010b325bc6a76497ab428d8824561940cc18eafac17f1355ec8cf6b7.json
│ │ │ ├── 47a484434dfe84938b43b589c2e7a7da5fe3274843575f2f0f685e084628f2a8.json
│ │ │ ├── 48fe79430a3c8a23c5d844602b1773d5a1270521ea405e93d4203dd5b35ed173.json
│ │ │ ├── 496035259763c1bddb1a3148c2586663d08a5bc31f697d1fc5d9bed1c71f5950.json
│ │ │ ├── 4b67443597195a9092b2b27b1dff526263df8ab267f4a9df7196dcb6c11aef17.json
│ │ │ ├── 50fe7d08e8a84d609b5d189fcf303f28abe6244b50d92a81ce25703890d3968e.json
│ │ │ ├── 524ead18daaddb6228284820adaa3fb312d2a525cc35e20c181190ddf40793e6.json
│ │ │ ├── 53f557a067b8f00b81dee1d0f8def8051f330d7a91faa68addc39f9b29e5dbbd.json
│ │ │ ├── 54606aca0c734fe36c3fcba632a36aa4582c2c92af953638d6e1ae060c01d71e.json
│ │ │ ├── 5ae0fe8a12bcbdc6790a759957aef63ebe279ddffb1248b805ff8c22e4d95119.json
│ │ │ ├── 65eba1be095a7037c4f197f4168b310ebc8afc00aba3946ba498abe2fdbe6a63.json
│ │ │ ├── 6626c46dfaf503c589013d6396a3e6871117c7c024d37f16a8d0b2a7def9f8ed.json
│ │ │ ├── 66421295027f05400bb53e4358105d230806576136cf07e345dd220db2073c4b.json
│ │ │ ├── 676c9e0736ad6864480d4a884e157e9a9ceb4e5f9441635b19809ed518542406.json
│ │ │ ├── 68a0a14e828ca575c2150f6de6961bf8d326b1ce1beb6902a7aa369b07f7e17a.json
│ │ │ ├── 6aca9a95bddf4258695b867248b32cbce4622ea32acb9b5330fda6c8a31f40af.json
│ │ │ ├── 718bb1cd939e26c4b7e6b940c3acd97304f46e13b606e081086dd6657e9d3db2.json
│ │ │ ├── 744052775cf90e30dac587e6b809d41a8cc37adc29c500eecee2727f428cbf5a.json
│ │ │ ├── 7794d17cdf3672c5508ce0b07b0622513134f71115f13dd5e65ddae9f2b54862.json
│ │ │ ├── 77cf218283607bfac37623e1bb4e6f33cae670df7d6995d432bca34c5dfb0e43.json
│ │ │ ├── 7b870ce8970377661fbc70050c35a7325434b30be994cd3ade1ad36aabc027e9.json
│ │ │ ├── 803b63dc14be19794ed3eda644b58c1ddfee8dbd1c3f7e18b21ada4564d46f35.json
│ │ │ ├── 853f6a700b98d71d390b7d366e27133a22772fbdf11863158349c1b0625bbc72.json
│ │ │ ├── 8567635651a5e7104394951bbbba040e5c7f3ba11084fb6e81328f4905100a65.json
│ │ │ ├── 8823085c58bdb7dca853d7a661e51d80446d906528ee8f715d57f748fd533afc.json
│ │ │ ├── 91e1f4c91ab33df30e4111bbed3051c2713a56cea03eca072280c750a1e913a5.json
│ │ │ ├── 95be86b56c9f5f688bfb396933972ec68f056ccbdc10bee6610d2c6722761d5a.json
│ │ │ ├── 9909147bdf0a349a396980379c5fb05b53b488c1c9e27bcaa0c6d8cc2757fbcc.json
│ │ │ ├── 99bf0054f11a9c58c13a44f9cf962a706ebe85e2a5fe637ddad558cbaafe92d8.json
│ │ │ ├── a1e4350b0157d85e74c9f661b2d0510434212d7f36fbc1eddacdaf5a62520dd3.json
│ │ │ ├── a2e6e4b902733b08c8c4a4cfcfc8ef85a4d1188106290a809bd77ef54f6d3b2f.json
│ │ │ ├── acdd905b048175b96ff61d93fd81d650b26bda3cf12e1f0cbd2820ae73f4f2f9.json
│ │ │ ├── adde4652d213ade69fd79fab1f667f1ed5189fd79a649ba90240abfa605b6210.json
│ │ │ ├── b25e641e43bf2d8fd5729a97ac478122d328f6459b179d5ab2ffcadfc6ce02c3.json
│ │ │ ├── c035d6f372fd396936f958e08b2b2afee7db8bfd6a87a50952df3e643b4cc69d.json
│ │ │ ├── c03bc36fc4c19495050b64122ffa310f812e2ab2aa32f5e01ad0ac9b7ae046e2.json
│ │ │ ├── c9f153318fe61fb66b52b29c940a2decc5def5e2c19069e084ccfc0b0f5705b3.json
│ │ │ ├── caf6ba1641579294233ca97cb423216881258fc0bb27598e71af0425e777fad1.json
│ │ │ ├── cb4bebfaa5a88b83ea171543ddc3b0c02a1e5cf3f33c1efa9b51d5da50faf170.json
│ │ │ ├── cfb292c0f41dbc4a2c0fb39016760f6c23c248a7bbffea19ac6bcab7bf25292d.json
│ │ │ ├── d3cdda901f5ae18d0d636419bd15fd4c5c45dfd6b0f35b0a708f10953874f047.json
│ │ │ ├── d5ac259ebfc8696f4e809d472bac01c9ad4f05ecaa6a633a6066944737462d11.json
│ │ │ ├── d6f772f62c859028bada2fe328498364e82c1d36ed256910623577c6fcd5696c.json
│ │ │ ├── d8d241571255658030d3e30c3d5670fbc5b9d5e0f4d7c0f23656aab3d6920753.json
│ │ │ ├── d94bbf50e75423e35f37c42dff284c2589ce81445e3245e5810e5adad8194684.json
│ │ │ ├── de019f1d2995412fd461393c644f07c743cf81d087249ef2db974576238ab1c7.json
│ │ │ ├── df353403c7fb59ed88c52269261b3dd9b75f681f8bb5431b4f07006d6c08aa7c.json
│ │ │ ├── e24ac6cc7566dbe6d1410cbb58d1270f7cf4f9e662c0f4c214838314662b7178.json
│ │ │ ├── e7a897d6a332e140a75a46dea0a4dbf84aa0f89e274919ed4e0b9a027ac9b823.json
│ │ │ ├── e89112e7735fccc5ad9ebe6a96454953aed0ba2501cabfaa80b742c2bf371cbc.json
│ │ │ ├── ea6c513079941938a685ead1b654fe822569c27f1c82a48ab7692e2105484689.json
│ │ │ ├── f02f1bfd75adaea87b91dedc59430b99015b5ed0e2bbf24418a31146ffcbca9b.json
│ │ │ ├── f0f863b7a3527d2848b81dfcc05c898a7a2a1ab5e1213f100aeae00b8a5e1ba3.json
│ │ │ ├── f3bbb5229763f689be0dd350b96e1067861fdaa62a976a1a8f74ae18c1bb5bcb.json
│ │ │ ├── f8d0f5a82750f890c97d61233f0ff3cfeb5c1de8f9ea9a621d2106c673225960.json
│ │ │ ├── fa9cf0726928f0e85dd8f10a9c7784bb3262ab1c94ad479f7335aa4dbd8829fa.json
│ │ │ ├── fb2f9f71c85f5a98796736c54977e50eb55df1721b6b2c65631687cfc0ecc15d.json
│ │ │ ├── fec22760875c460a453f839c1be6691e0fd8c546f68d07f7dfcfc6223de97207.json
│ │ │ ├── ff97e1130a00d06429e1ab3a008ebcb09dc90fba2aebca040644ed1a141e1897.json
│ │ │ ├── models-0037f2d2065a360cfcc36c35f138318cfc6508e743ff9423da4b7b1d7bfd4f3f-0da7d1b1.json
│ │ │ ├── models-0037f2d2065a360cfcc36c35f138318cfc6508e743ff9423da4b7b1d7bfd4f3f-fb68f5a6.json
│ │ │ ├── models-009fb75503cf565d6c97f70deb8235432b0020b93d55e3b33ea093664c4bbc82-0da7d1b1.json
│ │ │ ├── models-009fb75503cf565d6c97f70deb8235432b0020b93d55e3b33ea093664c4bbc82-fb68f5a6.json
│ │ │ ├── models-01c34acb0e353356c80b5e435c8c804b7580ea306d174ff03715391f41c892ee-46bed5ab.json
│ │ │ ├── models-01e6ee9852f532d9b0d82dde2e7c831d698e81dea1be69433050d42643f35edc-fb68f5a6.json
│ │ │ ├── models-0335306fb7f0265981b82bf50165d8bacf577330daf430c4a254ef2d1bfdfd18-46bed5ab.json
│ │ │ ├── models-10370bf5307b2fc971b8e53bdcc4e9eb4d3d76fe8ecdb31231b59576a612e972-0da7d1b1.json
│ │ │ ├── models-10370bf5307b2fc971b8e53bdcc4e9eb4d3d76fe8ecdb31231b59576a612e972-fb68f5a6.json
│ │ │ ├── models-1106454ace71638147e2be1ba5e7d4e526937f4e63adb2ac05921a316dfaa658-46bed5ab.json
│ │ │ ├── models-1312e0d8579e9b0e6dcb222272de34115277db71c6c560872fa13722197f881f-0da7d1b1.json
│ │ │ ├── models-1312e0d8579e9b0e6dcb222272de34115277db71c6c560872fa13722197f881f-fb68f5a6.json
│ │ │ ├── models-134e731d073e9e07eb9782bbe292167f8ad08157a15150ce92135854d04050fc-fb68f5a6.json
│ │ │ ├── models-14c0905df1b177d2f85b30b0285b0ffdc88d1a7b290e2155fb7a01f3c1436ca0-fb68f5a6.json
│ │ │ ├── models-1bc879637162ba23badeea66c4c25a638869a3e90d16ef3e84dea1a613e7192e-fb68f5a6.json
│ │ │ ├── models-225a503c2b6f296c7df691fa63e9ede8269778abcf6d894fedb46e16805839d5-46bed5ab.json
│ │ │ ├── models-2b2dde71a8ea4bd9d2b5f90ae87abf440db0f43f5e1e7ea206ef6879c3ffd70d-46bed5ab.json
│ │ │ ├── models-2b9bac5da1a03c0b572bc019cc0c50904d49e6193990ca245908f4535bcaab43-fb68f5a6.json
│ │ │ ├── models-300fb014e9202fbb69f30de745c66e4d4d40ec61b1e14e1cfcfb208f85b28d3a-46bed5ab.json
│ │ │ ├── models-3532d5e560a156778eb8a83a6c50c447171cb510ece62cec23931e7743c9be34-46bed5ab.json
│ │ │ ├── models-394c30370fe5b724c5fe1292984373b281d47b2ac0d49e8b598f13cf100b3ad8-0da7d1b1.json
│ │ │ ├── models-394c30370fe5b724c5fe1292984373b281d47b2ac0d49e8b598f13cf100b3ad8-fb68f5a6.json
│ │ │ ├── models-3f4208962fdb2be3e7057777fc93a149890bd1dfa8a92597e176f23658e86cd8-fb68f5a6.json
│ │ │ ├── models-4014362c14027c4d23582b5fcea46cb6c1f7d50dc4616645395613b50f1a9775-46bed5ab.json
│ │ │ ├── models-41aa7b7ed809837ff355100f3fdd784fecb8224d5509032304a9e7d56d083fe4-46bed5ab.json
│ │ │ ├── models-46f81dcc7e77ca9cdaefc9c5a99ee4c6fe0388113fa77bcd9bf533dc79002f66-46bed5ab.json
│ │ │ ├── models-4a729b00af209ad60846d1904e5973ad081aa5f595de50f5ef1aae304cb67ef3-fb68f5a6.json
│ │ │ ├── models-4f62bcb9cdf74f4c2ed804038def162f18ad384182b0f174918607e9ed3c1515-fb68f5a6.json
│ │ │ ├── models-54b420cdb98a0149a618088f55746e26b7bf6e7c5ebf5fa07c13ec9e366521d3-fb68f5a6.json
│ │ │ ├── models-593e833723c0415f0e7ea0ea0eaa42b5b5bafa2d90d6c61af81f763401980e02-46bed5ab.json
│ │ │ ├── models-613f5d11a8cda7126115f96650334fde0a0457a6b4a2605bc15eec9b50a6956c-fb68f5a6.json
│ │ │ ├── models-61949aa4091b4823c67547cacf24f2647f681f2fc671361e145c697c40bc1b04-46bed5ab.json
│ │ │ ├── models-62a361f55d61a98ea0863e9acfb5ab5d540c5d19e791415ee476474f7f1ed90f-fb68f5a6.json
│ │ │ ├── models-668fc72f70ac72d5c112fe79d86d5c790611456b3f0102832f27e6edd420ab54-fb68f5a6.json
│ │ │ ├── models-69d7f5ed40488fe30d45483b2e4bc9e4cd3006c09053928965bbe4a4a3ae65e4-46bed5ab.json
│ │ │ ├── models-702eee4572e9b17ff0b0fdd55b10021f7077f0afcba922d6a53db0b537542518-0da7d1b1.json
│ │ │ ├── models-702eee4572e9b17ff0b0fdd55b10021f7077f0afcba922d6a53db0b537542518-fb68f5a6.json
│ │ │ ├── models-723d37a5bceab199cff076a0dcc2d4ee7596b7c800f13c64f6a6ecdbf4ed2f3a-fb68f5a6.json
│ │ │ ├── models-753b5deb1ef3a596e2356c046dad0b193d6d88e7aacb1b29b3214eb7f77ed7d8-46bed5ab.json
│ │ │ ├── models-768c497339830cf86ddd7843f33d0ed06b3bce3ef2ae9f854364b534ba8cafb7-0da7d1b1.json
│ │ │ ├── models-768c497339830cf86ddd7843f33d0ed06b3bce3ef2ae9f854364b534ba8cafb7-fb68f5a6.json
│ │ │ ├── models-77284a8e459a73cfd9d0c86233eb59a5c18196922e6f26f4007f936cc697b06a-46bed5ab.json
│ │ │ ├── models-7b0f2493d699e58cdfe0a9dab38f4423771c8ebced2020b1e15cbb35470c1ca2-0da7d1b1.json
│ │ │ ├── models-7b0f2493d699e58cdfe0a9dab38f4423771c8ebced2020b1e15cbb35470c1ca2-fb68f5a6.json
│ │ │ ├── models-7ed97509ff199eabe1380caa36b9e5934e9d04a9cafcfa2d21d20f6f85679ae4-fb68f5a6.json
│ │ │ ├── models-805e6b510b1ab33505a1af85c0d2a766cd3415512212d80f6292ca0ef5c359e1-0da7d1b1.json
│ │ │ ├── models-805e6b510b1ab33505a1af85c0d2a766cd3415512212d80f6292ca0ef5c359e1-fb68f5a6.json
│ │ │ ├── models-860b7e8309e0761e20e845be75c0a28d759384a367f6308f2a921702318a5dba-fb68f5a6.json
│ │ │ ├── models-872fd6319bbe46948974d7276b658a81c44d3e965773b3de4d8efd04b6e5614d-46bed5ab.json
│ │ │ ├── models-8753db95656df7c68e9dcb3d1ba02a99c580f969d10e8828fb364cd12933ea27-46bed5ab.json
│ │ │ ├── models-8903569d538f9836ac6251d90c4668d3057e8e0ced847a08fd7a6faedb5710c3-0da7d1b1.json
│ │ │ ├── models-8903569d538f9836ac6251d90c4668d3057e8e0ced847a08fd7a6faedb5710c3-fb68f5a6.json
│ │ │ ├── models-893ffcb19a1fa42ef4426b5805c7dc293e3189a0fbcf38d043491f88e3e809b6-46bed5ab.json
│ │ │ ├── models-89fa3b75abb1cae4b26e994a96b32a5f9ad2d7b29ed070c3be84181eef926e91-46bed5ab.json
│ │ │ ├── models-8aa8c593dd64639678c294146fd56804393856c6e85197e6317ebd88351be21d-fb68f5a6.json
│ │ │ ├── models-8d3288fc92b2484367956bb825c97e33864eb76e4c156a6188f93785559c96a0-46bed5ab.json
│ │ │ ├── models-8fc4c7b563b9bd423b74dcb4683039248f41d86c02703bd2dce845d972c9ae6f-0da7d1b1.json
│ │ │ ├── models-8fc4c7b563b9bd423b74dcb4683039248f41d86c02703bd2dce845d972c9ae6f-fb68f5a6.json
│ │ │ ├── models-95f4acb1a62e2bd85e7f18059d5e56c75d16bd262e08c79e1f38e91c7854d3b4-46bed5ab.json
│ │ │ ├── models-99ae704b53e3e3150cac5cd579e446e6545a4ab6a63048ce00ee1fbe5fbf1b4e-fb68f5a6.json
│ │ │ ├── models-9a36a281899f0800f085473f5f0185b09a02022607b965ac08b4db2e9e7eabc9-fb68f5a6.json
│ │ │ ├── models-9beac41c66cbe8568bb72b5ba0f5608597ef8a14b42585c22b1e7c45526537c1-0da7d1b1.json
│ │ │ ├── models-9beac41c66cbe8568bb72b5ba0f5608597ef8a14b42585c22b1e7c45526537c1-fb68f5a6.json
│ │ │ ├── models-9c821d96aad27b9f6c5dac2f91fb2bb78a2b0c79907bb9747d414b03a1f8cead-d70d7e1a.json
│ │ │ ├── models-a495ae010d48bb3649c822e3299e819c164c2311db231c81296ff4c72e6f81cb-fb68f5a6.json
│ │ │ ├── models-a77b3cb7370fd9f46e6ea12d72e1d9a8e7515f745289e93e5eb4a21d0e7b71b7-0da7d1b1.json
│ │ │ ├── models-a77b3cb7370fd9f46e6ea12d72e1d9a8e7515f745289e93e5eb4a21d0e7b71b7-fb68f5a6.json
│ │ │ ├── models-a82e913e058618dcb30b269a54d4e6a9cb1e0017a42efe04480874fe957194d4-0da7d1b1.json
│ │ │ ├── models-a82e913e058618dcb30b269a54d4e6a9cb1e0017a42efe04480874fe957194d4-fb68f5a6.json
│ │ │ ├── models-abb01b74df9fff58bd349e040b7820e63838e24879f938c17fd9f26f1eef950f-46bed5ab.json
│ │ │ ├── models-bb7e1baaf1de300e77c145d4e3a99e8aef07e02dd94e5a77e259c2fe5fc530c9-46bed5ab.json
│ │ │ ├── models-bee98cb55c3b74854d0bb71b23b7e01bbb9f1580b413a26dc3afbf9da8b7d995-fb68f5a6.json
│ │ │ ├── models-c3d9f0302c09cecba4c3797ec2d65e358910e6194e13d1001fd3567ab2eff6aa-0da7d1b1.json
│ │ │ ├── models-c3d9f0302c09cecba4c3797ec2d65e358910e6194e13d1001fd3567ab2eff6aa-fb68f5a6.json
│ │ │ ├── models-c6e251660301fe3f503b4c31dcb551087ca9118e65b97bd894954847723a9be0-fb68f5a6.json
│ │ │ ├── models-c6f34bdce0f26e0ada80a58334b9ca257193d775293d0c4875f9124338d97604-46bed5ab.json
│ │ │ ├── models-c83195611de40104907693cf2038c683828810075e311cb5b3bdb8fd0bae3cfd-46bed5ab.json
│ │ │ ├── models-cb1f7d5cd412fddb3395ef125bbcdac95c85585f23684e71abf142004b164bbc-fb68f5a6.json
│ │ │ ├── models-cbecbec285766025f2bebca94904e63578190f33b47eb6f32cb4635a1b43e3cf-fb68f5a6.json
│ │ │ ├── models-d650458718dae3a10405ce1d241f0e1ceeeae8edf516cf10c611edcdf64035e3-fb68f5a6.json
│ │ │ ├── models-d8acc76e3d1b54eac9754a9d3a72c571fe3078b227a257aa15afdba946b69665-fb68f5a6.json
│ │ │ ├── models-d9ff5f5ffaa7a64101936007fbe61cf2ed54f67609b54b56d92cb949234e3799-0da7d1b1.json
│ │ │ ├── models-d9ff5f5ffaa7a64101936007fbe61cf2ed54f67609b54b56d92cb949234e3799-fb68f5a6.json
│ │ │ ├── models-da380037dc0fe8ae61b838baf268e616057e46f8424df0a9b52f94e48cef4a7f-fb68f5a6.json
│ │ │ ├── models-da9dca38a81a1843fbff973486d236edeb313dd51973d6d2ffeef17f537e0d3c-46bed5ab.json
│ │ │ ├── models-e42ca9261e3cee9c877322a51791ab6f113478170f8a21cd0a971c53b330e999-0da7d1b1.json
│ │ │ ├── models-e42ca9261e3cee9c877322a51791ab6f113478170f8a21cd0a971c53b330e999-fb68f5a6.json
│ │ │ ├── models-e5255919e39635597ad57c723896f9d258abaad9908b22ccd03c126ce597a5db-0da7d1b1.json
│ │ │ ├── models-e5255919e39635597ad57c723896f9d258abaad9908b22ccd03c126ce597a5db-fb68f5a6.json
│ │ │ ├── models-e6664ff0c07b13aa2af6a85925f3841eef3907bc4a55f8bc352a8c960e782ada-0da7d1b1.json
│ │ │ ├── models-e6664ff0c07b13aa2af6a85925f3841eef3907bc4a55f8bc352a8c960e782ada-fb68f5a6.json
│ │ │ ├── models-edbd3344609a0fa1e97f75ede14a094a34db0dd6cb52975abae9f6e7832c6760-fb68f5a6.json
│ │ │ ├── models-f182a33b6677ebe191e02633a5ec99078e993b9c4cde002f14961d0323375da5-46bed5ab.json
│ │ │ ├── models-f6a9f5d7181cf078717443564e4de54e08845224d96b9c8150fb5cfda2068e82-0da7d1b1.json
│ │ │ ├── models-f6a9f5d7181cf078717443564e4de54e08845224d96b9c8150fb5cfda2068e82-fb68f5a6.json
│ │ │ ├── models-f936269fe152d95db3fb80fb10482e3cc79cfd6a28ebdf1a7a8b220ba2de641b-fb68f5a6.json
│ │ │ └── models-ffc656dd661bb32a3c18233e301db9638dbeca5ae50e65da8439663a4840cd8b-46bed5ab.json
│ │ ├── test_openai_completion.py
│ │ ├── test_openai_embeddings.py
│ │ ├── test_openai_vision_inference.py
│ │ ├── test_provider_data_routing.py
│ │ ├── test_provider_error_recording.py
│ │ ├── test_rerank.py
│ │ ├── test_tools_with_schemas.py
│ │ └── test_vision_inference.py
│ ├── inspect/
│ │ ├── __init__.py
│ │ └── test_inspect.py
│ ├── openresponses/
│ │ ├── CONFORMANCE_GAPS.md
│ │ ├── README.md
│ │ └── recordings/
│ │ ├── 55f733f042c071060e387ebfbc1608711de845ad6b91147aaa730461f07a81ec.json
│ │ ├── 820da126137b9202a258d501c62ff0143ec1e063725192da3ff1f928b4ac77c7.json
│ │ ├── daa6aa31302e051d9e6b91fef28ebc33b1d197174d2ce6c01e65ae9e40418bd1.json
│ │ ├── ef5b96003ec131801cc83298609b019942e2350592237c29204313214f5e64da.json
│ │ ├── f3390346d060f9a2c0fd64488d9d2800c31d46f2580072893325a28e750411c6.json
│ │ ├── fbd9ff6f12e8a99fb58be7c5f96c02b899f9c2d6e017f9ff4c16b729cf94a884.json
│ │ └── models-64a2277c90f0f42576f60c1030e3a020403d34a95f56931b792d5939f4cebc57-489e004e.json
│ ├── providers/
│ │ ├── __init__.py
│ │ ├── nvidia/
│ │ │ ├── __init__.py
│ │ │ ├── recordings/
│ │ │ │ └── 994675a9a4b0456488a4e4bad002da9d93410810698946032c4aaf9584cfd3de.json
│ │ │ └── test_datastore.py
│ │ ├── recordings/
│ │ │ └── 1748d5358e4c3440db43059e7fe37918bea64f182bf3d38effdebd59139129c7.json
│ │ ├── test_providers.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ └── sqlstore/
│ │ ├── __init__.py
│ │ └── test_authorized_sqlstore.py
│ ├── recordings/
│ │ └── README.md
│ ├── responses/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── fixtures/
│ │ │ ├── __init__.py
│ │ │ ├── fixtures.py
│ │ │ └── test_cases.py
│ │ ├── helpers.py
│ │ ├── recordings/
│ │ │ ├── 0049f595245d956f4e6cf3235d3662adc3298f4bbea3091dfe2163bd5f794064.json
│ │ │ ├── 00588476aab42f55dfddd055fa3df3a00e28e480ee3af017c5b9ed3134942c39.json
│ │ │ ├── 007c4711219f0fe25bd410d6dd8b18eae1251c3e83ab1f8d1d85ce86f5e197f3.json
│ │ │ ├── 008c7f9317b753a832cc8ccd2f0edb02c3f3e1c627674b60562eea08af29953d.json
│ │ │ ├── 00913934356fb4f196f8c21081154c67a7197dcc26e0326cf72448334c21424d.json
│ │ │ ├── 00cc2202e2906845aec8fe97f0e31e55abd32a289a516722ccab502c4e312c2c.json
│ │ │ ├── 015724ca07c08ab6036371bba01fdb9cd0681f7b751201af634fc71126a65650.json
│ │ │ ├── 016649fb7a8cbe74ed25c21a851cfa34c2a07801db9c0db2fc8c04df9ce48a78.json
│ │ │ ├── 018f6de6f875c5b7621e91094b798caae955444967ea1d25a4131b930b4afcdb.json
│ │ │ ├── 01e56bfa18d2d96353bec01e47d2ec48c8c353b43d3bf50a69558fa734af528c.json
│ │ │ ├── 0215dfd77ce628396b4f4fdac55a1153a8cf07039b367d546d703a36853233b4.json
│ │ │ ├── 021f4574092531de3da38054756f3731606e80e55e55280ae879e36da59c37d7.json
│ │ │ ├── 02549b1a19b2a9ed27b71ec2894bb4326acc1fd18759577fd379177ae15fb009.json
│ │ │ ├── 02572a9b8224678477b9c9f3635b54e56fc441fe46b8a89fa4ae32acdd7e199f.json
│ │ │ ├── 0265ed3ce3530445a2bea88d19a6d7b53626f98859f728a78d59b40631f4c75a.json
│ │ │ ├── 02b32fe03919cf862d4f97088b58b41f62662aab6d30c0af57da645edbbe84b6.json
│ │ │ ├── 02c93bb3c314427bae2b7a7a6f054792b9f22d2cb4522eab802810be8672d3dc.json
│ │ │ ├── 02d867ead262c260fda392e9a4d3a4213ee244060f723eaf848b13d622110a15.json
│ │ │ ├── 02e846d83678946e7b7dd7610496f8989621648e55c78588b033a64040266f49.json
│ │ │ ├── 037825dcdfce61ddb6b1e1b0862e850e00b63d52f4b841378dff24bbc57eed40.json
│ │ │ ├── 0395392588ddbe3f43a8ce87b8c20eeb7e38f599152fd55529112c084647862d.json
│ │ │ ├── 03c7af9e0894502969b7594fc1883bf23893038d897049ba4e925b4f78dc0cfc.json
│ │ │ ├── 03e698e81e5b964bc25404cd529dfa644c1ff8fb368ba2406c961f0dca8644ac.json
│ │ │ ├── 042cf79a7f1d22972569a4969f9820aa80ee9c31ae3e91bfb68a2e6b7cdeee7c.json
│ │ │ ├── 042cf899bac1fa3795c4389829da8f204994ac07a6361ddb292877ce4754cdff.json
│ │ │ ├── 0488f776f8f8ff9f64a6ce7f58da44a8a6434fe95751ddbc2a2119bf9b0fa9e6.json
│ │ │ ├── 04a4a7bca9616ce3a12839f049e55f378278789635d39c72ab395660583a2f68.json
│ │ │ ├── 04e3aeca211526ed3d06727f6c85a559e7dee074a0c56f7e44133a0d35fe8997.json
│ │ │ ├── 04e73108f170161ddf4c1342dd0851b20f8e0ec58119110773dfedb73c202c7a.json
│ │ │ ├── 04fd3246709dd77da971901d980c54496b38400b6bd0719623ec1df5549da552.json
│ │ │ ├── 050f63320eeea2dc946617884f63e55d84fd718af642afa609c36154deb34dce.json
│ │ │ ├── 05434d44cd8a093bcb70e8978fc7a35ecf13e14a531c0d08c025e798dc6796d7.json
│ │ │ ├── 0558b37ab0724e4f3ae74aa9da95a4f204201d3a25f0b764d1faa4e521059bac.json
│ │ │ ├── 05b1f8bc6a1a631defe23e76734035b6f63837c2355cd12dc5a1f281ca787f93.json
│ │ │ ├── 05c37817925706480d7fe873f7314268a54ea84fb246669a4f189065195f7176.json
│ │ │ ├── 061c5b2d944ab8fb9f13f22c73700e2cfb4dde4e8145421fdeb1cfbb048bdd67.json
│ │ │ ├── 0638d98040397341d5751f9c35e293f4b3ebf969974f85ef78c842d81a1f26f6.json
│ │ │ ├── 063e0f8d00175332c87901571ab32dd3a134fc626b8120400d65a13b7bee3a82.json
│ │ │ ├── 064011776e028eca5829b2a87b728b0e5f8fd6927adf3c1b69a2e40012ade3de.json
│ │ │ ├── 0652618307804555ec2837e1bd33023c38e865065de8ade26677251fdcb4e456.json
│ │ │ ├── 06662bc18ba37c09d43166a2c109f4e3bdafa508d8e28a5b1acefaf5ecdb5a09.json
│ │ │ ├── 06817602766493c1d23793e64a4ea987a2cca2cbb2c4cbc4d6299b0da19cdcf2.json
│ │ │ ├── 069150b2c058c9bac208758b1ee2635fb503d3824ab6c76ef9ad73189e05bb03.json
│ │ │ ├── 06a5c5087cd45efed03386d4f4d07b0d3d9f3c92ae64f90780801e90f01dd4ae.json
│ │ │ ├── 06b76c5e20553e7f5e8071052ed478609d4d547cdf4ab9ec9de079a2d639f8c4.json
│ │ │ ├── 070e546bcc2914eaed4507f178955044e14cb6530ef9c3545c0fce743f769f86.json
│ │ │ ├── 0791f2de9772c3f535004fa8e01caf7b1d0f4cdb31c8ee4121a318c2189b66f9.json
│ │ │ ├── 07f3549209693a11ae4641838e4dd4961c18145506c28a8eb7f5968c7b08344f.json
│ │ │ ├── 0853241924af5459004c1b9c6fd434f2346a184c77a236754d89ecedf305857b.json
│ │ │ ├── 0886826933da12cd17dd391d9df69df1a8f4e492eb979dbda443a1646cdfdaf7.json
│ │ │ ├── 09104a5dfc7ea8ad6711a6b9b70da699d0049576a3916cbbc251a32a5c8a746a.json
│ │ │ ├── 09352154e00f2ff0dc8108149a87e1bb4ecd50cfbe3e1f3da5569ce487a19d77.json
│ │ │ ├── 096b6c830aef2065753f27bc75d059bc18b1b49376544a37a81cebb750a3d3e0.json
│ │ │ ├── 0995df80c05acd7a1c386b09d5b4520ffff5233bf1fdd222607ec879cb5bcdb1.json
│ │ │ ├── 09bea0a3a8171cde93422ebab490e91c904220f1a412b6356f10d23880ed1c15.json
│ │ │ ├── 09f38b94a0c7291d59d96ded055659fd913c84b596ffdd88acf9ae4254d7c7b8.json
│ │ │ ├── 0a4aca0cd075369aaf6133ee82d9d940455cb083c0fd1330c666a12d74df6f89.json
│ │ │ ├── 0ac07d10ce3f810b5455a86f78f426bdbe4429c01ad7d551e2d4dcea6d7c29dc.json
│ │ │ ├── 0add7d74aed8f1026ef0e94c8cab69018e471a70cecb89dbd8e45cc958e876d1.json
│ │ │ ├── 0b061bd80790c17b1aba506125f4b231a4dc379e1d6bb4b1de1c9bddf92aa664.json
│ │ │ ├── 0b45257ef8ece1b2ae98dc4f3fb078d4b5e96f823be88e4463707d499e013262.json
│ │ │ ├── 0b4cde2f51981de925cb14c1c64de5b8e55978745bc4964cdf932baed4a730c9.json
│ │ │ ├── 0bd29115b417b14d97c480addd0c71e19c1a839d10c4a11a4c01793ddfa45553.json
│ │ │ ├── 0c061c29d08a4d45de6bd68a6f467876891f99d404bc427bc63f8a526e9cd9b6.json
│ │ │ ├── 0c0d70512798931f4f47001e13238d782edf6ea12e4716ba256e864e4b97c48f.json
│ │ │ ├── 0c0fcabd8bc215d7448270998f7eb7a5a628b49c284d5d1f2a8ac9c13c992b00.json
│ │ │ ├── 0c5c1f77be37a3ec1a04e740650be3ef901e37bf8659081a5bcd24ff715570a3.json
│ │ │ ├── 0c77c2b1e469224f518a5ec201e74ab97228239e13585cb82ca4fe747bed0523.json
│ │ │ ├── 0c81f5d5c9e09daecd5eceaeae22bf228addd43f95f4a9ede8bd5a3cfbd091af.json
│ │ │ ├── 0c8ee6c3729c9be854298a55ce789d3d84c08d1b510d1a2657cc1d3ad3387e38.json
│ │ │ ├── 0caed0fc68925ad15a1464ff71041d91e3db067c94e54d2b18ad4215556d4172.json
│ │ │ ├── 0cc8136680970a3debd033e13f2240f63aba5417ed5c7d965f26749cd544f971.json
│ │ │ ├── 0cf61dba7a2106cbd2b127892cbfbde929a2a32eb46dc42cbecea37dc6e7d617.json
│ │ │ ├── 0cfaf068f17082684adb234fa8dce33568fc73f43ed2a9d0858f97ffa2347fda.json
│ │ │ ├── 0d6e30ab00dcbdae990c0d45a518eb9b14592b110e8deeca91a81d7b1b20dc59.json
│ │ │ ├── 0da61583f411df05cfeecd59d10cfe20e3c2bb35814e46e629f6c924866f91e8.json
│ │ │ ├── 0ddc7ea2766519d129ef116afe868bef0126ff1f967a5099e8ebdead00194c10.json
│ │ │ ├── 0e069ac4958a27166824c203440be5f00d2d9902ed223e6339bfb9f976155f8b.json
│ │ │ ├── 0e4aae7a7e786f3075baaac712f46e45d3569f869064a6130cfb5c404a47d3fa.json
│ │ │ ├── 0e86b02f9e8cf35b0aaa722e3addefa75f9bce5fd16a041d88d00c0da3991eb1.json
│ │ │ ├── 0ea914a3ceb9360a1b9206a8975af2c3174cb58c0bfbf904559dc29bc1de0218.json
│ │ │ ├── 0f1241e957d1016bf65c80a3de2a51e9a786eb96687e88389b3173ad193b621e.json
│ │ │ ├── 0f506b15f4022be5009e8b76896ed437f51ed472a864fe7156f802156a271ea3.json
│ │ │ ├── 0f90df508e5a66d31c314a01451dd49df685ae5854d6301814ef25a8adeac69c.json
│ │ │ ├── 0fc6f2fc571f913d714368eeb5c4313b9af1c9854e7cfcc55e4de64900fb46e2.json
│ │ │ ├── 1067b5553e9d4e95ff8262668a05b9b55abfc0b099ef85cea0e542cc035d178d.json
│ │ │ ├── 10ea1350fd8ea2d96cb9db7bbe4d760161651934c82214999e81efd54115ea49.json
│ │ │ ├── 11307cc3a43466733c0853d3580ceb0bdbea1f5c97cb75880a636de21e533969.json
│ │ │ ├── 1163ba5617d2c09f55120a3d036236e01d5b033b27ec352dc2a9942fccbfdbae.json
│ │ │ ├── 116ed17c13a01f9150a0842c96b9309bdf34dd825ae1104dfbd09efb0adf6dd3.json
│ │ │ ├── 117b6e0315dafcf727486fbc9cbd2d250701ec9cd25e085197bb7cc03d246c67.json
│ │ │ ├── 120e3c92e4b813b4c1ebd176510a55bb97eec35dae694e618011e703b0e8d714.json
│ │ │ ├── 124feaca00083bd97cac2baec0fab3fc82413a2ac18639a1bd6c1b5b79f4ce40.json
│ │ │ ├── 129d2d0d89afe483b8dddd8ab5145c2494f7d803e3cb25a91a2c686d00eb1a18.json
│ │ │ ├── 12ac7d085d93e919a32a9ea811de705485c3e91b8301021bc7de2250e7f41961.json
│ │ │ ├── 12acea0a386d6c3e977a03fa3346e4b817e8689191f9eb20537676b725bc7bbc.json
│ │ │ ├── 12d6702f31197285bb4536daf4b982ae7b097ceb278766139bde1c6f940c0e68.json
│ │ │ ├── 12e1a8be1d528315241fa27a74d16d98f6efc6eb9386d1f2e141fb5d5fafba80.json
│ │ │ ├── 13b63e16e27cfadd02daa39ee42147d8e4725ee4df82bd7f36d90164ee2c5684.json
│ │ │ ├── 13fa45ecb341a7586d9d8b64a4db50100deeea137997bf2fe98b90f4002ffb2f.json
│ │ │ ├── 140ac1fa1c5c3828494c3963a00960b313f0a0f9ac514f6b1d3cb05e75746475.json
│ │ │ ├── 14388ff51603f9525b188a0753bfefed632311bae8c49a6cfbd219e677baeeb8.json
│ │ │ ├── 1489591da67e505cdd2c1fddb0c3fb8372e880782d7783dd24b13689686a54e1.json
│ │ │ ├── 149e68a5c212401a54ae4ce9c2d29bc2c9da80cc1ef0ed170e8708907b39adf7.json
│ │ │ ├── 150df862dce0eca74f49d37425ebbcc7a6cef552b5979a9643b651982d36ba76.json
│ │ │ ├── 151492808e695b22f265792c75d5778306597dd67be425d5be0db6265c584825.json
│ │ │ ├── 15f4d677d61a2eecaedd1aafaa3925d76f5e98199f0c6baf6736bb140e008cff.json
│ │ │ ├── 161554eb7fcf41c31b537b6cb53596d7e67b2abe95bfceac75f6b66e9448179a.json
│ │ │ ├── 162cb2a93bc8369ffd7679bd159c4062a591867037ae8394b578805a40dee7da.json
│ │ │ ├── 1642ef6f9c208c7e3ba238eeaa8303ac9a3a7ace96668cf2bdb6abb3f0451dd8.json
│ │ │ ├── 1647e36a2858a870b989f2259b42d3ea0341329954649d0c7d1632e4ff42b0d7.json
│ │ │ ├── 1654833023fae3ff9a9491f73cf42963f20f553d1690ebb28a29be31fe8a7c11.json
│ │ │ ├── 165e9cf79ea62532e59c69b49cfffb12d9174cfb14bc29d938835c28051504f1.json
│ │ │ ├── 167c03e75de0db3f3050e4e21494c99f8a3489f0719f2bd1644ba1b86a596c99.json
│ │ │ ├── 16ce219b19e6362174921500985e4ccb0f0c56b84608b334a3dca1e9941ce765.json
│ │ │ ├── 16cfbabba7a70fdd0ccb7cb4559d7d26ce6ebdd3e32f7a3f8cb56598284d1405.json
│ │ │ ├── 16d377643c429f2ccafa70491ce3aa344f1fa299b101ac5278e26d9196cc73a5.json
│ │ │ ├── 1702652cac6469d0e5df4864869c67030872d76a761741cf86862bf66e57065d.json
│ │ │ ├── 175a594469fd2c66751bd037a78fa3d6453e7b8bbb2a55f7baf6147997026931.json
│ │ │ ├── 17c14c8e7ab3580cf93507d4b5d8aa8c80bf1fc3f5f05ac968a65c03d298d6d6.json
│ │ │ ├── 17cf0143efe13139537802fe97b1d5e86dafd5e23479728505924440ce9b11d6.json
│ │ │ ├── 1835c304644cae219d3ad846527238dac24eb28fb330c7c2c99b7adb745986a0.json
│ │ │ ├── 1859574ce147d00d177819dae081faa87e201e2fe1d73f8129cf18f731a18278.json
│ │ │ ├── 188705add7555fa052ec4ca5bf38a89018fef8b3830d94cc4777873245b12cd6.json
│ │ │ ├── 18a250243e707f6332d0d6fdceefc105a1ea2490d3aa62d9246ce80119442d16.json
│ │ │ ├── 18b7055b44a458eaacade8fe3cb54a3b854f31523c86a2167d4f4faac784ba96.json
│ │ │ ├── 18c009bf2c4bd7e3764c8451dc3de30c39ea2e18ce6c0030df02507f73d0e237.json
│ │ │ ├── 18c1f9278c111f75ab18eab1b034e9df75f79b7577c0f4fcfa39d5a71310fc17.json
│ │ │ ├── 190bb37daf20fe01aa707ef3f57b551d525aea42f7421b915c3ec4da08c35268.json
│ │ │ ├── 19510c47c85d1b8bd022343b8ca94285c7a62f880609bed5044e396e5ad1aaba.json
│ │ │ ├── 1956d802ac07ea40ca67b9e174867c6048ed243f527bb1a3abcd26d0bbc37ae3.json
│ │ │ ├── 198251b7386f26340b9b72a6b4f62341351c7053051a3d8892c64cc68870b457.json
│ │ │ ├── 1992b257e243bece1040beef88de55c84241b0f071053538fb1ebba9fd3de744.json
│ │ │ ├── 1997dc007d202497ce456683d24ddde3553f0db5d5a673146d8bb99c072e77cd.json
│ │ │ ├── 19a7361ce53104552ff21c7f7966bb1eb9344e5ef4358f82f57c731137f54fec.json
│ │ │ ├── 1a18859263bd730f2863e4793b893f2d2414462c73bd25e3b71f88969932ccc3.json
│ │ │ ├── 1a5a9da6382b176bc38f4f8a71701400d59ac9148fb1fda532b67e1dfde0ed0a.json
│ │ │ ├── 1ae6ff4c9ed730840e2eb4a3cca944d53d86d57d3950daf1a31361ac30f84429.json
│ │ │ ├── 1b7afa7b1da7bc91e5e824e8d870bc2851bf0fa44ba7bfb3539918dce51df234.json
│ │ │ ├── 1b7b199d0b13c7f7987a40bca471b3301cb6edf8cf8c0007bdcbd2e42f1f44f7.json
│ │ │ ├── 1bd6a8bd326911c3116794e0f82225cd8a3cc40526e5a5eb9596152415fea5a0.json
│ │ │ ├── 1c2f1886bc9e8d8b03ca0c0a851dc75324b82c23994345182ed0690fa3806ca6.json
│ │ │ ├── 1c41ca441b62282305626afca195f7d7f48159f74296a7bdac015190f9f2cd66.json
│ │ │ ├── 1c9a58d5f9ba8c463ffdb9a7ba9d9aa54e468871af2e4c208c72152615d8c15f.json
│ │ │ ├── 1cdc648f141908660ac0aea8c3c5c936d1433533afe08d99773f01074efb23a4.json
│ │ │ ├── 1ce6d4a8ec438d4a6a3618e5e6929b2db20e03a629092274039f33f909bd481d.json
│ │ │ ├── 1d068d919c3c24e3df15ae1ea6f13a83923004c74793f1960a89a82511d5c568.json
│ │ │ ├── 1d26abcfafb8b5f6a8432cf986b94948218816bca4ed48672837270d93f9cffb.json
│ │ │ ├── 1d7ac4e6845c5de75adeb6f1c64675e041b492b87a87a37980ebd7f595c4c946.json
│ │ │ ├── 1dbd102b81c7dee87b189664823f2e43f6105ae3111ad9cf843899f495f8bf76.json
│ │ │ ├── 1de430b82609f8ae11dbb2189e2a0fb33c2ecb34ce97edcb3638319705b81299.json
│ │ │ ├── 1e171766576921b1462c0773e012b63fbc42df98f9612af5eef7613e2b967900.json
│ │ │ ├── 1e1f2ffc8f1a909a3bcb5950e4a9f0fce0904aa582d6cc9ffa05675c5f15551f.json
│ │ │ ├── 1e3fb6de137baa727cc6e3dfa2acc579f3f8bcfcabeff00dc57100fdb8740502.json
│ │ │ ├── 1e4f9812d1426b4ebf2a80e9cbd90478df16385c1e95fb60583b061bfbb4b3fc.json
│ │ │ ├── 1e693031dd0ab008cfda5b09869f62c37a9e3a69b48f8e94d04e66ff6334d88b.json
│ │ │ ├── 1ea7cc5187458766875162465c2f6986e26710f664c5b095b59e824dd9af5ee8.json
│ │ │ ├── 1ee76d32cd93de4095cbd338ff54dcb7929f891e6b35078db6835382d99e2066.json
│ │ │ ├── 1f7f8b37e212395c5f1eb2a39ec58ab9ada974e86c36ec9f4697cab567ee7788.json
│ │ │ ├── 1f892d97540da0c89210681ec35ae8585b2db4a15e164fe24488e6e7170638ac.json
│ │ │ ├── 1fb43f712a85605c8f305fc7fd2809bc236819689eb2c0880facf630fd956e17.json
│ │ │ ├── 1fc2f169cd6a3766bda92e746c19c7861ed65d1fa4d73f87905495c7b85d7bbf.json
│ │ │ ├── 2030f3dcdedee6706b44e3d9588acbb55cf8ce876978239bc4c304cb8ca94624.json
│ │ │ ├── 20323de24f1a4e79bf9052d36139ab3321e987f7b27cafd37b4874bbb5d980f2.json
│ │ │ ├── 21b7d927ecf24baf2d65b507be7fd938b473fbf134666d42942441dbaafb20f5.json
│ │ │ ├── 2275a89d487c5c8483f0c7e2b20f5a49b55d1454794a448ea96c9dbe7f9a40a9.json
│ │ │ ├── 2288d41a381af958f1fef53d8cacd5e6e3f5df56120e4d2e64ccb497be1678da.json
│ │ │ ├── 2331aa9455bc848b0a0c83d79b691893f2998c95e84648d113d88823435057bf.json
│ │ │ ├── 2354da662fbea01ca7d54bb433b45d79e93f6ab34c4ddc90582793fa9d5d32eb.json
│ │ │ ├── 23573ed156f7a8ebb033471190db97e4dee2b3e9a2e40de908072c98c7670d02.json
│ │ │ ├── 23b6c5e498bb0103b73a2e728cb5dd18be5bf915ecaa9fbfcf86e93b00d3f5d1.json
│ │ │ ├── 23c233b2a81318e949a7589b578df22f040f8903832101618e930b91786375d5.json
│ │ │ ├── 241122b73beaaddbaa57799a8f383672bc058a85aa657e08310da6d9f88ab917.json
│ │ │ ├── 24136a7e247fbd9f686918fa0feb61397e47a584a51d96d4677f80c2f1cf6029.json
│ │ │ ├── 2443581bf4a71f7b26e3aef9715a65a1cb5ab62249e691e77dcfec2e00be302b.json
│ │ │ ├── 24500d64280af82115fd76ba49461f47f4546933e0ca5bd2b16553b9b4236111.json
│ │ │ ├── 24598d026352a4f3b82711af9bfd05b7864462fde03bbaa0c691185c3f0cde87.json
│ │ │ ├── 24a6974ff4a2be4714f101344b4632246eaf3ac27076d3e0dd4ece7359d86d90.json
│ │ │ ├── 24b0da19314c006dbb0d50fc0584644666528b69340917b19ce00e8e4b1d5df0.json
│ │ │ ├── 250cf8ad076dde286f82f04efce4fa2a81e84fc65e7c55b8a7a454e26bd401b1.json
│ │ │ ├── 2520083e446e18ff8420591c1871b8b558d36074cded75ce79c8f92038708082.json
│ │ │ ├── 252cb81b9f7b79655aadec9ee730a86bc769e0a50fe0d3a32d1e8a2fb51ac97d.json
│ │ │ ├── 25420cfc641cd935131f3c9c5af873af5a901391dc820af839c53f4e4f94579d.json
│ │ │ ├── 256215277d288407e08176fe22b6c6b5307261c8f4a54bd08786e386f745ab74.json
│ │ │ ├── 2574d7576d30dd9987202bcfbfcac6cff8f26729576addabdf6f57762b963f5d.json
│ │ │ ├── 25b4b134c4763373b0826bf166f76eb24417b8891db1e58085d6723547fd3a4a.json
│ │ │ ├── 264aae2d652fc05d5a70f91f9bbed01cb877a000d3e4598e767db9afeb7e7420.json
│ │ │ ├── 2683dd0ee16ab942012e8afc66ed6eeb5f76db7de266876ca029d6f163788741.json
│ │ │ ├── 26cd3e8855f16d85983a88d3c6cd93adfe2e67a203a3aab32b8422cfd0fa1d9b.json
│ │ │ ├── 2704a17ede94d814b27b46866ae8f30609a189e0915b1ab90d4636a75f2551aa.json
│ │ │ ├── 272a8749689b1e529aa6c70dce1c4d10349009306b4bcaf8135760b7ab5174a0.json
│ │ │ ├── 273c77d363ae91cc56dc5d8684df70c0a9d6b0908b2ec690ed61abb6737246bc.json
│ │ │ ├── 27dea747700cf454b525994be12276279fc9b82643bb7f71f243353738c3428e.json
│ │ │ ├── 28c592207a8d83a159ab798f9c6c522ddafc496a583fa09a89f152be994e3a99.json
│ │ │ ├── 28f5e1d16e2f5c3f2054c9805e939c4bf2ac2bf430d7e37b38b30bec1a86e28a.json
│ │ │ ├── 290be8fab89724d1e37c17608b318f4c0d8ddada26db9aae18245d9eb83be3c9.json
│ │ │ ├── 2952eca2f5e8bc4012fc3d08fa9528ec5e42a32b78610b66d65d6e3cdb5eaba0.json
│ │ │ ├── 29930c44299481fbb5cff6accc571b289138a3b217b41bdda4fc2fece61626cc.json
│ │ │ ├── 29ab0b407d3d3f6bb893470702b7bffe012b864e04f6df6f52adadfd3a50896e.json
│ │ │ ├── 29d5f14e3bf201120041d87b27f2cc8b0b3c995ae5a7127d5c52976edb25b696.json
│ │ │ ├── 29e7fbedd6c3c118065173df693aa90dd6817f525fe66956056cbf1f74dde98c.json
│ │ │ ├── 29f4ac79badc92ccb3a5db12d78dc8acf5ed796c240dcc3c3ba41f9c85b042f2.json
│ │ │ ├── 2a5737c927ae892ce268742e79b4d2ce8ae1e4620fca7b854f32649897616f7e.json
│ │ │ ├── 2a8db6a0b5b1216512eb53f1ecddd35b01a5c82672abd909531a93eba9d133dc.json
│ │ │ ├── 2ae4ac48e566408d1a721e9a5e9fcdb5a629b013094ca4e48b262a4034c67e6e.json
│ │ │ ├── 2ae577def36d67899eac4aa37151c7bc00b2272f1fba1790c0c6d793749144a1.json
│ │ │ ├── 2bd4c8dc08b3ee3ffce696864f0bd9f35d82223c7d1cab613ab2e818d79d6f9b.json
│ │ │ ├── 2be285fca6418dd1fa70616c6ed18f8cec97298a28388f1395120b7ffab4db26.json
│ │ │ ├── 2be4057eade9b382f2ac8666d66dbd7decea6bd3b998af0a57468122d9b96198.json
│ │ │ ├── 2bedd41f7dcdc9abc6b83b8ffa0590ef4a6e150778ced3521062224a7c402b3b.json
│ │ │ ├── 2c449bd39e76692d4b8e4a56658f6be60c747c15d8522c7eb5d85e07316426a8.json
│ │ │ ├── 2c5c4252117b75dc7f3c709c8ae9c855d15b70c9870ce29bf19f67aec9e355c1.json
│ │ │ ├── 2c7ef062cd359c27bf13edcc081b47d2d30f85486facb326c6566433a1a7937f.json
│ │ │ ├── 2ca746fb731a8a7e36641b1ffc15ea03d4143f4af8a6f0f41a9f9d816db5cb3c.json
│ │ │ ├── 2d066b20c0d783edbaff5a4ca1f3c60e0ed30ea0a29c3e78e454088ae745511c.json
│ │ │ ├── 2db3cd122caffe22de1b1bb1c5c8c35bf581540722a26ff169e995e5eaaef202.json
│ │ │ ├── 2dc865d055f3ce6d4438143a67da353cef0e3ea0e3c6044c04018e1718853084.json
│ │ │ ├── 2dd03a2bcecc997e2013ceb3452b84e654152bea216755fd0d6f3aba0864ec89.json
│ │ │ ├── 2e11fe36495f20ae61c37cd6b9f8d6bab6903f4b55230ce8feb88aad99204818.json
│ │ │ ├── 2e1939c376f00646141ffc9896f65fc6e439e8a9d9c6529452347eb946d6e227.json
│ │ │ ├── 2e1a2df457eb0cce9fb4d8dad19e54e5b23ac1365f933299313cd86a6133437e.json
│ │ │ ├── 2e502e37804fbf574d7bc441125d51e857c66f3d8008c02eb5a0dc14e24da178.json
│ │ │ ├── 2e5e7036d47b65fd51825c13201732bf8505856dd6485db1e5627cb907aeba51.json
│ │ │ ├── 2e7eae043082d093f891ec0d8e00dd732b9723e4eb1d8fd77ef456d6fe68b89b.json
│ │ │ ├── 2e8dc780e070a2cb8a3ca46f203cb1ab94bd6dce1e9046123b922d73a3d14718.json
│ │ │ ├── 2ed23a4289840f93202f94e7e7027118869d34d768ad87ba072e92e8a43a52f2.json
│ │ │ ├── 2ed89c9e5775d0b8e4045e937a9ccb5060d30972fae86b49a3fb440333507343.json
│ │ │ ├── 2ee96a9645725e1cfe4b15216af797feb3b6f35004c002338db6079b83407ebe.json
│ │ │ ├── 2ef8c1553191dcb1412e4c81ca7000e0dd676c57d5bd94f6bb7f2f46cdbe6cda.json
│ │ │ ├── 2f1d64bc69fdd3ff62a0de4f5f2e2ed466eb84d5be4ff4882fb7dbfc790eccab.json
│ │ │ ├── 2f3a9eb141496d900e53265c9f8cf4c89116409ad15b3fc040c678ade8685258.json
│ │ │ ├── 2f5d0087ba947141d94b9ba6462c03ff01d8f4948fedd8fd84cabfa80f5f0373.json
│ │ │ ├── 2f5e2a269b18b5d5dbdfd0201283f6eef3622e922768b77c809039dac56f6036.json
│ │ │ ├── 2fa72534cefd5c8baeb7e65efd1e9f6bdb8710a974804a5bc79fd8bca669464f.json
│ │ │ ├── 2fd083157cf52488ca04094158a5c53cd4bc56d0fa4c4cfe0511207258a524c8.json
│ │ │ ├── 300131ac745a934e5c9b78f82b5a18110fa043acaf98b1521631478fe6b80198.json
│ │ │ ├── 300c5041332a0ad2990a05df88a6b6842e02157d807564c136dc71cffe2b78cc.json
│ │ │ ├── 3011cd619ad4008f0797ad1824a05604d5ee5a9f31d4ab0f5be5454b54b8e47e.json
│ │ │ ├── 302881895eae2384296096186c02053183a19c75d8a55f0d19ae51e36c7aa673.json
│ │ │ ├── 302b9a7e33b5e584ddffd841d097425b4026d50c61ddf894b8e9dfa73a4e533f.json
│ │ │ ├── 304cb7205bb99e0e1655d5fe3b3e4a0e0f891320ccb4ccee98d74eb21bbe4986.json
│ │ │ ├── 3060a49bb203ddf1fb7efe24bede3eb96de9678160d1bf471b446bfe265e8eb4.json
│ │ │ ├── 308dc73ac6f24a41129c10634710e6bb80b350fce0fb614cbc1b3c5a985b62d0.json
│ │ │ ├── 3093cf45d8165b79856a2b701966b6801d885e15cb2a9a98c1999c356e252769.json
│ │ │ ├── 313a0a99663819dae4f084bd4d20abac411fb82bff7ab286db6a9f99e7bfabe4.json
│ │ │ ├── 313ecfe661c7fafd3e6938d5a3b66aabdbe02bb183275bac85d65a5c3c345750.json
│ │ │ ├── 316f6fa2633f59c48223aa11ae63e85d175b2dec5be2c7cd8bb9d4ea721fcee1.json
│ │ │ ├── 3177a984c900c2bdc2785b502bded6791b1054ce0f36e967eb3793b5608344f3.json
│ │ │ ├── 317de5f0aaa03f9abae6314dc29eca5201aab446340c65043208327d998ca489.json
│ │ │ ├── 3183b7beec7e4e89f8051a2aec67b4a1f3b48fb71f8682967d35e19498eb9386.json
│ │ │ ├── 318c5361647df0245c074cd2c7d6f50e862aeddbbeaeb256ef1add34de7c1dc8.json
│ │ │ ├── 31e78ed05055cb19395732f546c979260e4c91f7d9d41c2e83e729656a63f15e.json
│ │ │ ├── 3227461850f0266226230fdd6a63f18a216b13ff9bb86f21b98dd4b4451420ca.json
│ │ │ ├── 323876f8295d532ee891e7458d6f5d144f555b672c4f8d74429e193f99bff07b.json
│ │ │ ├── 324a86d9532b6f77379808b61bb3a1cea15fb84da6df730d4137380bed896531.json
│ │ │ ├── 32e2303e84b9485225a7c0a627775bea29619e5a0a308e173938a4849928f97a.json
│ │ │ ├── 332dd23ab2a8214048120f32b4c22dcdf697539633bbf36c655f8c84a6b6ce86.json
│ │ │ ├── 334cee9d473635bb4220061b0e366ca4673bcefff36aacb8f03043a76fe984ae.json
│ │ │ ├── 33708f6c8738c44e88d5523f9b3204abea75a1b46ccc9b1e4ec4d64df6359751.json
│ │ │ ├── 337afd7fa7cb2e0a79e3b1a7d35f36c74f2f4227d5c6e557239178b3b8ca6e81.json
│ │ │ ├── 33c001a51c328139e50703841154841dd61858e6ef3295b6baa8b8fd7454e272.json
│ │ │ ├── 33c94864582a3f1fc9239bc825f1b2c7a1f757570c23b395f5c45574525e89a2.json
│ │ │ ├── 33fc9c1ca178dcc83a03695acf43d87c1abf1f5970344499a2ac1cecf94dd91b.json
│ │ │ ├── 342a73be8ad9e12288ab5898158cfce867fe60fb6898caf914c84111fbfe37b3.json
│ │ │ ├── 343e93a6b3c8ceddd8598527bc6c93337ad372aa51f7f0235f68c4a322686898.json
│ │ │ ├── 3448d4d96f9c2cdb4e4e32a1df6dc919657d1f901340dcc8e539b8571cf3e118.json
│ │ │ ├── 347dfb6429c91d208fd7a40c65c820b9fb6be6829542814b9b0bd49fad13085d.json
│ │ │ ├── 34a1b84c2a8546684f4c4d596662df62d17b1259684141dab22de4ec174e4c5c.json
│ │ │ ├── 34e4e39881b66b9992c02a78f332caadf9923087d58872b2feed6bb878322521.json
│ │ │ ├── 34e831b4f3adfd1712553e3760144099c66b1b98474f257795a057dbba472929.json
│ │ │ ├── 34f72905dd46c1a1c288e576b21a3d2d96675c4a8b75473893dcdf1138d602e3.json
│ │ │ ├── 3513d30281e2005d7b01e1bb1f881d41e1bd0f00536c82f09670a9d4701a2471.json
│ │ │ ├── 35214ec40ebeef19701bcea467106e03d40d6e3887c8a39aa0e4e0261580635c.json
│ │ │ ├── 354405fd4255ae9210d875c30b8c9e00a75d79046a954e4c5858e36c4fbd70c5.json
│ │ │ ├── 3552115a25ef5fbe83681d28fdf32bc1a28b74eb8dbb81e248a182a24113159c.json
│ │ │ ├── 35d5f2cce7be33d08b67067d5dda582b7bbe7da15b3da8dd29b60d2d26c3e47b.json
│ │ │ ├── 36227626ccb4052b05432d2df019201ee2618d7bef82982cca22b5cf71a30c2f.json
│ │ │ ├── 36289b4fcb7e3281bd6949f6ef8831a0545995a811631284ff57e4c2e78ff5f3.json
│ │ │ ├── 3652b7501c7495c927e111017e49065ef3db995d52cf7792e14c9a4a814e54be.json
│ │ │ ├── 3693338697dedbaa8f81fb8b53623c25eadf867d773ea128f954914b733984ad.json
│ │ │ ├── 36ac7e15a7b9479cf293a524e1c0032a0a0c45c1eb3a046bee95d5c6d76851be.json
│ │ │ ├── 36efb89328689ea14d26dfa98218c83f2cf2b0e6d617bdbe92929ea316212762.json
│ │ │ ├── 36f79c954dd58f4d87655b32311e5db9c6f9cbdf05a8f5640af728e90cf3ef50.json
│ │ │ ├── 370511eee131d6150b1f5cbab9e9821869131bc8d52b82b007584e8d88ba6bfa.json
│ │ │ ├── 371d167f1e267835b9fba0ff3e7ad1f9eb7c4d9dedaf22a6a019487855cb6c9f.json
│ │ │ ├── 378274b391ed3f419eca944093cdc2e374139cd6f6a4035301244f47e6843136.json
│ │ │ ├── 38bccd9c81001cf43918e42713e8b94f2434ba3905d82d9fd7e9be919b7fd680.json
│ │ │ ├── 38ce200f84f011d14e690df5f401f2d1da91510c13abb3cd495da2303d299074.json
│ │ │ ├── 39cb6a0b7caf461718605ddb92021e3274bb3b197307a687763cf2c2d8e984d1.json
│ │ │ ├── 39efbba5d24bbe4df1d47b570034ba61a2e317b6a737548fbf288cac6c7ab7f3.json
│ │ │ ├── 3a1698100e80a8596a36d8b4855dc7f6b02a1f512aae5b770bcb2a0a8493d207.json
│ │ │ ├── 3a40c6af4aa800f0cb090c5c8a8d4bd42faf85704360a5b3561b66aab834e0ba.json
│ │ │ ├── 3a42633341bcc27e13a6d7e05736adfecfdfa96b8c44c59e4542c7c4e1806156.json
│ │ │ ├── 3a614b92971bca0336040a8f660bf9af3c43653b2e405caeaecf4ab52c5862ff.json
│ │ │ ├── 3a69a96734960de4036a541396d1ca4dc4dc08c4f584758a7b0a483676f20a6a.json
│ │ │ ├── 3a7d58b7c9b3c2425328282fff4308f99f13bd9b18a3363e2ca301c5df119915.json
│ │ │ ├── 3a98065369191c0dee80f8ba81442fab5f0d43ff9cc38a9ef9c094fc40265d98.json
│ │ │ ├── 3aa2233e21470cd1c2667b6e4e31cf680d89b3b3c936882767e4500b0cf6d517.json
│ │ │ ├── 3ad5c85a4df455be7cc724d789dd9b804be74e28c36069860db48e39e36b080c.json
│ │ │ ├── 3add3f42b8c048e7bf19c84e2ee595627fc794619c8c0f2de19273d41bc71d60.json
│ │ │ ├── 3ae0877c874cb4dac4d29ed4985b1e6fa46f297c52614bd07c7de299168ec74a.json
│ │ │ ├── 3b08be27f7397da1523a7e0d67f546c43bfd337ed49e9985f185090b6d19c0bd.json
│ │ │ ├── 3b2bea41eef9cf973ab1dd7bda9874e927658bfcc54af5e26b5793e394eacd8c.json
│ │ │ ├── 3b5e9fb97c39a76a8168144b535f0ea2dba1f444850f32eab3b929159d16d738.json
│ │ │ ├── 3b6ad0d16f48f24f9fcbfe5290471ecde6344108f9dd5973d7824b6666835ef3.json
│ │ │ ├── 3b7b32bc0606836757173d152a23001e9cd98ae306f35fea7fd5a4cea47ad38f.json
│ │ │ ├── 3b96e64fe276ea4b3dbec9583c65426aa70b2b0172968cb6e0aabf55e32f9497.json
│ │ │ ├── 3bff34d175e1b70af1bb9b101b6d95e563d20c9b666fca6c23005d8f94312e84.json
│ │ │ ├── 3cc58466163409f7044471fb2a27413151487768ad8d178b4c1c766ebf757a48.json
│ │ │ ├── 3ce539b9c91363a808bb0f8e673b11ac9e68a2f29f26fe6aa5acf8042001d5b1.json
│ │ │ ├── 3ceeae13f0ee4e4fe2e61cd621542fa810c9a59ed72ff0bd5080994efba93692.json
│ │ │ ├── 3cfb5014bce495291b574ba4916097621b9df352df86bca634a82e76ebe57324.json
│ │ │ ├── 3d235218c3711ad77b5e65859defe5592e1c9e09a28f483ce6881106311b8a75.json
│ │ │ ├── 3d3c43d9096b687183989d7ed41915862a01d180e8a90969599d591fec1b8489.json
│ │ │ ├── 3dc78dad9273a3afe608b7c1ab7834e6fddf7833c7c452216b97f1d5514adbc1.json
│ │ │ ├── 3de708c0e47a81dc57473c1d484f9d12ae5d03a816b4ee265da4926a95cd8847.json
│ │ │ ├── 3dec1b35f0f03f6662218aa0a00caa44322dc48b1bd12d32056a8a68ad91cbbc.json
│ │ │ ├── 3e0f3aa56ce9d3b0fa6eee604905f3179790e705f2947f24df2b529998d5b588.json
│ │ │ ├── 3e6f3ade3616452dff6859262a790208b35f3ed9fd6bb2560b6f0afd89cc34ab.json
│ │ │ ├── 3e7e965b70fed9e8f85a01a6590a610cbf7ba70618238040493c711b6ff57be5.json
│ │ │ ├── 3e85d726f8264678af4b790643e62ec7480fd71c5a581a7b898d8c721cafacda.json
│ │ │ ├── 3e8babd50b8d4faa6ee6438d7f5274c48e4021a6a15f1aa30958da55f7e3eaec.json
│ │ │ ├── 3eba936eb977a1c961e0c2be712b13074395d796775e03c478fd936e91254e82.json
│ │ │ ├── 3ed6efbe5576710ae29b86b55179f0145dd1362f6fea1165b7c21d6327b77839.json
│ │ │ ├── 3ed99dfd444f0c10455e30c89ab3fcbf9b88e06914a50ed08b016b1369ad83c4.json
│ │ │ ├── 3ee6d0afb6ad1acd790dbe6eec107818a568b24c8fd33336f1d9e9c52b2b8b3c.json
│ │ │ ├── 3f0f16eece4220a551b261ccb4d1d808fb79dc6263ce0ff9d8e3d50f97c2c524.json
│ │ │ ├── 3fa2aa1a135494f5413c79f846afc40b1d1f26721ec1d58a4d5eb4b23506df9d.json
│ │ │ ├── 3fe9f5568bccdcf7bf07616a0239015945daa4d9b1b49d6be4e35a5a189927f8.json
│ │ │ ├── 402241ca2f6c2739b24cf651176624356edb78619c81017d450f3876eb193928.json
│ │ │ ├── 4078aa36a9cbcb50c445a46d69fb9126952d1c85f3d413125b034730e51b6508.json
│ │ │ ├── 407c7fa0eb5af7f95095041bcea799a9fa1ca5fd22738253f817facc1d972cd1.json
│ │ │ ├── 40985d2e0ff82751e23c442f40346889f32138a4931f7ff275d6f93aaba6b21c.json
│ │ │ ├── 40a18e2b7f5168f032cfecb3eae7a173e04ec8a5ee6f058d983ad88322777f24.json
│ │ │ ├── 40a41380ede0dd4635618b64a166f89979aa6c479a626155f36045a677abe944.json
│ │ │ ├── 4145ca17956b44d9af8a25a55e568cdda43e818e81e23381c37734cdcee2183a.json
│ │ │ ├── 41737281281293e6a3f36a028ef890f06fbb6d15d36a01d60251e4259c46e63a.json
│ │ │ ├── 4173b26415a0a66021c6c07ed6167a1caa9a297993276e64c603912a5059ec7d.json
│ │ │ ├── 41c35e2da08cd335d087f9b52f5e402845714315155d11708794a864d2995876.json
│ │ │ ├── 4209504265b6f72a6c39f3b641b317ed91744b6c02e9136bbbaf6e3ff963b42d.json
│ │ │ ├── 421ce6fd2164126f39d5017309708dfa0d7dd12acbf847211d6c73e18a73d294.json
│ │ │ ├── 4265295820dec8336bda372375b4b64b3a930f7ec3df34b59cb0bafd6305f34f.json
│ │ │ ├── 4282a67bb455d71806483364e685b51715dba6b4436281f3c89efb725349e3be.json
│ │ │ ├── 42c357284497af596ae6c9341b0c189daa31e88b25d0381a985f24203b7a5a38.json
│ │ │ ├── 42c962b4d7e9745cb63bfa0183602baa56cc845299ce1316bd0d1064482c0348.json
│ │ │ ├── 42d6592364a8060cd2277758f48f2a1c8d372ffedc872a62bb2da99438c6d831.json
│ │ │ ├── 42fb3f8511a39e5cea762d7938474eeb22fd8864742090663628c962b99fce27.json
│ │ │ ├── 42fb7697d9990d7b6bb3f1c4898b6de4353e5e24823073da304a870e5155f90a.json
│ │ │ ├── 42fc91568f646799065572381a62ffbe66be514138f194d9365148d95351bb78.json
│ │ │ ├── 430a49246c97c29bd958f383627f53ec795fd77ef818827e16691689151bf17c.json
│ │ │ ├── 436039b9bd78d795fe43610ba51875025701bd363939f36299cf66846167b173.json
│ │ │ ├── 436f384e96b2832c4d9c97fee526191d404a1d07c5fee984e7105bf38c215636.json
│ │ │ ├── 43ab59d33816f38f180ba19480d55d6c87f80e9b805d429bc1307ab0b5254c20.json
│ │ │ ├── 43b267e6780ca5bbd3a3f1ed3d40a7e25083c1b4f036c9716b79dca707dd5123.json
│ │ │ ├── 43f424df929f565d2255c6d491d4bd19d8b1e30993882dad557fbdb655c65149.json
│ │ │ ├── 447fc05a167695f50b05f47ae544cd081a23523599af63df7639d365f40bdac0.json
│ │ │ ├── 44a158fa5fc509d1d5a7fba3394d4fcd5e6bbd4bc63a704095da8be678188f5f.json
│ │ │ ├── 44a892380e524ac66cb0cbfad33bc8ef4899e57bf86a8bc6f5e8b0ba5c3a21cc.json
│ │ │ ├── 44b81b484e581b850ac2d2dc5165774ca67ae97245dcb8ed6c2e00ff5de01976.json
│ │ │ ├── 454a64d08460d26028e99324c80366c46163710158867d4f2178b3fe3b2f76a7.json
│ │ │ ├── 456673fd514b80abfa8bb13c25acb9fa640daa3a1e1b5eef7a96863a592cc7fa.json
│ │ │ ├── 45dfe46d8b1dfc461498b9d3c4d8f0dac55204c9b7b28f729efa37467c38bf43.json
│ │ │ ├── 463ab0e2f2914026cfa3c742259c43af318468eb4ef84fd4008ebb40824b7e86.json
│ │ │ ├── 463f6367d35055466e6ae9ba90c0c683a130259a5f5eab916ffa236c6ef27248.json
│ │ │ ├── 4650d201938acc678efd813c1dbec228ac4b5afae36ec723dcb9564e539886bc.json
│ │ │ ├── 465c28d63ba5cd074adb2db63d45716514a4d92e4ea10d7f464c15aff216b289.json
│ │ │ ├── 46800172f5b9ea2f710ee60cca24864b2a901c374c11a457ea72556c5aaeeba9.json
│ │ │ ├── 46aa9ba6a7cab5983175a48a453571676858d5fd0ec623b99f9e53e864734296.json
│ │ │ ├── 46f11a688f7e3e6d3644b160bbab0ea9abe9a9cd60f1962b4500362afda33be1.json
│ │ │ ├── 46f43938f3658c0cf1bad4bfcabdd8cf72687976f08224d702189c8144725b6a.json
│ │ │ ├── 473a89338a3c2779476c5954f5a92d358bbc98b9bdb8328f780395b788a62aa3.json
│ │ │ ├── 4740076b06b248d49f8f6d7e7624fb687c056d792a57cfd2e4138a898cba623b.json
│ │ │ ├── 475dd18c74125335442fb41e08c128cd7a9690b605b7d27ae156b007097c61b6.json
│ │ │ ├── 4766d7f55e90c5b811ce89a88376bb3538d94185276d53bbebb309f598f39057.json
│ │ │ ├── 47782ab5af0977ed7633dad0a2a6c4681b31d4475ac99831d44ae4844e1d67f6.json
│ │ │ ├── 477c745d2921045459b8502e67c9e4d9be1b877c4664ca74c777c084a87827ad.json
│ │ │ ├── 47a5bf0b0f9b40325cd7c6ac0c48ea8876c123a8e7a934468a68a67f22dcbbd6.json
│ │ │ ├── 48207c7a59e508ad69d682ac37d1848151725fc82a5b7b5a088819e6a858cc5a.json
│ │ │ ├── 48a79d3a2c6b879da045b11f3c3e05d3fc28b6dba27b9adae1cf91d47c03b11c.json
│ │ │ ├── 48cb7e4f789b3e1ba64b81d6910f9f4cb4b5c8b30bbd9ac8beb437c1ad817e35.json
│ │ │ ├── 48cda1e432d9f9c3ce773147998fe5621478e542632f882fee067fd068c410dd.json
│ │ │ ├── 48cde3202f97f2746d3a3749dd0037a45fb04456e3d43192784d4b7e5cb6e4c4.json
│ │ │ ├── 4917625b5334cb87a15d982b6c93b728b7d3797f3752f26bde737a0b51d3f9db.json
│ │ │ ├── 4939ff88e2872cb647b040ef390a97b85be71cf3d6fb65dbc271ccec0b377736.json
│ │ │ ├── 496f69b756e28d4e42073df60398bf9e6c7e45fb252fc64b890f7aab67d13330.json
│ │ │ ├── 4983d2d71a27e4b8a28dda27ee8e4f0058208cb2fa32aa9067ee1dc44ba2e607.json
│ │ │ ├── 498c5faf43eb2a35c10bd7134b79c7bd82bb8ced98b63a1f91dbaff14ce0ce32.json
│ │ │ ├── 49b77def0466ad21229d2404e9ccf2272789fc1e8876447b441bc400933c5f21.json
│ │ │ ├── 4a1ce541c393752effc446bdb99ea9fb1131024363482d196a969c8170e75db4.json
│ │ │ ├── 4a2a4271219b2dccee297eb4f1645cde4396fa5a1ab8663b8f19a593bde65710.json
│ │ │ ├── 4a527f09605280d0ebd2c451d6824d03e2ba97947f2572a78c46e727d58b5d50.json
│ │ │ ├── 4a5cf7e035639dced02db46f9510e15c6cdc9fed56c690e9bf1f8400c067a69d.json
│ │ │ ├── 4a672623ff7ad13a3d7664ac05f711d144a40d3e87fd1d52ab0166e0e170bdcb.json
│ │ │ ├── 4b000cdf2ebe9aa11b02e89e2c2a8ae7c66f25090b24b991a5ad6655e0867868.json
│ │ │ ├── 4b7d758e7ce50d55e8eb509e0906d435f827374c975ac24e425d63caf8856179.json
│ │ │ ├── 4b86dc1917e640e5182698ab1d5a3c56c50feee76a8e822c1d5a6dfb75c0f2c5.json
│ │ │ ├── 4b8850a4f08216a91da78226564e4b86528fa868bc943729dac1560eb93436d4.json
│ │ │ ├── 4b8c467466927f82165a998713bb6e6ef70416caeaff03f85a2de3c0a26d8f81.json
│ │ │ ├── 4bb45a63aa8965307650aed9af24f20642198493fc243584573cfde1eefb1480.json
│ │ │ ├── 4bd9686cbf81b6a27194acc59ad2140a420726a9146740ae783d3c1e4411bb0c.json
│ │ │ ├── 4bedee024b0d2542d73ee504ba4b17c51183af4dcbaa1e90a0279a5574025c49.json
│ │ │ ├── 4bfb69854afd4e4815a2dccd41b3cbc0bd753380ff23e58a66775e639c42aa6d.json
│ │ │ ├── 4c01a4ae8b53a9fa1fa7e36c1a37470e4cd70eae8f9b51aa8df3fca36d5a7a03.json
│ │ │ ├── 4c066cc184fbc2fe6198779f33089ed0f0e48ec789e9df317c77dd78048c254e.json
│ │ │ ├── 4cd1a193073181114548ec3016d17eec2cee4b36af58ba34d8a718e9628f9dc3.json
│ │ │ ├── 4ce67bc3cfaf160d645601d87f02c094098376a733a8a25dcc787103ef6e4755.json
│ │ │ ├── 4d24b5ada1f5f330c756d3b49d3895798ddae36a55552be9a4ee7c8324e9f300.json
│ │ │ ├── 4d5133d50a38473b90fdf516e3adf8516201aab56ca81cb9323b794de759955f.json
│ │ │ ├── 4d5f7df57851017e001b77776bf2e65383c2f273f8fe1169042e0fc94f0d7dc2.json
│ │ │ ├── 4d660b9a6e9fb502736aaa943074e6d96dd284c472e3576429b7863023ea5b8c.json
│ │ │ ├── 4d708fb371577c8b21ea7668b3f875505c370e8181aec6895447c329657d6f73.json
│ │ │ ├── 4d749d8c25ad190e43e17c57cec0bf2f4641c80e86242a8021af9d041488b6a7.json
│ │ │ ├── 4df785f53374dbe97f58479796d8036bc75fc43349c42af4d62f2d60f063ebcb.json
│ │ │ ├── 4e8227df667f21264aa881506eb04b590d00074941a5b760c1d7ba1fb0139b3e.json
│ │ │ ├── 4ea82013cd3f1e38b35ab621ba3fe384351d75c9763b7d9a21b5e83ae0f4584f.json
│ │ │ ├── 4ef0ca8811d51e146f437b764131c202bd9d79a503ac78b0a3b80bd547b22a89.json
│ │ │ ├── 4f46489a9532e9f6c0b8457067383e9deb599d5b51001b6f4c13f32342011b26.json
│ │ │ ├── 4fa03ffc47e6cc72d0b3e8a95e85067cdc4aaf749ec4faa563257afefd472481.json
│ │ │ ├── 4fcc47b2dde6c15aa92105e5cd22b1ca7ac78d5b330149051377430582e4c485.json
│ │ │ ├── 4fdc7045194ad7c08f23722a13
Showing preview only (721K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6974 symbols across 820 files)
FILE: benchmarking/k8s-benchmark/openai-mock-server.py
function get_models (line 27) | def get_models():
function generate_random_text (line 39) | def generate_random_text(length=50):
function list_models (line 86) | def list_models():
function chat_completions (line 93) | def chat_completions():
function handle_non_streaming_completion (line 109) | def handle_non_streaming_completion(model, messages):
function handle_streaming_completion (line 132) | def handle_streaming_completion(model, messages):
function health (line 185) | def health():
FILE: benchmarking/k8s-benchmark/scripts/generate_charts.py
function extract_setup_name (line 26) | def extract_setup_name(filename: str) -> str:
function parse_txt_file (line 80) | def parse_txt_file(filepath: str) -> list[tuple[float, float, float, flo...
function generate_charts (line 148) | def generate_charts(benchmark_dir: str = "results"):
FILE: benchmarking/vertical-scaling/locustfile.py
class ChatCompletionUser (line 12) | class ChatCompletionUser(HttpUser):
method on_start (line 20) | def on_start(self):
method chat_completion (line 28) | def chat_completion(self):
FILE: benchmarking/vertical-scaling/mock-server.py
class MockHandler (line 34) | class MockHandler(BaseHTTPRequestHandler):
method do_POST (line 35) | def do_POST(self): # noqa: N802
method do_GET (line 47) | def do_GET(self): # noqa: N802
method log_message (line 57) | def log_message(self, format, *args):
FILE: client-sdks/openapi/build_hierarchy.py
function build_hierarchy_from_tags (line 39) | def build_hierarchy_from_tags(tags: list[str], hierarchy: dict) -> None:
function get_children_from_hierarchy (line 51) | def get_children_from_hierarchy(tag: str, hierarchy: dict) -> list[str]:
function convert_oneof_const_to_enum (line 56) | def convert_oneof_const_to_enum(schema: dict) -> dict:
function fix_oneof_const_schemas (line 83) | def fix_oneof_const_schemas(obj: dict[str, Any]) -> dict[str, Any]:
function remove_defaults_from_required (line 98) | def remove_defaults_from_required(spec: dict[str, Any]) -> int:
function mark_unwrappable_list_responses (line 130) | def mark_unwrappable_list_responses(spec: dict[str, Any]) -> int:
function mark_streaming_operations (line 165) | def mark_streaming_operations(spec: dict[str, Any]) -> int:
function process_openapi (line 202) | def process_openapi(input_file: str, output_file: str, hierarchy_file: s...
function main (line 351) | def main():
FILE: client-sdks/openapi/merge_stainless_config.py
function parse_endpoint (line 49) | def parse_endpoint(endpoint_str: str) -> tuple[str, str]:
function extract_resources (line 67) | def extract_resources(stainless_config: dict[str, Any]) -> tuple[dict[st...
function enrich_openapi_spec (line 175) | def enrich_openapi_spec(
function get_nested_value (line 259) | def get_nested_value(obj: Any, path: str) -> tuple[Any, Any, str]:
function apply_patches (line 289) | def apply_patches(openapi_spec: dict[str, Any], patch_config: dict[str, ...
function main (line 376) | def main():
FILE: client-sdks/openapi/patch_hierarchy.py
function to_snake_case (line 35) | def to_snake_case(name: str) -> str:
function to_pascal_case (line 42) | def to_pascal_case(name: str) -> str:
function extract_parent_child_pairs (line 48) | def extract_parent_child_pairs(hierarchy: dict, parent: str | None = Non...
function patch_api_file (line 59) | def patch_api_file(api_file: Path, child_tag: str, package_name: str) ->...
function patch_optional_import (line 120) | def patch_optional_import(api_file: Path) -> bool:
function patch_llama_stack_client (line 154) | def patch_llama_stack_client(client_file: Path, pairs: list[tuple[str, s...
function patch_proxy_methods (line 215) | def patch_proxy_methods(api_dir: Path, proxy_methods: list[dict]) -> int:
function patch_apis (line 273) | def patch_apis(hierarchy_file: str, sdk_dir: str, package_name: str = "l...
function main (line 323) | def main():
FILE: client-sdks/openapi/templates/python/lib/_utils.py
function pascal_to_snake_case (line 10) | def pascal_to_snake_case(name: str) -> str:
FILE: client-sdks/openapi/templates/python/lib/agents/agent.py
class ToolResponsePayload (line 31) | class ToolResponsePayload(TypedDict, total=False):
class ToolUtils (line 41) | class ToolUtils:
method coerce_tool_content (line 43) | def coerce_tool_content(content: Any) -> str:
method parse_tool_arguments (line 56) | def parse_tool_arguments(arguments: Any) -> dict[str, Any]:
method normalize_tool_response (line 75) | def normalize_tool_response(tool_response: Any) -> ToolResponsePayload:
class Agent (line 101) | class Agent:
method __init__ (line 102) | def __init__(
method create_session (line 130) | def create_session(self, session_name: str) -> str:
method _run_tool_calls (line 138) | def _run_tool_calls(self, tool_calls: list[ToolCall]) -> list[ToolResp...
method _run_single_tool (line 145) | def _run_single_tool(self, tool_call: ToolCall) -> Any:
method create_turn (line 169) | def create_turn(
method _create_turn_streaming (line 191) | def _create_turn_streaming(
class AsyncAgent (line 286) | class AsyncAgent:
method __init__ (line 287) | def __init__(
method create_session (line 316) | async def create_session(self, session_name: str) -> str:
method create_turn (line 324) | async def create_turn(
method _run_tool_calls (line 340) | async def _run_tool_calls(self, tool_calls: list[ToolCall]) -> list[To...
method _run_single_tool (line 347) | async def _run_single_tool(self, tool_call: ToolCall) -> Any:
method _create_turn_streaming (line 371) | async def _create_turn_streaming(
class AgentUtils (line 466) | class AgentUtils:
method get_client_tools (line 468) | def get_client_tools(
method get_tool_calls (line 479) | def get_tool_calls(chunk: AgentStreamChunk, tool_parser: ToolParser | ...
method get_turn_id (line 505) | def get_turn_id(chunk: AgentStreamChunk) -> str | None:
method normalize_tools (line 509) | def normalize_tools(
FILE: client-sdks/openapi/templates/python/lib/agents/client_tool.py
class JSONSchema (line 24) | class JSONSchema(TypedDict, total=False):
class ClientTool (line 30) | class ClientTool:
method get_name (line 45) | def get_name(self) -> str:
method get_description (line 49) | def get_description(self) -> str:
method get_input_schema (line 53) | def get_input_schema(self) -> JSONSchema:
method get_instruction_string (line 56) | def get_instruction_string(self) -> str:
method get_tool_definition (line 59) | def get_tool_definition(self) -> ToolDefinition:
method run (line 67) | def run(
method async_run (line 95) | async def async_run(
method run_impl (line 123) | def run_impl(self, **kwargs) -> Any:
method async_run_impl (line 132) | def async_run_impl(self, **kwargs):
function _python_type_to_json_schema_type (line 136) | def _python_type_to_json_schema_type(type_hint: Any) -> str:
function client_tool (line 167) | def client_tool(func: Callable) -> ClientTool:
FILE: client-sdks/openapi/templates/python/lib/agents/event_logger.py
class AgentEventLogger (line 31) | class AgentEventLogger:
method log (line 48) | def log(self, event_generator: Iterator[AgentStreamChunk]) -> Iterator...
FILE: client-sdks/openapi/templates/python/lib/agents/event_synthesizer.py
class _ToolCallState (line 43) | class _ToolCallState:
method update (line 50) | def update(self, *, delta: str | None = None, final: str | None = None...
method as_tool_call (line 56) | def as_tool_call(self) -> ToolCall:
class TurnEventSynthesizer (line 61) | class TurnEventSynthesizer:
method __init__ (line 64) | def __init__(self, session_id: str, turn_id: str):
method _next_step_id (line 83) | def _next_step_id(self) -> str:
method _maybe_emit_turn_started (line 88) | def _maybe_emit_turn_started(self) -> Iterator[AgentEvent]:
method _start_inference_step (line 93) | def _start_inference_step(
method _complete_inference_step (line 106) | def _complete_inference_step(self, *, stop_reason: str, response_id: s...
method _start_tool_execution_step (line 142) | def _start_tool_execution_step(self, call_state: _ToolCallState) -> It...
method _complete_tool_execution_step (line 163) | def _complete_tool_execution_step(self, call_state: _ToolCallState) ->...
method _coerce_arguments (line 182) | def _coerce_arguments(payload: Any) -> str | None:
method _register_tool_call (line 192) | def _register_tool_call(
method _classify_tool_type (line 212) | def _classify_tool_type(self, tool_name: str) -> str:
method process_raw_stream (line 236) | def process_raw_stream(self, events: Iterable[Any]) -> Iterator[AgentE...
method _handle_output_item_added (line 311) | def _handle_output_item_added(self, item: Any) -> Iterator[AgentEvent]:
method _handle_output_item_delta (line 362) | def _handle_output_item_delta(self, delta: Any) -> Iterator[AgentEvent]:
method _handle_output_item_done (line 401) | def _handle_output_item_done(self, item: Any) -> Iterator[AgentEvent]:
method finish_turn (line 438) | def finish_turn(self) -> Iterator[AgentEvent]:
FILE: client-sdks/openapi/templates/python/lib/agents/react/agent.py
function _tool_definition_from_mapping (line 20) | def _tool_definition_from_mapping(tool: Mapping[str, Any]) -> dict[str, ...
function _collect_tool_definitions (line 31) | def _collect_tool_definitions(
function get_default_react_instructions (line 47) | def get_default_react_instructions(tool_defs: list[dict[str, Any]]) -> str:
class ReActAgent (line 61) | class ReActAgent(Agent):
method __init__ (line 62) | def __init__(
FILE: client-sdks/openapi/templates/python/lib/agents/react/tool_parser.py
class Param (line 16) | class Param(BaseModel):
class Action (line 21) | class Action(BaseModel):
class ReActOutput (line 26) | class ReActOutput(BaseModel):
class ReActToolParser (line 32) | class ReActToolParser(ToolParser):
method get_tool_calls (line 33) | def get_tool_calls(self, output_message: CompletionMessage) -> list[To...
FILE: client-sdks/openapi/templates/python/lib/agents/tool_parser.py
class ToolParser (line 12) | class ToolParser:
method get_tool_calls (line 41) | def get_tool_calls(self, output_message: CompletionMessage) -> list[To...
FILE: client-sdks/openapi/templates/python/lib/agents/turn_events.py
class TurnStarted (line 49) | class TurnStarted:
class TurnCompleted (line 62) | class TurnCompleted:
class TurnFailed (line 78) | class TurnFailed:
class StepStarted (line 94) | class StepStarted:
class TextDelta (line 113) | class TextDelta:
class ToolCallIssuedDelta (line 124) | class ToolCallIssuedDelta:
class ToolCallDelta (line 141) | class ToolCallDelta:
class ToolCallCompletedDelta (line 154) | class ToolCallCompletedDelta:
class StepProgress (line 176) | class StepProgress:
class InferenceStepResult (line 194) | class InferenceStepResult:
class ToolExecutionStepResult (line 212) | class ToolExecutionStepResult:
class StepCompleted (line 229) | class StepCompleted:
class AgentStreamChunk (line 251) | class AgentStreamChunk:
FILE: client-sdks/openapi/templates/python/lib/agents/types.py
class ToolCall (line 16) | class ToolCall:
class ToolResponse (line 25) | class ToolResponse:
class CompletionMessage (line 35) | class CompletionMessage:
class ToolDefinition (line 47) | class ToolDefinition(TypedDict, total=False):
class FunctionTool (line 56) | class FunctionTool(Protocol):
method get_name (line 59) | def get_name(self) -> str: ...
method get_description (line 61) | def get_description(self) -> str: ...
method get_input_schema (line 63) | def get_input_schema(self) -> dict[str, Any]: ...
FILE: client-sdks/openapi/templates/python/lib/cli/common/utils.py
function create_bar_chart (line 13) | def create_bar_chart(data, labels, title=""):
function handle_client_errors (line 36) | def handle_client_errors(operation_name):
FILE: client-sdks/openapi/templates/python/lib/cli/configure.py
function get_config (line 18) | def get_config():
function configure (line 30) | def configure(endpoint: str | None, api_key: str | None):
FILE: client-sdks/openapi/templates/python/lib/cli/constants.py
function get_config_file_path (line 13) | def get_config_file_path():
FILE: client-sdks/openapi/templates/python/lib/cli/datasets/datasets.py
function datasets (line 15) | def datasets():
FILE: client-sdks/openapi/templates/python/lib/cli/datasets/list.py
function list_datasets (line 18) | def list_datasets(ctx):
FILE: client-sdks/openapi/templates/python/lib/cli/datasets/register.py
function data_url_from_file (line 18) | def data_url_from_file(file_path: str) -> str:
function register (line 48) | def register(
FILE: client-sdks/openapi/templates/python/lib/cli/datasets/unregister.py
function unregister (line 16) | def unregister(ctx, dataset_id: str):
FILE: client-sdks/openapi/templates/python/lib/cli/eval/eval.py
function eval (line 16) | def eval():
FILE: client-sdks/openapi/templates/python/lib/cli/eval/run_benchmark.py
function run_benchmark (line 81) | def run_benchmark(
FILE: client-sdks/openapi/templates/python/lib/cli/eval/run_scoring.py
function run_scoring (line 55) | def run_scoring(
FILE: client-sdks/openapi/templates/python/lib/cli/eval/utils.py
function aggregate_categorical_count (line 11) | def aggregate_categorical_count(
function aggregate_average (line 19) | def aggregate_average(
function aggregate_weighted_average (line 28) | def aggregate_weighted_average(
function aggregate_median (line 41) | def aggregate_median(
function aggregate_accuracy (line 49) | def aggregate_accuracy(
FILE: client-sdks/openapi/templates/python/lib/cli/eval_tasks/eval_tasks.py
function eval_tasks (line 19) | def eval_tasks():
function register (line 33) | def register(
FILE: client-sdks/openapi/templates/python/lib/cli/eval_tasks/list.py
function list_eval_tasks (line 18) | def list_eval_tasks(ctx):
FILE: client-sdks/openapi/templates/python/lib/cli/inference/inference.py
function inference (line 18) | def inference():
function chat_completion (line 30) | def chat_completion(ctx, message: str, stream: bool, session: bool, mode...
function chat_session (line 62) | def chat_session(client, model_id: str | None, messages: list[dict[str, ...
FILE: client-sdks/openapi/templates/python/lib/cli/inspect/inspect.py
function inspect (line 14) | def inspect():
FILE: client-sdks/openapi/templates/python/lib/cli/inspect/version.py
function inspect_version (line 17) | def inspect_version(ctx):
FILE: client-sdks/openapi/templates/python/lib/cli/llama_stack_client.py
function _get_version (line 16) | def _get_version():
function llama_stack_client (line 48) | def llama_stack_client(ctx, endpoint: str, api_key: str, config: str | N...
function main (line 108) | def main():
FILE: client-sdks/openapi/templates/python/lib/cli/models/models.py
function models (line 18) | def models():
function list_models (line 26) | def list_models(ctx):
function get_model (line 65) | def get_model(ctx, model_id: str):
class JSONParamType (line 89) | class JSONParamType(click.ParamType):
method convert (line 92) | def convert(self, value, param, ctx):
function register_model (line 108) | def register_model(
function unregister_model (line 136) | def unregister_model(ctx, model_id: str):
FILE: client-sdks/openapi/templates/python/lib/cli/post_training/post_training.py
function post_training (line 18) | def post_training():
function supervised_fine_tune (line 31) | def supervised_fine_tune(
function get_training_jobs (line 60) | def get_training_jobs(ctx):
function get_training_job_status (line 74) | def get_training_job_status(ctx, job_uuid: str):
function get_training_job_artifacts (line 88) | def get_training_job_artifacts(ctx, job_uuid: str):
function cancel_training_job (line 102) | def cancel_training_job(ctx, job_uuid: str):
FILE: client-sdks/openapi/templates/python/lib/cli/providers/inspect.py
function inspect_provider (line 18) | def inspect_provider(ctx, provider_id):
FILE: client-sdks/openapi/templates/python/lib/cli/providers/list.py
function list_providers (line 18) | def list_providers(ctx):
FILE: client-sdks/openapi/templates/python/lib/cli/providers/providers.py
function providers (line 15) | def providers():
FILE: client-sdks/openapi/templates/python/lib/cli/scoring_functions/list.py
function list_scoring_functions (line 18) | def list_scoring_functions(ctx):
FILE: client-sdks/openapi/templates/python/lib/cli/scoring_functions/scoring_functions.py
function scoring_functions (line 17) | def scoring_functions():
function register (line 30) | def register(
FILE: client-sdks/openapi/templates/python/lib/cli/shields/shields.py
function shields (line 18) | def shields():
function list (line 26) | def list(ctx):
function register (line 69) | def register(
FILE: client-sdks/openapi/templates/python/lib/cli/toolgroups/toolgroups.py
function toolgroups (line 19) | def toolgroups():
function list_toolgroups (line 27) | def list_toolgroups(ctx):
function get_toolgroup (line 49) | def get_toolgroup(ctx, toolgroup_id: str):
function register_toolgroup (line 86) | def register_toolgroup(
function unregister_toolgroup (line 116) | def unregister_toolgroup(ctx, toolgroup_id: str):
FILE: client-sdks/openapi/templates/python/lib/cli/vector_stores/vector_stores.py
function vector_stores (line 18) | def vector_stores():
function list (line 26) | def list(ctx):
function register (line 87) | def register(
function unregister (line 118) | def unregister(ctx, vector_db_id: str):
FILE: client-sdks/openapi/templates/python/lib/inference/event_logger.py
class InferenceStreamPrintableEvent (line 13) | class InferenceStreamPrintableEvent:
method __init__ (line 14) | def __init__(
method print (line 24) | def print(self, flush=True):
class InferenceStreamLogEventPrinter (line 28) | class InferenceStreamLogEventPrinter:
method __init__ (line 29) | def __init__(self):
method yield_printable_events (line 32) | def yield_printable_events(
method _handle_chat_completion_chunk (line 38) | def _handle_chat_completion_chunk(
class EventLogger (line 54) | class EventLogger:
method log (line 55) | def log(self, event_generator):
FILE: client-sdks/openapi/templates/python/lib/inference/utils.py
class MessageAttachment (line 11) | class MessageAttachment:
method base64 (line 14) | def base64(cls, file_path: str) -> str:
method data_url (line 20) | def data_url(cls, media_type: str, file_path: str) -> str:
FILE: client-sdks/openapi/templates/python/lib/stream_printer.py
class EventStreamPrinter (line 11) | class EventStreamPrinter:
method gen (line 13) | def gen(cls, event_generator):
FILE: client-sdks/openapi/templates/python/lib/tools/mcp_oauth.py
class McpOAuthHelper (line 26) | class McpOAuthHelper:
method __init__ (line 29) | def __init__(self, server_url):
method discover_auth_endpoints (line 64) | def discover_auth_endpoints(self):
method register_client (line 78) | def register_client(self, registration_endpoint):
method generate_pkce_values (line 105) | def generate_pkce_values(self):
method stop_server (line 119) | def stop_server(self):
method start_callback_server (line 124) | def start_callback_server(self):
method exchange_code_for_token (line 139) | def exchange_code_for_token(self, auth_code, token_endpoint):
method initiate_auth_flow (line 163) | def initiate_auth_flow(self):
function get_base_url (line 210) | def get_base_url(url):
function find_available_port (line 215) | def find_available_port(start_port, end_port):
class CallbackServer (line 227) | class CallbackServer(HTTPServer):
class OAuthCallbackHandler (line 228) | class OAuthCallbackHandler(BaseHTTPRequestHandler):
method do_GET (line 229) | def do_GET(self): # noqa: N802
method log_message (line 262) | def log_message(self):
method __init__ (line 266) | def __init__(self, server_address, auth_code_callback):
function get_oauth_token_for_mcp_server (line 271) | def get_oauth_token_for_mcp_server(url: str) -> str | None:
function run_main (line 276) | async def run_main(url: str):
function main (line 298) | def main(url: str):
FILE: conftest.py
function pytest_configure (line 18) | def pytest_configure(config):
FILE: docs/blog/self_improving_agent.py
function fn_to_tool_schema (line 43) | def fn_to_tool_schema(fn) -> dict:
class ScoreLedger (line 94) | class ScoreLedger:
method __init__ (line 95) | def __init__(self, db_path: str = "prompt_optimizer.db"):
method log (line 107) | def log(self, prompt_id: str, version: int, score: float, reasoning: s...
method history (line 114) | def history(self, prompt_id: str) -> list[dict]:
class ResearchAgent (line 134) | class ResearchAgent:
method __init__ (line 135) | def __init__(
method from_files (line 166) | def from_files(
method _read_local_file (line 214) | def _read_local_file(
method _index_document (line 221) | def _index_document(
method _list_local_files (line 240) | def _list_local_files(
method _tool_schemas (line 253) | def _tool_schemas(self) -> list[dict]:
method _run_query (line 260) | def _run_query(self, question: str, system_prompt: str) -> str:
method research (line 290) | def research(self, question: str) -> str:
method evaluate_self (line 309) | def evaluate_self(self) -> dict:
method improve_self (line 344) | def improve_self(self) -> dict:
method optimize (line 368) | def optimize(self, max_iterations: int = 5):
method best_prompt (line 377) | def best_prompt(self) -> dict:
FILE: docs/scripts/sync-files.js
function getRequestedFiles (line 10) | function getRequestedFiles() {
function trackFileUsage (line 26) | function trackFileUsage(filePath) {
function filterContent (line 51) | function filterContent(content, filePath) {
function syncFile (line 102) | function syncFile(filePath) {
FILE: docs/src/components/CodeFromFile.jsx
function CodeFromFile (line 4) | function CodeFromFile({
function getLanguageFromExtension (line 69) | function getLanguageFromExtension(filename) {
FILE: docs/src/components/HomepageFeatures/index.js
function Feature (line 38) | function Feature({Svg, title, description}) {
function HomepageFeatures (line 52) | function HomepageFeatures() {
FILE: docs/src/pages/index.js
function HomepageHeader (line 8) | function HomepageHeader() {
function QuickStart (line 41) | function QuickStart() {
function Ecosystem (line 116) | function Ecosystem() {
function CommunityLinks (line 170) | function CommunityLinks() {
function Home (line 209) | function Home() {
FILE: scripts/cleanup_recordings.py
function _unique_configs (line 47) | def _unique_configs(entries):
function iter_all_ci_configs (line 59) | def iter_all_ci_configs() -> list[dict[str, str]]:
function collect_ci_tests (line 67) | def collect_ci_tests():
function get_base_test_id (line 139) | def get_base_test_id(test_id: str) -> str:
function find_all_recordings (line 149) | def find_all_recordings():
function analyze_recordings (line 154) | def analyze_recordings(ci_test_ids, dry_run=True):
function main (line 233) | def main():
FILE: scripts/diagnose_recordings.py
function find_hash (line 43) | def find_hash(hash_value: str, base_dir: Path | None = None, test_id: st...
function show_recording (line 143) | def show_recording(file_path: Path):
function list_test_recordings (line 196) | def list_test_recordings(test_id: str, base_dir: Path | None = None):
function explain_paths (line 244) | def explain_paths(test_id: str | None = None, base_dir: Path | None = No...
function compute_hash (line 281) | def compute_hash(endpoint: str, method: str, body_json: str, test_id: st...
function main (line 315) | def main():
FILE: scripts/distro_codegen.py
class ChangedPathTracker (line 21) | class ChangedPathTracker:
method __init__ (line 24) | def __init__(self):
method add_paths (line 27) | def add_paths(self, *paths):
method changed_paths (line 33) | def changed_paths(self):
function find_distro_dirs (line 37) | def find_distro_dirs(distro_dir: Path) -> Iterable[Path]:
function process_distro (line 45) | def process_distro(distro_dir: Path, progress, change_tracker: ChangedPa...
function check_for_changes (line 73) | def check_for_changes(change_tracker: ChangedPathTracker) -> bool:
function pre_import_distros (line 88) | def pre_import_distros(distro_dirs: list[Path]) -> None:
function main (line 95) | def main():
FILE: scripts/gen-ci-docs.py
function parse_workflow_file (line 15) | def parse_workflow_file(file_path):
function generate_ci_docs (line 30) | def generate_ci_docs():
FILE: scripts/generate_ci_matrix.py
function generate_matrix (line 27) | def generate_matrix(schedule="", test_setup="", matrix_key="default"):
FILE: scripts/generate_openai_coverage_docs.py
function _extract_property_name (line 31) | def _extract_property_name(property_path: str) -> str | None:
function _load_test_coverage (line 46) | def _load_test_coverage() -> tuple[set[str], float | None, dict[str, tup...
function generate_docs (line 71) | def generate_docs(
function main (line 293) | def main():
FILE: scripts/generate_prompt_format.py
function run_main (line 26) | def run_main(
function main (line 63) | def main():
FILE: scripts/get_setup_env.py
function get_setup_config (line 19) | def get_setup_config(setup_name, suite_name=None):
function main (line 50) | def main():
FILE: scripts/normalize_recordings.py
function normalize_response_data (line 24) | def normalize_response_data(data: dict, request_hash: str) -> dict:
function normalize_recording_file (line 53) | def normalize_recording_file(file_path: Path, dry_run: bool = False) -> ...
function main (line 92) | def main():
FILE: scripts/openai_coverage.py
function _load_spec (line 35) | def _load_spec(spec_path: Path) -> dict[str, Any]:
function _count_schema_properties (line 43) | def _count_schema_properties(schema: dict[str, Any], spec: dict[str, Any...
function _count_endpoint_properties (line 93) | def _count_endpoint_properties(spec: dict[str, Any], paths: list[str]) -...
function _load_endpoint_categories (line 136) | def _load_endpoint_categories(openai_spec: Path) -> dict[str, list[str]]:
function _categorize_path (line 160) | def _categorize_path(path: str, categories: dict[str, list[str]]) -> str:
function _check_oasdiff_installed (line 170) | def _check_oasdiff_installed() -> bool:
function _run_oasdiff (line 175) | def _run_oasdiff(openai_spec: Path, llama_spec: Path) -> dict[str, Any]:
function _extract_issues (line 206) | def _extract_issues(obj: Any, path: str = "") -> dict[str, Any]:
function _merge_diffs (line 312) | def _merge_diffs(base_diff: dict[str, Any], overlay_diff: dict[str, Any]...
function calculate_coverage (line 345) | def calculate_coverage(
function print_summary (line 515) | def print_summary(report: dict[str, Any]) -> None:
function main (line 562) | def main():
FILE: scripts/openapi_generator/__init__.py
function __getattr__ (line 17) | def __getattr__(name: str):
FILE: scripts/openapi_generator/app.py
function _get_protocol_method (line 23) | def _get_protocol_method(api: Api, method_name: str) -> Any | None:
function create_llama_stack_app (line 65) | def create_llama_stack_app() -> FastAPI:
FILE: scripts/openapi_generator/endpoints.py
function _to_pascal_case (line 33) | def _to_pascal_case(segment: str) -> str:
function _compose_request_model_name (line 38) | def _compose_request_model_name(api: Api, method_name: str, variant: str...
function _extract_path_parameters (line 53) | def _extract_path_parameters(path: str) -> list[dict[str, Any]]:
function _create_endpoint_with_request_model (line 68) | def _create_endpoint_with_request_model(
function _build_field_definitions (line 81) | def _build_field_definitions(query_parameters: list[QueryParameter], use...
function _create_dynamic_request_model (line 127) | def _create_dynamic_request_model(
function _build_signature_params (line 148) | def _build_signature_params(
function _extract_operation_description_from_docstring (line 167) | def _extract_operation_description_from_docstring(api: Api, method_name:...
function _extract_response_description_from_docstring (line 186) | def _extract_response_description_from_docstring(webmethod, response_mod...
function _get_tag_from_api (line 198) | def _get_tag_from_api(api: Api) -> str:
function _is_file_or_form_param (line 203) | def _is_file_or_form_param(param_type: Any) -> bool:
function _is_extra_body_field (line 218) | def _is_extra_body_field(metadata_item: Any) -> bool:
function _should_embed_parameter (line 225) | def _should_embed_parameter(param_type: Any) -> bool:
function _is_async_iterator_type (line 238) | def _is_async_iterator_type(type_obj: Any) -> bool:
function _extract_response_models_from_union (line 251) | def _extract_response_models_from_union(union_type: Any) -> tuple[type |...
function _find_models_for_endpoint (line 286) | def _find_models_for_endpoint(
function _create_fastapi_endpoint (line 454) | def _create_fastapi_endpoint(app: FastAPI, route, webmethod, api: Api):
FILE: scripts/openapi_generator/main.py
function generate_openapi_spec (line 22) | def generate_openapi_spec(output_dir: str) -> dict[str, Any]:
function main (line 213) | def main():
FILE: scripts/openapi_generator/schema_collection.py
function _ensure_components_schemas (line 14) | def _ensure_components_schemas(openapi_schema: dict[str, Any]) -> None:
function _extract_and_fix_defs (line 22) | def _extract_and_fix_defs(schema: dict[str, Any], openapi_schema: dict[s...
function _ensure_json_schema_types_included (line 49) | def _ensure_json_schema_types_included(openapi_schema: dict[str, Any]) -...
FILE: scripts/openapi_generator/schema_filtering.py
function _get_all_json_schema_type_names (line 21) | def _get_all_json_schema_type_names() -> set[str]:
function _get_explicit_schema_names (line 31) | def _get_explicit_schema_names(openapi_schema: dict[str, Any]) -> set[str]:
function _find_schema_refs_in_object (line 38) | def _find_schema_refs_in_object(obj: Any) -> set[str]:
function _add_transitive_references (line 58) | def _add_transitive_references(
function _find_schemas_referenced_by_paths (line 87) | def _find_schemas_referenced_by_paths(filtered_paths: dict[str, Any], op...
function _filter_schemas_by_references (line 134) | def _filter_schemas_by_references(
function _path_starts_with_version (line 159) | def _path_starts_with_version(path: str, version: str) -> bool:
function _is_stable_path (line 164) | def _is_stable_path(path: str) -> bool:
function _is_experimental_path (line 173) | def _is_experimental_path(path: str) -> bool:
function _is_path_deprecated (line 180) | def _is_path_deprecated(path_item: dict[str, Any]) -> bool:
function _filter_schema_by_version (line 190) | def _filter_schema_by_version(
function _filter_deprecated_schema (line 240) | def _filter_deprecated_schema(openapi_schema: dict[str, Any]) -> dict[st...
function _filter_combined_schema (line 261) | def _filter_combined_schema(openapi_schema: dict[str, Any]) -> dict[str,...
FILE: scripts/openapi_generator/schema_transforms.py
function _fix_ref_references (line 33) | def _fix_ref_references(openapi_schema: dict[str, Any]) -> dict[str, Any]:
function _normalize_empty_responses (line 54) | def _normalize_empty_responses(openapi_schema: dict[str, Any]) -> dict[s...
function _eliminate_defs_section (line 81) | def _eliminate_defs_section(openapi_schema: dict[str, Any]) -> dict[str,...
function _add_error_responses (line 142) | def _add_error_responses(openapi_schema: dict[str, Any]) -> dict[str, Any]:
function _fix_path_parameters (line 207) | def _fix_path_parameters(openapi_schema: dict[str, Any]) -> dict[str, Any]:
function _get_schema_title (line 237) | def _get_schema_title(item: dict[str, Any]) -> str | None:
function _add_titles_to_unions (line 285) | def _add_titles_to_unions(obj: Any, parent_key: str | None = None) -> None:
function _convert_anyof_const_to_enum (line 361) | def _convert_anyof_const_to_enum(obj: Any) -> None:
function _fix_schema_recursive (line 410) | def _fix_schema_recursive(obj: Any) -> None:
function _clean_description (line 425) | def _clean_description(description: str) -> str:
function _clean_schema_descriptions (line 455) | def _clean_schema_descriptions(openapi_schema: dict[str, Any]) -> dict[s...
function _add_extra_body_params_extension (line 468) | def _add_extra_body_params_extension(openapi_schema: dict[str, Any]) -> ...
function _remove_query_params_from_body_endpoints (line 560) | def _remove_query_params_from_body_endpoints(openapi_schema: dict[str, A...
function _remove_request_bodies_from_get_endpoints (line 601) | def _remove_request_bodies_from_get_endpoints(openapi_schema: dict[str, ...
function _extract_duplicate_union_types (line 689) | def _extract_duplicate_union_types(openapi_schema: dict[str, Any]) -> di...
function _dedupe_create_response_request_input_union_for_stainless (line 820) | def _dedupe_create_response_request_input_union_for_stainless(openapi_sc...
function _convert_multiline_strings_to_literal (line 904) | def _convert_multiline_strings_to_literal(obj: Any) -> Any:
function _write_yaml_file (line 921) | def _write_yaml_file(file_path: Path, schema: dict[str, Any]) -> None:
function _apply_legacy_sorting (line 949) | def _apply_legacy_sorting(openapi_schema: dict[str, Any]) -> dict[str, A...
function _remove_type_object_from_openai_schemas (line 1011) | def _remove_type_object_from_openai_schemas(openapi_schema: dict[str, An...
function _fix_schema_issues (line 1026) | def _fix_schema_issues(openapi_schema: dict[str, Any]) -> dict[str, Any]:
function validate_openapi_schema (line 1039) | def validate_openapi_schema(schema: dict[str, Any], schema_name: str = "...
FILE: scripts/openapi_generator/stainless_config/generate_config.py
class Endpoint (line 593) | class Endpoint:
method from_config (line 599) | def from_config(cls, value: Any) -> Endpoint:
method _from_parts (line 612) | def _from_parts(cls, method: str, path: str) -> Endpoint:
method to_config (line 621) | def to_config(self) -> Any:
method route_key (line 628) | def route_key(self) -> str:
class Resource (line 633) | class Resource:
method from_dict (line 639) | def from_dict(cls, data: dict[str, Any]) -> Resource:
method to_config (line 645) | def to_config(self) -> dict[str, Any]:
method collect_endpoint_paths (line 655) | def collect_endpoint_paths(self) -> set[str]:
method iter_endpoints (line 661) | def iter_endpoints(self, prefix: str) -> Iterator[tuple[str, str]]:
function _load_openapi_paths (line 673) | def _load_openapi_paths(openapi_path: Path) -> set[str]:
class StainlessConfig (line 687) | class StainlessConfig:
method make (line 702) | def make(cls) -> StainlessConfig:
method referenced_paths (line 718) | def referenced_paths(self) -> set[str]:
method readme_endpoint_paths (line 725) | def readme_endpoint_paths(self) -> set[str]:
method endpoint_map (line 738) | def endpoint_map(self) -> dict[str, list[str]]:
method validate_unique_endpoints (line 745) | def validate_unique_endpoints(self) -> None:
method validate_readme_endpoints (line 757) | def validate_readme_endpoints(self) -> None:
method to_dict (line 766) | def to_dict(self) -> dict[str, Any]:
method validate_against_openapi (line 775) | def validate_against_openapi(self, openapi_path: Path) -> None:
method validate (line 785) | def validate(self, openapi_path: Path | None = None) -> None:
function build_config (line 792) | def build_config() -> dict[str, Any]:
function write_config (line 796) | def write_config(repo_root: Path, openapi_path: Path | None = None) -> P...
function main (line 806) | def main() -> None:
FILE: scripts/openapi_generator/state.py
function register_dynamic_model (line 26) | def register_dynamic_model(name: str, model: type) -> type:
function reset_generator_state (line 37) | def reset_generator_state() -> None:
FILE: scripts/provider_codegen.py
function get_api_docstring (line 23) | def get_api_docstring(api_name: str) -> str | None:
class ChangedPathTracker (line 40) | class ChangedPathTracker:
method __init__ (line 43) | def __init__(self):
method add_paths (line 46) | def add_paths(self, *paths):
method changed_paths (line 52) | def changed_paths(self):
function is_pydantic_model (line 56) | def is_pydantic_model(annotation: Any) -> bool:
function get_nested_type_fields (line 63) | def get_nested_type_fields(type_class: Any, visited: set[str] | None = N...
function extract_type_annotation (line 141) | def extract_type_annotation(annotation: Any, expand_models: bool = False...
function get_config_class_info (line 180) | def get_config_class_info(config_class_path: str) -> dict[str, Any]:
function generate_provider_docs (line 315) | def generate_provider_docs(progress, provider_spec: Any, api_name: str) ...
function generate_index_docs (line 602) | def generate_index_docs(api_name: str, api_docstring: str | None, provid...
function process_provider_registry (line 643) | def process_provider_registry(progress, change_tracker: ChangedPathTrack...
function check_for_changes (line 689) | def check_for_changes(change_tracker: ChangedPathTracker) -> bool:
function main (line 714) | def main():
FILE: scripts/provider_compat_matrix.py
function _file_to_category (line 50) | def _file_to_category(filename: str) -> str:
function _discover_categories (line 60) | def _discover_categories() -> list[str]:
function _test_name_to_feature (line 67) | def _test_name_to_feature(test_name: str) -> str:
class ProviderResults (line 83) | class ProviderResults:
function _extract_provider_from_test_id (line 106) | def _extract_provider_from_test_id(test_id: str) -> str | None:
function _extract_test_name (line 114) | def _extract_test_name(test_id: str) -> str | None:
function _extract_test_file (line 123) | def _extract_test_file(test_id: str) -> str | None:
function scan_recordings (line 130) | def scan_recordings(recordings_dir: Path) -> dict[str, ProviderResults]:
function _collect_all_categories (line 209) | def _collect_all_categories(provider_map: dict[str, ProviderResults]) ->...
function _compute_summary (line 226) | def _compute_summary(provider_map: dict[str, ProviderResults]) -> dict:
function _load_provider_names (line 257) | def _load_provider_names() -> dict[str, str]:
function _pname (line 278) | def _pname(provider: str) -> str:
function _icon (line 284) | def _icon(outcome: str | None) -> str:
function generate_matrix_markdown (line 290) | def generate_matrix_markdown(provider_map: dict[str, ProviderResults]) -...
function main (line 375) | def main():
FILE: scripts/responses_test_coverage.py
function _load_spec (line 43) | def _load_spec(path: Path) -> dict[str, Any]:
function _resolve_ref (line 50) | def _resolve_ref(ref: str, spec: dict[str, Any]) -> dict[str, Any]:
function _collect_properties (line 58) | def _collect_properties(
function _get_type_value (line 83) | def _get_type_value(schema: dict[str, Any], spec: dict[str, Any]) -> str...
function _extract_oneof_types (line 99) | def _extract_oneof_types(ref: str, spec: dict[str, Any]) -> list[str]:
function _extract_routes_from_file (line 118) | def _extract_routes_from_file(filepath: Path) -> list[tuple[str, str]]:
function _parse_route (line 134) | def _parse_route(method: str, path: str) -> tuple[str, str, str]:
class Feature (line 175) | class Feature:
function build_feature_matrix (line 192) | def build_feature_matrix(
function _get_call_chain (line 293) | def _get_call_chain(node: ast.Call) -> str | None:
function _is_openai_call (line 308) | def _is_openai_call(chain: str) -> bool:
function _strip_client_prefix (line 312) | def _strip_client_prefix(chain: str) -> str:
class TestEvidence (line 318) | class TestEvidence:
function _analyze_test_ast (line 329) | def _analyze_test_ast(func_node: ast.AST) -> TestEvidence:
function _extract_openai_test_functions (line 371) | def _extract_openai_test_functions(filepath: Path) -> list[tuple[str, as...
function _scan_streaming_helpers (line 390) | def _scan_streaming_helpers(test_dir: Path) -> set[str]:
function _match_evidence (line 406) | def _match_evidence(features: list[Feature], evidence_map: dict[str, Tes...
function run_coverage (line 457) | def run_coverage(test_dir: Path = TESTS_DIR, spec_path: Path = OPENAI_SP...
function get_tested_property_names (line 472) | def get_tested_property_names(features: list[Feature] | None = None) -> ...
function print_report (line 511) | def print_report(features: list[Feature], verbose: bool = False) -> float:
function main (line 573) | def main() -> None:
FILE: src/llama_stack/cli/llama.py
class LlamaCLIParser (line 18) | class LlamaCLIParser:
method __init__ (line 21) | def __init__(self):
method parse_args (line 39) | def parse_args(self) -> argparse.Namespace:
method run (line 45) | def run(self, args: argparse.Namespace) -> None:
function main (line 49) | def main():
FILE: src/llama_stack/cli/scripts/run.py
function install_wheel_from_presigned (line 12) | def install_wheel_from_presigned():
FILE: src/llama_stack/cli/stack/_list_deps.py
function format_output_deps_only (line 37) | def format_output_deps_only(
function run_stack_list_deps_command (line 67) | def run_stack_list_deps_command(args: argparse.Namespace) -> None:
function quote_if_needed (line 130) | def quote_if_needed(dep):
function quote_special_dep (line 137) | def quote_special_dep(dep_string):
FILE: src/llama_stack/cli/stack/list_apis.py
class StackListApis (line 12) | class StackListApis(Subcommand):
method __init__ (line 13) | def __init__(self, subparsers: argparse._SubParsersAction):
method _add_arguments (line 24) | def _add_arguments(self):
method _run_apis_list_cmd (line 27) | def _run_apis_list_cmd(self, args: argparse.Namespace) -> None:
FILE: src/llama_stack/cli/stack/list_deps.py
class StackListDeps (line 11) | class StackListDeps(Subcommand):
method __init__ (line 12) | def __init__(self, subparsers: argparse._SubParsersAction):
method _add_arguments (line 23) | def _add_arguments(self):
method _run_stack_list_deps_command (line 46) | def _run_stack_list_deps_command(self, args: argparse.Namespace) -> None:
FILE: src/llama_stack/cli/stack/list_providers.py
class StackListProviders (line 12) | class StackListProviders(Subcommand):
method __init__ (line 13) | def __init__(self, subparsers: argparse._SubParsersAction):
method providable_apis (line 25) | def providable_apis(self):
method _add_arguments (line 30) | def _add_arguments(self):
method _run_providers_list_cmd (line 39) | def _run_providers_list_cmd(self, args: argparse.Namespace) -> None:
FILE: src/llama_stack/cli/stack/list_stacks.py
class StackListBuilds (line 15) | class StackListBuilds(Subcommand):
method __init__ (line 18) | def __init__(self, subparsers: argparse._SubParsersAction):
method _get_distribution_dirs (line 29) | def _get_distribution_dirs(self) -> dict[str, tuple[Path, str]]:
method _list_stack_command (line 55) | def _list_stack_command(self, args: argparse.Namespace) -> None:
FILE: src/llama_stack/cli/stack/remove.py
class StackRemove (line 18) | class StackRemove(Subcommand):
method __init__ (line 21) | def __init__(self, subparsers: argparse._SubParsersAction):
method _add_arguments (line 32) | def _add_arguments(self) -> None:
method _get_distribution_dirs (line 46) | def _get_distribution_dirs(self) -> dict[str, Path]:
method _list_stacks (line 57) | def _list_stacks(self) -> None:
method _remove_stack_build_command (line 68) | def _remove_stack_build_command(self, args: argparse.Namespace) -> None:
FILE: src/llama_stack/cli/stack/run.py
class StackRun (line 30) | class StackRun(Subcommand):
method __init__ (line 31) | def __init__(self, subparsers: argparse._SubParsersAction):
method _add_arguments (line 42) | def _add_arguments(self):
method _run_stack_run_cmd (line 68) | def _run_stack_run_cmd(self, args: argparse.Namespace) -> None:
method _uvicorn_run (line 123) | def _uvicorn_run(self, config_file: Path | None, args: argparse.Namesp...
method _start_ui_development_server (line 183) | def _start_ui_development_server(self, stack_server_port: int):
FILE: src/llama_stack/cli/stack/stack.py
class StackParser (line 21) | class StackParser(Subcommand):
method __init__ (line 22) | def __init__(self, subparsers: argparse._SubParsersAction):
FILE: src/llama_stack/cli/stack/utils.py
class ImageType (line 13) | class ImageType(Enum):
function print_subcommand_description (line 18) | def print_subcommand_description(parser, subparsers):
FILE: src/llama_stack/cli/subcommand.py
class Subcommand (line 8) | class Subcommand:
method __init__ (line 11) | def __init__(self, *args, **kwargs):
method create (line 15) | def create(cls, *args, **kwargs):
method _add_arguments (line 18) | def _add_arguments(self):
FILE: src/llama_stack/cli/table.py
function print_table (line 13) | def print_table(rows, headers=None, separate_rows: bool = False, sort_by...
FILE: src/llama_stack/cli/utils.py
function add_config_distro_args (line 15) | def add_config_distro_args(parser: argparse.ArgumentParser):
function get_config_from_args (line 26) | def get_config_from_args(args: argparse.Namespace) -> str | None:
FILE: src/llama_stack/core/access_control/access_control.py
function matches_resource (line 27) | def matches_resource(resource_scope: str, actual_resource: str) -> bool:
function matches_scope (line 40) | def matches_scope(
function as_list (line 53) | def as_list(obj: Any) -> list[Any]:
function matches_conditions (line 59) | def matches_conditions(
function default_policy (line 71) | def default_policy() -> list[AccessRule]:
function is_action_allowed (line 92) | def is_action_allowed(
class AccessDeniedError (line 157) | class AccessDeniedError(RuntimeError):
method __init__ (line 158) | def __init__(self, action: str | None = None, resource: ProtectedResou...
function _build_access_denied_message (line 167) | def _build_access_denied_message(action: str | None, resource: Protected...
FILE: src/llama_stack/core/access_control/conditions.py
class User (line 10) | class User(Protocol):
class ProtectedResource (line 15) | class ProtectedResource(Protocol):
class Condition (line 21) | class Condition(Protocol):
method matches (line 22) | def matches(self, resource: ProtectedResource, user: User) -> bool: ...
class UserInOwnersList (line 25) | class UserInOwnersList:
method __init__ (line 26) | def __init__(self, name: str):
method owners_values (line 29) | def owners_values(self, resource: ProtectedResource) -> list[str] | None:
method matches (line 40) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 52) | def __repr__(self):
class UserNotInOwnersList (line 56) | class UserNotInOwnersList(UserInOwnersList):
method __init__ (line 57) | def __init__(self, name: str):
method matches (line 60) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 63) | def __repr__(self):
class UserWithValueInList (line 67) | class UserWithValueInList:
method __init__ (line 68) | def __init__(self, name: str, value: str):
method matches (line 72) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 78) | def __repr__(self):
class UserWithValueNotInList (line 82) | class UserWithValueNotInList(UserWithValueInList):
method __init__ (line 83) | def __init__(self, name: str, value: str):
method matches (line 86) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 89) | def __repr__(self):
class UserIsOwner (line 93) | class UserIsOwner:
method matches (line 94) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 97) | def __repr__(self):
class UserIsNotOwner (line 101) | class UserIsNotOwner:
method matches (line 102) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 105) | def __repr__(self):
class ResourceIsUnowned (line 109) | class ResourceIsUnowned:
method matches (line 110) | def matches(self, resource: ProtectedResource, user: User) -> bool:
method __repr__ (line 113) | def __repr__(self):
function parse_condition (line 117) | def parse_condition(condition: str) -> Condition:
function parse_conditions (line 138) | def parse_conditions(conditions: list[str]) -> list[Condition]:
FILE: src/llama_stack/core/access_control/datatypes.py
class Action (line 15) | class Action(StrEnum):
class Scope (line 22) | class Scope(BaseModel):
class RouteScope (line 28) | class RouteScope(BaseModel):
function _mutually_exclusive (line 43) | def _mutually_exclusive(obj, a: str, b: str):
function _require_one_of (line 48) | def _require_one_of(obj, a: str, b: str):
class AccessRule (line 53) | class AccessRule(BaseModel):
method validate_rule_format (line 111) | def validate_rule_format(self) -> Self:
class RouteAccessRule (line 126) | class RouteAccessRule(BaseModel):
method validate_rule_format (line 176) | def validate_rule_format(self) -> Self:
FILE: src/llama_stack/core/admin.py
class AdminImplConfig (line 41) | class AdminImplConfig(BaseModel):
function get_provider_impl (line 45) | async def get_provider_impl(config, deps):
class AdminImpl (line 51) | class AdminImpl(Admin):
method __init__ (line 52) | def __init__(self, config: AdminImplConfig, deps):
method initialize (line 56) | async def initialize(self) -> None:
method shutdown (line 59) | async def shutdown(self) -> None:
method list_providers (line 64) | async def list_providers(self) -> ListProvidersResponse:
method inspect_provider (line 91) | async def inspect_provider(self, request: InspectProviderRequest) -> P...
method get_providers_health (line 99) | async def get_providers_health(self) -> dict[str, dict[str, HealthResp...
method list_routes (line 160) | async def list_routes(self, request: ListRoutesRequest) -> ListRoutesR...
method health (line 263) | async def health(self) -> HealthInfo:
method version (line 266) | async def version(self) -> VersionInfo:
FILE: src/llama_stack/core/build.py
class ApiInput (line 33) | class ApiInput(BaseModel):
function get_provider_dependencies (line 38) | def get_provider_dependencies(
function print_pip_install_help (line 87) | def print_pip_install_help(config: StackConfig):
FILE: src/llama_stack/core/client.py
function get_client_impl (line 23) | async def get_client_impl(protocol, config: RemoteProviderConfig, _deps:...
function create_api_client_class (line 30) | def create_api_client_class(protocol) -> type:
function extract_non_async_iterator_type (line 189) | def extract_non_async_iterator_type(type_hint):
function extract_async_iterator_type (line 198) | def extract_async_iterator_type(type_hint):
FILE: src/llama_stack/core/configure.py
function configure_single_provider (line 28) | def configure_single_provider(registry: dict[str, ProviderSpec], provide...
function configure_api_providers (line 47) | def configure_api_providers(config: StackConfig, build_spec: Distributio...
function upgrade_from_routing_table (line 120) | def upgrade_from_routing_table(
function parse_and_maybe_upgrade_config (line 195) | def parse_and_maybe_upgrade_config(config_dict: dict[str, Any]) -> Stack...
FILE: src/llama_stack/core/connectors/connectors.py
class ConnectorServiceConfig (line 32) | class ConnectorServiceConfig(BaseModel):
function get_provider_impl (line 38) | async def get_provider_impl(config: ConnectorServiceConfig):
class ConnectorServiceImpl (line 47) | class ConnectorServiceImpl(Connectors):
method __init__ (line 50) | def __init__(self, config: ConnectorServiceConfig):
method _get_key (line 54) | def _get_key(self, connector_id: str) -> str:
method initialize (line 58) | async def initialize(self):
method register_connector (line 67) | async def register_connector(
method unregister_connector (line 104) | async def unregister_connector(self, connector_id: str):
method get_connector (line 111) | async def get_connector(
method list_connectors (line 129) | async def list_connectors(self) -> ListConnectorsResponse:
method get_connector_tool (line 135) | async def get_connector_tool(self, request: GetConnectorToolRequest, a...
method list_connector_tools (line 145) | async def list_connector_tools(
method shutdown (line 155) | async def shutdown(self):
FILE: src/llama_stack/core/conversations/conversations.py
class ConversationServiceConfig (line 45) | class ConversationServiceConfig(BaseModel):
function get_provider_impl (line 56) | async def get_provider_impl(config: ConversationServiceConfig, deps: dic...
class ConversationServiceImpl (line 63) | class ConversationServiceImpl(Conversations):
method __init__ (line 66) | def __init__(self, config: ConversationServiceConfig, deps: dict[Any, ...
method initialize (line 79) | async def initialize(self) -> None:
method create_conversation (line 101) | async def create_conversation(self, request: CreateConversationRequest...
method get_conversation (line 145) | async def get_conversation(self, request: GetConversationRequest) -> C...
method update_conversation (line 157) | async def update_conversation(self, conversation_id: str, request: Upd...
method openai_delete_conversation (line 172) | async def openai_delete_conversation(self, request: DeleteConversation...
method _validate_conversation_id (line 185) | def _validate_conversation_id(self, conversation_id: str) -> None:
method _get_or_generate_item_id (line 194) | def _get_or_generate_item_id(self, item: ConversationItem, item_dict: ...
method _get_validated_conversation (line 206) | async def _get_validated_conversation(self, conversation_id: str) -> C...
method add_items (line 210) | async def add_items(self, conversation_id: str, request: AddItemsReque...
method retrieve (line 252) | async def retrieve(self, request: RetrieveItemRequest) -> Conversation...
method list_items (line 269) | async def list_items(self, request: ListItemsRequest) -> ConversationI...
method openai_delete_conversation_item (line 302) | async def openai_delete_conversation_item(self, request: DeleteItemReq...
method shutdown (line 324) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/datatypes.py
class RegistryEntrySource (line 56) | class RegistryEntrySource(StrEnum):
class User (line 61) | class User(BaseModel):
method __init__ (line 66) | def __init__(self, principal: str, attributes: dict[str, list[str]] | ...
class ResourceWithOwner (line 70) | class ResourceWithOwner(Resource):
class ModelWithOwner (line 79) | class ModelWithOwner(Model, ResourceWithOwner):
class ShieldWithOwner (line 83) | class ShieldWithOwner(Shield, ResourceWithOwner):
class VectorStoreWithOwner (line 87) | class VectorStoreWithOwner(VectorStore, ResourceWithOwner):
class DatasetWithOwner (line 91) | class DatasetWithOwner(Dataset, ResourceWithOwner):
class ScoringFnWithOwner (line 95) | class ScoringFnWithOwner(ScoringFn, ResourceWithOwner):
class BenchmarkWithOwner (line 99) | class BenchmarkWithOwner(Benchmark, ResourceWithOwner):
class ToolGroupWithOwner (line 103) | class ToolGroupWithOwner(ToolGroup, ResourceWithOwner):
class AutoRoutedProviderSpec (line 124) | class AutoRoutedProviderSpec(ProviderSpec):
class RoutingTableProviderSpec (line 137) | class RoutingTableProviderSpec(ProviderSpec):
class Provider (line 147) | class Provider(BaseModel):
class BuildProvider (line 165) | class BuildProvider(BaseModel):
class DistributionSpec (line 179) | class DistributionSpec(BaseModel):
class OAuth2JWKSConfig (line 195) | class OAuth2JWKSConfig(BaseModel):
class OAuth2IntrospectionConfig (line 202) | class OAuth2IntrospectionConfig(BaseModel):
class AuthProviderType (line 209) | class AuthProviderType(StrEnum):
class OAuth2TokenAuthConfig (line 218) | class OAuth2TokenAuthConfig(BaseModel):
method validate_claims_mapping (line 244) | def validate_claims_mapping(cls, v):
method validate_mode (line 251) | def validate_mode(self) -> Self:
class CustomAuthConfig (line 259) | class CustomAuthConfig(BaseModel):
class GitHubTokenAuthConfig (line 269) | class GitHubTokenAuthConfig(BaseModel):
class KubernetesAuthProviderConfig (line 286) | class KubernetesAuthProviderConfig(BaseModel):
method validate_api_server_url (line 306) | def validate_api_server_url(cls, v):
method validate_claims_mapping (line 316) | def validate_claims_mapping(cls, v):
class AuthenticationConfig (line 329) | class AuthenticationConfig(BaseModel):
class AuthenticationRequiredError (line 346) | class AuthenticationRequiredError(Exception):
class QualifiedModel (line 350) | class QualifiedModel(BaseModel):
class RerankerModel (line 358) | class RerankerModel(BaseModel):
class RewriteQueryParams (line 365) | class RewriteQueryParams(BaseModel):
method validate_prompt (line 387) | def validate_prompt(cls, v: str) -> str:
method validate_max_tokens (line 394) | def validate_max_tokens(cls, v: int) -> int:
method validate_temperature (line 403) | def validate_temperature(cls, v: float) -> float:
class FileSearchParams (line 409) | class FileSearchParams(BaseModel):
method validate_header_template (line 423) | def validate_header_template(cls, v: str) -> str:
class ContextPromptParams (line 433) | class ContextPromptParams(BaseModel):
method validate_chunk_annotation_template (line 447) | def validate_chunk_annotation_template(cls, v: str) -> str:
method validate_context_template (line 458) | def validate_context_template(cls, v: str) -> str:
class AnnotationPromptParams (line 466) | class AnnotationPromptParams(BaseModel):
method validate_chunk_annotation_template (line 484) | def validate_chunk_annotation_template(cls, v: str) -> str:
method validate_annotation_instruction_template (line 497) | def validate_annotation_instruction_template(cls, v: str) -> str:
class FileIngestionParams (line 503) | class FileIngestionParams(BaseModel):
class ChunkRetrievalParams (line 516) | class ChunkRetrievalParams(BaseModel):
class FileBatchParams (line 541) | class FileBatchParams(BaseModel):
class ContextualRetrievalParams (line 558) | class ContextualRetrievalParams(BaseModel):
class VectorStoresConfig (line 586) | class VectorStoresConfig(BaseModel):
class SafetyConfig (line 636) | class SafetyConfig(BaseModel):
class QuotaPeriod (line 645) | class QuotaPeriod(StrEnum):
class QuotaConfig (line 649) | class QuotaConfig(BaseModel):
class CORSConfig (line 658) | class CORSConfig(BaseModel):
method validate_credentials_config (line 668) | def validate_credentials_config(self) -> Self:
function process_cors_config (line 674) | def process_cors_config(cors_config: bool | CORSConfig | None) -> CORSCo...
class RegisteredResources (line 693) | class RegisteredResources(BaseModel):
class ServerConfig (line 705) | class ServerConfig(BaseModel):
class StackConfig (line 748) | class StackConfig(BaseModel):
method validate_external_providers_dir (line 827) | def validate_external_providers_dir(cls, v):
method validate_distro_name_migration (line 835) | def validate_distro_name_migration(self) -> "StackConfig":
method validate_server_stores (line 863) | def validate_server_stores(self) -> "StackConfig":
FILE: src/llama_stack/core/distribution.py
function stack_apis (line 31) | def stack_apis() -> list[Api]:
class AutoRoutedApiInfo (line 35) | class AutoRoutedApiInfo(BaseModel):
function builtin_automatically_routed_apis (line 40) | def builtin_automatically_routed_apis() -> list[AutoRoutedApiInfo]:
function providable_apis (line 73) | def providable_apis() -> list[Api]:
function _load_remote_provider_spec (line 78) | def _load_remote_provider_spec(spec_data: dict[str, Any], api: Api) -> P...
function _load_inline_provider_spec (line 83) | def _load_inline_provider_spec(spec_data: dict[str, Any], api: Api, prov...
function get_provider_registry (line 88) | def get_provider_registry(
function get_external_providers_from_dir (line 172) | def get_external_providers_from_dir(
function get_external_providers_from_module (line 224) | def get_external_providers_from_module(
FILE: src/llama_stack/core/exceptions/mapping.py
function translate_exception_to_http (line 44) | def translate_exception_to_http(exc: Exception) -> HTTPException | None:
FILE: src/llama_stack/core/exceptions/translation.py
function translate_exception (line 15) | def translate_exception(exc: Exception) -> HTTPException:
FILE: src/llama_stack/core/external.py
function load_external_apis (line 17) | def load_external_apis(config: StackConfig | None) -> dict[Api, External...
FILE: src/llama_stack/core/id_generation.py
function generate_object_id (line 15) | def generate_object_id(kind: str, factory: IdFactory) -> str:
function set_id_override (line 28) | def set_id_override(override: IdOverride) -> IdOverride | None:
function reset_id_override (line 38) | def reset_id_override(previous: IdOverride | None) -> None:
FILE: src/llama_stack/core/inspect.py
class DistributionInspectConfig (line 31) | class DistributionInspectConfig(BaseModel):
function get_provider_impl (line 35) | async def get_provider_impl(config, deps):
class DistributionInspectImpl (line 41) | class DistributionInspectImpl(Inspect):
method __init__ (line 42) | def __init__(self, config: DistributionInspectConfig, deps):
method initialize (line 46) | async def initialize(self) -> None:
method list_routes (line 49) | async def list_routes(self, api_filter: str | None = None) -> ListRout...
method health (line 162) | async def health(self) -> HealthInfo:
method version (line 165) | async def version(self) -> VersionInfo:
method shutdown (line 168) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/library_client.py
function convert_pydantic_to_json_value (line 59) | def convert_pydantic_to_json_value(value: Any) -> Any:
function convert_to_pydantic (line 72) | def convert_to_pydantic(annotation: Any, value: Any) -> Any:
class LibraryClientUploadFile (line 113) | class LibraryClientUploadFile:
method __init__ (line 116) | def __init__(self, filename: str, content: bytes):
method read (line 121) | async def read(self) -> bytes:
class LibraryClientHttpxResponse (line 125) | class LibraryClientHttpxResponse:
method __init__ (line 128) | def __init__(self, response):
class LlamaStackAsLibraryClient (line 134) | class LlamaStackAsLibraryClient(LlamaStackClient):
method __init__ (line 135) | def __init__(
method initialize (line 158) | def initialize(self):
method shutdown (line 164) | def shutdown(self) -> None:
method __enter__ (line 187) | def __enter__(self) -> "LlamaStackAsLibraryClient":
method __exit__ (line 199) | def __exit__(self, exc_type, exc_val, exc_tb) -> None:
method request (line 203) | def request(self, *args, **kwargs):
class AsyncLlamaStackAsLibraryClient (line 233) | class AsyncLlamaStackAsLibraryClient(AsyncLlamaStackClient):
method __init__ (line 234) | def __init__(
method _remove_root_logger_handlers (line 268) | def _remove_root_logger_handlers(self):
method initialize (line 278) | async def initialize(self) -> bool:
method shutdown (line 326) | async def shutdown(self) -> None:
method __aenter__ (line 346) | async def __aenter__(self) -> "AsyncLlamaStackAsLibraryClient":
method __aexit__ (line 359) | async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
method request (line 363) | async def request(
method _handle_file_uploads (line 396) | def _handle_file_uploads(self, options: Any, body: dict) -> tuple[dict...
method _call_non_streaming (line 421) | async def _call_non_streaming(
method _call_streaming (line 490) | async def _call_streaming(
method _convert_body (line 565) | def _convert_body(self, func: Any, body: dict | None = None, exclude_p...
FILE: src/llama_stack/core/prompts/prompts.py
class PromptServiceConfig (line 27) | class PromptServiceConfig(BaseModel):
function get_provider_impl (line 36) | async def get_provider_impl(config: PromptServiceConfig, deps: dict[Any,...
class PromptServiceImpl (line 43) | class PromptServiceImpl(Prompts):
method __init__ (line 46) | def __init__(self, config: PromptServiceConfig, deps: dict[Any, Any]):
method initialize (line 51) | async def initialize(self) -> None:
method _get_default_key (line 58) | def _get_default_key(self, prompt_id: str) -> str:
method _get_prompt_key (line 62) | async def _get_prompt_key(self, prompt_id: str, version: int | None = ...
method _get_version_key (line 73) | def _get_version_key(self, prompt_id: str, version: str) -> str:
method _get_list_key_prefix (line 77) | def _get_list_key_prefix(self) -> str:
method _serialize_prompt (line 81) | def _serialize_prompt(self, prompt: Prompt) -> str:
method _deserialize_prompt (line 93) | def _deserialize_prompt(self, data: str) -> Prompt:
method list_prompts (line 104) | async def list_prompts(self) -> ListPromptsResponse:
method get_prompt (line 127) | async def get_prompt(self, request: GetPromptRequest) -> Prompt:
method create_prompt (line 137) | async def create_prompt(self, request: CreatePromptRequest) -> Prompt:
method update_prompt (line 157) | async def update_prompt(self, request: UpdatePromptRequest) -> Prompt:
method delete_prompt (line 187) | async def delete_prompt(self, request: DeletePromptRequest) -> None:
method list_prompt_versions (line 197) | async def list_prompt_versions(self, request: ListPromptVersionsReques...
method set_default_version (line 223) | async def set_default_version(self, request: SetDefaultVersionRequest)...
method shutdown (line 235) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/providers.py
class ProviderImplConfig (line 28) | class ProviderImplConfig(BaseModel):
function get_provider_impl (line 32) | async def get_provider_impl(config, deps):
class ProviderImpl (line 38) | class ProviderImpl(Providers):
method __init__ (line 39) | def __init__(self, config, deps):
method initialize (line 43) | async def initialize(self) -> None:
method shutdown (line 46) | async def shutdown(self) -> None:
method list_providers (line 50) | async def list_providers(self) -> ListProvidersResponse:
method inspect_provider (line 77) | async def inspect_provider(self, request: InspectProviderRequest) -> P...
method get_providers_health (line 85) | async def get_providers_health(self) -> dict[str, dict[str, HealthResp...
FILE: src/llama_stack/core/request_headers.py
class RequestProviderDataContext (line 23) | class RequestProviderDataContext(AbstractContextManager):
method __init__ (line 26) | def __init__(self, provider_data: dict[str, Any] | None = None, user: ...
method __enter__ (line 33) | def __enter__(self):
method __exit__ (line 38) | def __exit__(self, exc_type, exc_val, exc_tb):
class NeedsRequestProviderData (line 44) | class NeedsRequestProviderData:
method get_request_provider_data (line 45) | def get_request_provider_data(self) -> Any:
function parse_request_provider_data (line 68) | def parse_request_provider_data(headers: dict[str, str]) -> dict[str, An...
function request_provider_data_context (line 90) | def request_provider_data_context(
function get_authenticated_user (line 98) | def get_authenticated_user() -> User | None:
function user_from_scope (line 106) | def user_from_scope(scope: dict) -> User | None:
FILE: src/llama_stack/core/resolver.py
class InvalidProviderError (line 70) | class InvalidProviderError(Exception):
function api_protocol_map (line 74) | def api_protocol_map(external_apis: dict[Api, ExternalApiSpec] | None = ...
function api_protocol_map_for_compliance_check (line 123) | def api_protocol_map_for_compliance_check(config: Any) -> dict[Api, Any]:
function additional_protocols_map (line 131) | def additional_protocols_map() -> dict[Api, Any]:
class ProviderWithSpec (line 147) | class ProviderWithSpec(Provider):
function resolve_impls (line 154) | async def resolve_impls(
function specs_for_autorouted_apis (line 185) | def specs_for_autorouted_apis(apis_to_serve: list[str] | set[str]) -> di...
function validate_and_prepare_providers (line 232) | def validate_and_prepare_providers(
function validate_provider (line 261) | def validate_provider(provider: Provider, api: Api, provider_registry: P...
function sort_providers_by_deps (line 276) | def sort_providers_by_deps(
function instantiate_providers (line 290) | async def instantiate_providers(
function topological_sort (line 341) | def topological_sort(
function instantiate_provider (line 375) | async def instantiate_provider(
function check_protocol_compliance (line 443) | def check_protocol_compliance(obj: Any, protocol: Any) -> None:
function resolve_remote_stack_impls (line 490) | async def resolve_remote_stack_impls(
FILE: src/llama_stack/core/routers/__init__.py
function get_routing_table_impl (line 19) | async def get_routing_table_impl(
function get_auto_router_impl (line 53) | async def get_auto_router_impl(
FILE: src/llama_stack/core/routers/datasets.py
class DatasetIORouter (line 23) | class DatasetIORouter(DatasetIO):
method __init__ (line 24) | def __init__(
method initialize (line 31) | async def initialize(self) -> None:
method shutdown (line 35) | async def shutdown(self) -> None:
method register_dataset (line 39) | async def register_dataset(
method iterrows (line 56) | async def iterrows(self, request: IterRowsRequest) -> PaginatedResponse:
method append_rows (line 67) | async def append_rows(self, params: AppendRowsParams) -> None:
FILE: src/llama_stack/core/routers/eval_scoring.py
class ScoringRouter (line 35) | class ScoringRouter(Scoring):
method __init__ (line 36) | def __init__(
method initialize (line 43) | async def initialize(self) -> None:
method shutdown (line 47) | async def shutdown(self) -> None:
method score_batch (line 51) | async def score_batch(
method score (line 75) | async def score(
class EvalRouter (line 95) | class EvalRouter(Eval):
method __init__ (line 96) | def __init__(
method initialize (line 103) | async def initialize(self) -> None:
method shutdown (line 107) | async def shutdown(self) -> None:
method run_eval (line 111) | async def run_eval(
method evaluate_rows (line 138) | async def evaluate_rows(
method job_status (line 175) | async def job_status(
method job_cancel (line 200) | async def job_cancel(
method job_result (line 225) | async def job_result(
FILE: src/llama_stack/core/routers/inference.py
class InferenceRouter (line 57) | class InferenceRouter(Inference):
method __init__ (line 60) | def __init__(
method initialize (line 69) | async def initialize(self) -> None:
method shutdown (line 72) | async def shutdown(self) -> None:
method register_model (line 80) | async def register_model(
method _get_model_provider (line 100) | async def _get_model_provider(self, model_id: str, expected_model_type...
method _get_provider_by_fallback (line 112) | async def _get_provider_by_fallback(self, model_id: str, expected_mode...
method rerank (line 146) | async def rerank(
method openai_completion (line 154) | async def openai_completion(
method openai_chat_completion (line 172) | async def openai_chat_completion(
method openai_embeddings (line 220) | async def openai_embeddings(
method list_chat_completions (line 235) | async def list_chat_completions(
method get_chat_completion (line 248) | async def get_chat_completion(self, request: GetChatCompletionRequest)...
method _nonstream_openai_chat_completion (line 253) | async def _nonstream_openai_chat_completion(
method health (line 264) | async def health(self) -> dict[str, HealthResponse]:
method stream_tokens_and_compute_metrics_openai_chat (line 287) | async def stream_tokens_and_compute_metrics_openai_chat(
FILE: src/llama_stack/core/routers/safety.py
class SafetyRouter (line 28) | class SafetyRouter(Safety):
method __init__ (line 29) | def __init__(
method initialize (line 38) | async def initialize(self) -> None:
method shutdown (line 42) | async def shutdown(self) -> None:
method register_shield (line 46) | async def register_shield(self, request: RegisterShieldRequest) -> Shi...
method unregister_shield (line 50) | async def unregister_shield(self, identifier: str) -> None:
method run_shield (line 54) | async def run_shield(self, request: RunShieldRequest) -> RunShieldResp...
method run_moderation (line 62) | async def run_moderation(self, request: RunModerationRequest) -> Moder...
FILE: src/llama_stack/core/routers/tool_runtime.py
class ToolRuntimeRouter (line 27) | class ToolRuntimeRouter(ToolRuntime):
method __init__ (line 28) | def __init__(
method initialize (line 35) | async def initialize(self) -> None:
method shutdown (line 39) | async def shutdown(self) -> None:
method invoke_tool (line 43) | async def invoke_tool(self, tool_name: str, kwargs: dict[str, Any], au...
method list_runtime_tools (line 98) | async def list_runtime_tools(
FILE: src/llama_stack/core/routers/vector_io.py
class VectorIORouter (line 68) | class VectorIORouter(VectorIO):
method __init__ (line 71) | def __init__(
method initialize (line 81) | async def initialize(self) -> None:
method shutdown (line 85) | async def shutdown(self) -> None:
method _get_provider_id (line 89) | def _get_provider_id(self, vector_store_id: str) -> str:
method _rewrite_query_for_search (line 109) | async def _rewrite_query_for_search(self, query: str) -> str:
method _get_embedding_model_dimension (line 149) | async def _get_embedding_model_dimension(self, embedding_model_id: str...
method insert_chunks (line 162) | async def insert_chunks(
method query_chunks (line 195) | async def query_chunks(
method openai_create_vector_store (line 243) | async def openai_create_vector_store(
method openai_list_vector_stores (line 352) | async def openai_list_vector_stores(
method openai_retrieve_vector_store (line 404) | async def openai_retrieve_vector_store(
method openai_update_vector_store (line 411) | async def openai_update_vector_store(
method openai_delete_vector_store (line 429) | async def openai_delete_vector_store(
method openai_search_vector_store (line 448) | async def openai_search_vector_store(
method openai_attach_file_to_vector_store (line 495) | async def openai_attach_file_to_vector_store(
method openai_list_files_in_vector_store (line 539) | async def openai_list_files_in_vector_store(
method openai_retrieve_vector_store_file (line 558) | async def openai_retrieve_vector_store_file(
method openai_retrieve_vector_store_file_contents (line 569) | async def openai_retrieve_vector_store_file_contents(
method openai_update_vector_store_file (line 588) | async def openai_update_vector_store_file(
method openai_delete_vector_store_file (line 601) | async def openai_delete_vector_store_file(
method health (line 624) | async def health(self) -> dict[str, HealthResponse]:
method openai_create_vector_store_file_batch (line 647) | async def openai_create_vector_store_file_batch(
method openai_retrieve_vector_store_file_batch (line 660) | async def openai_retrieve_vector_store_file_batch(
method openai_list_files_in_vector_store_file_batch (line 671) | async def openai_list_files_in_vector_store_file_batch(
method openai_cancel_vector_store_file_batch (line 692) | async def openai_cancel_vector_store_file_batch(
FILE: src/llama_stack/core/routing_tables/benchmarks.py
class BenchmarksRoutingTable (line 27) | class BenchmarksRoutingTable(CommonRoutingTableImpl, Benchmarks):
method list_benchmarks (line 28) | async def list_benchmarks(self, request: ListBenchmarksRequest) -> Lis...
method get_benchmark (line 31) | async def get_benchmark(self, request: GetBenchmarkRequest) -> Benchmark:
method register_benchmark (line 37) | async def register_benchmark(
method unregister_benchmark (line 63) | async def unregister_benchmark(self, request: UnregisterBenchmarkReque...
FILE: src/llama_stack/core/routing_tables/common.py
function get_impl_api (line 26) | def get_impl_api(p: Any) -> Api:
function register_object_with_provider (line 31) | async def register_object_with_provider(obj: RoutableObject, p: Any) -> ...
function unregister_object_from_provider (line 54) | async def unregister_object_from_provider(obj: RoutableObject, p: Any) -...
class CommonRoutingTableImpl (line 77) | class CommonRoutingTableImpl(RoutingTable):
method __init__ (line 78) | def __init__(
method initialize (line 88) | async def initialize(self) -> None:
method shutdown (line 120) | async def shutdown(self) -> None:
method refresh (line 124) | async def refresh(self) -> None:
method get_provider_impl (line 127) | async def get_provider_impl(self, routing_key: str, provider_id: str |...
method get_object_by_identifier (line 173) | async def get_object_by_identifier(self, type: str, identifier: str) -...
method unregister_object (line 186) | async def unregister_object(self, obj: RoutableObjectWithProvider) -> ...
method register_object (line 193) | async def register_object(self, obj: RoutableObjectWithProvider) -> Ro...
method assert_action_allowed (line 231) | async def assert_action_allowed(
method get_all_with_type (line 245) | async def get_all_with_type(self, type: str) -> list[RoutableObjectWit...
function lookup_model (line 258) | async def lookup_model(routing_table: CommonRoutingTableImpl, model_id: ...
FILE: src/llama_stack/core/routing_tables/datasets.py
class DatasetsRoutingTable (line 34) | class DatasetsRoutingTable(CommonRoutingTableImpl, Datasets):
method list_datasets (line 35) | async def list_datasets(self) -> ListDatasetsResponse:
method get_dataset (line 38) | async def get_dataset(self, request: GetDatasetRequest) -> Dataset:
method register_dataset (line 44) | async def register_dataset(self, request: RegisterDatasetRequest) -> D...
method unregister_dataset (line 89) | async def unregister_dataset(self, request: UnregisterDatasetRequest) ...
FILE: src/llama_stack/core/routing_tables/models.py
class ModelsRoutingTable (line 36) | class ModelsRoutingTable(CommonRoutingTableImpl, Models):
method refresh (line 39) | async def refresh(self) -> None:
method _get_dynamic_models_from_provider_data (line 63) | async def _get_dynamic_models_from_provider_data(self) -> list[Model]:
method list_models (line 139) | async def list_models(self) -> ListModelsResponse:
method openai_list_models (line 152) | async def openai_list_models(self) -> OpenAIListModelsResponse:
method get_model (line 182) | async def get_model(self, request_or_model_id: GetModelRequest | str) ...
method get_provider_impl (line 190) | async def get_provider_impl(self, model_id: str) -> Any:
method has_model (line 196) | async def has_model(self, model_id: str) -> bool:
method register_model (line 209) | async def register_model(
method unregister_model (line 264) | async def unregister_model(
method update_registered_models (line 285) | async def update_registered_models(
FILE: src/llama_stack/core/routing_tables/scoring_functions.py
class ScoringFunctionsRoutingTable (line 27) | class ScoringFunctionsRoutingTable(CommonRoutingTableImpl, ScoringFuncti...
method list_scoring_functions (line 28) | async def list_scoring_functions(self, request: ListScoringFunctionsRe...
method get_scoring_function (line 31) | async def get_scoring_function(self, request: GetScoringFunctionReques...
method register_scoring_function (line 37) | async def register_scoring_function(
method unregister_scoring_function (line 63) | async def unregister_scoring_function(self, request: UnregisterScoring...
FILE: src/llama_stack/core/routing_tables/shields.py
class ShieldsRoutingTable (line 26) | class ShieldsRoutingTable(CommonRoutingTableImpl, Shields):
method list_shields (line 27) | async def list_shields(self) -> ListShieldsResponse:
method get_shield (line 30) | async def get_shield(self, request: GetShieldRequest) -> Shield:
method register_shield (line 36) | async def register_shield(self, request: RegisterShieldRequest) -> Shi...
method unregister_shield (line 61) | async def unregister_shield(self, request: UnregisterShieldRequest) ->...
FILE: src/llama_stack/core/routing_tables/toolgroups.py
function parse_toolgroup_from_toolgroup_name_pair (line 26) | def parse_toolgroup_from_toolgroup_name_pair(toolgroup_name_with_maybe_t...
class ToolGroupsRoutingTable (line 35) | class ToolGroupsRoutingTable(CommonRoutingTableImpl, ToolGroups):
method get_provider_impl (line 40) | async def get_provider_impl(self, routing_key: str, provider_id: str |...
method list_tools (line 52) | async def list_tools(
method _index_tools (line 81) | async def _index_tools(self, toolgroup: ToolGroup, authorization: str ...
method list_tool_groups (line 95) | async def list_tool_groups(self) -> ListToolGroupsResponse:
method get_tool_group (line 98) | async def get_tool_group(self, toolgroup_id: str) -> ToolGroup:
method get_tool (line 104) | async def get_tool(self, tool_name: str) -> ToolDef:
method register_tool_group (line 113) | async def register_tool_group(
method unregister_toolgroup (line 135) | async def unregister_toolgroup(self, toolgroup_id: str) -> None:
method shutdown (line 138) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/routing_tables/vector_stores.py
class VectorStoresRoutingTable (line 45) | class VectorStoresRoutingTable(CommonRoutingTableImpl):
method __init__ (line 52) | def __init__(
method list_vector_stores (line 63) | async def list_vector_stores(self) -> list[VectorStoreWithOwner]:
method register_vector_store (line 67) | async def register_vector_store(
method insert_chunks (line 103) | async def insert_chunks(
method query_chunks (line 111) | async def query_chunks(
method openai_retrieve_vector_store (line 119) | async def openai_retrieve_vector_store(
method openai_update_vector_store (line 127) | async def openai_update_vector_store(
method openai_delete_vector_store (line 136) | async def openai_delete_vector_store(
method unregister_vector_store (line 146) | async def unregister_vector_store(self, vector_store_id: str) -> None:
method openai_search_vector_store (line 156) | async def openai_search_vector_store(
method openai_attach_file_to_vector_store (line 165) | async def openai_attach_file_to_vector_store(
method openai_list_files_in_vector_store (line 174) | async def openai_list_files_in_vector_store(
method openai_retrieve_vector_store_file (line 194) | async def openai_retrieve_vector_store_file(
method openai_retrieve_vector_store_file_contents (line 206) | async def openai_retrieve_vector_store_file_contents(
method openai_update_vector_store_file (line 223) | async def openai_update_vector_store_file(
method openai_delete_vector_store_file (line 237) | async def openai_delete_vector_store_file(
method openai_create_vector_store_file_batch (line 249) | async def openai_create_vector_store_file_batch(
method openai_retrieve_vector_store_file_batch (line 261) | async def openai_retrieve_vector_store_file_batch(
method openai_list_files_in_vector_store_file_batch (line 273) | async def openai_list_files_in_vector_store_file_batch(
method openai_cancel_vector_store_file_batch (line 295) | async def openai_cancel_vector_store_file_batch(
FILE: src/llama_stack/core/server/auth.py
class AuthenticationMiddleware (line 24) | class AuthenticationMiddleware:
method __init__ (line 94) | def __init__(self, app, auth_config: AuthenticationConfig, impls):
method __call__ (line 99) | async def __call__(self, scope, receive, send):
method _send_auth_error (line 160) | async def _send_auth_error(self, send, message, status=401):
class RouteAuthorizationMiddleware (line 172) | class RouteAuthorizationMiddleware:
method __init__ (line 180) | def __init__(self, app, route_policy: list[RouteAccessRule]):
method __call__ (line 184) | async def __call__(self, scope, receive, send):
method _is_route_allowed (line 209) | def _is_route_allowed(self, route: str, user: User | None) -> bool:
method _rule_matches (line 247) | def _rule_matches(self, rule: RouteAccessRule, route: str, user: User ...
method _route_matches (line 267) | def _route_matches(self, request_route: str, rule_patterns: str | list...
method _evaluate_conditions (line 303) | def _evaluate_conditions(self, rule: RouteAccessRule, user: User | Non...
method _send_error (line 350) | async def _send_error(self, send, message: str, status: int = 403):
class _RouteContext (line 363) | class _RouteContext:
method __init__ (line 371) | def __init__(self):
FILE: src/llama_stack/core/server/auth_providers.py
class AuthResponse (line 30) | class AuthResponse(BaseModel):
class AuthRequestContext (line 41) | class AuthRequestContext(BaseModel):
class AuthRequest (line 49) | class AuthRequest(BaseModel):
class AuthProvider (line 55) | class AuthProvider(ABC):
method validate_token (line 59) | async def validate_token(self, token: str, scope: dict | None = None) ...
method close (line 64) | async def close(self):
method get_auth_error_message (line 68) | def get_auth_error_message(self, scope: dict | None = None) -> str:
function get_attributes_from_claims (line 73) | def get_attributes_from_claims(claims: dict[str, str], mapping: dict[str...
class OAuth2TokenAuthProvider (line 108) | class OAuth2TokenAuthProvider(AuthProvider):
method __init__ (line 115) | def __init__(self, config: OAuth2TokenAuthConfig):
method validate_token (line 119) | async def validate_token(self, token: str, scope: dict | None = None) ...
method _get_jwks_client (line 126) | def _get_jwks_client(self) -> jwt.PyJWKClient:
method validate_jwt_token (line 164) | async def validate_jwt_token(self, token: str, scope: dict | None = No...
method introspect_token (line 192) | async def introspect_token(self, token: str, scope: dict | None = None...
method close (line 248) | async def close(self):
method get_auth_error_message (line 251) | def get_auth_error_message(self, scope: dict | None = None) -> str:
class CustomAuthProvider (line 263) | class CustomAuthProvider(AuthProvider):
method __init__ (line 266) | def __init__(self, config: CustomAuthConfig):
method validate_token (line 270) | async def validate_token(self, token: str, scope: dict | None = None) ...
method close (line 327) | async def close(self):
method get_auth_error_message (line 333) | def get_auth_error_message(self, scope: dict | None = None) -> str:
class GitHubTokenAuthProvider (line 342) | class GitHubTokenAuthProvider(AuthProvider):
method __init__ (line 350) | def __init__(self, config: GitHubTokenAuthConfig):
method validate_token (line 353) | async def validate_token(self, token: str, scope: dict | None = None) ...
method close (line 379) | async def close(self):
method get_auth_error_message (line 383) | def get_auth_error_message(self, scope: dict | None = None) -> str:
function _get_github_user_info (line 388) | async def _get_github_user_info(access_token: str, github_api_base_url: ...
class KubernetesAuthProvider (line 406) | class KubernetesAuthProvider(AuthProvider):
method __init__ (line 413) | def __init__(self, config: KubernetesAuthProviderConfig):
method _httpx_verify_value (line 416) | def _httpx_verify_value(self) -> bool | str:
method validate_token (line 429) | async def validate_token(self, token: str, scope: dict | None = None) ...
method close (line 484) | async def close(self):
function create_auth_provider (line 489) | def create_auth_provider(config: AuthenticationConfig) -> AuthProvider:
FILE: src/llama_stack/core/server/fastapi_router_registry.py
function has_router (line 71) | def has_router(api: "Api") -> bool:
function build_fastapi_router (line 83) | def build_fastapi_router(api: "Api", impl: Any) -> APIRouter | None:
function get_router_routes (line 103) | def get_router_routes(router: APIRouter) -> list[APIRoute]:
FILE: src/llama_stack/core/server/quota.py
class QuotaMiddleware (line 21) | class QuotaMiddleware:
method __init__ (line 33) | def __init__(
method _get_kv (line 48) | async def _get_kv(self) -> KVStore:
method __call__ (line 59) | async def __call__(self, scope: Scope, receive: Receive, send: Send):
method _send_error (line 101) | async def _send_error(self, send: Send, status: int, message: str):
FILE: src/llama_stack/core/server/routes.py
function get_all_api_routes (line 32) | def get_all_api_routes(
function initialize_route_impls (line 79) | def initialize_route_impls(impls, external_apis: dict[Api, ExternalApiSp...
function find_matching_route (line 168) | def find_matching_route(method: str, path: str, route_impls: RouteImpls)...
FILE: src/llama_stack/core/server/server.py
function warn_with_traceback (line 70) | def warn_with_traceback(message, category, filename, lineno, file=None, ...
function create_sse_event (line 80) | def create_sse_event(data: Any) -> str:
function global_exception_handler (line 89) | async def global_exception_handler(request: Request, exc: Exception):
class StackApp (line 105) | class StackApp(FastAPI):
method __init__ (line 111) | def __init__(self, config: StackConfig, *args, **kwargs):
function lifespan (line 124) | async def lifespan(app: StackApp):
function is_streaming_request (line 135) | def is_streaming_request(func_name: str, request: Request, **kwargs):
function maybe_await (line 150) | async def maybe_await(value):
function sse_generator (line 156) | async def sse_generator(event_gen_coroutine):
function log_request_pre_validation (line 171) | async def log_request_pre_validation(request: Request):
function create_dynamic_typed_route (line 188) | def create_dynamic_typed_route(func: Any, method: str, route: str) -> Ca...
class ClientVersionMiddleware (line 252) | class ClientVersionMiddleware:
method __init__ (line 253) | def __init__(self, app):
method __call__ (line 257) | async def __call__(self, scope, receive, send):
class ProviderDataMiddleware (line 288) | class ProviderDataMiddleware:
method __init__ (line 296) | def __init__(self, app):
method __call__ (line 299) | async def __call__(self, scope, receive, send):
function create_app (line 324) | def create_app() -> StackApp:
function _log_run_config (line 493) | def _log_run_config(run_config: StackConfig):
function extract_path_params (line 501) | def extract_path_params(route: str) -> list[str]:
function remove_disabled_providers (line 509) | def remove_disabled_providers(obj):
FILE: src/llama_stack/core/stack.py
class LlamaStack (line 83) | class LlamaStack(
function is_request_model (line 145) | def is_request_model(t: Any) -> bool:
function invoke_with_optional_request (line 158) | async def invoke_with_optional_request(method: Any) -> Any:
function register_resources (line 220) | async def register_resources(run_config: StackConfig, impls: dict[Api, A...
function register_connectors (line 258) | async def register_connectors(run_config: StackConfig, impls: dict[Api, ...
function validate_vector_stores_config (line 286) | async def validate_vector_stores_config(vector_stores_config: VectorStor...
function _validate_embedding_model (line 305) | async def _validate_embedding_model(embedding_model: QualifiedModel, imp...
function _validate_reranker_model (line 337) | async def _validate_reranker_model(reranker_model: RerankerModel, impls:...
function _validate_rewrite_query_model (line 359) | async def _validate_rewrite_query_model(rewrite_query_model: QualifiedMo...
function validate_safety_config (line 383) | async def validate_safety_config(safety_config: SafetyConfig | None, imp...
class EnvVarError (line 407) | class EnvVarError(Exception):
method __init__ (line 408) | def __init__(self, var_name: str, path: str = ""):
function replace_env_vars (line 419) | def replace_env_vars(config: Any, path: str = "") -> Any:
function _convert_string_to_proper_type (line 561) | def _convert_string_to_proper_type(value: str) -> Any:
function cast_distro_name_to_string (line 589) | def cast_distro_name_to_string(config_dict: dict[str, Any]) -> dict[str,...
function add_internal_implementations (line 596) | def add_internal_implementations(impls: dict[Api, Any], config: StackCon...
function _initialize_storage (line 639) | def _initialize_storage(run_config: StackConfig):
class Stack (line 658) | class Stack:
method __init__ (line 659) | def __init__(self, run_config: StackConfig, provider_registry: Provide...
method initialize (line 666) | async def initialize(self):
method create_registry_refresh_task (line 708) | def create_registry_refresh_task(self):
method shutdown (line 727) | async def shutdown(self):
function refresh_registry_once (line 767) | async def refresh_registry_once(impls: dict[Api, Any]):
function refresh_registry_task (line 774) | async def refresh_registry_task(impls: dict[Api, Any]):
function get_stack_run_config_from_distro (line 782) | def get_stack_run_config_from_distro(distro: str) -> StackConfig:
function run_config_from_dynamic_config_spec (line 793) | def run_config_from_dynamic_config_spec(
FILE: src/llama_stack/core/storage/datatypes.py
class StorageBackendType (line 19) | class StorageBackendType(StrEnum):
class CommonConfig (line 28) | class CommonConfig(BaseModel):
class RedisKVStoreConfig (line 35) | class RedisKVStoreConfig(CommonConfig):
method url (line 41) | def url(self) -> str:
method pip_packages (line 45) | def pip_packages(cls) -> list[str]:
method sample_run_config (line 49) | def sample_run_config(cls):
class SqliteKVStoreConfig (line 57) | class SqliteKVStoreConfig(CommonConfig):
method pip_packages (line 64) | def pip_packages(cls) -> list[str]:
method sample_run_config (line 68) | def sample_run_config(cls, __distro_dir__: str, db_name: str = "kvstor...
class PostgresKVStoreConfig (line 75) | class PostgresKVStoreConfig(CommonConfig):
method sample_run_config (line 87) | def sample_run_config(cls, table_name: str = "llamastack_kvstore", **k...
method validate_table_name (line 100) | def validate_table_name(cls, v: str) -> str:
method pip_packages (line 115) | def pip_packages(cls) -> list[str]:
class MongoDBKVStoreConfig (line 119) | class MongoDBKVStoreConfig(CommonConfig):
method pip_packages (line 129) | def pip_packages(cls) -> list[str]:
method sample_run_config (line 133) | def sample_run_config(cls, collection_name: str = "llamastack_kvstore"):
class SqlAlchemySqlStoreConfig (line 145) | class SqlAlchemySqlStoreConfig(BaseModel):
method engine_str (line 150) | def engine_str(self) -> str: ...
method pip_packages (line 154) | def pip_packages(cls) -> list[str]:
class SqliteSqlStoreConfig (line 158) | class SqliteSqlStoreConfig(SqlAlchemySqlStoreConfig):
method engine_str (line 165) | def engine_str(self) -> str:
method sample_run_config (line 169) | def sample_run_config(cls, __distro_dir__: str, db_name: str = "sqlsto...
method pip_packages (line 176) | def pip_packages(cls) -> list[str]:
class PostgresSqlStoreConfig (line 180) | class PostgresSqlStoreConfig(SqlAlchemySqlStoreConfig):
method engine_str (line 192) | def engine_str(self) -> str:
method pip_packages (line 196) | def pip_packages(cls) -> list[str]:
method sample_run_config (line 200) | def sample_run_config(cls, **kwargs):
class SqlStoreReference (line 216) | class SqlStoreReference(BaseModel):
class KVStoreReference (line 229) | class KVStoreReference(BaseModel):
class InferenceStoreReference (line 252) | class InferenceStoreReference(SqlStoreReference):
class ResponsesStoreReference (line 265) | class ResponsesStoreReference(InferenceStoreReference):
class ServerStoresConfig (line 274) | class ServerStoresConfig(BaseModel):
function _default_backends (line 310) | def _default_backends() -> dict[str, StorageBackendConfig]:
class StorageConfig (line 322) | class StorageConfig(BaseModel):
FILE: src/llama_stack/core/storage/kvstore/config.py
function get_pip_packages (line 24) | def get_pip_packages(store_config: dict | KVStoreConfig) -> list[str]:
FILE: src/llama_stack/core/storage/kvstore/kvstore.py
function kvstore_dependencies (line 31) | def kvstore_dependencies():
class InmemoryKVStoreImpl (line 42) | class InmemoryKVStoreImpl(KVStore):
method __init__ (line 43) | def __init__(self):
method initialize (line 46) | async def initialize(self) -> None:
method get (line 49) | async def get(self, key: str) -> str | None:
method set (line 52) | async def set(self, key: str, value: str, expiration: datetime | None ...
method values_in_range (line 55) | async def values_in_range(self, start_key: str, end_key: str) -> list[...
method keys_in_range (line 58) | async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
method delete (line 62) | async def delete(self, key: str) -> None:
method shutdown (line 65) | async def shutdown(self) -> None:
function register_kvstore_backends (line 74) | def register_kvstore_backends(backends: dict[str, StorageBackendConfig])...
function kvstore_impl (line 88) | async def kvstore_impl(reference: KVStoreReference) -> KVStore:
function shutdown_kvstore_backends (line 134) | async def shutdown_kvstore_backends() -> None:
FILE: src/llama_stack/core/storage/kvstore/mongodb/mongodb.py
class MongoDBKVStoreImpl (line 20) | class MongoDBKVStoreImpl(KVStore):
method __init__ (line 21) | def __init__(self, config: MongoDBKVStoreConfig):
method collection (line 26) | def collection(self) -> AsyncCollection:
method initialize (line 31) | async def initialize(self) -> None:
method _namespaced_key (line 44) | def _namespaced_key(self, key: str) -> str:
method set (line 49) | async def set(self, key: str, value: str, expiration: datetime | None ...
method get (line 54) | async def get(self, key: str) -> str | None:
method delete (line 60) | async def delete(self, key: str) -> None:
method values_in_range (line 64) | async def values_in_range(self, start_key: str, end_key: str) -> list[...
method keys_in_range (line 76) | async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
method shutdown (line 87) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/storage/kvstore/postgres/postgres.py
class PostgresKVStoreImpl (line 21) | class PostgresKVStoreImpl(KVStore):
method __init__ (line 22) | def __init__(self, config: PostgresKVStoreConfig):
method initialize (line 27) | async def initialize(self) -> None:
method _cursor_or_raise (line 55) | def _cursor_or_raise(self) -> DictCursor:
method _namespaced_key (line 60) | def _namespaced_key(self, key: str) -> str:
method set (line 65) | async def set(self, key: str, value: str, expiration: datetime | None ...
method get (line 78) | async def get(self, key: str) -> str | None:
method delete (line 92) | async def delete(self, key: str) -> None:
method values_in_range (line 100) | async def values_in_range(self, start_key: str, end_key: str) -> list[...
method keys_in_range (line 116) | async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
method shutdown (line 127) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/storage/kvstore/redis/redis.py
class RedisKVStoreImpl (line 16) | class RedisKVStoreImpl(KVStore):
method __init__ (line 17) | def __init__(self, config: RedisKVStoreConfig):
method initialize (line 21) | async def initialize(self) -> None:
method _client (line 24) | def _client(self) -> Redis:
method _namespaced_key (line 29) | def _namespaced_key(self, key: str) -> str:
method set (line 34) | async def set(self, key: str, value: str, expiration: datetime | None ...
method get (line 41) | async def get(self, key: str) -> str | None:
method delete (line 54) | async def delete(self, key: str) -> None:
method values_in_range (line 58) | async def values_in_range(self, start_key: str, end_key: str) -> list[...
method keys_in_range (line 85) | async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
method shutdown (line 103) | async def shutdown(self) -> None:
FILE: src/llama_stack/core/storage/kvstore/sqlite/sqlite.py
class SqliteKVStoreImpl (line 20) | class SqliteKVStoreImpl(KVStore):
method __init__ (line 21) | def __init__(self, config: SqliteKVStoreConfig):
method __str__ (line 26) | def __str__(self):
method _is_memory_db (line 29) | def _is_memory_db(self) -> bool:
method initialize (line 33) | async def initialize(self):
method shutdown (line 68) | async def shutdown(self):
method set (line 74) | async def set(self, key: str, value: str, expiration: datetime | None ...
method get (line 91) | async def get(self, key: str) -> str | None:
method delete (line 120) | async def delete(self, key: str) -> None:
method values_in_range (line 131) | async def values_in_range(self, start_key: str, end_key: str) -> list[...
method keys_in_range (line 156) | async def keys_in_range(self, start_key: str, end_key: str) -> list[str]:
FILE: src/llama_stack/core/storage/sqlstore/authorized_sqlstore.py
function _enhance_item_with_access_control (line 51) | def _enhance_item_with_access_control(item: Mapping[str, Any], current_u...
class SqlRecord (line 68) | class SqlRecord(ProtectedResource):
method __init__ (line 69) | def __init__(self, record_id: str, table_name: str, owner: User | None):
class AuthorizedSqlStore (line 75) | class AuthorizedSqlStore:
method __init__ (line 83) | def __init__(self, sql_store: SqlStore, policy: list[AccessRule]):
method _detect_database_type (line 95) | def _detect_database_type(self) -> None:
method _validate_sql_optimized_policy (line 104) | def _validate_sql_optimized_policy(self) -> None:
method create_table (line 119) | async def create_table(self, table: str, schema: Mapping[str, ColumnTy...
method insert (line 132) | async def insert(self, table: str, data: Mapping[str, Any] | Sequence[...
method upsert (line 142) | async def upsert(
method fetch_all (line 159) | async def fetch_all(
method fetch_one (line 204) | async def fetch_one(
method update (line 222) | async def update(self, table: str, data: Mapping[str, Any], where: Map...
method delete (line 237) | async def delete(self, table: str, where: Mapping[str, Any]) -> None:
method _build_access_control_where_clause (line 241) | def _build_access_control_where_clause(self, policy: list[AccessRule])...
method _json_extract (line 255) | def _json_extract(self, column: str, path: str) -> str:
method _json_extract_text (line 272) | def _json_extract_text(self, column: str, path: str) -> str:
method _get_public_access_conditions (line 289) | def _get_public_access_conditions(self) -> list[str]:
method _build_default_policy_where_clause (line 300) | def _build_default_policy_where_clause(self, current_user: User | None...
method _build_conservative_where_clause (line 330) | def _build_conservative_where_clause(self) -> tuple[str, dict[str, Any]]:
FILE: src/llama_stack/core/storage/sqlstore/sqlalchemy_sqlstore.py
function _build_where_expr (line 47) | def _build_where_expr(column: ColumnElement, value: Any) -> ColumnElement:
class SqlAlchemySqlStoreImpl (line 71) | class SqlAlchemySqlStoreImpl(SqlStore):
method __init__ (line 72) | def __init__(self, config: SqlAlchemySqlStoreConfig):
method _ensure_engine (line 82) | async def _ensure_engine(self):
method shutdown (line 104) | async def shutdown(self):
method create_engine (line 110) | def create_engine(self) -> AsyncEngine:
method create_table (line 148) | async def create_table(
method insert (line 185) | async def insert(self, table: str, data: Mapping[str, Any] | Sequence[...
method upsert (line 192) | async def upsert(
method fetch_all (line 217) | async def fetch_all(
method fetch_one (line 323) | async def fetch_one(
method update (line 336) | async def update(
method delete (line 354) | async def delete(self, table: str, where: Mapping[str, Any]) -> None:
method add_column_if_not_exists (line 367) | async def add_column_if_not_exists(
method _add_column_now (line 384) | async def _add_column_now(
method _get_dialect_insert (line 432) | def _get_dialect_insert(self, table: Table):
FILE: src/llama_stack/core/storage/sqlstore/sqlstore.py
function get_pip_packages (line 34) | def get_pip_packages(store_config: dict | SqlStoreConfig) -> list[str]:
function sqlstore_impl (line 48) | def sqlstore_impl(reference: SqlStoreReference) -> SqlStore:
function register_sqlstore_backends (line 78) | def register_sqlstore_backends(backends: dict[str, StorageBackendConfig]...
function shutdown_sqlstore_backends (line 90) | async def shutdown_sqlstore_backends() -> None:
FILE: src/llama_stack/core/store/registry.py
class DistributionRegistry (line 22) | class DistributionRegistry(Protocol):
method get_all (line 23) | async def get_all(self) -> list[RoutableObjectWithProvider]: ...
method initialize (line 25) | async def initialize(self) -> None: ...
method get (line 27) | async def get(self, type: str, identifier: str) -> RoutableObjectWithP...
method get_cached (line 29) | def get_cached(self, type: str, identifier: str) -> RoutableObjectWith...
method update (line 31) | async def update(self, obj: RoutableObjectWithProvider) -> RoutableObj...
method register (line 33) | async def register(self, obj: RoutableObjectWithProvider) -> bool: ...
method delete (line 35) | async def delete(self, type: str, identifier: str) -> None: ...
function _get_registry_key_range (line 43) | def _get_registry_key_range() -> tuple[str, str]:
function _parse_registry_values (line 49) | def _parse_registry_values(values: list[str]) -> list[RoutableObjectWith...
class DiskDistributionRegistry (line 63) | class DiskDistributionRegistry(DistributionRegistry):
method __init__ (line 64) | def __init__(self, kvstore: KVStore):
method initialize (line 67) | async def initialize(self) -> None:
method get_cached (line 70) | def get_cached(self, type: str, identifier: str) -> RoutableObjectWith...
method get_all (line 74) | async def get_all(self) -> list[RoutableObjectWithProvider]:
method get (line 79) | async def get(self, type: str, identifier: str) -> RoutableObjectWithP...
method update (line 90) | async def update(self, obj: RoutableObjectWithProvider) -> RoutableObj...
method register (line 97) | async def register(self, obj: RoutableObjectWithProvider) -> bool:
method delete (line 129) | async def delete(self, type: str, identifier: str) -> None:
class CachedDiskDistributionRegistry (line 133) | class CachedDiskDistributionRegistry(DiskDistributionRegistry):
method __init__ (line 134) | def __init__(self, kvstore: KVStore, cache_ttl_seconds: float = 5.0):
method _locked_cache (line 144) | async def _locked_cache(self):
method _ensure_initialized (line 149) | async def _ensure_initialized(self):
method initialize (line 169) | async def initialize(self) -> None:
method get_cached (line 172) | def get_cached(self, type: str, identifier: str) -> RoutableObjectWith...
method _should_refresh_cache (line 175) | def _should_refresh_cache(self) -> bool:
method _refresh_cache_from_db (line 180) | async def _refresh_cache_from_db(self) -> None:
method get_all (line 196) | async def get_all(self) -> list[RoutableObjectWithProvider]:
method get (line 207) | async def get(self, type: str, identifier: str) -> RoutableObjectWithP...
method register (line 226) | async def register(self, obj: RoutableObjectWithProvider) -> bool:
method update (line 237) | async def update(self, obj: RoutableObjectWithProvider) -> RoutableObj...
method delete (line 244) | async def delete(self, type: str, identifier: str) -> None:
function create_dist_registry (line 252) | async def create_dist_registry(
FILE: src/llama_stack/core/task.py
class RequestContext (line 19) | class RequestContext:
function capture_request_context (line 34) | def capture_request_context() -> RequestContext:
function activate_request_context (line 43) | def activate_request_context(ctx: RequestContext):
function create_detached_background_task (line 58) | def create_detached_background_task(coro: Coroutine[Any, Any, Any]) -> a...
FILE: src/llama_stack/core/testing_context.py
function get_test_context (line 15) | def get_test_context() -> str | None:
function set_test_context (line 19) | def set_test_context(value: str | None):
function reset_test_context (line 23) | def reset_test_context(token) -> None:
function sync_test_context_from_provider_data (line 27) | def sync_test_context_from_provider_data():
function is_debug_mode (line 47) | def is_debug_mode() -> bool:
FILE: src/llama_stack/core/utils/config.py
function redact_sensitive_fields (line 10) | def redact_sensitive_fields(data: dict[str, Any]) -> dict[str, Any]:
FILE: src/llama_stack/core/utils/config_resolution.py
function resolve_config_or_distro (line 18) | def resolve_config_or_distro(
function _get_distro_config_path (line 72) | def _get_distro_config_path(distro_name: str, path: str | None = None) -...
function _format_resolution_error (line 79) | def _format_resolution_error(config_or_distro: str) -> str:
function _get_available_distros (line 104) | def _get_available_distros() -> list[str]:
function _format_distro_suggestions (line 116) | def _format_distro_suggestions(distros: list[str], user_input: str) -> str:
FILE: src/llama_stack/core/utils/context.py
function preserve_contexts_async_generator (line 13) | def preserve_contexts_async_generator[T](
FILE: src/llama_stack/core/utils/dynamic.py
function instantiate_class_type (line 10) | def instantiate_class_type(fully_qualified_name):
FILE: src/llama_stack/core/utils/exec.py
function formulate_run_args (line 20) | def formulate_run_args(image_type: str, distro_name: str) -> list:
function in_notebook (line 44) | def in_notebook():
function run_command (line 58) | def run_command(command: list[str]) -> int:
FILE: src/llama_stack/core/utils/image_types.py
class LlamaStackImageType (line 10) | class LlamaStackImageType(enum.Enum):
FILE: src/llama_stack/core/utils/model_utils.py
function model_local_dir (line 12) | def model_local_dir(descriptor: str) -> str:
FILE: src/llama_stack/core/utils/prompt_for_config.py
function is_list_of_primitives (line 21) | def is_list_of_primitives(field_type):
function is_basemodel_without_fields (line 31) | def is_basemodel_without_fields(typ):
function can_recurse (line 35) | def can_recurse(typ):
function get_literal_values (line 39) | def get_literal_values(field):
function is_optional (line 46) | def is_optional(field_type):
function get_non_none_type (line 51) | def get_non_none_type(field_type):
function manually_validate_field (line 56) | def manually_validate_field(model: type[BaseModel], field_name: str, val...
function is_discriminated_union (line 65) | def is_discriminated_union(typ) -> bool:
function prompt_for_discriminated_union (line 75) | def prompt_for_discriminated_union(
function prompt_for_config (line 129) | def prompt_for_config(config_type: type[BaseModel], existing_config: Bas...
FILE: src/llama_stack/core/utils/serialize.py
class EnumEncoder (line 12) | class EnumEncoder(json.JSONEncoder):
method default (line 13) | def default(self, obj):
FILE: src/llama_stack/core/utils/type_inspection.py
function is_unwrapped_body_param (line 19) | def is_unwrapped_body_param(param_type: Any) -> bool:
function is_body_param (line 48) | def is_body_param(param_type: Any) -> bool:
FILE: src/llama_stack/distributions/ci-tests/ci_tests.py
function get_distribution_template (line 16) | def get_distribution_template() -> DistributionTemplate:
FILE: src/llama_stack/distributions/dell/dell.py
function get_distribution_template (line 25) | def get_distribution_template() -> DistributionTemplate:
FILE: src/llama_stack/distributions/nvidia/nvidia.py
function get_distribution_template (line 18) | def get_distribution_template(name: str = "nvidia") -> DistributionTempl...
FILE: src/llama_stack/distributions/oci/oci.py
function get_distribution_template (line 16) | def get_distribution_template(name: str = "oci") -> DistributionTemplate:
FILE: src/llama_stack/distributions/open-benchmark/open_benchmark.py
function get_inference_providers (line 38) | def get_inference_providers() -> tuple[list[Provider], dict[str, list[Pr...
function get_distribution_template (line 96) | def get_distribution_template() -> DistributionTemplate:
FILE: src/llama_stack/distributions/starter-gpu/starter_gpu.py
function get_distribution_template (line 13) | def get_distribution_template() -> DistributionTemplate:
FILE: src/llama_stack/distributions/starter/starter.py
function _get_config_for_provider (line 49) | def _get_config_for_provider(provider_spec: ProviderSpec) -> dict[str, A...
function get_remote_inference_providers (line 90) | def get_remote_inference_providers() -> list[Provider]:
function get_distribution_template (line 118) | def get_distribution_template(name: str = "starter") -> DistributionTemp...
FILE: src/llama_stack/distributions/template.py
function filter_empty_values (line 42) | def filter_empty_values(obj: Any) -> Any:
function get_model_registry (line 87) | def get_model_registry(
function get_shield_registry (line 129) | def get_shield_registry(
class DefaultModel (line 172) | class DefaultModel(BaseModel):
class RunConfigSettings (line 177) | class RunConfigSettings(BaseModel):
method run_config (line 191) | def run_config(
class DistributionTemplate (line 308) | class DistributionTemplate(BaseModel):
method generate_markdown_docs (line 329) | def generate_markdown_docs(self) -> str:
method save_distribution (line 385) | def save_distribution(self, yaml_output_dir: Path, doc_output_dir: Pat...
FILE: src/llama_stack/distributions/watsonx/watsonx.py
function get_distribution_template (line 14) | def get_distribution_template(name: str = "watsonx") -> DistributionTemp...
FILE: src/llama_stack/env.py
class MissingCredentialError (line 10) | class MissingCredentialError(Exception):
function get_env_or_fail (line 14) | def get_env_or_fail(key: str) -> str:
FILE: src/llama_stack/log.py
class LoggingConfig (line 21) | class LoggingConfig(BaseModel):
function config_to_category_levels (line 62) | def config_to_category_levels(category: str, level: str):
function parse_yaml_config (line 94) | def parse_yaml_config(yaml_config: LoggingConfig) -> dict[str, int]:
function parse_environment_config (line 111) | def parse_environment_config(env_config: str) -> dict[str, int]:
function strip_rich_markup (line 139) | def strip_rich_markup(text):
class CustomRichHandler (line 144) | class CustomRichHandler(RichHandler):
method __init__ (line 145) | def __init__(self, *args, **kwargs):
method emit (line 153) | def emit(self, record):
class CustomFileHandler (line 166) | class CustomFileHandler(logging.FileHandler):
method __init__ (line 167) | def __init__(self, filename, mode="a", encoding=None, delay=False):
method emit (line 173) | def emit(self, record):
function setup_logging (line 179) | def setup_logging(category_levels: dict[str, int] | None = None, log_fil...
function get_logger (line 313) | def get_logger(
FILE: src/llama_stack/models/llama/sku_list.py
function resolve_model (line 21) | def resolve_model(descriptor: str) -> Model | None:
function all_registered_models (line 28) | def all_registered_models() -> list[Model]:
function llama2_family (line 40) | def llama2_family() -> list[Model]:
function llama3_family (line 47) | def llama3_family() -> list[Model]:
function llama3_1_family (line 54) | def llama3_1_family() -> list[Model]:
function llama3_2_family (line 61) | def llama3_2_family() -> list[Model]:
function llama3_3_family (line 68) | def llama3_3_family() -> list[Model]:
function llama4_family (line 74) | def llama4_family() -> list[Model]:
function llama4_base_models (line 81) | def llama4_base_models() -> list[Model]:
function llama4_instruct_models (line 100) | def llama4_instruct_models() -> list[Model]:
function llama2_base_models (line 128) | def llama2_base_models() -> list[Model]:
function llama3_base_models (line 187) | def llama3_base_models() -> list[Model]:
function llama3_1_base_models (line 228) | def llama3_1_base_models() -> list[Model]:
function llama3_2_base_models (line 326) | def llama3_2_base_models() -> list[Model]:
function llama2_instruct_models (line 409) | def llama2_instruct_models() -> list[Model]:
function llama3_instruct_models (line 468) | def llama3_instruct_models() -> list[Model]:
function llama3_1_instruct_models (line 509) | def llama3_1_instruct_models() -> list[Model]:
function arch_args_1b (line 607) | def arch_args_1b() -> dict:
function arch_args_3b (line 622) | def arch_args_3b() -> dict:
function llama3_2_quantized_models (line 637) | def llama3_2_quantized_models() -> list[Model]:
function llama3_2_instruct_models (line 706) | def llama3_2_instruct_models() -> list[Model]:
function llama3_3_instruct_models (line 768) | def llama3_3_instruct_models() -> list[Model]:
function safety_models (line 792) | def safety_models() -> list[Model]:
class LlamaDownloadInfo (line 919) | class LlamaDownloadInfo:
function llama_meta_net_info (line 925) | def llama_meta_net_info(model: Model) -> LlamaDownloadInfo:
function llama_meta_pth_size (line 1004) | def llama_meta_pth_size(model: Model) -> int:
FILE: src/llama_stack/models/llama/sku_types.py
class CheckpointQuantizationFormat (line 13) | class CheckpointQuantizationFormat(Enum):
class ModelFamily (line 25) | class ModelFamily(Enum):
class CoreModelId (line 35) | class CoreModelId(Enum):
function is_multimodal (line 87) | def is_multimodal(model_id) -> bool:
function model_family (line 99) | def model_family(model_id) -> ModelFamily:
class Model (line 159) | class Model(BaseModel):
method model_family (line 174) | def model_family(self) -> ModelFamily:
method descriptor (line 178) | def descriptor(self, shorten_default_variant: bool = True) -> str:
method is_instruct_model (line 184) | def is_instruct_model(self) -> bool:
method is_featured (line 189) | def is_featured(self) -> bool:
method max_seq_length (line 199) | def max_seq_length(self) -> int:
FILE: src/llama_stack/providers/inline/agents/builtin/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/agents/builtin/agents.py
class BuiltinAgentsImpl (line 42) | class BuiltinAgentsImpl(Agents):
method __init__ (line 43) | def __init__(
method initialize (line 71) | async def initialize(self) -> None:
method shutdown (line 92) | async def shutdown(self) -> None:
method get_openai_response (line 97) | async def get_openai_response(
method create_openai_response (line 104) | async def create_openai_response(
method list_openai_responses (line 149) | async def list_openai_responses(
method list_openai_response_input_items (line 158) | async def list_openai_response_input_items(
method delete_openai_response (line 172) | async def delete_openai_response(
FILE: src/llama_stack/providers/inline/agents/builtin/config.py
class AgentPersistenceConfig (line 15) | class AgentPersistenceConfig(BaseModel):
class BuiltinAgentsImplConfig (line 22) | class BuiltinAgentsImplConfig(BaseModel):
method sample_run_config (line 30) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/agents/builtin/responses/openai_responses.py
class _BackgroundWorkItem (line 93) | class _BackgroundWorkItem:
class OpenAIResponsePreviousResponseWithInputItems (line 100) | class OpenAIResponsePreviousResponseWithInputItems(BaseModel):
class OpenAIResponsesImpl (line 105) | class OpenAIResponsesImpl:
method __init__ (line 106) | def __init__(
method initialize (line 139) | async def initialize(self) -> None:
method _ensure_workers_started (line 148) | async def _ensure_workers_started(self) -> None:
method shutdown (line 155) | async def shutdown(self) -> None:
method _background_worker (line 161) | async def _background_worker(self) -> None:
method _prepend_previous_response (line 208) | async def _prepend_previous_response(
method _process_input_with_previous_response (line 224) | async def _process_input_with_previous_response(
method _prepend_prompt (line 298) | async def _prepend_prompt(
method get_openai_response (line 370) | async def get_openai_response(
method list_openai_responses (line 377) | async def list_openai_responses(
method list_openai_response_input_items (line 386) | async def list_openai_response_input_items(
method _store_response (line 407) | async def _store_response(
method _prepare_input_items_for_storage (line 444) | def _prepare_input_items_for_storage(
method _persist_streaming_state (line 476) | async def _persist_streaming_state(
method create_openai_response (line 563) | async def create_openai_response(
method _create_background_response (line 766) | async def _create_background_response(
method _run_background_response_loop (line 878) | async def _run_background_response_loop(
method _create_streaming_response (line 977) | async def _create_streaming_response(
method delete_openai_response (line 1134) | async def delete_openai_response(self, response_id: str) -> OpenAIDele...
method _sync_response_to_conversation (line 1137) | async def _sync_response_to_conversation(
FILE: src/llama_stack/providers/inline/agents/builtin/responses/streaming.py
function extract_openai_error (line 148) | def extract_openai_error(exc: Exception) -> tuple[str, str]:
function convert_tooldef_to_chat_tool (line 192) | def convert_tooldef_to_chat_tool(tool_def):
class StreamingResponseOrchestrator (line 208) | class StreamingResponseOrchestrator:
method __init__ (line 209) | def __init__(
method _create_refusal_response (line 297) | async def _create_refusal_response(self, violation_message: str) -> Op...
method _clone_outputs (line 330) | def _clone_outputs(self, outputs: list[OpenAIResponseOutput]) -> list[...
method _snapshot_response (line 339) | def _snapshot_response(
method create_response (line 382) | async def create_response(self) -> AsyncIterator[OpenAIResponseObjectS...
method _separate_tool_calls (line 674) | def _separate_tool_calls(self, current_response, messages) -> tuple[li...
method _accumulate_chunk_usage (line 731) | def _accumulate_chunk_usage(self, chunk: OpenAIChatCompletionChunk) ->...
method _handle_reasoning_content_chunk (line 776) | async def _handle_reasoning_content_chunk(
method _handle_refusal_content_chunk (line 807) | async def _handle_refusal_content_chunk(
method _emit_reasoning_done_events (line 838) | async def _emit_reasoning_done_events(
method _emit_refusal_done_events (line 868) | async def _emit_refusal_done_events(
method _process_streaming_chunks (line 898) | async def _process_streaming_chunks(
method _build_chat_completion (line 1229) | def _build_chat_completion(self, result: ChatCompletionResult) -> Open...
method _coordinate_tool_execution (line 1255) | async def _coordinate_tool_execution(
method _process_new_tools (line 1391) | async def _process_new_tools(
method _process_mcp_tool (line 1442) | async def _process_mcp_tool(
method _process_tools (line 1536) | async def _process_tools(
method _approval_required (line 1552) | def _approval_required(self, tool_name: str) -> bool:
method _add_mcp_approval_request (line 1567) | async def _add_mcp_approval_request(
method _add_mcp_list_tools (line 1594) | async def _add_mcp_list_tools(
method _reuse_mcp_list_tools (line 1627) | async def _reuse_mcp_list_tools(
function _process_tool_choice (line 1650) | async def _process_tool_choice(
function resolve_mcp_connector_id (line 1759) | async def resolve_mcp_connector_id(
FILE: src/llama_stack/providers/inline/agents/builtin/responses/tool_executor.py
class ToolExecutor (line 51) | class ToolExecutor:
method __init__ (line 52) | def __init__(
method execute_tool_call (line 67) | async def execute_tool_call(
method _execute_file_search_via_vector_store (line 126) | async def _execute_file_search_via_vector_store(
method _emit_progress_events (line 247) | async def _emit_progress_events(
method _execute_tool (line 313) | async def _execute_tool(
method _emit_completion_events (line 380) | async def _emit_completion_events(
method _build_result_messages (line 420) | async def _build_result_messages(
FILE: src/llama_stack/providers/inline/agents/builtin/responses/types.py
function _json_equal (line 38) | def _json_equal(a: str, b: str) -> bool:
class ToolExecutionResult (line 46) | class ToolExecutionResult(BaseModel):
class ChatCompletionResult (line 57) | class ChatCompletionResult:
method content_text (line 73) | def content_text(self) -> str:
method has_tool_calls (line 78) | def has_tool_calls(self) -> bool:
class ToolContext (line 83) | class ToolContext(BaseModel):
method __init__ (line 97) | def __init__(
method recover_tools_from_previous_response (line 108) | def recover_tools_from_previous_response(
method available_tools (line 147) | def available_tools(self) -> list[OpenAIResponseTool]:
class ChatCompletionContext (line 169) | class ChatCompletionContext(BaseModel):
method __init__ (line 184) | def __init__(
method approval_response (line 216) | def approval_response(self, tool_name: str, arguments: str) -> OpenAIR...
method _approval_request (line 220) | def _approval_request(self, tool_name: str, arguments: str) -> OpenAIR...
method available_tools (line 226) | def available_tools(self) -> list[OpenAIResponseTool]:
FILE: src/llama_stack/providers/inline/agents/builtin/responses/utils.py
function extract_bytes_from_file (line 63) | async def extract_bytes_from_file(file_id: str, files_api: Files) -> bytes:
function generate_base64_ascii_text_from_bytes (line 79) | def generate_base64_ascii_text_from_bytes(raw_bytes: bytes) -> str:
function construct_data_url (line 89) | def construct_data_url(ascii_text: str, mime_type: str | None) -> str:
function convert_chat_choice_to_response_message (line 103) | async def convert_chat_choice_to_response_message(
function _build_tool_result_messages (line 129) | async def _build_tool_result_messages(
function _file_part_to_text_part (line 167) | def _file_part_to_text_part(part: OpenAIFile) -> OpenAIChatCompletionCon...
function convert_response_content_to_chat_content (line 185) | async def convert_response_content_to_chat_content(
function convert_response_input_to_chat_messages (line 281) | async def convert_response_input_to_chat_messages(
function _extract_tool_call_ids (line 396) | def _extract_tool_call_ids(messages: list[OpenAIMessageParam]) -> set[str]:
function convert_response_text_to_chat_response_format (line 409) | async def convert_response_text_to_chat_response_format(
function get_message_type_by_role (line 429) | async def get_message_type_by_role(role: str) -> type[OpenAIMessageParam...
function _extract_citations_from_text (line 440) | def _extract_citations_from_text(
function is_function_tool_call (line 487) | def is_function_tool_call(
function run_guardrails (line 499) | async def run_guardrails(safety_api: Safety | None, messages: str, guard...
function extract_guardrail_ids (line 546) | def extract_guardrail_ids(guardrails: list | None) -> list[str]:
function convert_mcp_tool_choice (line 563) | def convert_mcp_tool_choice(
FILE: src/llama_stack/providers/inline/agents/builtin/safety.py
class SafetyException (line 15) | class SafetyException(Exception): # noqa: N818
method __init__ (line 16) | def __init__(self, violation: SafetyViolation):
class ShieldRunnerMixin (line 21) | class ShieldRunnerMixin:
method __init__ (line 22) | def __init__(
method run_multiple_shields (line 32) | async def run_multiple_shields(self, messages: list[OpenAIMessageParam...
FILE: src/llama_stack/providers/inline/batches/reference/__init__.py
function get_provider_impl (line 19) | async def get_provider_impl(config: ReferenceBatchesImplConfig, deps: di...
FILE: src/llama_stack/providers/inline/batches/reference/batches.py
class AsyncBytesIO (line 61) | class AsyncBytesIO:
method __init__ (line 69) | def __init__(self, data: bytes):
method read (line 72) | async def read(self, n=-1):
method seek (line 75) | async def seek(self, pos, whence=0):
method __enter__ (line 78) | def __enter__(self):
method __exit__ (line 81) | def __exit__(self, exc_type, exc_val, exc_tb):
method __getattr__ (line 84) | def __getattr__(self, name):
class BatchRequest (line 88) | class BatchRequest(BaseModel):
function convert_to_openai_message_param (line 96) | def convert_to_openai_message_param(msg: dict[str, Any]) -> OpenAIMessag...
class ReferenceBatchesImpl (line 114) | class ReferenceBatchesImpl(Batches):
method __init__ (line 121) | def __init__(
method initialize (line 141) | async def initialize(self) -> None:
method shutdown (line 145) | async def shutdown(self) -> None:
method create_batch (line 153) | async def create_batch(
method cancel_batch (line 258) | async def cancel_batch(self, request: CancelBatchRequest) -> BatchObject:
method list_batches (line 276) | async def list_batches(
method retrieve_batch (line 314) | async def retrieve_batch(self, request: RetrieveBatchRequest) -> Batch...
method _update_batch (line 322) | async def _update_batch(self, batch_id: str, **updates) -> None:
method _validate_input (line 345) | async def _validate_input(self, batch: BatchObject) -> tuple[list[Batc...
method _process_batch (line 524) | async def _process_batch(self, batch_id: str) -> None:
method _process_batch_impl (line 545) | async def _process_batch_impl(self, batch_id: str) -> None:
method _process_single_request (line 620) | async def _process_single_request(self, batch_id: str, request: BatchR...
method _create_output_file (line 683) | async def _create_output_file(self, batch_id: str, results: list[dict]...
FILE: src/llama_stack/providers/inline/batches/reference/config.py
class ReferenceBatchesImplConfig (line 12) | class ReferenceBatchesImplConfig(BaseModel):
method sample_run_config (line 34) | def sample_run_config(cls, __distro_dir__: str) -> dict:
FILE: src/llama_stack/providers/inline/datasetio/localfs/__init__.py
function get_provider_impl (line 12) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/datasetio/localfs/config.py
class LocalFSDatasetIOConfig (line 13) | class LocalFSDatasetIOConfig(BaseModel):
method sample_run_config (line 17) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/datasetio/localfs/datasetio.py
class PandasDataframeDataset (line 18) | class PandasDataframeDataset:
method __init__ (line 19) | def __init__(self, dataset_def: Dataset, *args, **kwargs) -> None:
method __len__ (line 24) | def __len__(self) -> int:
method __getitem__ (line 28) | def __getitem__(self, idx):
method load (line 35) | async def load(self) -> None:
class LocalFSDatasetIOImpl (line 52) | class LocalFSDatasetIOImpl(DatasetIO, DatasetsProtocolPrivate):
method __init__ (line 53) | def __init__(self, config: LocalFSDatasetIOConfig) -> None:
method initialize (line 59) | async def initialize(self) -> None:
method shutdown (line 70) | async def shutdown(self) -> None: ...
method register_dataset (line 72) | async def register_dataset(
method unregister_dataset (line 84) | async def unregister_dataset(self, dataset_id: str) -> None:
method iterrows (line 89) | async def iterrows(
method append_rows (line 102) | async def append_rows(self, dataset_id: str, rows: list[dict[str, Any]...
FILE: src/llama_stack/providers/inline/eval/builtin/__init__.py
function get_provider_impl (line 13) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/eval/builtin/config.py
class BuiltinEvalConfig (line 13) | class BuiltinEvalConfig(BaseModel):
method sample_run_config (line 17) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/eval/builtin/eval.py
class BuiltinEvalImpl (line 43) | class BuiltinEvalImpl(
method __init__ (line 47) | def __init__(
method initialize (line 68) | async def initialize(self) -> None:
method shutdown (line 79) | async def shutdown(self) -> None: ...
method register_benchmark (line 81) | async def register_benchmark(self, task_def: Benchmark) -> None:
method unregister_benchmark (line 90) | async def unregister_benchmark(self, benchmark_id: str) -> None:
method run_eval (line 97) | async def run_eval(
method _run_model_generation (line 128) | async def _run_model_generation(
method evaluate_rows (line 174) | async def evaluate_rows(
method job_status (line 206) | async def job_status(self, request: JobStatusRequest) -> Job:
method job_cancel (line 212) | async def job_cancel(self, request: JobCancelRequest) -> None:
method job_result (line 215) | async def job_result(self, request: JobResultRequest) -> EvaluateRespo...
FILE: src/llama_stack/providers/inline/file_processor/pypdf/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: PyPDFFileProcessorConfig, deps: dict...
FILE: src/llama_stack/providers/inline/file_processor/pypdf/adapter.py
class PyPDFFileProcessorAdapter (line 16) | class PyPDFFileProcessorAdapter:
method __init__ (line 19) | def __init__(self, config: PyPDFFileProcessorConfig, files_api=None) -...
method process_file (line 24) | async def process_file(
method shutdown (line 37) | async def shutdown(self) -> None:
FILE: src/llama_stack/providers/inline/file_processor/pypdf/config.py
class PyPDFFileProcessorConfig (line 14) | class PyPDFFileProcessorConfig(BaseModel):
method sample_run_config (line 46) | def sample_run_config(cls, **kwargs: Any) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/file_processor/pypdf/pypdf.py
class PyPDFFileProcessor (line 33) | class PyPDFFileProcessor:
method __init__ (line 36) | def __init__(self, config: PyPDFFileProcessorConfig, files_api=None) -...
method process_file (line 40) | async def process_file(
method _extract_pdf_text (line 132) | def _extract_pdf_text(self, reader: PdfReader) -> tuple[str, list[str]]:
method _extract_pdf_metadata (line 148) | def _extract_pdf_metadata(self, reader: PdfReader) -> dict[str, Any]:
method _clean_text (line 172) | def _clean_text(self, text: str) -> str:
method _create_chunks (line 186) | def _create_chunks(
FILE: src/llama_stack/providers/inline/files/localfs/__init__.py
function get_provider_impl (line 17) | async def get_provider_impl(config: LocalfsFilesImplConfig, deps: dict[A...
FILE: src/llama_stack/providers/inline/files/localfs/config.py
class LocalfsFilesImplConfig (line 14) | class LocalfsFilesImplConfig(BaseModel):
method sample_run_config (line 24) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/files/localfs/files.py
class LocalfsFilesImpl (line 60) | class LocalfsFilesImpl(Files):
method __init__ (line 61) | def __init__(self, config: LocalfsFilesImplConfig, policy: list[Access...
method initialize (line 66) | async def initialize(self) -> None:
method shutdown (line 87) | async def shutdown(self) -> None:
method _generate_file_id (line 92) | def _generate_file_id(self) -> str:
method _validate_file_id (line 96) | def _validate_file_id(self, file_id: str) -> None:
method _validate_path_containment (line 103) | def _validate_path_containment(self, file_path: Path) -> Path:
method _get_file_path (line 120) | def _get_file_path(self, file_id: str) -> Path:
method _lookup_file_id (line 126) | async def _lookup_file_id(self, file_id: str, action: Action = Action....
method openai_upload_file (line 142) | async def openai_upload_file(
method openai_list_files (line 194) | async def openai_list_files(
method openai_retrieve_file (line 241) | async def openai_retrieve_file(self, request: RetrieveFileRequest) -> ...
method openai_delete_file (line 247) | async def openai_delete_file(self, request: DeleteFileRequest) -> Open...
method openai_retrieve_file_content (line 264) | async def openai_retrieve_file_content(self, request: RetrieveFileCont...
FILE: src/llama_stack/providers/inline/inference/sentence_transformers/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/inference/sentence_transformers/config.py
class SentenceTransformersInferenceConfig (line 12) | class SentenceTransformersInferenceConfig(BaseModel):
method sample_run_config (line 14) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/inference/sentence_transformers/sentence_transformers.py
class SentenceTransformersInferenceImpl (line 30) | class SentenceTransformersInferenceImpl(
method __init__ (line 37) | def __init__(self, config: SentenceTransformersInferenceConfig) -> None:
method initialize (line 40) | async def initialize(self) -> None:
method shutdown (line 43) | async def shutdown(self) -> None:
method should_refresh_models (line 46) | async def should_refresh_models(self) -> bool:
method list_models (line 49) | async def list_models(self) -> list[Model] | None:
method register_model (line 62) | async def register_model(self, model: Model) -> Model:
method unregister_model (line 65) | async def unregister_model(self, model_id: str) -> None:
method openai_completion (line 68) | async def openai_completion(
method openai_chat_completion (line 74) | async def openai_chat_completion(
FILE: src/llama_stack/providers/inline/inference/transformers/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/inference/transformers/config.py
class TransformersInferenceConfig (line 12) | class TransformersInferenceConfig(BaseModel):
method sample_run_config (line 14) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/inference/transformers/transformers.py
class TransformersInferenceImpl (line 48) | class TransformersInferenceImpl(
method __init__ (line 54) | def __init__(self, config: TransformersInferenceConfig) -> None:
method initialize (line 57) | async def initialize(self) -> None:
method shutdown (line 60) | async def shutdown(self) -> None:
method should_refresh_models (line 63) | async def should_refresh_models(self) -> bool:
method list_models (line 66) | async def list_models(self) -> list[Model] | None:
method register_model (line 76) | async def register_model(self, model: Model) -> Model:
method unregister_model (line 79) | async def unregister_model(self, model_id: str) -> None:
method openai_completion (line 82) | async def openai_completion(
method openai_chat_completion (line 88) | async def openai_chat_completion(
method openai_embeddings (line 94) | async def openai_embeddings(
method rerank (line 100) | async def rerank(
method load_reranker_model (line 138) | async def load_reranker_model(self, model: str) -> tuple[Any, Any]:
method compute_reranked_scores (line 171) | def compute_reranked_scores(
method extract_text (line 222) | def extract_text(
method format_instruction (line 232) | def format_instruction(self, instruction: str, query: str, document: s...
FILE: src/llama_stack/providers/inline/safety/code_scanner/__init__.py
function get_provider_impl (line 12) | async def get_provider_impl(config: CodeScannerConfig, deps: dict[str, A...
FILE: src/llama_stack/providers/inline/safety/code_scanner/code_scanner.py
class BuiltinCodeScannerSafetyImpl (line 40) | class BuiltinCodeScannerSafetyImpl(Safety):
method __init__ (line 41) | def __init__(self, config: CodeScannerConfig, deps) -> None:
method initialize (line 44) | async def initialize(self) -> None:
method shutdown (line 47) | async def shutdown(self) -> None:
method register_shield (line 50) | async def register_shield(self, shield: Shield) -> None:
method run_shield (line 56) | async def run_shield(self, request: RunShieldRequest) -> RunShieldResp...
method get_moderation_object_results (line 76) | def get_moderation_object_results(self, scan_result: "CodeShieldScanRe...
method run_moderation (line 102) | async def run_moderation(self, request: RunModerationRequest) -> Moder...
FILE: src/llama_stack/providers/inline/safety/code_scanner/config.py
class CodeScannerConfig (line 12) | class CodeScannerConfig(BaseModel):
method sample_run_config (line 14) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/safety/llama_guard/__init__.py
function get_provider_impl (line 12) | async def get_provider_impl(config: LlamaGuardConfig, deps: dict[str, An...
FILE: src/llama_stack/providers/inline/safety/llama_guard/config.py
class LlamaGuardConfig (line 12) | class LlamaGuardConfig(BaseModel):
method sample_run_config (line 16) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/safety/llama_guard/llama_guard.py
class LlamaGuardSafetyImpl (line 143) | class LlamaGuardSafetyImpl(Safety, ShieldsProtocolPrivate):
method __init__ (line 144) | def __init__(self, config: LlamaGuardConfig, deps) -> None:
method initialize (line 148) | async def initialize(self) -> None:
method shutdown (line 151) | async def shutdown(self) -> None:
method register_shield (line 154) | async def register_shield(self, shield: Shield) -> None:
method unregister_shield (line 159) | async def unregister_shield(self, identifier: str) -> None:
method run_shield (line 164) | async def run_shield(self, request: RunShieldRequest) -> RunShieldResp...
method run_moderation (line 198) | async def run_moderation(self, request: RunModerationRequest) -> Moder...
class LlamaGuardShield (line 230) | class LlamaGuardShield:
method __init__ (line 231) | def __init__(
method check_unsafe_response (line 252) | def check_unsafe_response(self, response: str) -> str | None:
method get_safety_categories (line 264) | def get_safety_categories(self) -> list[str]:
method validate_messages (line 280) | def validate_messages(self, messages: list[OpenAIMessageParam]) -> lis...
method run (line 291) | async def run(self, messages: list[OpenAIMessageParam]) -> RunShieldRe...
method build_text_shield_input (line 310) | def build_text_shield_input(self, messages: list[OpenAIMessageParam]) ...
method build_vision_shield_input (line 313) | def build_vision_shield_input(self, messages: list[OpenAIMessageParam]...
method build_prompt (line 347) | def build_prompt(self, messages: list[OpenAIMessageParam]) -> str:
method get_shield_response (line 359) | def get_shield_response(self, response: str) -> RunShieldResponse:
method run_moderation (line 380) | async def run_moderation(self, messages: list[OpenAIMessageParam]) -> ...
method create_moderation_object (line 398) | def create_moderation_object(self, model: str, unsafe_code: str | None...
method is_content_safe (line 467) | def is_content_safe(self, response: str, unsafe_code: str | None = Non...
method get_moderation_object (line 479) | def get_moderation_object(self, response: str) -> ModerationObject:
FILE: src/llama_stack/providers/inline/safety/prompt_guard/__init__.py
function get_provider_impl (line 12) | async def get_provider_impl(config: PromptGuardConfig, deps: dict[str, A...
FILE: src/llama_stack/providers/inline/safety/prompt_guard/config.py
class PromptGuardType (line 13) | class PromptGuardType(Enum):
class PromptGuardConfig (line 18) | class PromptGuardConfig(BaseModel):
method validate_guard_type (line 23) | def validate_guard_type(cls, v):
method sample_run_config (line 29) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/safety/prompt_guard/prompt_guard.py
class PromptGuardSafetyImpl (line 35) | class PromptGuardSafetyImpl(ShieldToModerationMixin, Safety, ShieldsProt...
method __init__ (line 38) | def __init__(self, config: PromptGuardConfig, _deps) -> None:
method initialize (line 41) | async def initialize(self) -> None:
method shutdown (line 51) | async def shutdown(self) -> None:
method register_shield (line 54) | async def register_shield(self, shield: Shield) -> None:
method unregister_shield (line 58) | async def unregister_shield(self, identifier: str) -> None:
method run_shield (line 61) | async def run_shield(self, request: RunShieldRequest) -> RunShieldResp...
class PromptGuardShield (line 69) | class PromptGuardShield:
method __init__ (line 70) | def __init__(
method run (line 97) | async def run(self, messages: list[OpenAIMessageParam]) -> RunShieldRe...
FILE: src/llama_stack/providers/inline/scoring/basic/__init__.py
function get_provider_impl (line 13) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/scoring/basic/config.py
class BasicScoringConfig (line 11) | class BasicScoringConfig(BaseModel):
method sample_run_config (line 13) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/scoring/basic/scoring.py
class BasicScoringImpl (line 41) | class BasicScoringImpl(
method __init__ (line 45) | def __init__(
method initialize (line 56) | async def initialize(self) -> None:
method shutdown (line 62) | async def shutdown(self) -> None: ...
method list_scoring_functions (line 64) | async def list_scoring_functions(self) -> list[ScoringFn]:
method register_scoring_function (line 74) | async def register_scoring_function(self, function_def: ScoringFn) -> ...
method score_batch (line 77) | async def score_batch(
method score (line 96) | async def score(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/docvqa_scoring_fn.py
function normalize_answer (line 191) | def normalize_answer(s: str) -> str:
class DocVQAScoringFn (line 215) | class DocVQAScoringFn(RegisteredBaseScoringFn):
method __init__ (line 222) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 228) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/equality_scoring_fn.py
class EqualityScoringFn (line 15) | class EqualityScoringFn(RegisteredBaseScoringFn):
method __init__ (line 20) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 26) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/ifeval_scoring_fn.py
class IfEvalScoringFn (line 17) | class IfEvalScoringFn(RegisteredBaseScoringFn):
method __init__ (line 22) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 28) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_math_response_scoring_fn.py
class RegexParserMathResponseScoringFn (line 17) | class RegexParserMathResponseScoringFn(RegisteredBaseScoringFn):
method __init__ (line 22) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 28) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/regex_parser_scoring_fn.py
class RegexParserScoringFn (line 17) | class RegexParserScoringFn(RegisteredBaseScoringFn):
method __init__ (line 22) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 28) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/scoring_fn/subset_of_scoring_fn.py
class SubsetOfScoringFn (line 15) | class SubsetOfScoringFn(RegisteredBaseScoringFn):
method __init__ (line 20) | def __init__(self, *args, **kwargs) -> None:
method score_row (line 26) | async def score_row(
FILE: src/llama_stack/providers/inline/scoring/basic/utils/ifeval_utils.py
function split_into_sentences (line 1609) | def split_into_sentences(text):
function count_words (line 1660) | def count_words(text):
function split_chinese_japanese_hindi (line 1668) | def split_chinese_japanese_hindi(lines: str) -> Iterable[str]:
function count_words_cjk (line 1684) | def count_words_cjk(text: str) -> int:
function _get_sentence_tokenizer (line 1711) | def _get_sentence_tokenizer():
function count_sentences (line 1715) | def count_sentences(text):
function get_langid (line 1722) | def get_langid(text: str, lid_path: str | None = None) -> str:
function generate_keywords (line 1738) | def generate_keywords(num_keywords):
class Instruction (line 1822) | class Instruction:
method __init__ (line 1825) | def __init__(self, instruction_id):
method build_description (line 1828) | def build_description(self, **kwargs):
method get_instruction_args (line 1831) | def get_instruction_args(self):
method get_instruction_args_keys (line 1834) | def get_instruction_args_keys(self):
method check_following (line 1837) | def check_following(self, value):
class ResponseLanguageChecker (line 1841) | class ResponseLanguageChecker(Instruction):
method build_description (line 1844) | def build_description(self, *, language=None):
method get_instruction_args (line 1866) | def get_instruction_args(self):
method get_instruction_args_keys (line 1870) | def get_instruction_args_keys(self):
method check_following (line 1874) | def check_following(self, value):
class NumberOfSentences (line 1893) | class NumberOfSentences(Instruction):
method build_description (line 1896) | def build_description(self, *, num_sentences=None, relation=None):
method get_instruction_args (line 1931) | def get_instruction_args(self):
method get_instruction_args_keys (line 1938) | def get_instruction_args_keys(self):
method check_following (line 1942) | def check_following(self, value):
class PlaceholderChecker (line 1969) | class PlaceholderChecker(Instruction):
method build_description (line 1972) | def build_description(self, *, num_placeholders=None):
method get_instruction_args (line 1991) | def get_instruction_args(self):
method get_instruction_args_keys (line 1995) | def get_instruction_args_keys(self):
method check_following (line 1999) | def check_following(self, value):
class BulletListChecker (line 2014) | class BulletListChecker(Instruction):
method build_description (line 2017) | def build_description(self, *, num_bullets=None):
method get_instruction_args (line 2038) | def get_instruction_args(self):
method get_instruction_args_keys (line 2042) | def get_instruction_args_keys(self):
method check_following (line 2046) | def check_following(self, value):
class ConstrainedResponseChecker (line 2063) | class ConstrainedResponseChecker(Instruction):
method build_description (line 2066) | def build_description(self):
method get_instruction_args (line 2073) | def get_instruction_args(self):
method get_instruction_args_keys (line 2077) | def get_instruction_args_keys(self):
method check_following (line 2081) | def check_following(self, value):
class ConstrainedStartChecker (line 2098) | class ConstrainedStartChecker(Instruction):
method build_description (line 2101) | def build_description(self, *, starter=None):
method get_instruction_args (line 2119) | def get_instruction_args(self):
method get_instruction_args_keys (line 2123) | def get_instruction_args_keys(self):
method check_following (line 2127) | def check_following(self, value):
class HighlightSectionChecker (line 2142) | class HighlightSectionChecker(Instruction):
method build_description (line 2145) | def build_description(self, *, num_highlights=None):
method get_instruction_args (line 2166) | def get_instruction_args(self):
method get_instruction_args_keys (line 2170) | def get_instruction_args_keys(self):
method check_following (line 2174) | def check_following(self, value):
class SectionChecker (line 2198) | class SectionChecker(Instruction):
method build_description (line 2201) | def build_description(self, *, section_spliter=None, num_sections=None):
method get_instruction_args (line 2231) | def get_instruction_args(self):
method get_instruction_args_keys (line 2238) | def get_instruction_args_keys(self):
method check_following (line 2242) | def check_following(self, value):
class ParagraphChecker (line 2261) | class ParagraphChecker(Instruction):
method build_description (line 2264) | def build_description(self, *, num_paragraphs=None):
method get_instruction_args (line 2283) | def get_instruction_args(self):
method get_instruction_args_keys (line 2287) | def get_instruction_args_keys(self):
method check_following (line 2291) | def check_following(self, value):
class PostscriptChecker (line 2315) | class PostscriptChecker(Instruction):
method build_description (line 2318) | def build_description(self, *, postscript_marker=None):
method get_instruction_args (line 2338) | def get_instruction_args(self):
method get_instruction_args_keys (line 2342) | def get_instruction_args_keys(self):
method check_following (line 2346) | def check_following(self, value):
class RephraseChecker (line 2368) | class RephraseChecker(Instruction):
method build_description (line 2371) | def build_description(self, *, original_message):
method get_instruction_args (line 2394) | def get_instruction_args(self):
method get_instruction_args_keys (line 2398) | def get_instruction_args_keys(self):
method check_following (line 2402) | def check_following(self, value):
method is_change (line 2422) | def is_change(self, response):
method strip_changes (line 2426) | def strip_changes(self, response):
class KeywordChecker (line 2431) | class KeywordChecker(Instruction):
method build_description (line 2434) | def build_description(self, *, keywords=None):
method get_instruction_args (line 2455) | def get_instruction_args(self):
method get_instruction_args_keys (line 2459) | def get_instruction_args_keys(self):
method check_following (line 2463) | def check_following(self, value):
class KeywordFrequencyChecker (line 2471) | class KeywordFrequencyChecker(Instruction):
method build_description (line 2474) | def build_description(self, *, keyword=None, frequency=None, relation=...
method get_instruction_args (line 2518) | def get_instruction_args(self):
method get_instruction_args_keys (line 2526) | def get_instruction_args_keys(self):
method check_following (line 2530) | def check_following(self, value):
class NumberOfWords (line 2540) | class NumberOfWords(Instruction):
method build_description (line 2543) | def build_description(self, *, num_words=None, relation=None):
method get_instruction_args (line 2576) | def get_instruction_args(self):
method get_instruction_args_keys (line 2580) | def get_instruction_args_keys(self):
method check_following (line 2584) | def check_following(self, value):
class JsonFormat (line 2600) | class JsonFormat(Instruction):
method build_description (line 2603) | def build_description(self):
method get_instruction_args (line 2609) | def get_instruction_args(self):
method get_instruction_args_keys (line 2613) | def get_instruction_args_keys(self):
method check_following (line 2617) | def check_following(self, value):
class ParagraphFirstWordCheck (line 2634) | class ParagraphFirstWordCheck(Instruction):
method build_description (line 2637) | def build_description(self, num_paragraphs=None, nth_paragraph=None, f...
method get_instruction_args (line 2677) | def get_instruction_args(self):
method get_instruction_args_keys (line 2685) | def get_instruction_args_keys(self):
method check_following (line 2689) | def check_following(self, value):
class KeySentenceChecker (line 2733) | class KeySentenceChecker(Instruction):
method build_description (line 2736) | def build_description(self, key_sentences=None, num_sentences=None):
method get_instruction_args (line 2763) | def get_instruction_args(self):
method get_instruction_args_keys (line 2770) | def get_instruction_args_keys(self):
method check_following (line 2774) | def check_following(self, value):
class ForbiddenWords (line 2785) | class ForbiddenWords(Instruction):
method build_description (line 2788) | def build_description(self, forbidden_words=None):
method get_instruction_args (line 2808) | def get_instruction_args(self):
method get_instruction_args_keys (line 2812) | def get_instruction_args_keys(self):
method check_following (line 2816) | def check_following(self, value):
class RephraseParagraph (line 2824) | class RephraseParagraph(Instruction):
method build_description (line 2827) | def build_description(self, *, original_paragraph, low, high):
method get_instruction_args (line 2855) | def get_instruction_args(self):
method get_instruction_args_keys (line 2863) | def get_instruction_args_keys(self):
method check_following (line 2867) | def check_following(self, value):
class TwoResponsesChecker (line 2881) | class TwoResponsesChecker(Instruction):
method build_description (line 2884) | def build_description(self):
method get_instruction_args (line 2892) | def get_instruction_args(self):
method get_instruction_args_keys (line 2896) | def get_instruction_args_keys(self):
method check_following (line 2900) | def check_following(self, value):
class RepeatPromptThenAnswer (line 2920) | class RepeatPromptThenAnswer(Instruction):
method build_description (line 2923) | def build_description(self, *, prompt_to_repeat=None):
method get_instruction_args (line 2944) | def get_instruction_args(self):
method get_instruction_args_keys (line 2947) | def get_instruction_args_keys(self):
method check_following (line 2951) | def check_following(self, value):
class EndChecker (line 2957) | class EndChecker(Instruction):
method build_description (line 2960) | def build_description(self, *, end_phrase=None):
method get_instruction_args (line 2977) | def get_instruction_args(self):
method get_instruction_args_keys (line 2980) | def get_instruction_args_keys(self):
method check_following (line 2984) | def check_following(self, value):
class TitleChecker (line 2991) | class TitleChecker(Instruction):
method build_description (line 2994) | def build_description(self):
method get_instruction_args (line 3001) | def get_instruction_args(self):
method get_instruction_args_keys (line 3004) | def get_instruction_args_keys(self):
method check_following (line 3008) | def check_following(self, value):
class LetterFrequencyChecker (line 3020) | class LetterFrequencyChecker(Instruction):
method build_description (line 3023) | def build_description(self, *, letter=None, let_frequency=None, let_re...
method get_instruction_args (line 3068) | def get_instruction_args(self):
method get_instruction_args_keys (line 3076) | def get_instruction_args_keys(self):
method check_following (line 3080) | def check_following(self, value):
class CapitalLettersEnglishChecker (line 3091) | class CapitalLettersEnglishChecker(Instruction):
method build_description (line 3094) | def build_description(self):
method get_instruction_args (line 3099) | def get_instruction_args(self):
method get_instruction_args_keys (line 3102) | def get_instruction_args_keys(self):
method check_following (line 3106) | def check_following(self, value):
class LowercaseLettersEnglishChecker (line 3118) | class LowercaseLettersEnglishChecker(Instruction):
method build_description (line 3121) | def build_description(self):
method get_instruction_args (line 3128) | def get_instruction_args(self):
method get_instruction_args_keys (line 3131) | def get_instruction_args_keys(self):
method check_following (line 3135) | def check_following(self, value):
class CommaChecker (line 3147) | class CommaChecker(Instruction):
method build_description (line 3150) | def build_description(self, **kwargs):
method get_instruction_args (line 3155) | def get_instruction_args(self):
method get_instruction_args_keys (line 3158) | def get_instruction_args_keys(self):
method check_following (line 3162) | def check_following(self, value):
class CapitalWordFrequencyChecker (line 3167) | class CapitalWordFrequencyChecker(Instruction):
method build_description (line 3170) | def build_description(
method get_instruction_args (line 3205) | def get_instruction_args(self):
method get_instruction_args_keys (line 3212) | def get_instruction_args_keys(self):
method check_following (line 3216) | def check_following(self, value):
class QuotationChecker (line 3231) | class QuotationChecker(Instruction):
method build_description (line 3234) | def build_description(self):
method get_instruction_args (line 3239) | def get_instruction_args(self):
method get_instruction_args_keys (line 3243) | def get_instruction_args_keys(self):
method check_following (line 3247) | def check_following(self, value):
FILE: src/llama_stack/providers/inline/scoring/basic/utils/math_utils.py
function try_evaluate_frac (line 72) | def try_evaluate_frac(expression: str, fmt: str = "0.2e") -> str:
function try_evaluate_latex (line 90) | def try_evaluate_latex(expression: str, fmt: str = ".2e") -> str:
function first_answer (line 101) | def first_answer(text: str, markers: Sequence[str] = ("Q:", "A:")) -> str:
function extract_result_from_boxed (line 107) | def extract_result_from_boxed(answer: str) -> str:
function normalize_final_answer (line 142) | def normalize_final_answer(final_answer: str, regex_pattern: str, match_...
function _normalise_result (line 189) | def _normalise_result(string: str) -> str:
function _remove_right_units (line 254) | def _remove_right_units(string: str) -> str:
function _fix_sqrt (line 267) | def _fix_sqrt(string: str) -> str:
function _fix_fracs (line 284) | def _fix_fracs(string: str) -> str:
function _fix_a_slash_b (line 318) | def _fix_a_slash_b(string: str) -> str:
FILE: src/llama_stack/providers/inline/scoring/braintrust/__init__.py
class BraintrustProviderDataValidator (line 15) | class BraintrustProviderDataValidator(BaseModel):
function get_provider_impl (line 19) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/scoring/braintrust/braintrust.py
function _get_braintrust_evaluators (line 61) | def _get_braintrust_evaluators() -> dict[str, Any]:
class BraintrustScoringImpl (line 101) | class BraintrustScoringImpl(
method __init__ (line 106) | def __init__(
method initialize (line 117) | async def initialize(self) -> None: ...
method shutdown (line 119) | async def shutdown(self) -> None: ...
method list_scoring_functions (line 121) | async def list_scoring_functions(self) -> list[ScoringFn]:
method register_scoring_function (line 130) | async def register_scoring_function(self, scoring_fn: ScoringFn) -> None:
method set_api_key (line 133) | async def set_api_key(self) -> None:
method score_batch (line 145) | async def score_batch(
method score_row (line 166) | async def score_row(self, input_row: dict[str, Any], scoring_fn_identi...
method score (line 185) | async def score(
FILE: src/llama_stack/providers/inline/scoring/braintrust/config.py
class BraintrustScoringConfig (line 11) | class BraintrustScoringConfig(BaseModel):
method sample_run_config (line 18) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/scoring/llm_as_judge/__init__.py
function get_provider_impl (line 13) | async def get_provider_impl(
FILE: src/llama_stack/providers/inline/scoring/llm_as_judge/config.py
class LlmAsJudgeScoringConfig (line 11) | class LlmAsJudgeScoringConfig(BaseModel):
method sample_run_config (line 13) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/scoring/llm_as_judge/scoring.py
class LlmAsJudgeScoringImpl (line 28) | class LlmAsJudgeScoringImpl(
method __init__ (line 32) | def __init__(
method initialize (line 44) | async def initialize(self) -> None:
method shutdown (line 48) | async def shutdown(self) -> None: ...
method list_scoring_functions (line 50) | async def list_scoring_functions(self) -> list[ScoringFn]:
method register_scoring_function (line 60) | async def register_scoring_function(self, function_def: ScoringFn) -> ...
method unregister_scoring_function (line 63) | async def unregister_scoring_function(self, scoring_fn_id: str) -> None:
method score_batch (line 66) | async def score_batch(
method score (line 85) | async def score(
FILE: src/llama_stack/providers/inline/scoring/llm_as_judge/scoring_fn/llm_as_judge_scoring_fn.py
class LlmAsJudgeScoringFn (line 16) | class LlmAsJudgeScoringFn(RegisteredBaseScoringFn):
method __init__ (line 21) | def __init__(self, inference_api: Inference, *arg, **kwargs) -> None:
method score_row (line 29) | async def score_row(
FILE: src/llama_stack/providers/inline/tool_runtime/file_search/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: FileSearchToolRuntimeConfig, deps: d...
FILE: src/llama_stack/providers/inline/tool_runtime/file_search/config.py
class FileSearchToolRuntimeConfig (line 14) | class FileSearchToolRuntimeConfig(BaseModel):
method sample_run_config (line 21) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/tool_runtime/file_search/context_retriever.py
function generate_rag_query (line 24) | async def generate_rag_query(
function default_rag_query_generator (line 42) | async def default_rag_query_generator(
function llm_rag_query_generator (line 50) | async def llm_rag_query_generator(
FILE: src/llama_stack/providers/inline/tool_runtime/file_search/file_search.py
function raw_data_from_doc (line 52) | async def raw_data_from_doc(doc: RAGDocument) -> tuple[bytes, str]:
class FileSearchToolRuntimeImpl (line 98) | class FileSearchToolRuntimeImpl(ToolGroupsProtocolPrivate, ToolRuntime):
method __init__ (line 99) | def __init__(
method initialize (line 111) | async def initialize(self):
method shutdown (line 114) | async def shutdown(self):
method register_toolgroup (line 117) | async def register_toolgroup(self, toolgroup: ToolGroup) -> None:
method unregister_toolgroup (line 120) | async def unregister_toolgroup(self, toolgroup_id: str) -> None:
method insert (line 123) | async def insert(
method query (line 186) | async def query(
method list_runtime_tools (line 302) | async def list_runtime_tools(
method invoke_tool (line 334) | async def invoke_tool(
FILE: src/llama_stack/providers/inline/vector_io/chroma/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: ChromaVectorIOConfig, deps: dict[Api...
FILE: src/llama_stack/providers/inline/vector_io/chroma/config.py
class ChromaVectorIOConfig (line 16) | class ChromaVectorIOConfig(BaseModel):
method sample_run_config (line 21) | def sample_run_config(
FILE: src/llama_stack/providers/inline/vector_io/faiss/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: FaissVectorIOConfig, deps: dict[Api,...
FILE: src/llama_stack/providers/inline/vector_io/faiss/config.py
class FaissVectorIOConfig (line 16) | class FaissVectorIOConfig(BaseModel):
method sample_run_config (line 20) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/vector_io/faiss/faiss.py
function _get_faiss (line 21) | def _get_faiss() -> Any:
function _get_numpy (line 38) | def _get_numpy() -> Any:
function _list_op (line 79) | def _list_op(mv: Any, fv: Any, *, negate: bool) -> bool:
class FaissIndex (line 105) | class FaissIndex(EmbeddingIndex):
method __init__ (line 106) | def __init__(self, dimension: int, kvstore: KVStore | None = None, ban...
method create (line 122) | async def create(cls, dimension: int, kvstore: KVStore | None = None, ...
method initialize (line 127) | async def initialize(self) -> None:
method _save_index (line 158) | async def _save_index(self):
method delete (line 173) | async def delete(self):
method add_chunks (line 179) | async def add_chunks(self, embedded_chunks: list[EmbeddedChunk]):
method delete_chunks (line 205) | async def delete_chunks(self, chunks_for_deletion: list[ChunkForDeleti...
method _resolve_filter_positions (line 242) | def _resolve_filter_positions(self, filter_obj: Filter) -> set[int]:
method query_vector (line 283) | async def query_vector(
method query_keyword (line 321) | async def query_keyword(
method query_hybrid (line 328) | async def query_hybrid(
class FaissVectorIOAdapter (line 343) | class FaissVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStore...
method __init__ (line 344) | def __init__(self, config: FaissVectorIOConfig, inference_api: Inferen...
method initialize (line 349) | async def initialize(self) -> None:
method shutdown (line 368) | async def shutdown(self) -> None:
method health (line 372) | async def health(self) -> HealthResponse:
method register_vector_store (line 388) | async def register_vector_store(self, vector_store: VectorStore) -> None:
method list_vector_stores (line 402) | async def list_vector_stores(self) -> list[VectorStore]:
method unregister_vector_store (line 405) | async def unregister_vector_store(self, vector_store_id: str) -> None:
method _get_and_cache_vector_store_index (line 416) | async def _get_and_cache_vector_store_index(self, vector_store_id: str...
method insert_chunks (line 437) | async def insert_chunks(self, request: InsertChunksRequest) -> None:
method query_chunks (line 444) | async def query_chunks(self, request: QueryChunksRequest) -> QueryChun...
method delete_chunks (line 451) | async def delete_chunks(self, request: DeleteChunksRequest) -> None:
FILE: src/llama_stack/providers/inline/vector_io/milvus/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: MilvusVectorIOConfig, deps: dict[Api...
FILE: src/llama_stack/providers/inline/vector_io/milvus/config.py
class MilvusVectorIOConfig (line 16) | class MilvusVectorIOConfig(BaseModel):
method sample_run_config (line 22) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/inline/vector_io/qdrant/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: QdrantVectorIOConfig, deps: dict[Api...
FILE: src/llama_stack/providers/inline/vector_io/qdrant/config.py
class QdrantVectorIOConfig (line 17) | class QdrantVectorIOConfig(BaseModel):
method sample_run_config (line 22) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/vector_io/sqlite_vec/__init__.py
function get_provider_impl (line 14) | async def get_provider_impl(config: SQLiteVectorIOConfig, deps: dict[Api...
FILE: src/llama_stack/providers/inline/vector_io/sqlite_vec/config.py
class SQLiteVectorIOConfig (line 14) | class SQLiteVectorIOConfig(BaseModel):
method sample_run_config (line 19) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/inline/vector_io/sqlite_vec/sqlite_vec.py
function _get_numpy (line 22) | def _get_numpy() -> Any:
function _get_sqlite_vec (line 39) | def _get_sqlite_vec() -> Any:
function serialize_vector (line 104) | def serialize_vector(vector: list[float]) -> bytes:
function _create_sqlite_connection (line 109) | def _create_sqlite_connection(db_path: str):
function _make_sql_identifier (line 118) | def _make_sql_identifier(name: str) -> str:
class SQLiteVecIndex (line 122) | class SQLiteVecIndex(EmbeddingIndex):
method __init__ (line 131) | def __init__(self, dimension: int, db_path: str, bank_id: str, kvstore...
method create (line 141) | async def create(cls, dimension: int, db_path: str, bank_id: str):
method initialize (line 146) | async def initialize(self) -> None:
method delete (line 178) | async def delete(self) -> None:
method add_chunks (line 193) | async def add_chunks(self, embedded_chunks: list[EmbeddedChunk], batch...
method _translate_filters (line 256) | def _translate_filters(self, filters: Filter | None) -> tuple[str, lis...
method _translate_single_filter (line 271) | def _translate_single_filter(self, filter_obj: Filter) -> tuple[str, l...
method _translate_comparison_filter (line 280) | def _translate_comparison_filter(self, filter_obj: ComparisonFilter) -...
method _translate_compound_filter (line 301) | def _translate_compound_filter(self, filter_obj: CompoundFilter) -> tu...
method query_vector (line 321) | async def query_vector(
method query_keyword (line 370) | async def query_keyword(
method query_hybrid (line 419) | async def query_hybrid(
method delete_chunks (line 487) | async def delete_chunks(self, chunks_for_deletion: list[ChunkForDeleti...
class SQLiteVecVectorIOAdapter (line 519) | class SQLiteVecVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorS...
method __init__ (line 526) | def __init__(self, config, inference_api: Inference, files_api: Files ...
method initialize (line 532) | async def initialize(self) -> None:
method shutdown (line 548) | async def shutdown(self) -> None:
method list_vector_stores (line 552) | async def list_vector_stores(self) -> list[VectorStore]:
method register_vector_store (line 555) | async def register_vector_store(self, vector_store: VectorStore) -> None:
method _get_and_cache_vector_store_index (line 569) | async def _get_and_cache_vector_store_index(self, vector_store_id: str...
method unregister_vector_store (line 596) | async def unregister_vector_store(self, vector_store_id: str) -> None:
method insert_chunks (line 602) | async def insert_chunks(self, request: InsertChunksRequest) -> None:
method query_chunks (line 609) | async def query_chunks(self, request: QueryChunksRequest) -> QueryChun...
method delete_chunks (line 616) | async def delete_chunks(self, request: DeleteChunksRequest) -> None:
FILE: src/llama_stack/providers/registry/agents.py
function available_providers (line 16) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/batches.py
function available_providers (line 11) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/datasetio.py
function available_providers (line 16) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/eval.py
function available_providers (line 11) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/file_processors.py
function available_providers (line 14) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/files.py
function available_providers (line 11) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/inference.py
function available_providers (line 29) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/safety.py
function available_providers (line 16) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/scoring.py
function available_providers (line 11) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/tool_runtime.py
function available_providers (line 17) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/registry/vector_io.py
function available_providers (line 19) | def available_providers() -> list[ProviderSpec]:
FILE: src/llama_stack/providers/remote/datasetio/huggingface/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(
FILE: src/llama_stack/providers/remote/datasetio/huggingface/config.py
class HuggingfaceDatasetIOConfig (line 13) | class HuggingfaceDatasetIOConfig(BaseModel):
method sample_run_config (line 17) | def sample_run_config(cls, __distro_dir__: str, **kwargs: Any) -> dict...
FILE: src/llama_stack/providers/remote/datasetio/huggingface/huggingface.py
function parse_hf_params (line 18) | def parse_hf_params(dataset_def: Dataset):
class HuggingfaceDatasetIOImpl (line 28) | class HuggingfaceDatasetIOImpl(DatasetIO, DatasetsProtocolPrivate):
method __init__ (line 29) | def __init__(self, config: HuggingfaceDatasetIOConfig) -> None:
method initialize (line 35) | async def initialize(self) -> None:
method shutdown (line 46) | async def shutdown(self) -> None: ...
method register_dataset (line 48) | async def register_dataset(
method unregister_dataset (line 60) | async def unregister_dataset(self, dataset_id: str) -> None:
method iterrows (line 65) | async def iterrows(
method append_rows (line 80) | async def append_rows(self, dataset_id: str, rows: list[dict[str, Any]...
FILE: src/llama_stack/providers/remote/datasetio/nvidia/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(
FILE: src/llama_stack/providers/remote/datasetio/nvidia/config.py
class NvidiaDatasetIOConfig (line 14) | class NvidiaDatasetIOConfig(BaseModel):
method __post_init__ (line 38) | def __post_init__(self):
method sample_run_config (line 55) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/remote/datasetio/nvidia/datasetio.py
class NvidiaDatasetIOAdapter (line 16) | class NvidiaDatasetIOAdapter:
method __init__ (line 19) | def __init__(self, config: NvidiaDatasetIOConfig):
method _make_request (line 23) | async def _make_request(
method register_dataset (line 50) | async def register_dataset(
method update_dataset (line 83) | async def update_dataset(
method unregister_dataset (line 94) | async def unregister_dataset(
method iterrows (line 104) | async def iterrows(
method append_rows (line 112) | async def append_rows(self, dataset_id: str, rows: list[dict[str, Any]...
FILE: src/llama_stack/providers/remote/eval/nvidia/__init__.py
function get_adapter_impl (line 13) | async def get_adapter_impl(
FILE: src/llama_stack/providers/remote/eval/nvidia/config.py
class NVIDIAEvalConfig (line 12) | class NVIDIAEvalConfig(BaseModel):
method sample_run_config (line 26) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/remote/eval/nvidia/eval.py
class NVIDIAEvalImpl (line 36) | class NVIDIAEvalImpl(
method __init__ (line 41) | def __init__(
method client (line 61) | def client(self) -> httpx.AsyncClient:
method initialize (line 66) | async def initialize(self) -> None:
method shutdown (line 69) | async def shutdown(self) -> None:
method _evaluator_get (line 73) | async def _evaluator_get(self, path: str):
method _evaluator_post (line 79) | async def _evaluator_post(self, path: str, data: dict[str, Any]):
method _evaluator_delete (line 85) | async def _evaluator_delete(self, path: str) -> None:
method register_benchmark (line 90) | async def register_benchmark(self, task_def: Benchmark) -> None:
method unregister_benchmark (line 102) | async def unregister_benchmark(self, benchmark_id: str) -> None:
method run_eval (line 106) | async def run_eval(
method evaluate_rows (line 128) | async def evaluate_rows(
method job_status (line 134) | async def job_status(self, request: JobStatusRequest) -> Job:
method job_cancel (line 155) | async def job_cancel(self, request: JobCancelRequest) -> None:
method job_result (line 159) | async def job_result(self, request: JobResultRequest) -> EvaluateRespo...
FILE: src/llama_stack/providers/remote/files/openai/__init__.py
function get_adapter_impl (line 14) | async def get_adapter_impl(config: OpenAIFilesImplConfig, deps: dict[Api...
FILE: src/llama_stack/providers/remote/files/openai/config.py
class OpenAIFilesImplConfig (line 14) | class OpenAIFilesImplConfig(BaseModel):
method sample_run_config (line 21) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/remote/files/openai/files.py
function _make_file_object (line 38) | def _make_file_object(
class OpenAIFilesImpl (line 69) | class OpenAIFilesImpl(Files):
method __init__ (line 72) | def __init__(self, config: OpenAIFilesImplConfig, policy: list[AccessR...
method _now (line 78) | def _now(self) -> int:
method _get_file (line 82) | async def _get_file(
method _delete_file (line 92) | async def _delete_file(self, file_id: str) -> None:
method _delete_if_expired (line 103) | async def _delete_if_expired(self, file_id: str) -> None:
method initialize (line 109) | async def initialize(self) -> None:
method shutdown (line 125) | async def shutdown(self) -> None:
method client (line 129) | def client(self) -> OpenAI:
method sql_store (line 134) | def sql_store(self) -> AuthorizedSqlStore:
method openai_upload_file (line 138) | async def openai_upload_file(
method openai_list_files (line 188) | async def openai_list_files(
method openai_retrieve_file (line 221) | async def openai_retrieve_file(self, request: RetrieveFileRequest) -> ...
method openai_delete_file (line 227) | async def openai_delete_file(self, request: DeleteFileRequest) -> Open...
method openai_retrieve_file_content (line 234) | async def openai_retrieve_file_content(self, request: RetrieveFileCont...
FILE: src/llama_stack/providers/remote/files/s3/__init__.py
function get_adapter_impl (line 14) | async def get_adapter_impl(config: S3FilesImplConfig, deps: dict[Api, An...
FILE: src/llama_stack/providers/remote/files/s3/config.py
class S3FilesImplConfig (line 14) | class S3FilesImplConfig(BaseModel):
method sample_run_config (line 32) | def sample_run_config(cls, __distro_dir__: str) -> dict[str, Any]:
FILE: src/llama_stack/providers/remote/files/s3/files.py
function _create_s3_client (line 48) | def _create_s3_client(config: S3FilesImplConfig) -> "S3Client":
function _create_bucket_if_not_exists (line 75) | async def _create_bucket_if_not_exists(client: "S3Client", config: S3Fil...
function _make_file_object (line 105) | def _make_file_object(
class S3FilesImpl (line 139) | class S3FilesImpl(Files):
method __init__ (line 142) | def __init__(self, config: S3FilesImplConfig, policy: list[AccessRule]...
method _now (line 148) | def _now(self) -> int:
method _get_file (line 152) | async def _get_file(
method _delete_file (line 162) | async def _delete_file(self, file_id: str) -> None:
method _delete_if_expired (line 175) | async def _delete_if_expired(self, file_id: str) -> None:
method initialize (line 181) | async def initialize(self) -> None:
method shutdown (line 199) | async def shutdown(self) -> None:
method client (line 203) | def client(self) -> "S3Client":
method sql_store (line 208) | def sql_store(self) -> AuthorizedSqlStore:
method openai_upload_file (line 212) | async def openai_upload_file(
method openai_list_files (line 265) | async def openai_list_files(
method openai_retrieve_file (line 300) | async def openai_retrieve_file(self, request: RetrieveFileRequest) -> ...
method openai_delete_file (line 306) | async def openai_delete_file(self, request: DeleteFileRequest) -> Open...
method openai_retrieve_file_content (line 313) | async def openai_retrieve_file_content(self, request: RetrieveFileCont...
FILE: src/llama_stack/providers/remote/inference/anthropic/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: AnthropicConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/anthropic/anthropic.py
class AnthropicInferenceAdapter (line 16) | class AnthropicInferenceAdapter(OpenAIMixin):
method get_base_url (line 32) | def get_base_url(self):
method list_provider_model_ids (line 35) | async def list_provider_model_ids(self) -> Iterable[str]:
FILE: src/llama_stack/providers/remote/inference/anthropic/config.py
class AnthropicProviderDataValidator (line 15) | class AnthropicProviderDataValidator(BaseModel):
class AnthropicConfig (line 23) | class AnthropicConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 25) | def sample_run_config(cls, api_key: str = "${env.ANTHROPIC_API_KEY:=}"...
FILE: src/llama_stack/providers/remote/inference/azure/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: AzureConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/azure/azure.py
class AzureInferenceAdapter (line 12) | class AzureInferenceAdapter(OpenAIMixin):
method get_base_url (line 17) | def get_base_url(self) -> str:
FILE: src/llama_stack/providers/remote/inference/azure/config.py
class AzureProviderDataValidator (line 16) | class AzureProviderDataValidator(BaseModel):
class AzureConfig (line 34) | class AzureConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 49) | def sample_run_config(
FILE: src/llama_stack/providers/remote/inference/bedrock/__init__.py
function get_adapter_impl (line 9) | async def get_adapter_impl(config: BedrockConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/bedrock/bedrock.py
class BedrockInferenceAdapter (line 28) | class BedrockInferenceAdapter(OpenAIMixin):
method get_base_url (line 38) | def get_base_url(self) -> str:
method openai_embeddings (line 42) | async def openai_embeddings(
method openai_completion (line 52) | async def openai_completion(
method openai_chat_completion (line 63) | async def openai_chat_completion(
FILE: src/llama_stack/providers/remote/inference/bedrock/config.py
class BedrockProviderDataValidator (line 14) | class BedrockProviderDataValidator(BaseModel):
class BedrockConfig (line 21) | class BedrockConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 28) | def sample_run_config(cls, **kwargs):
FILE: src/llama_stack/providers/remote/inference/cerebras/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: CerebrasImplConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/cerebras/cerebras.py
class CerebrasInferenceAdapter (line 16) | class CerebrasInferenceAdapter(OpenAIMixin):
method get_base_url (line 21) | def get_base_url(self) -> str:
method openai_embeddings (line 24) | async def openai_embeddings(
FILE: src/llama_stack/providers/remote/inference/cerebras/config.py
class CerebrasProviderDataValidator (line 18) | class CerebrasProviderDataValidator(BaseModel):
class CerebrasImplConfig (line 26) | class CerebrasImplConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 33) | def sample_run_config(cls, api_key: str = "${env.CEREBRAS_API_KEY:=}",...
FILE: src/llama_stack/providers/remote/inference/databricks/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: DatabricksImplConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/databricks/config.py
class DatabricksProviderDataValidator (line 15) | class DatabricksProviderDataValidator(BaseModel):
class DatabricksImplConfig (line 23) | class DatabricksImplConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 35) | def sample_run_config(
FILE: src/llama_stack/providers/remote/inference/databricks/databricks.py
class DatabricksInferenceAdapter (line 20) | class DatabricksInferenceAdapter(OpenAIMixin):
method get_base_url (line 31) | def get_base_url(self) -> str:
method list_provider_model_ids (line 34) | async def list_provider_model_ids(self) -> Iterable[str]:
method openai_completion (line 50) | async def openai_completion(
FILE: src/llama_stack/providers/remote/inference/fireworks/__init__.py
class FireworksProviderDataValidator (line 12) | class FireworksProviderDataValidator(BaseModel):
function get_adapter_impl (line 16) | async def get_adapter_impl(config: FireworksImplConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/fireworks/config.py
class FireworksImplConfig (line 16) | class FireworksImplConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 23) | def sample_run_config(cls, api_key: str = "${env.FIREWORKS_API_KEY:=}"...
FILE: src/llama_stack/providers/remote/inference/fireworks/fireworks.py
class FireworksInferenceAdapter (line 16) | class FireworksInferenceAdapter(OpenAIMixin):
method get_base_url (line 26) | def get_base_url(self) -> str:
FILE: src/llama_stack/providers/remote/inference/gemini/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: GeminiConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/gemini/config.py
class GeminiProviderDataValidator (line 15) | class GeminiProviderDataValidator(BaseModel):
class GeminiConfig (line 23) | class GeminiConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 25) | def sample_run_config(cls, api_key: str = "${env.GEMINI_API_KEY:=}", *...
FILE: src/llama_stack/providers/remote/inference/gemini/gemini.py
class GeminiInferenceAdapter (line 21) | class GeminiInferenceAdapter(OpenAIMixin):
method get_base_url (line 30) | def get_base_url(self):
method openai_embeddings (line 33) | async def openai_embeddings(
FILE: src/llama_stack/providers/remote/inference/groq/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: GroqConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/groq/config.py
class GroqProviderDataValidator (line 15) | class GroqProviderDataValidator(BaseModel):
class GroqConfig (line 23) | class GroqConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 30) | def sample_run_config(cls, api_key: str = "${env.GROQ_API_KEY:=}", **k...
FILE: src/llama_stack/providers/remote/inference/groq/groq.py
class GroqInferenceAdapter (line 12) | class GroqInferenceAdapter(OpenAIMixin):
method get_base_url (line 17) | def get_base_url(self) -> str:
FILE: src/llama_stack/providers/remote/inference/llama_cpp_server/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: LlamaCppServerConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/llama_cpp_server/config.py
class LlamaCppServerConfig (line 16) | class LlamaCppServerConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 23) | def sample_run_config(cls, **kwargs) -> dict[str, Any]:
FILE: src/llama_stack/providers/remote/inference/llama_cpp_server/llama_cpp_server.py
class LlamaCppServerInferenceAdapter (line 12) | class LlamaCppServerInferenceAdapter(OpenAIMixin):
method get_api_key (line 15) | def get_api_key(self) -> str | None:
method get_base_url (line 20) | def get_base_url(self) -> str:
FILE: src/llama_stack/providers/remote/inference/llama_openai_compat/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: LlamaCompatConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/llama_openai_compat/config.py
class LlamaProviderDataValidator (line 15) | class LlamaProviderDataValidator(BaseModel):
class LlamaCompatConfig (line 23) | class LlamaCompatConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 30) | def sample_run_config(cls, api_key: str = "${env.LLAMA_API_KEY}", **kw...
FILE: src/llama_stack/providers/remote/inference/llama_openai_compat/llama.py
class LlamaCompatInferenceAdapter (line 22) | class LlamaCompatInferenceAdapter(OpenAIMixin):
method get_base_url (line 30) | def get_base_url(self) -> str:
method openai_completion (line 38) | async def openai_completion(
method openai_embeddings (line 44) | async def openai_embeddings(
FILE: src/llama_stack/providers/remote/inference/nvidia/__init__.py
function get_adapter_impl (line 12) | async def get_adapter_impl(config: NVIDIAConfig, _deps) -> Inference:
FILE: src/llama_stack/providers/remote/inference/nvidia/config.py
class NVIDIAProviderDataValidator (line 16) | class NVIDIAProviderDataValidator(BaseModel):
class NVIDIAConfig (line 24) | class NVIDIAConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 65) | def sample_run_config(
FILE: src/llama_stack/providers/remote/inference/nvidia/nvidia.py
class NVIDIAInferenceAdapter (line 29) | class NVIDIAInferenceAdapter(OpenAIMixin):
method initialize (line 46) | async def initialize(self) -> None:
method get_api_key (line 55) | def get_api_key(self) -> str:
method get_base_url (line 69) | def get_base_url(self) -> str:
method list_provider_model_ids (line 77) | async def list_provider_model_ids(self) -> Iterable[str]:
method construct_model_from_identifier (line 91) | def construct_model_from_identifier(self, identifier: str) -> Model:
method rerank (line 104) | async def rerank(
FILE: src/llama_stack/providers/remote/inference/nvidia/utils.py
function _is_nvidia_hosted (line 10) | def _is_nvidia_hosted(config: NVIDIAConfig) -> bool:
FILE: src/llama_stack/providers/remote/inference/oci/__init__.py
function get_adapter_impl (line 12) | async def get_adapter_impl(config: OCIConfig, _deps) -> InferenceProvider:
FILE: src/llama_stack/providers/remote/inference/oci/auth.py
class HttpxOciAuth (line 18) | class HttpxOciAuth(httpx.Auth):
method __init__ (line 30) | def __init__(self, signer: OciAuthSigner):
method auth_flow (line 34) | def auth_flow(self, request: httpx.Request) -> Generator[httpx.Request...
class OciInstancePrincipalAuth (line 59) | class OciInstancePrincipalAuth(HttpxOciAuth):
method __init__ (line 60) | def __init__(self, **kwargs: Mapping[str, Any]):
class OciUserPrincipalAuth (line 64) | class OciUserPrincipalAuth(HttpxOciAuth):
method __init__ (line 65) | def __init__(self, config_file: str = DEFAULT_LOCATION, profile_name: ...
FILE: src/llama_stack/providers/remote/inference/oci/config.py
class OCIProviderDataValidator (line 16) | class OCIProviderDataValidator(BaseModel):
class OCIConfig (line 37) | class OCIConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 60) | def sample_run_config(
FILE: src/llama_stack/providers/remote/inference/oci/oci.py
class OCIInferenceAdapter (line 33) | class OCIInferenceAdapter(OpenAIMixin):
method initialize (line 38) | async def initialize(self) -> None:
method get_base_url (line 49) | def get_base_url(self) -> str:
method get_api_key (line 53) | def get_api_key(self) -> str | None:
method get_extra_client_params (line 57) | def get_extra_client_params(self) -> dict[str, Any]:
method _get_oci_signer (line 74) | def _get_oci_signer(self) -> oci.signer.AbstractBaseSigner | None:
method _get_oci_config (line 79) | def _get_oci_config(self) -> dict:
method _get_auth (line 91) | def _get_auth(self) -> httpx.Auth:
method list_provider_model_ids (line 101) | async def list_provider_model_ids(self) -> Iterable[str]:
method construct_model_from_identifier (line 142) | def construct_model_from_identifier(self, identifier: str) -> Model:
FILE: src/llama_stack/providers/remote/inference/ollama/__init__.py
function get_adapter_impl (line 10) | async def get_adapter_impl(config: OllamaImplConfig, _deps):
FILE: src/llama_stack/providers/remote/inference/ollama/config.py
class OllamaImplConfig (line 16) | class OllamaImplConfig(RemoteInferenceProviderConfig):
method sample_run_config (line 22) | def sample_run_config(
FILE: src/llama_stack/providers/remote/inference/ollama/ollama.py
class OllamaInferenceAdapter (line 25) | class OllamaInferenceAdapter(OpenAIMixin):
method ollama_client (line 54) | def ollama_client(self) -> AsyncOllamaClient:
method get_api_key (line 67) | def get_api_key(self):
method get_base_url (line 70) | def get_base_url(self):
method initialize (line 73) | async def initialize(self) -> None:
method health (line 81) | async def health(self) -> HealthResponse:
method shutdown (line 95) | async def shutdown(self) -> None:
method register_model (line 98) | async def register_model(s
Copy disabled (too large)
Download .json
Condensed preview — 4148 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (86,195K chars).
[
{
"path": ".coveragerc",
"chars": 267,
"preview": "[run]\nomit =\n */tests/*\n */llama_stack/providers/*\n */llama_stack/templates/*\n .venv/*\n */llama_stack/cli"
},
{
"path": ".dockerignore",
"chars": 163,
"preview": ".venv\n__pycache__\n*.pyc\n*.pyo\n*.pyd\n*.so\n.git\n.gitignore\nhtmlcov*\n.coverage\ncoverage*\n.cache\n.mypy_cache\n.pytest_cache\n."
},
{
"path": ".gitattributes",
"chars": 47,
"preview": "tests/**/recordings/** linguist-generated=true\n"
},
{
"path": ".github/CODEOWNERS",
"chars": 260,
"preview": "# Each line is a file pattern followed by one or more owners.\n\n# These owners will be the default owners for everything "
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 2274,
"preview": "name: 🐛 Bug Report\ndescription: Create a report to help us reproduce and fix the bug\nlabels: [\"bug\"]\nbody:\n - type: mar"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 450,
"preview": "blank_issues_enabled: false\n\ncontact_links:\n - name: Have you read the docs?\n url: https://llamastack.github.io/prov"
},
{
"path": ".github/ISSUE_TEMPLATE/discussion.yml",
"chars": 259,
"preview": "name: 💬 Discussion\ndescription: Open up a topic for discussion in the community\nlabels: [\"discussion\"]\nbody:\n- type: tex"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yml",
"chars": 765,
"preview": "name: 🚀 Feature request\ndescription: Request a new llama-stack feature\nlabels: [\"enhancement\"]\nbody:\n- type: textarea\n "
},
{
"path": ".github/ISSUE_TEMPLATE/tech-debt.yml",
"chars": 973,
"preview": "name: 🔧 Tech Debt\ndescription: Something that is functional but should be improved or optimizied\nlabels: [\"tech-debt\"]\nb"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 625,
"preview": "# What does this PR do?\n<!-- Provide a short summary of what this PR does and why. Link to relevant issues if applicable"
},
{
"path": ".github/TRIAGERS.md",
"chars": 66,
"preview": "# This file documents Triage members in the Llama Stack community\n"
},
{
"path": ".github/actions/install-llama-stack-client/action.yml",
"chars": 3519,
"preview": "name: Install llama-stack-client\ndescription: Install llama-stack-client based on branch context and client-version inpu"
},
{
"path": ".github/actions/run-and-record-tests/action.yml",
"chars": 5570,
"preview": "name: 'Run and Record Tests'\ndescription: 'Run integration tests and handle recording/artifact upload'\n\ninputs:\n stack-"
},
{
"path": ".github/actions/setup-ollama/action.yml",
"chars": 690,
"preview": "name: Setup Ollama\ndescription: Start Ollama\ninputs:\n suite:\n description: 'Test suite to use: base, responses, visi"
},
{
"path": ".github/actions/setup-runner/action.yml",
"chars": 1872,
"preview": "name: Setup runner\ndescription: Prepare a runner for the tests (install uv, python, project dependencies, etc.)\ninputs:\n"
},
{
"path": ".github/actions/setup-test-environment/action.yml",
"chars": 3307,
"preview": "name: 'Setup Test Environment'\ndescription: 'Common setup steps for integration tests including dependencies, providers,"
},
{
"path": ".github/actions/setup-typescript-client/action.yml",
"chars": 1202,
"preview": "name: Setup TypeScript client\ndescription: Conditionally checkout and link llama-stack-client-typescript based on client"
},
{
"path": ".github/actions/setup-vllm/action.yml",
"chars": 811,
"preview": "name: Setup VLLM\ndescription: Start VLLM\nruns:\n using: \"composite\"\n steps:\n - name: Start VLLM\n shell: bash\n "
},
{
"path": ".github/dependabot.yml",
"chars": 780,
"preview": "# GitHub Dependabot configuration\nversion: 2\nupdates:\n # Enable version updates for GitHub Actions\n - package-ecosyste"
},
{
"path": ".github/mergify.yml",
"chars": 1666,
"preview": "pull_request_rules:\n- name: ping author on conflicts and add 'needs-rebase' label\n conditions:\n - conflict\n -"
},
{
"path": ".github/workflows/README.md",
"chars": 3718,
"preview": "# Llama Stack CI\n\nLlama Stack uses GitHub Actions for Continuous Integration (CI). Below is a table detailing what CI th"
},
{
"path": ".github/workflows/backward-compat.yml",
"chars": 23047,
"preview": "name: Backward Compatibility Check\n\nrun-name: Check backward compatibility for config.yaml files\n\non:\n pull_request:\n "
},
{
"path": ".github/workflows/build-distributions.yml",
"chars": 4654,
"preview": "name: Build Distribution Images\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: 'Distribution "
},
{
"path": ".github/workflows/ci-status.yml",
"chars": 3821,
"preview": "name: CI Status\n\nrun-name: Aggregate CI check status\n\non:\n pull_request:\n branches:\n - main\n - 'release-[0"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 1391,
"preview": "name: \"CodeQL Workflow Security Scan\"\n\non:\n pull_request:\n # PRs are checked for new issues\n branches: [ \"main\" ]"
},
{
"path": ".github/workflows/commit-recordings.yml",
"chars": 14269,
"preview": "# Commits recordings from the record-integration-tests.yml workflow back to PRs.\n# This workflow runs with elevated perm"
},
{
"path": ".github/workflows/docs-build.yml",
"chars": 1845,
"preview": "name: Documentation Build\n\nrun-name: Build and validate documentation\n\non:\n schedule:\n - cron: '0 0 * * *' # Daily "
},
{
"path": ".github/workflows/install-script-ci.yml",
"chars": 1474,
"preview": "name: Installer CI\n\nrun-name: Test the installation script\n\non:\n pull_request:\n paths:\n - 'scripts/install.sh'\n"
},
{
"path": ".github/workflows/integration-auth-tests.yml",
"chars": 7243,
"preview": "name: Integration Auth Tests\n\nrun-name: Run the integration test suite with Kubernetes authentication\n\non:\n push:\n b"
},
{
"path": ".github/workflows/integration-responses-conversations-auth-tests.yml",
"chars": 10655,
"preview": "name: Integration Responses & Conversations Auth Tests\n\nrun-name: Run responses and conversations auth tests with Kubern"
},
{
"path": ".github/workflows/integration-sql-store-tests.yml",
"chars": 2191,
"preview": "name: SqlStore Integration Tests\n\nrun-name: Run the integration test suite with SqlStore\n\non:\n push:\n branches:\n "
},
{
"path": ".github/workflows/integration-tests.yml",
"chars": 8865,
"preview": "name: Integration Tests (Replay)\n\nrun-name: Run the integration test suites from tests/integration in replay mode\n\non:\n "
},
{
"path": ".github/workflows/integration-vector-io-tests.yml",
"chars": 8587,
"preview": "name: Vector IO Integration Tests\n\nrun-name: Run the integration test suite with various VectorIO providers\n\non:\n push:"
},
{
"path": ".github/workflows/openapi-generator-validation.yml",
"chars": 6938,
"preview": "name: OpenAPI Generator SDK Validation\n\nrun-name: Validate OpenAPI Generator SDK generation\n\non:\n pull_request:\n pat"
},
{
"path": ".github/workflows/openresponses-conformance.yml",
"chars": 9223,
"preview": "name: OpenResponses Conformance Tests\n\nrun-name: Run OpenResponses conformance tests against llama-stack Responses API\n\n"
},
{
"path": ".github/workflows/post-release.yml",
"chars": 9663,
"preview": "# =============================================================================\n# Post-Release Automation\n# ============"
},
{
"path": ".github/workflows/pre-commit.yml",
"chars": 6522,
"preview": "name: Pre-commit\n\nrun-name: Run pre-commit checks\n\non:\n pull_request:\n merge_group:\n push:\n branches:\n - main"
},
{
"path": ".github/workflows/prepare-release.yml",
"chars": 3471,
"preview": "# =============================================================================\n# Pre-Release Preparation\n# ============"
},
{
"path": ".github/workflows/providers-build.yml",
"chars": 10917,
"preview": "name: Test Llama Stack Build\n\nrun-name: Test llama stack build\n\non:\n push:\n branches:\n - main\n paths:\n "
},
{
"path": ".github/workflows/providers-list-deps.yml",
"chars": 3577,
"preview": "name: Test llama stack list-deps\n\nrun-name: Test llama stack list-deps\n\non:\n push:\n branches:\n - main\n paths"
},
{
"path": ".github/workflows/pypi.yml",
"chars": 33624,
"preview": "# =============================================================================\n# Unified PyPI/NPM Release Workflow\n# =="
},
{
"path": ".github/workflows/record-integration-tests.yml",
"chars": 14687,
"preview": "# Auto-records missing integration test recordings when PRs are opened or updated.\n# Records for multiple providers (oll"
},
{
"path": ".github/workflows/release-branch-scheduled-ci.yml",
"chars": 8061,
"preview": "name: Release Branch Scheduled CI\n\nrun-name: Scheduled CI checks for active release branches\n\non:\n schedule:\n # Run "
},
{
"path": ".github/workflows/semantic-pr.yml",
"chars": 627,
"preview": "name: Check semantic PR titles\n\nrun-name: Ensure that PR titles follow the conventional commit spec\n\non:\n pull_request_"
},
{
"path": ".github/workflows/stainless-builds.yml",
"chars": 11209,
"preview": "name: Stainless SDK Builds\nrun-name: Build Stainless SDK from OpenAPI spec changes\n\n# SECURITY NOTE: This workflow uses "
},
{
"path": ".github/workflows/stale_bot.yml",
"chars": 1553,
"preview": "name: Close stale issues and PRs\n\nrun-name: Run the Stale Bot action\n\non:\n schedule:\n - cron: '0 0 * * *' # every da"
},
{
"path": ".github/workflows/test-external-provider-module.yml",
"chars": 2250,
"preview": "name: Test External Providers Installed via Module\n\nrun-name: Test External Provider installation via Python module\n\non:"
},
{
"path": ".github/workflows/test-external.yml",
"chars": 3062,
"preview": "name: Test External API and Providers\n\nrun-name: Test the External API and Provider mechanisms\n\non:\n push:\n branches"
},
{
"path": ".github/workflows/ui-unit-tests.yml",
"chars": 1408,
"preview": "name: UI Tests\n\nrun-name: Run the UI test suite\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main"
},
{
"path": ".github/workflows/unit-tests.yml",
"chars": 1629,
"preview": "name: Unit Tests\n\nrun-name: Run the unit test suite\n\non:\n push:\n branches:\n - main\n - 'release-[0-9]+.[0-9"
},
{
"path": ".gitignore",
"chars": 942,
"preview": ".env\n__pycache__\ndist\n*.egg-info\ndev_requirements.txt\nbuild\n.DS_Store\nllama_stack/configs/*\n.cursor/\nxcuserdata/\n*.hmap\n"
},
{
"path": ".pre-commit-config.yaml",
"chars": 10814,
"preview": "exclude: 'build/'\nminimum_pre_commit_version: 4.4.0\nx-uv-dependency: &uv-dependency \"uv==0.9.15\"\ndefault_language_versio"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3537,
"preview": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and"
},
{
"path": "CONTRIBUTING.md",
"chars": 13482,
"preview": "# Contributing to Llama Stack\nWe want to make contributing to this project as easy and transparent as\npossible.\n\n## Set "
},
{
"path": "LICENSE",
"chars": 1087,
"preview": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates\n\nPermission is hereby granted, free of charge, to any per"
},
{
"path": "MANIFEST.in",
"chars": 503,
"preview": "include pyproject.toml\ninclude src/llama_stack/models/llama/llama3/tokenizer.model\ninclude src/llama_stack/models/llama/"
},
{
"path": "README.md",
"chars": 11937,
"preview": "# Llama Stack\n\n[](https://pypi.org/project/llama_stack/)\n["
},
{
"path": "RELEASE_NOTES.md",
"chars": 2693,
"preview": "# Llama Stack Release Notes\n\nThis file provides a summary of each release. For detailed release notes with migration ins"
},
{
"path": "RELEASE_PROCESS.md",
"chars": 10287,
"preview": "# Llama Stack Release Process\n\nThis document outlines the release process for Llama Stack, providing predictability for "
},
{
"path": "SECURITY.md",
"chars": 136,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nPlease report vulnerabilities to our bug bounty program at https://bugb"
},
{
"path": "benchmarking/k8s-benchmark/README.md",
"chars": 8736,
"preview": "# Llama Stack Benchmark Suite on Kubernetes\n\n## Motivation\n\nPerformance benchmarking is critical for understanding the o"
},
{
"path": "benchmarking/k8s-benchmark/apply.sh",
"chars": 1029,
"preview": "#!/usr/bin/env bash\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is"
},
{
"path": "benchmarking/k8s-benchmark/openai-mock-server.py",
"chars": 6024,
"preview": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code "
},
{
"path": "benchmarking/k8s-benchmark/results/guidellm-benchmark-stack-s1-sw1-v1-20250922-103408.txt",
"chars": 11891,
"preview": "Collecting uv\n Downloading uv-0.8.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\nDownloadi"
},
{
"path": "benchmarking/k8s-benchmark/results/guidellm-benchmark-stack-s1-sw2-v1-20250922-104457.txt",
"chars": 11904,
"preview": "Collecting uv\n Downloading uv-0.8.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\nDownloadi"
},
{
"path": "benchmarking/k8s-benchmark/results/guidellm-benchmark-stack-s1-sw4-v1-20250922-105539.txt",
"chars": 11891,
"preview": "Collecting uv\n Downloading uv-0.8.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\nDownloadi"
},
{
"path": "benchmarking/k8s-benchmark/results/guidellm-benchmark-vllm-v1-20250922-111127.txt",
"chars": 11857,
"preview": "Collecting uv\n Downloading uv-0.8.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB)\nDownloadi"
},
{
"path": "benchmarking/k8s-benchmark/scripts/generate_charts.py",
"chars": 12197,
"preview": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code "
},
{
"path": "benchmarking/k8s-benchmark/scripts/run-all-benchmarks.sh",
"chars": 3439,
"preview": "#!/usr/bin/env bash\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is"
},
{
"path": "benchmarking/k8s-benchmark/scripts/run-guidellm-benchmark.sh",
"chars": 6527,
"preview": "#!/usr/bin/env bash\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is"
},
{
"path": "benchmarking/k8s-benchmark/stack-configmap.yaml",
"chars": 4852,
"preview": "apiVersion: v1\ndata:\n stack_run_config.yaml: |\n version: '2'\n distro_name: kubernetes-benchmark-demo\n apis:\n "
},
{
"path": "benchmarking/k8s-benchmark/stack-k8s.yaml.template",
"chars": 2742,
"preview": "apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: llama-benchmark-pvc\nspec:\n accessModes:\n - ReadWriteOnc"
},
{
"path": "benchmarking/k8s-benchmark/stack_run_config.yaml",
"chars": 3969,
"preview": "version: '2'\ndistro_name: kubernetes-benchmark-demo\napis:\n- agents\n- files\n- inference\n- files\n- safety\n- tool_runtime\n-"
},
{
"path": "benchmarking/vertical-scaling/README.md",
"chars": 3754,
"preview": "# Llama Stack Vertical Scaling Benchmark\n\nA simple benchmark suite for measuring the vertical scaling performance of the"
},
{
"path": "benchmarking/vertical-scaling/locustfile.py",
"chars": 1826,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "benchmarking/vertical-scaling/mock-server.py",
"chars": 1944,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "benchmarking/vertical-scaling/run-benchmark.sh",
"chars": 6105,
"preview": "#!/bin/bash\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is license"
},
{
"path": "client-sdks/openapi/Makefile",
"chars": 5011,
"preview": "SHELL := /bin/bash\nSTAINLESS_DIR := ../stainless\nPYTHON := uv run python\n# Auto-detect openapi-generator command (npm in"
},
{
"path": "client-sdks/openapi/README.md",
"chars": 3016,
"preview": "# OpenAPI Generator SDK\n\nAlternative SDK generation using [OpenAPI Generator](https://github.com/OpenAPITools/openapi-ge"
},
{
"path": "client-sdks/openapi/build_hierarchy.py",
"chars": 13758,
"preview": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code "
},
{
"path": "client-sdks/openapi/merge_stainless_config.py",
"chars": 17570,
"preview": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code "
},
{
"path": "client-sdks/openapi/openapi-config.json.template",
"chars": 1497,
"preview": "{\n \"packageName\": \"llama_stack_{{open_}}client\",\n \"projectName\": \"llama-stack-{{open-}}client\",\n \"packageVersion\": \"0"
},
{
"path": "client-sdks/openapi/openapitools.json",
"chars": 154,
"preview": "{\n \"$schema\": \"./node_modules/@openapitools/openapi-generator-cli/config.schema.json\",\n \"spaces\": 2,\n \"generator-cli\""
},
{
"path": "client-sdks/openapi/patch_hierarchy.py",
"chars": 12458,
"preview": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code "
},
{
"path": "client-sdks/openapi/patches.yml",
"chars": 4352,
"preview": "# Patches applied to the OpenAPI spec after merging with Stainless config.\n#\n# These fix schema issues that cause proble"
},
{
"path": "client-sdks/openapi/templates/python/README.mustache",
"chars": 1440,
"preview": "# {{{projectName}}}\n{{#appDescriptionWithNewLines}}\n{{{.}}}\n{{/appDescriptionWithNewLines}}\n\nThis Python package is auto"
},
{
"path": "client-sdks/openapi/templates/python/README_onlypackage.mustache",
"chars": 1267,
"preview": "# {{{projectName}}}\n{{#appDescription}}\n{{{.}}}\n{{/appDescription}}\n\nThe `{{packageName}}` package is automatically gene"
},
{
"path": "client-sdks/openapi/templates/python/__init__.mustache",
"chars": 0,
"preview": ""
},
{
"path": "client-sdks/openapi/templates/python/__init__api.mustache",
"chars": 394,
"preview": "# flake8: noqa\n\n{{^lazyImports}}\n{{>exports_api}}\n{{/lazyImports}}\n{{#lazyImports}}if __import__(\"typing\").TYPE_CHECKING"
},
{
"path": "client-sdks/openapi/templates/python/__init__model.mustache",
"chars": 437,
"preview": "# coding: utf-8\n\n# flake8: noqa\n{{>partial_header}}\n\n{{^lazyImports}}\n{{>exports_model}}\n{{/lazyImports}}\n{{#lazyImports"
},
{
"path": "client-sdks/openapi/templates/python/__init__package.mustache",
"chars": 2104,
"preview": "# coding: utf-8\n\n# flake8: noqa\n\n{{>partial_header}}\n\nfrom {{packageName}}.exceptions import (\n BadRequestError,\n "
},
{
"path": "client-sdks/openapi/templates/python/_exceptions.mustache",
"chars": 3430,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/_types.mustache",
"chars": 8701,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/_version.mustache",
"chars": 266,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/api.mustache",
"chars": 14887,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nimport importlib\nimport json\nimport logging\nimport re\nimport sys\nimport warnings\n\n"
},
{
"path": "client-sdks/openapi/templates/python/api_client.mustache",
"chars": 29758,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport datetime\nfrom dateutil.parser import pa"
},
{
"path": "client-sdks/openapi/templates/python/api_doc.mustache",
"chars": 4134,
"preview": "# {{packageName}}.{{classname}}{{#description}}\n{{.}}{{/description}}\n\nAll URIs are relative to *{{basePath}}*\n\n{{#opera"
},
{
"path": "client-sdks/openapi/templates/python/api_doc_example.mustache",
"chars": 1997,
"preview": "\n```python\nimport {{{packageName}}}\n{{#vendorExtensions.x-py-example-import}}\n{{{.}}}\n{{/vendorExtensions.x-py-example-i"
},
{
"path": "client-sdks/openapi/templates/python/api_response.mustache",
"chars": 639,
"preview": "\"\"\"API response object.\"\"\"\n\nfrom __future__ import annotations\nfrom typing import Generic, Mapping, TypeVar\nfrom pydanti"
},
{
"path": "client-sdks/openapi/templates/python/api_test.mustache",
"chars": 1520,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\n\nimport unittest\n\nfrom {{apiPackage}}.{{classFilename}} import {{classname}}\n\n\ncla"
},
{
"path": "client-sdks/openapi/templates/python/async_api_client.mustache",
"chars": 6347,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport asyncio\n\nfrom typing import Any\nimport "
},
{
"path": "client-sdks/openapi/templates/python/async_api_response.mustache",
"chars": 3977,
"preview": "\"\"\"Async API response object.\"\"\"\n\nfrom __future__ import annotations\nfrom typing import Generic, Mapping, TypeVar, Async"
},
{
"path": "client-sdks/openapi/templates/python/async_stream.mustache",
"chars": 4563,
"preview": "\"\"\"Async streaming response handler.\"\"\"\n\nfrom __future__ import annotations\nfrom typing import TypeVar, Generic, AsyncIt"
},
{
"path": "client-sdks/openapi/templates/python/asyncio/rest.mustache",
"chars": 7195,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport io\nimport json\nimport re\nimport ssl\n\nim"
},
{
"path": "client-sdks/openapi/templates/python/common_README.mustache",
"chars": 4083,
"preview": "```python\n{{#apiInfo}}{{#apis}}{{#-last}}{{#hasHttpSignatureMethods}}import datetime{{/hasHttpSignatureMethods}}{{/-last"
},
{
"path": "client-sdks/openapi/templates/python/configuration.mustache",
"chars": 26014,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport base64\nimport copy\nimport http.client a"
},
{
"path": "client-sdks/openapi/templates/python/exceptions.mustache",
"chars": 7094,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nfrom typing import Any\nfrom typing_extensions "
},
{
"path": "client-sdks/openapi/templates/python/exports_api.mustache",
"chars": 133,
"preview": "# import apis into api package\n{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}}\n{{/apis}}"
},
{
"path": "client-sdks/openapi/templates/python/exports_model.mustache",
"chars": 139,
"preview": "# import models into model package\n{{#models}}{{#model}}from {{modelPackage}}.{{classFilename}} import {{classname}}\n{{/"
},
{
"path": "client-sdks/openapi/templates/python/exports_package.mustache",
"chars": 2063,
"preview": "# import apis into sdk package\n{{#apiInfo}}{{#apis}}from {{apiPackage}}.{{classFilename}} import {{classname}} as {{clas"
},
{
"path": "client-sdks/openapi/templates/python/git_push.sh.mustache",
"chars": 1846,
"preview": "#!/bin/sh\n# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/\n#\n# Usage"
},
{
"path": "client-sdks/openapi/templates/python/gitignore.mustache",
"chars": 808,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": "client-sdks/openapi/templates/python/httpx/rest.mustache",
"chars": 7392,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport io\nimport json\nimport logging\nimport re"
},
{
"path": "client-sdks/openapi/templates/python/lib/.keep",
"chars": 225,
"preview": "File generated from our OpenAPI spec by Stainless.\n\nThis directory can be used to store custom files to expand the SDK.\n"
},
{
"path": "client-sdks/openapi/templates/python/lib/__init__.py",
"chars": 501,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/_utils.py",
"chars": 837,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/__init__.py",
"chars": 200,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/agent.py",
"chars": 19785,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/client_tool.py",
"chars": 8871,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/event_logger.py",
"chars": 5306,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/event_synthesizer.py",
"chars": 16381,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/react/__init__.py",
"chars": 200,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/react/agent.py",
"chars": 3292,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/react/prompts.py",
"chars": 5794,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/react/tool_parser.py",
"chars": 1641,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/tool_parser.py",
"chars": 1510,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/turn_events.py",
"chars": 7553,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/agents/types.py",
"chars": 1433,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/__init__.py",
"chars": 363,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/common/__init__.py",
"chars": 200,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/common/utils.py",
"chars": 1684,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/configure.py",
"chars": 2123,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/constants.py",
"chars": 400,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/datasets/__init__.py",
"chars": 256,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/datasets/datasets.py",
"chars": 532,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/datasets/list.py",
"chars": 986,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/datasets/register.py",
"chars": 2283,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/datasets/unregister.py",
"chars": 655,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval/__init__.py",
"chars": 244,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval/eval.py",
"chars": 477,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval/run_benchmark.py",
"chars": 6818,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval/run_scoring.py",
"chars": 3661,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval/utils.py",
"chars": 2039,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval_tasks/__init__.py",
"chars": 262,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval_tasks/eval_tasks.py",
"chars": 1984,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/eval_tasks/list.py",
"chars": 1084,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/inference/__init__.py",
"chars": 259,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/inference/inference.py",
"chars": 2938,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/inspect/__init__.py",
"chars": 253,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/inspect/inspect.py",
"chars": 421,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/inspect/version.py",
"chars": 645,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/llama_stack_client.py",
"chars": 3776,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/models/__init__.py",
"chars": 250,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/models/models.py",
"chars": 4800,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/post_training/__init__.py",
"chars": 271,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/post_training/post_training.py",
"chars": 3769,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/providers/__init__.py",
"chars": 259,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/providers/inspect.py",
"chars": 1074,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/providers/list.py",
"chars": 918,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/providers/providers.py",
"chars": 490,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/scoring_functions/__init__.py",
"chars": 283,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/scoring_functions/list.py",
"chars": 1081,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/scoring_functions/scoring_functions.py",
"chars": 1985,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/shields/__init__.py",
"chars": 253,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/shields/shields.py",
"chars": 2599,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/toolgroups/__init__.py",
"chars": 262,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/toolgroups/toolgroups.py",
"chars": 4226,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/vector_stores/__init__.py",
"chars": 271,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/cli/vector_stores/vector_stores.py",
"chars": 4274,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/inference/__init__.py",
"chars": 200,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/inference/event_logger.py",
"chars": 2015,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/inference/utils.py",
"chars": 703,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/inline/inline.py",
"chars": 200,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/stream_printer.py",
"chars": 1226,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/tools/__init__.py",
"chars": 301,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/lib/tools/mcp_oauth.py",
"chars": 11368,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/llama_stack_client.mustache",
"chars": 6989,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport httpx\nimport json\n\nfrom typing import A"
},
{
"path": "client-sdks/openapi/templates/python/model.mustache",
"chars": 325,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\n\n{{#models}}\n{{#model}}\n{{#isEnum}}\n{{>model_enum}}\n\n{{/isEnum}}\n{{^isEnum}}\n{{#on"
},
{
"path": "client-sdks/openapi/templates/python/model_anyof.mustache",
"chars": 10772,
"preview": "from __future__ import annotations\nfrom inspect import getfullargspec\nimport json\nimport pprint\nimport re # noqa: F401\n"
},
{
"path": "client-sdks/openapi/templates/python/model_doc.mustache",
"chars": 1655,
"preview": "{{#models}}{{#model}}# {{classname}}\n\n{{#description}}{{&description}}\n{{/description}}\n\n{{^isEnum}}\n## Properties\n\nName"
},
{
"path": "client-sdks/openapi/templates/python/model_enum.mustache",
"chars": 833,
"preview": "from __future__ import annotations\nimport json\nfrom enum import Enum\n{{#vendorExtensions.x-py-other-imports}}\n{{{.}}}\n{{"
},
{
"path": "client-sdks/openapi/templates/python/model_generic.mustache",
"chars": 21362,
"preview": "from __future__ import annotations\nimport pprint\nimport re # noqa: F401\nimport json\n\n{{#vendorExtensions.x-py-other-imp"
},
{
"path": "client-sdks/openapi/templates/python/model_oneof.mustache",
"chars": 22564,
"preview": "from __future__ import annotations\nimport json\nimport pprint\nimport re\n{{#vendorExtensions.x-py-other-imports}}\n{{{.}}}\n"
},
{
"path": "client-sdks/openapi/templates/python/model_test.mustache",
"chars": 1541,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\n\nimport unittest\n\n{{#models}}\n{{#model}}\nfrom {{modelPackage}}.{{classFilename}} i"
},
{
"path": "client-sdks/openapi/templates/python/partial_api.mustache",
"chars": 3396,
"preview": " \"\"\"{{#isDeprecated}}(Deprecated) {{/isDeprecated}}{{{summary}}}{{^summary}}{{#vendorExtensions.x-operation-name}"
},
{
"path": "client-sdks/openapi/templates/python/partial_api_args.mustache",
"chars": 1159,
"preview": "(\n self,\n {{#allParams}}\n {{#isBodyParam}}{{^isPrimitiveType}}{{paramName}}: {{{dataType}}} | None "
},
{
"path": "client-sdks/openapi/templates/python/partial_header.mustache",
"chars": 562,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the t"
},
{
"path": "client-sdks/openapi/templates/python/partial_model_postponed_imports.mustache",
"chars": 309,
"preview": "{{#vendorExtensions.x-py-postponed-model-imports.size}}\n{{#vendorExtensions.x-py-postponed-model-imports}}\n{{{.}}}\n{{/ve"
},
{
"path": "client-sdks/openapi/templates/python/partial_model_wrapper_methods.mustache",
"chars": 2503,
"preview": " def __iter__(self):\n \"\"\"Iterate over items if actual_instance is iterable.\"\"\"\n if hasattr(self.actual_"
},
{
"path": "client-sdks/openapi/templates/python/py.typed.mustache",
"chars": 0,
"preview": ""
},
{
"path": "client-sdks/openapi/templates/python/pyproject.mustache",
"chars": 4002,
"preview": "{{#poetry1}}\n[tool.poetry]\n{{/poetry1}}\n{{^poetry1}}\n[project]\n{{/poetry1}}\nname = \"{{{packageName}}}\"\nversion = \"{{{pac"
},
{
"path": "client-sdks/openapi/templates/python/python_doc_auth_partial.mustache",
"chars": 4706,
"preview": "# Defining the host is optional and defaults to {{{basePath}}}\n# See configuration.py for a list of all supported config"
},
{
"path": "client-sdks/openapi/templates/python/requirements.mustache",
"chars": 349,
"preview": "python_dateutil >= 2.8.2\nhttpx >= 0.28.1\n{{#asyncio}}\naiohttp >= 3.8.4\naiohttp-retry >= 2.8.3\n{{/asyncio}}\n{{#tornado}}\n"
},
{
"path": "client-sdks/openapi/templates/python/rest.mustache",
"chars": 8201,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\nfrom __future__ import annotations\n\nimport io\nimport json\nimport logging\nimport re"
},
{
"path": "client-sdks/openapi/templates/python/setup.mustache",
"chars": 1431,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\n\nfrom setuptools import setup, find_packages # noqa: H301\n\n# To install the libra"
},
{
"path": "client-sdks/openapi/templates/python/setup_cfg.mustache",
"chars": 28,
"preview": "[flake8]\nmax-line-length=99\n"
},
{
"path": "client-sdks/openapi/templates/python/signing.mustache",
"chars": 21035,
"preview": "{{>partial_header}}\n\nfrom __future__ import annotations\n\nfrom base64 import b64encode\nfrom Crypto.IO import PEM, PKCS8\nf"
},
{
"path": "client-sdks/openapi/templates/python/stream.mustache",
"chars": 5508,
"preview": "\"\"\"Sync streaming response handler.\"\"\"\n\nfrom __future__ import annotations\nfrom typing import TypeVar, Generic, Iterator"
},
{
"path": "client-sdks/openapi/templates/python/test-requirements.mustache",
"chars": 112,
"preview": "pytest >= 7.2.1\npytest-cov >= 2.8.1\ntox >= 3.9.0\nflake8 >= 4.0.0\ntypes-python-dateutil >= 2.8.19.14\nmypy >= 1.5\n"
},
{
"path": "client-sdks/openapi/templates/python/tornado/rest.mustache",
"chars": 4835,
"preview": "# coding: utf-8\n\n{{>partial_header}}\n\n\nimport io\nimport json\nimport re\n\nfrom urllib.parse import urlencode\nimport tornad"
}
]
// ... and 3948 more files (download for full content)
About this extraction
This page contains the full source code of the llamastack/llama-stack GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4148 files (75.7 MB), approximately 20.2M tokens, and a symbol index with 6974 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.