feat: re-work distro-codegen

each *.py file in the various templates now has to use `Provider`s rather than the stringified provider_types in the DistributionTemplate. Adjust that, regenerate all templates, docs, etc.

Signed-off-by: Charlie Doern <cdoern@redhat.com>
This commit is contained in:
Charlie Doern 2025-07-06 20:06:27 -04:00
parent dcc6b1eee9
commit 776fabed9e
28 changed files with 809 additions and 328 deletions

View file

@ -3,57 +3,98 @@ distribution_spec:
description: CI tests for Llama Stack description: CI tests for Llama Stack
providers: providers:
inference: inference:
- remote::cerebras - provider_id: ${env.ENABLE_CEREBRAS:=__disabled__}
- remote::ollama provider_type: remote::cerebras
- remote::vllm - provider_id: ${env.ENABLE_OLLAMA:=__disabled__}
- remote::tgi provider_type: remote::ollama
- remote::hf::serverless - provider_id: ${env.ENABLE_VLLM:=__disabled__}
- remote::hf::endpoint provider_type: remote::vllm
- remote::fireworks - provider_id: ${env.ENABLE_TGI:=__disabled__}
- remote::together provider_type: remote::tgi
- remote::bedrock - provider_id: ${env.ENABLE_HF_SERVERLESS:=__disabled__}
- remote::databricks provider_type: remote::hf::serverless
- remote::nvidia - provider_id: ${env.ENABLE_HF_ENDPOINT:=__disabled__}
- remote::runpod provider_type: remote::hf::endpoint
- remote::openai - provider_id: ${env.ENABLE_FIREWORKS:=__disabled__}
- remote::anthropic provider_type: remote::fireworks
- remote::gemini - provider_id: ${env.ENABLE_TOGETHER:=__disabled__}
- remote::groq provider_type: remote::together
- remote::llama-openai-compat - provider_id: ${env.ENABLE_BEDROCK:=__disabled__}
- remote::sambanova provider_type: remote::bedrock
- remote::passthrough - provider_id: ${env.ENABLE_DATABRICKS:=__disabled__}
- inline::sentence-transformers provider_type: remote::databricks
- provider_id: ${env.ENABLE_NVIDIA:=__disabled__}
provider_type: remote::nvidia
- provider_id: ${env.ENABLE_RUNPOD:=__disabled__}
provider_type: remote::runpod
- provider_id: ${env.ENABLE_OPENAI:=__disabled__}
provider_type: remote::openai
- provider_id: ${env.ENABLE_ANTHROPIC:=__disabled__}
provider_type: remote::anthropic
- provider_id: ${env.ENABLE_GEMINI:=__disabled__}
provider_type: remote::gemini
- provider_id: ${env.ENABLE_GROQ:=__disabled__}
provider_type: remote::groq
- provider_id: ${env.ENABLE_LLAMA_OPENAI_COMPAT:=__disabled__}
provider_type: remote::llama-openai-compat
- provider_id: ${env.ENABLE_SAMBANOVA:=__disabled__}
provider_type: remote::sambanova
- provider_id: ${env.ENABLE_PASSTHROUGH:=__disabled__}
provider_type: remote::passthrough
- provider_id: sentence-transformers
provider_type: inline::sentence-transformers
vector_io: vector_io:
- inline::faiss - provider_id: ${env.ENABLE_FAISS:=faiss}
- inline::sqlite-vec provider_type: inline::faiss
- inline::milvus - provider_id: ${env.ENABLE_SQLITE_VEC:=__disabled__}
- remote::chromadb provider_type: inline::sqlite-vec
- remote::pgvector - provider_id: ${env.ENABLE_MILVUS:=__disabled__}
provider_type: inline::milvus
- provider_id: ${env.ENABLE_CHROMADB:=__disabled__}
provider_type: remote::chromadb
- provider_id: ${env.ENABLE_PGVECTOR:=__disabled__}
provider_type: remote::pgvector
files: files:
- inline::localfs - provider_id: localfs
provider_type: inline::localfs
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
post_training: post_training:
- inline::huggingface - provider_id: huggingface
provider_type: inline::huggingface
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: ci-tests
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- asyncpg - asyncpg

View file

@ -56,7 +56,6 @@ providers:
api_key: ${env.TOGETHER_API_KEY} api_key: ${env.TOGETHER_API_KEY}
- provider_id: ${env.ENABLE_BEDROCK:=__disabled__} - provider_id: ${env.ENABLE_BEDROCK:=__disabled__}
provider_type: remote::bedrock provider_type: remote::bedrock
config: {}
- provider_id: ${env.ENABLE_DATABRICKS:=__disabled__} - provider_id: ${env.ENABLE_DATABRICKS:=__disabled__}
provider_type: remote::databricks provider_type: remote::databricks
config: config:
@ -107,7 +106,6 @@ providers:
api_key: ${env.PASSTHROUGH_API_KEY} api_key: ${env.PASSTHROUGH_API_KEY}
- provider_id: ${env.ENABLE_SENTENCE_TRANSFORMERS:=sentence-transformers} - provider_id: ${env.ENABLE_SENTENCE_TRANSFORMERS:=sentence-transformers}
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: ${env.ENABLE_FAISS:=faiss} - provider_id: ${env.ENABLE_FAISS:=faiss}
provider_type: inline::faiss provider_type: inline::faiss
@ -208,10 +206,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -229,10 +225,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/ci-tests}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/ci-tests}/registry.db

View file

@ -4,32 +4,50 @@ distribution_spec:
container container
providers: providers:
inference: inference:
- remote::tgi - provider_id: tgi
- inline::sentence-transformers provider_type: remote::tgi
- provider_id: sentence-transformers
provider_type: inline::sentence-transformers
vector_io: vector_io:
- inline::faiss - provider_id: faiss
- remote::chromadb provider_type: inline::faiss
- remote::pgvector - provider_id: chromadb
provider_type: remote::chromadb
- provider_id: pgvector
provider_type: remote::pgvector
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
image_type: conda image_type: conda
image_name: dell
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- sqlalchemy[asyncio] - sqlalchemy[asyncio]

View file

@ -19,18 +19,32 @@ from llama_stack.templates.template import DistributionTemplate, RunConfigSettin
def get_distribution_template() -> DistributionTemplate: def get_distribution_template() -> DistributionTemplate:
providers = { providers = {
"inference": ["remote::tgi", "inline::sentence-transformers"], "inference": [
"vector_io": ["inline::faiss", "remote::chromadb", "remote::pgvector"], Provider(provider_id="tgi", provider_type="remote::tgi"),
"safety": ["inline::llama-guard"], Provider(provider_id="sentence-transformers", provider_type="inline::sentence-transformers"),
"agents": ["inline::meta-reference"], ],
"telemetry": ["inline::meta-reference"], "vector_io": [
"eval": ["inline::meta-reference"], Provider(provider_id="faiss", provider_type="inline::faiss"),
"datasetio": ["remote::huggingface", "inline::localfs"], Provider(provider_id="chromadb", provider_type="remote::chromadb"),
"scoring": ["inline::basic", "inline::llm-as-judge", "inline::braintrust"], Provider(provider_id="pgvector", provider_type="remote::pgvector"),
],
"safety": [Provider(provider_id="llama-guard", provider_type="inline::llama-guard")],
"agents": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"telemetry": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"eval": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"datasetio": [
Provider(provider_id="huggingface", provider_type="remote::huggingface"),
Provider(provider_id="localfs", provider_type="inline::localfs"),
],
"scoring": [
Provider(provider_id="basic", provider_type="inline::basic"),
Provider(provider_id="llm-as-judge", provider_type="inline::llm-as-judge"),
Provider(provider_id="braintrust", provider_type="inline::braintrust"),
],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(provider_id="brave-search", provider_type="remote::brave-search"),
"remote::tavily-search", Provider(provider_id="tavily-search", provider_type="remote::tavily-search"),
"inline::rag-runtime", Provider(provider_id="rag-runtime", provider_type="inline::rag-runtime"),
], ],
} }
name = "dell" name = "dell"

View file

@ -22,7 +22,6 @@ providers:
url: ${env.DEH_SAFETY_URL} url: ${env.DEH_SAFETY_URL}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: chromadb - provider_id: chromadb
provider_type: remote::chromadb provider_type: remote::chromadb
@ -74,10 +73,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -95,7 +92,6 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/registry.db

View file

@ -18,7 +18,6 @@ providers:
url: ${env.DEH_URL} url: ${env.DEH_URL}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: chromadb - provider_id: chromadb
provider_type: remote::chromadb provider_type: remote::chromadb
@ -70,10 +69,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -91,7 +88,6 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/registry.db

View file

@ -3,32 +3,50 @@ distribution_spec:
description: Use Meta Reference for running LLM inference description: Use Meta Reference for running LLM inference
providers: providers:
inference: inference:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
vector_io: vector_io:
- inline::faiss - provider_id: faiss
- remote::chromadb provider_type: inline::faiss
- remote::pgvector - provider_id: chromadb
provider_type: remote::chromadb
- provider_id: pgvector
provider_type: remote::pgvector
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: meta-reference-gpu
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- sqlalchemy[asyncio] - sqlalchemy[asyncio]

View file

@ -25,19 +25,91 @@ from llama_stack.templates.template import DistributionTemplate, RunConfigSettin
def get_distribution_template() -> DistributionTemplate: def get_distribution_template() -> DistributionTemplate:
providers = { providers = {
"inference": ["inline::meta-reference"], "inference": [
"vector_io": ["inline::faiss", "remote::chromadb", "remote::pgvector"], Provider(
"safety": ["inline::llama-guard"], provider_id="meta-reference",
"agents": ["inline::meta-reference"], provider_type="inline::meta-reference",
"telemetry": ["inline::meta-reference"], )
"eval": ["inline::meta-reference"], ],
"datasetio": ["remote::huggingface", "inline::localfs"], "vector_io": [
"scoring": ["inline::basic", "inline::llm-as-judge", "inline::braintrust"], Provider(
provider_id="faiss",
provider_type="inline::faiss",
),
Provider(
provider_id="chromadb",
provider_type="remote::chromadb",
),
Provider(
provider_id="pgvector",
provider_type="remote::pgvector",
),
],
"safety": [
Provider(
provider_id="llama-guard",
provider_type="inline::llama-guard",
)
],
"agents": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"telemetry": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"eval": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"datasetio": [
Provider(
provider_id="huggingface",
provider_type="remote::huggingface",
),
Provider(
provider_id="localfs",
provider_type="inline::localfs",
),
],
"scoring": [
Provider(
provider_id="basic",
provider_type="inline::basic",
),
Provider(
provider_id="llm-as-judge",
provider_type="inline::llm-as-judge",
),
Provider(
provider_id="braintrust",
provider_type="inline::braintrust",
),
],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(
"remote::tavily-search", provider_id="brave-search",
"inline::rag-runtime", provider_type="remote::brave-search",
"remote::model-context-protocol", ),
Provider(
provider_id="tavily-search",
provider_type="remote::tavily-search",
),
Provider(
provider_id="rag-runtime",
provider_type="inline::rag-runtime",
),
Provider(
provider_id="model-context-protocol",
provider_type="remote::model-context-protocol",
),
], ],
} }
name = "meta-reference-gpu" name = "meta-reference-gpu"

View file

@ -24,7 +24,6 @@ providers:
max_seq_len: ${env.MAX_SEQ_LEN:=4096} max_seq_len: ${env.MAX_SEQ_LEN:=4096}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
- provider_id: meta-reference-safety - provider_id: meta-reference-safety
provider_type: inline::meta-reference provider_type: inline::meta-reference
config: config:
@ -88,10 +87,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -109,10 +106,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/meta-reference-gpu}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/meta-reference-gpu}/registry.db

View file

@ -24,7 +24,6 @@ providers:
max_seq_len: ${env.MAX_SEQ_LEN:=4096} max_seq_len: ${env.MAX_SEQ_LEN:=4096}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: faiss - provider_id: faiss
provider_type: inline::faiss provider_type: inline::faiss
@ -78,10 +77,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -99,10 +96,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/meta-reference-gpu}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/meta-reference-gpu}/registry.db

View file

@ -3,27 +3,39 @@ distribution_spec:
description: Use NVIDIA NIM for running LLM inference, evaluation and safety description: Use NVIDIA NIM for running LLM inference, evaluation and safety
providers: providers:
inference: inference:
- remote::nvidia - provider_id: nvidia
provider_type: remote::nvidia
vector_io: vector_io:
- inline::faiss - provider_id: faiss
provider_type: inline::faiss
safety: safety:
- remote::nvidia - provider_id: nvidia
provider_type: remote::nvidia
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
eval: eval:
- remote::nvidia - provider_id: nvidia
provider_type: remote::nvidia
post_training: post_training:
- remote::nvidia - provider_id: nvidia
provider_type: remote::nvidia
datasetio: datasetio:
- inline::localfs - provider_id: localfs
- remote::nvidia provider_type: inline::localfs
- provider_id: nvidia
provider_type: remote::nvidia
scoring: scoring:
- inline::basic - provider_id: basic
provider_type: inline::basic
tool_runtime: tool_runtime:
- inline::rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime
image_type: conda image_type: conda
image_name: nvidia
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- sqlalchemy[asyncio] - sqlalchemy[asyncio]

View file

@ -17,16 +17,65 @@ from llama_stack.templates.template import DistributionTemplate, RunConfigSettin
def get_distribution_template() -> DistributionTemplate: def get_distribution_template() -> DistributionTemplate:
providers = { providers = {
"inference": ["remote::nvidia"], "inference": [
"vector_io": ["inline::faiss"], Provider(
"safety": ["remote::nvidia"], provider_id="nvidia",
"agents": ["inline::meta-reference"], provider_type="remote::nvidia",
"telemetry": ["inline::meta-reference"], )
"eval": ["remote::nvidia"], ],
"post_training": ["remote::nvidia"], "vector_io": [
"datasetio": ["inline::localfs", "remote::nvidia"], Provider(
"scoring": ["inline::basic"], provider_id="faiss",
"tool_runtime": ["inline::rag-runtime"], provider_type="inline::faiss",
)
],
"safety": [
Provider(
provider_id="nvidia",
provider_type="remote::nvidia",
)
],
"agents": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"telemetry": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"eval": [
Provider(
provider_id="nvidia",
provider_type="remote::nvidia",
)
],
"post_training": [Provider(provider_id="nvidia", provider_type="remote::nvidia", config={})],
"datasetio": [
Provider(
provider_id="localfs",
provider_type="inline::localfs",
),
Provider(
provider_id="nvidia",
provider_type="remote::nvidia",
),
],
"scoring": [
Provider(
provider_id="basic",
provider_type="inline::basic",
)
],
"tool_runtime": [
Provider(
provider_id="rag-runtime",
provider_type="inline::rag-runtime",
)
],
} }
inference_provider = Provider( inference_provider = Provider(

View file

@ -85,11 +85,9 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
tool_runtime: tool_runtime:
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/nvidia}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/nvidia}/registry.db

View file

@ -74,11 +74,9 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
tool_runtime: tool_runtime:
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/nvidia}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/nvidia}/registry.db

View file

@ -3,36 +3,58 @@ distribution_spec:
description: Distribution for running open benchmarks description: Distribution for running open benchmarks
providers: providers:
inference: inference:
- remote::openai - provider_id: openai
- remote::anthropic provider_type: remote::openai
- remote::gemini - provider_id: anthropic
- remote::groq provider_type: remote::anthropic
- remote::together - provider_id: gemini
provider_type: remote::gemini
- provider_id: groq
provider_type: remote::groq
- provider_id: together
provider_type: remote::together
vector_io: vector_io:
- inline::sqlite-vec - provider_id: sqlite-vec
- remote::chromadb provider_type: inline::sqlite-vec
- remote::pgvector - provider_id: chromadb
provider_type: remote::chromadb
- provider_id: pgvector
provider_type: remote::pgvector
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: open-benchmark
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- sqlalchemy[asyncio] - sqlalchemy[asyncio]

View file

@ -96,19 +96,33 @@ def get_inference_providers() -> tuple[list[Provider], dict[str, list[ProviderMo
def get_distribution_template() -> DistributionTemplate: def get_distribution_template() -> DistributionTemplate:
inference_providers, available_models = get_inference_providers() inference_providers, available_models = get_inference_providers()
providers = { providers = {
"inference": [p.provider_type for p in inference_providers], "inference": inference_providers,
"vector_io": ["inline::sqlite-vec", "remote::chromadb", "remote::pgvector"], "vector_io": [
"safety": ["inline::llama-guard"], Provider(provider_id="sqlite-vec", provider_type="inline::sqlite-vec"),
"agents": ["inline::meta-reference"], Provider(provider_id="chromadb", provider_type="remote::chromadb"),
"telemetry": ["inline::meta-reference"], Provider(provider_id="pgvector", provider_type="remote::pgvector"),
"eval": ["inline::meta-reference"], ],
"datasetio": ["remote::huggingface", "inline::localfs"], "safety": [Provider(provider_id="llama-guard", provider_type="inline::llama-guard")],
"scoring": ["inline::basic", "inline::llm-as-judge", "inline::braintrust"], "agents": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"telemetry": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"eval": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"datasetio": [
Provider(provider_id="huggingface", provider_type="remote::huggingface"),
Provider(provider_id="localfs", provider_type="inline::localfs"),
],
"scoring": [
Provider(provider_id="basic", provider_type="inline::basic"),
Provider(provider_id="llm-as-judge", provider_type="inline::llm-as-judge"),
Provider(provider_id="braintrust", provider_type="inline::braintrust"),
],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(provider_id="brave-search", provider_type="remote::brave-search"),
"remote::tavily-search", Provider(provider_id="tavily-search", provider_type="remote::tavily-search"),
"inline::rag-runtime", Provider(provider_id="rag-runtime", provider_type="inline::rag-runtime"),
"remote::model-context-protocol", Provider(
provider_id="model-context-protocol",
provider_type="remote::model-context-protocol",
),
], ],
} }
name = "open-benchmark" name = "open-benchmark"

View file

@ -106,10 +106,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -127,10 +125,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/open-benchmark}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/open-benchmark}/registry.db

View file

@ -3,22 +3,33 @@ distribution_spec:
description: Quick start template for running Llama Stack with several popular providers description: Quick start template for running Llama Stack with several popular providers
providers: providers:
inference: inference:
- remote::vllm - provider_id: vllm-inference
- inline::sentence-transformers provider_type: remote::vllm
- provider_id: sentence-transformers
provider_type: inline::sentence-transformers
vector_io: vector_io:
- remote::chromadb - provider_id: chromadb
provider_type: remote::chromadb
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: postgres-demo
additional_pip_packages: additional_pip_packages:
- asyncpg - asyncpg
- psycopg2-binary - psycopg2-binary

View file

@ -34,16 +34,24 @@ def get_distribution_template() -> DistributionTemplate:
), ),
] ]
providers = { providers = {
"inference": ([p.provider_type for p in inference_providers] + ["inline::sentence-transformers"]), "inference": inference_providers
"vector_io": ["remote::chromadb"], + [
"safety": ["inline::llama-guard"], Provider(provider_id="sentence-transformers", provider_type="inline::sentence-transformers"),
"agents": ["inline::meta-reference"], ],
"telemetry": ["inline::meta-reference"], "vector_io": [
Provider(provider_id="chromadb", provider_type="remote::chromadb"),
],
"safety": [Provider(provider_id="llama-guard", provider_type="inline::llama-guard")],
"agents": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"telemetry": [Provider(provider_id="meta-reference", provider_type="inline::meta-reference")],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(provider_id="brave-search", provider_type="remote::brave-search"),
"remote::tavily-search", Provider(provider_id="tavily-search", provider_type="remote::tavily-search"),
"inline::rag-runtime", Provider(provider_id="rag-runtime", provider_type="inline::rag-runtime"),
"remote::model-context-protocol", Provider(
provider_id="model-context-protocol",
provider_type="remote::model-context-protocol",
),
], ],
} }
name = "postgres-demo" name = "postgres-demo"

View file

@ -18,7 +18,6 @@ providers:
tls_verify: ${env.VLLM_TLS_VERIFY:=true} tls_verify: ${env.VLLM_TLS_VERIFY:=true}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: ${env.ENABLE_CHROMADB:+chromadb} - provider_id: ${env.ENABLE_CHROMADB:+chromadb}
provider_type: remote::chromadb provider_type: remote::chromadb
@ -70,10 +69,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: postgres type: postgres
host: ${env.POSTGRES_HOST:=localhost} host: ${env.POSTGRES_HOST:=localhost}

View file

@ -3,57 +3,98 @@ distribution_spec:
description: Quick start template for running Llama Stack with several popular providers description: Quick start template for running Llama Stack with several popular providers
providers: providers:
inference: inference:
- remote::cerebras - provider_id: ${env.ENABLE_CEREBRAS:=__disabled__}
- remote::ollama provider_type: remote::cerebras
- remote::vllm - provider_id: ${env.ENABLE_OLLAMA:=__disabled__}
- remote::tgi provider_type: remote::ollama
- remote::hf::serverless - provider_id: ${env.ENABLE_VLLM:=__disabled__}
- remote::hf::endpoint provider_type: remote::vllm
- remote::fireworks - provider_id: ${env.ENABLE_TGI:=__disabled__}
- remote::together provider_type: remote::tgi
- remote::bedrock - provider_id: ${env.ENABLE_HF_SERVERLESS:=__disabled__}
- remote::databricks provider_type: remote::hf::serverless
- remote::nvidia - provider_id: ${env.ENABLE_HF_ENDPOINT:=__disabled__}
- remote::runpod provider_type: remote::hf::endpoint
- remote::openai - provider_id: ${env.ENABLE_FIREWORKS:=__disabled__}
- remote::anthropic provider_type: remote::fireworks
- remote::gemini - provider_id: ${env.ENABLE_TOGETHER:=__disabled__}
- remote::groq provider_type: remote::together
- remote::llama-openai-compat - provider_id: ${env.ENABLE_BEDROCK:=__disabled__}
- remote::sambanova provider_type: remote::bedrock
- remote::passthrough - provider_id: ${env.ENABLE_DATABRICKS:=__disabled__}
- inline::sentence-transformers provider_type: remote::databricks
- provider_id: ${env.ENABLE_NVIDIA:=__disabled__}
provider_type: remote::nvidia
- provider_id: ${env.ENABLE_RUNPOD:=__disabled__}
provider_type: remote::runpod
- provider_id: ${env.ENABLE_OPENAI:=__disabled__}
provider_type: remote::openai
- provider_id: ${env.ENABLE_ANTHROPIC:=__disabled__}
provider_type: remote::anthropic
- provider_id: ${env.ENABLE_GEMINI:=__disabled__}
provider_type: remote::gemini
- provider_id: ${env.ENABLE_GROQ:=__disabled__}
provider_type: remote::groq
- provider_id: ${env.ENABLE_LLAMA_OPENAI_COMPAT:=__disabled__}
provider_type: remote::llama-openai-compat
- provider_id: ${env.ENABLE_SAMBANOVA:=__disabled__}
provider_type: remote::sambanova
- provider_id: ${env.ENABLE_PASSTHROUGH:=__disabled__}
provider_type: remote::passthrough
- provider_id: sentence-transformers
provider_type: inline::sentence-transformers
vector_io: vector_io:
- inline::faiss - provider_id: ${env.ENABLE_FAISS:=faiss}
- inline::sqlite-vec provider_type: inline::faiss
- inline::milvus - provider_id: ${env.ENABLE_SQLITE_VEC:=__disabled__}
- remote::chromadb provider_type: inline::sqlite-vec
- remote::pgvector - provider_id: ${env.ENABLE_MILVUS:=__disabled__}
provider_type: inline::milvus
- provider_id: ${env.ENABLE_CHROMADB:=__disabled__}
provider_type: remote::chromadb
- provider_id: ${env.ENABLE_PGVECTOR:=__disabled__}
provider_type: remote::pgvector
files: files:
- inline::localfs - provider_id: localfs
provider_type: inline::localfs
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
post_training: post_training:
- inline::huggingface - provider_id: huggingface
provider_type: inline::huggingface
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: starter
additional_pip_packages: additional_pip_packages:
- aiosqlite - aiosqlite
- asyncpg - asyncpg

View file

@ -56,7 +56,6 @@ providers:
api_key: ${env.TOGETHER_API_KEY} api_key: ${env.TOGETHER_API_KEY}
- provider_id: ${env.ENABLE_BEDROCK:=__disabled__} - provider_id: ${env.ENABLE_BEDROCK:=__disabled__}
provider_type: remote::bedrock provider_type: remote::bedrock
config: {}
- provider_id: ${env.ENABLE_DATABRICKS:=__disabled__} - provider_id: ${env.ENABLE_DATABRICKS:=__disabled__}
provider_type: remote::databricks provider_type: remote::databricks
config: config:
@ -107,7 +106,6 @@ providers:
api_key: ${env.PASSTHROUGH_API_KEY} api_key: ${env.PASSTHROUGH_API_KEY}
- provider_id: ${env.ENABLE_SENTENCE_TRANSFORMERS:=sentence-transformers} - provider_id: ${env.ENABLE_SENTENCE_TRANSFORMERS:=sentence-transformers}
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: ${env.ENABLE_FAISS:=faiss} - provider_id: ${env.ENABLE_FAISS:=faiss}
provider_type: inline::faiss provider_type: inline::faiss
@ -208,10 +206,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -229,10 +225,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/starter}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/starter}/registry.db

View file

@ -253,21 +253,91 @@ def get_distribution_template() -> DistributionTemplate:
] ]
providers = { providers = {
"inference": ([p.provider_type for p in remote_inference_providers] + ["inline::sentence-transformers"]), "inference": remote_inference_providers
"vector_io": ([p.provider_type for p in vector_io_providers]), + [
"files": ["inline::localfs"], Provider(
"safety": ["inline::llama-guard"], provider_id="sentence-transformers",
"agents": ["inline::meta-reference"], provider_type="inline::sentence-transformers",
"telemetry": ["inline::meta-reference"], )
"post_training": ["inline::huggingface"], ],
"eval": ["inline::meta-reference"], "vector_io": vector_io_providers,
"datasetio": ["remote::huggingface", "inline::localfs"], "files": [
"scoring": ["inline::basic", "inline::llm-as-judge", "inline::braintrust"], Provider(
provider_id="localfs",
provider_type="inline::localfs",
)
],
"safety": [
Provider(
provider_id="llama-guard",
provider_type="inline::llama-guard",
)
],
"agents": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"telemetry": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"post_training": [
Provider(
provider_id="huggingface",
provider_type="inline::huggingface",
)
],
"eval": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"datasetio": [
Provider(
provider_id="huggingface",
provider_type="remote::huggingface",
),
Provider(
provider_id="localfs",
provider_type="inline::localfs",
),
],
"scoring": [
Provider(
provider_id="basic",
provider_type="inline::basic",
),
Provider(
provider_id="llm-as-judge",
provider_type="inline::llm-as-judge",
),
Provider(
provider_id="braintrust",
provider_type="inline::braintrust",
),
],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(
"remote::tavily-search", provider_id="brave-search",
"inline::rag-runtime", provider_type="remote::brave-search",
"remote::model-context-protocol", ),
Provider(
provider_id="tavily-search",
provider_type="remote::tavily-search",
),
Provider(
provider_id="rag-runtime",
provider_type="inline::rag-runtime",
),
Provider(
provider_id="model-context-protocol",
provider_type="remote::model-context-protocol",
),
], ],
} }
files_provider = Provider( files_provider = Provider(

View file

@ -5,7 +5,7 @@
# the root directory of this source tree. # the root directory of this source tree.
from pathlib import Path from pathlib import Path
from typing import Literal from typing import Any, Literal
import jinja2 import jinja2
import rich import rich
@ -35,6 +35,51 @@ from llama_stack.providers.utils.sqlstore.sqlstore import SqliteSqlStoreConfig
from llama_stack.providers.utils.sqlstore.sqlstore import get_pip_packages as get_sql_pip_packages from llama_stack.providers.utils.sqlstore.sqlstore import get_pip_packages as get_sql_pip_packages
def filter_empty_values(obj: Any) -> Any:
"""Recursively filter out specific empty values from a dictionary or list.
This function removes:
- Empty strings ('') only when they are the 'module' field
- Empty dictionaries ({}) only when they are the 'config' field
- None values (always excluded)
"""
if obj is None:
return None
if isinstance(obj, dict):
filtered = {}
for key, value in obj.items():
# Special handling for specific fields
if key == "module" and isinstance(value, str) and value == "":
# Skip empty module strings
continue
elif key == "config" and isinstance(value, dict) and not value:
# Skip empty config dictionaries
continue
elif key == "container_image" and not value:
# Skip empty container_image names
continue
else:
# For all other fields, recursively filter but preserve empty values
filtered_value = filter_empty_values(value)
# if filtered_value is not None:
filtered[key] = filtered_value
return filtered
elif isinstance(obj, list):
filtered = []
for item in obj:
filtered_item = filter_empty_values(item)
if filtered_item is not None:
filtered.append(filtered_item)
return filtered
else:
# For all other types (including empty strings and dicts that aren't module/config),
# preserve them as-is
return obj
def get_model_registry( def get_model_registry(
available_models: dict[str, list[ProviderModelEntry]], available_models: dict[str, list[ProviderModelEntry]],
) -> tuple[list[ModelInput], bool]: ) -> tuple[list[ModelInput], bool]:
@ -138,31 +183,26 @@ class RunConfigSettings(BaseModel):
def run_config( def run_config(
self, self,
name: str, name: str,
providers: dict[str, list[str]], providers: dict[str, list[Provider]],
container_image: str | None = None, container_image: str | None = None,
) -> dict: ) -> dict:
provider_registry = get_provider_registry() provider_registry = get_provider_registry()
provider_configs = {} provider_configs = {}
for api_str, provider_types in providers.items(): for api_str, provider_objs in providers.items():
if api_providers := self.provider_overrides.get(api_str): if api_providers := self.provider_overrides.get(api_str):
# Convert Provider objects to dicts for YAML serialization # Convert Provider objects to dicts for YAML serialization
provider_configs[api_str] = [ provider_configs[api_str] = [p.model_dump(exclude_none=True) for p in api_providers]
p.model_dump(exclude_none=True) if isinstance(p, Provider) else p for p in api_providers
]
continue continue
provider_configs[api_str] = [] provider_configs[api_str] = []
for provider_type in provider_types: for provider in provider_objs:
provider_id = provider_type.split("::")[-1]
api = Api(api_str) api = Api(api_str)
if provider_type not in provider_registry[api]: if provider.provider_type not in provider_registry[api]:
raise ValueError(f"Unknown provider type: {provider_type} for API: {api_str}") raise ValueError(f"Unknown provider type: {provider.provider_type} for API: {api_str}")
config_class = provider_registry[api][provider_type].config_class config_class = provider_registry[api][provider.provider_type].config_class
assert config_class is not None, ( assert config_class is not None, (
f"No config class for provider type: {provider_type} for API: {api_str}" f"No config class for provider type: {provider.provider_type} for API: {api_str}"
) )
config_class = instantiate_class_type(config_class) config_class = instantiate_class_type(config_class)
@ -171,14 +211,9 @@ class RunConfigSettings(BaseModel):
else: else:
config = {} config = {}
provider_configs[api_str].append( provider.config = config
Provider( # Convert Provider object to dict for YAML serialization
provider_id=provider_id, provider_configs[api_str].append(provider.model_dump(exclude_none=True))
provider_type=provider_type,
config=config,
).model_dump(exclude_none=True)
)
# Get unique set of APIs from providers # Get unique set of APIs from providers
apis = sorted(providers.keys()) apis = sorted(providers.keys())
@ -222,7 +257,7 @@ class DistributionTemplate(BaseModel):
description: str description: str
distro_type: Literal["self_hosted", "remote_hosted", "ondevice"] distro_type: Literal["self_hosted", "remote_hosted", "ondevice"]
providers: dict[str, list[str]] providers: dict[str, list[Provider]]
run_configs: dict[str, RunConfigSettings] run_configs: dict[str, RunConfigSettings]
template_path: Path | None = None template_path: Path | None = None
@ -255,13 +290,28 @@ class DistributionTemplate(BaseModel):
if self.additional_pip_packages: if self.additional_pip_packages:
additional_pip_packages.extend(self.additional_pip_packages) additional_pip_packages.extend(self.additional_pip_packages)
# Create minimal providers for build config (without runtime configs)
build_providers = {}
for api, providers in self.providers.items():
build_providers[api] = []
for provider in providers:
# Create a minimal provider object with only essential build information
build_provider = Provider(
provider_id=provider.provider_id,
provider_type=provider.provider_type,
config={}, # Empty config for build
module=provider.module,
)
build_providers[api].append(build_provider)
return BuildConfig( return BuildConfig(
distribution_spec=DistributionSpec( distribution_spec=DistributionSpec(
description=self.description, description=self.description,
container_image=self.container_image, container_image=self.container_image,
providers=self.providers, providers=build_providers,
), ),
image_type="conda", # default to conda, can be overridden image_type="conda",
image_name=self.name,
additional_pip_packages=sorted(set(additional_pip_packages)), additional_pip_packages=sorted(set(additional_pip_packages)),
) )
@ -270,7 +320,7 @@ class DistributionTemplate(BaseModel):
providers_table += "|-----|-------------|\n" providers_table += "|-----|-------------|\n"
for api, providers in sorted(self.providers.items()): for api, providers in sorted(self.providers.items()):
providers_str = ", ".join(f"`{p}`" for p in providers) providers_str = ", ".join(f"`{p.provider_type}`" for p in providers)
providers_table += f"| {api} | {providers_str} |\n" providers_table += f"| {api} | {providers_str} |\n"
template = self.template_path.read_text() template = self.template_path.read_text()
@ -334,7 +384,7 @@ class DistributionTemplate(BaseModel):
build_config = self.build_config() build_config = self.build_config()
with open(yaml_output_dir / "build.yaml", "w") as f: with open(yaml_output_dir / "build.yaml", "w") as f:
yaml.safe_dump( yaml.safe_dump(
build_config.model_dump(exclude_none=True), filter_empty_values(build_config.model_dump(exclude_none=True)),
f, f,
sort_keys=False, sort_keys=False,
) )
@ -343,7 +393,7 @@ class DistributionTemplate(BaseModel):
run_config = settings.run_config(self.name, self.providers, self.container_image) run_config = settings.run_config(self.name, self.providers, self.container_image)
with open(yaml_output_dir / yaml_pth, "w") as f: with open(yaml_output_dir / yaml_pth, "w") as f:
yaml.safe_dump( yaml.safe_dump(
{k: v for k, v in run_config.items() if v is not None}, filter_empty_values(run_config),
f, f,
sort_keys=False, sort_keys=False,
) )

View file

@ -3,31 +3,49 @@ distribution_spec:
description: Use watsonx for running LLM inference description: Use watsonx for running LLM inference
providers: providers:
inference: inference:
- remote::watsonx - provider_id: watsonx
- inline::sentence-transformers provider_type: remote::watsonx
- provider_id: sentence-transformers
provider_type: inline::sentence-transformers
vector_io: vector_io:
- inline::faiss - provider_id: faiss
provider_type: inline::faiss
safety: safety:
- inline::llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard
agents: agents:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
telemetry: telemetry:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
eval: eval:
- inline::meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference
datasetio: datasetio:
- remote::huggingface - provider_id: huggingface
- inline::localfs provider_type: remote::huggingface
- provider_id: localfs
provider_type: inline::localfs
scoring: scoring:
- inline::basic - provider_id: basic
- inline::llm-as-judge provider_type: inline::basic
- inline::braintrust - provider_id: llm-as-judge
provider_type: inline::llm-as-judge
- provider_id: braintrust
provider_type: inline::braintrust
tool_runtime: tool_runtime:
- remote::brave-search - provider_id: brave-search
- remote::tavily-search provider_type: remote::brave-search
- inline::rag-runtime - provider_id: tavily-search
- remote::model-context-protocol provider_type: remote::tavily-search
- provider_id: rag-runtime
provider_type: inline::rag-runtime
- provider_id: model-context-protocol
provider_type: remote::model-context-protocol
image_type: conda image_type: conda
image_name: watsonx
additional_pip_packages: additional_pip_packages:
- aiosqlite
- sqlalchemy[asyncio] - sqlalchemy[asyncio]
- aiosqlite
- aiosqlite

View file

@ -20,7 +20,6 @@ providers:
project_id: ${env.WATSONX_PROJECT_ID:=} project_id: ${env.WATSONX_PROJECT_ID:=}
- provider_id: sentence-transformers - provider_id: sentence-transformers
provider_type: inline::sentence-transformers provider_type: inline::sentence-transformers
config: {}
vector_io: vector_io:
- provider_id: faiss - provider_id: faiss
provider_type: inline::faiss provider_type: inline::faiss
@ -74,10 +73,8 @@ providers:
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: llm-as-judge - provider_id: llm-as-judge
provider_type: inline::llm-as-judge provider_type: inline::llm-as-judge
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config:
@ -95,10 +92,8 @@ providers:
max_results: 3 max_results: 3
- provider_id: rag-runtime - provider_id: rag-runtime
provider_type: inline::rag-runtime provider_type: inline::rag-runtime
config: {}
- provider_id: model-context-protocol - provider_id: model-context-protocol
provider_type: remote::model-context-protocol provider_type: remote::model-context-protocol
config: {}
metadata_store: metadata_store:
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/watsonx}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/watsonx}/registry.db

View file

@ -18,19 +18,87 @@ from llama_stack.templates.template import DistributionTemplate, RunConfigSettin
def get_distribution_template() -> DistributionTemplate: def get_distribution_template() -> DistributionTemplate:
providers = { providers = {
"inference": ["remote::watsonx", "inline::sentence-transformers"], "inference": [
"vector_io": ["inline::faiss"], Provider(
"safety": ["inline::llama-guard"], provider_id="watsonx",
"agents": ["inline::meta-reference"], provider_type="remote::watsonx",
"telemetry": ["inline::meta-reference"], ),
"eval": ["inline::meta-reference"], Provider(
"datasetio": ["remote::huggingface", "inline::localfs"], provider_id="sentence-transformers",
"scoring": ["inline::basic", "inline::llm-as-judge", "inline::braintrust"], provider_type="inline::sentence-transformers",
),
],
"vector_io": [
Provider(
provider_id="faiss",
provider_type="inline::faiss",
)
],
"safety": [
Provider(
provider_id="llama-guard",
provider_type="inline::llama-guard",
)
],
"agents": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"telemetry": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"eval": [
Provider(
provider_id="meta-reference",
provider_type="inline::meta-reference",
)
],
"datasetio": [
Provider(
provider_id="huggingface",
provider_type="remote::huggingface",
),
Provider(
provider_id="localfs",
provider_type="inline::localfs",
),
],
"scoring": [
Provider(
provider_id="basic",
provider_type="inline::basic",
),
Provider(
provider_id="llm-as-judge",
provider_type="inline::llm-as-judge",
),
Provider(
provider_id="braintrust",
provider_type="inline::braintrust",
),
],
"tool_runtime": [ "tool_runtime": [
"remote::brave-search", Provider(
"remote::tavily-search", provider_id="brave-search",
"inline::rag-runtime", provider_type="remote::brave-search",
"remote::model-context-protocol", ),
Provider(
provider_id="tavily-search",
provider_type="remote::tavily-search",
),
Provider(
provider_id="rag-runtime",
provider_type="inline::rag-runtime",
),
Provider(
provider_id="model-context-protocol",
provider_type="remote::model-context-protocol",
),
], ],
} }

View file

@ -3,7 +3,8 @@ distribution_spec:
description: Custom distro for CI tests description: Custom distro for CI tests
providers: providers:
weather: weather:
- remote::kaze - provider_id: kaze
provider_type: remote::kaze
image_type: venv image_type: venv
image_name: ci-test image_name: ci-test
external_providers_dir: ~/.llama/providers.d external_providers_dir: ~/.llama/providers.d