chore(yaml)!: move registered resources to a sub-key (#3861)

**NOTE: this is a backwards incompatible change to the run-configs.**

A small QOL update, but this will prove useful when I do a rename for
"vector_dbs" to "vector_stores" next.

Moves all the `models, shields, ...` keys in run-config under a
`registered_resources` sub-key.
This commit is contained in:
Ashwin Bharambe 2025-10-20 14:52:48 -07:00 committed by GitHub
parent 483d53cc37
commit 94faec7bc5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 342 additions and 320 deletions

View file

@ -422,6 +422,18 @@ def process_cors_config(cors_config: bool | CORSConfig | None) -> CORSConfig | N
raise ValueError(f"Expected bool or CORSConfig, got {type(cors_config).__name__}") raise ValueError(f"Expected bool or CORSConfig, got {type(cors_config).__name__}")
class RegisteredResources(BaseModel):
"""Registry of resources available in the distribution."""
models: list[ModelInput] = Field(default_factory=list)
shields: list[ShieldInput] = Field(default_factory=list)
vector_dbs: list[VectorDBInput] = Field(default_factory=list)
datasets: list[DatasetInput] = Field(default_factory=list)
scoring_fns: list[ScoringFnInput] = Field(default_factory=list)
benchmarks: list[BenchmarkInput] = Field(default_factory=list)
tool_groups: list[ToolGroupInput] = Field(default_factory=list)
class ServerConfig(BaseModel): class ServerConfig(BaseModel):
port: int = Field( port: int = Field(
default=8321, default=8321,
@ -491,14 +503,10 @@ can be instantiated multiple times (with different configs) if necessary.
description="Catalog of named storage backends and references available to the stack", description="Catalog of named storage backends and references available to the stack",
) )
# registry of "resources" in the distribution registered_resources: RegisteredResources = Field(
models: list[ModelInput] = Field(default_factory=list) default_factory=RegisteredResources,
shields: list[ShieldInput] = Field(default_factory=list) description="Registry of resources available in the distribution",
vector_dbs: list[VectorDBInput] = Field(default_factory=list) )
datasets: list[DatasetInput] = Field(default_factory=list)
scoring_fns: list[ScoringFnInput] = Field(default_factory=list)
benchmarks: list[BenchmarkInput] = Field(default_factory=list)
tool_groups: list[ToolGroupInput] = Field(default_factory=list)
logging: LoggingConfig | None = Field(default=None, description="Configuration for Llama Stack Logging") logging: LoggingConfig | None = Field(default=None, description="Configuration for Llama Stack Logging")

View file

@ -110,7 +110,7 @@ TEST_RECORDING_CONTEXT = None
async def register_resources(run_config: StackRunConfig, impls: dict[Api, Any]): async def register_resources(run_config: StackRunConfig, impls: dict[Api, Any]):
for rsrc, api, register_method, list_method in RESOURCES: for rsrc, api, register_method, list_method in RESOURCES:
objects = getattr(run_config, rsrc) objects = getattr(run_config.registered_resources, rsrc)
if api not in impls: if api not in impls:
continue continue

View file

@ -247,23 +247,24 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: [] registered_resources:
shields: models: []
- shield_id: llama-guard shields:
provider_id: ${env.SAFETY_MODEL:+llama-guard} - shield_id: llama-guard
provider_shield_id: ${env.SAFETY_MODEL:=} provider_id: ${env.SAFETY_MODEL:+llama-guard}
- shield_id: code-scanner provider_shield_id: ${env.SAFETY_MODEL:=}
provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner} - shield_id: code-scanner
provider_shield_id: ${env.CODE_SCANNER_MODEL:=} provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner}
vector_dbs: [] provider_shield_id: ${env.CODE_SCANNER_MODEL:=}
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -109,31 +109,32 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: tgi0 model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: tgi0
- metadata: {} model_type: llm
model_id: ${env.SAFETY_MODEL} - metadata: {}
provider_id: tgi1 model_id: ${env.SAFETY_MODEL}
model_type: llm provider_id: tgi1
- metadata: model_type: llm
embedding_dimension: 768 - metadata:
model_id: nomic-embed-text-v1.5 embedding_dimension: 768
provider_id: sentence-transformers model_id: nomic-embed-text-v1.5
model_type: embedding provider_id: sentence-transformers
shields: model_type: embedding
- shield_id: ${env.SAFETY_MODEL} shields:
vector_dbs: [] - shield_id: ${env.SAFETY_MODEL}
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: brave-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: brave-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -105,26 +105,27 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: tgi0 model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: tgi0
- metadata: model_type: llm
embedding_dimension: 768 - metadata:
model_id: nomic-embed-text-v1.5 embedding_dimension: 768
provider_id: sentence-transformers model_id: nomic-embed-text-v1.5
model_type: embedding provider_id: sentence-transformers
shields: [] model_type: embedding
vector_dbs: [] shields: []
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: brave-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: brave-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -122,31 +122,32 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: meta-reference-inference model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: meta-reference-inference
- metadata: {} model_type: llm
model_id: ${env.SAFETY_MODEL} - metadata: {}
provider_id: meta-reference-safety model_id: ${env.SAFETY_MODEL}
model_type: llm provider_id: meta-reference-safety
- metadata: model_type: llm
embedding_dimension: 768 - metadata:
model_id: nomic-embed-text-v1.5 embedding_dimension: 768
provider_id: sentence-transformers model_id: nomic-embed-text-v1.5
model_type: embedding provider_id: sentence-transformers
shields: model_type: embedding
- shield_id: ${env.SAFETY_MODEL} shields:
vector_dbs: [] - shield_id: ${env.SAFETY_MODEL}
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -112,26 +112,27 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: meta-reference-inference model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: meta-reference-inference
- metadata: model_type: llm
embedding_dimension: 768 - metadata:
model_id: nomic-embed-text-v1.5 embedding_dimension: 768
provider_id: sentence-transformers model_id: nomic-embed-text-v1.5
model_type: embedding provider_id: sentence-transformers
shields: [] model_type: embedding
vector_dbs: [] shields: []
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -111,25 +111,26 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: nvidia model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: nvidia
- metadata: {} model_type: llm
model_id: ${env.SAFETY_MODEL} - metadata: {}
provider_id: nvidia model_id: ${env.SAFETY_MODEL}
model_type: llm provider_id: nvidia
shields: model_type: llm
- shield_id: ${env.SAFETY_MODEL} shields:
provider_id: nvidia - shield_id: ${env.SAFETY_MODEL}
vector_dbs: [] provider_id: nvidia
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::rag tool_groups:
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -100,15 +100,16 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: [] registered_resources:
shields: [] models: []
vector_dbs: [] shields: []
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::rag tool_groups:
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -142,109 +142,110 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: gpt-4o - metadata: {}
provider_id: openai model_id: gpt-4o
provider_model_id: gpt-4o provider_id: openai
model_type: llm provider_model_id: gpt-4o
- metadata: {} model_type: llm
model_id: claude-3-5-sonnet-latest - metadata: {}
provider_id: anthropic model_id: claude-3-5-sonnet-latest
provider_model_id: claude-3-5-sonnet-latest provider_id: anthropic
model_type: llm provider_model_id: claude-3-5-sonnet-latest
- metadata: {} model_type: llm
model_id: gemini/gemini-1.5-flash - metadata: {}
provider_id: gemini model_id: gemini/gemini-1.5-flash
provider_model_id: gemini/gemini-1.5-flash provider_id: gemini
model_type: llm provider_model_id: gemini/gemini-1.5-flash
- metadata: {} model_type: llm
model_id: meta-llama/Llama-3.3-70B-Instruct - metadata: {}
provider_id: groq model_id: meta-llama/Llama-3.3-70B-Instruct
provider_model_id: groq/llama-3.3-70b-versatile provider_id: groq
model_type: llm provider_model_id: groq/llama-3.3-70b-versatile
- metadata: {} model_type: llm
model_id: meta-llama/Llama-3.1-405B-Instruct - metadata: {}
provider_id: together model_id: meta-llama/Llama-3.1-405B-Instruct
provider_model_id: meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo provider_id: together
model_type: llm provider_model_id: meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo
shields: model_type: llm
- shield_id: meta-llama/Llama-Guard-3-8B shields:
vector_dbs: [] - shield_id: meta-llama/Llama-Guard-3-8B
datasets: vector_dbs: []
- purpose: eval/messages-answer datasets:
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/simpleqa?split=train type: uri
metadata: {} uri: huggingface://datasets/llamastack/simpleqa?split=train
dataset_id: simpleqa metadata: {}
- purpose: eval/messages-answer dataset_id: simpleqa
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/mmlu_cot?split=test&name=all type: uri
metadata: {} uri: huggingface://datasets/llamastack/mmlu_cot?split=test&name=all
dataset_id: mmlu_cot metadata: {}
- purpose: eval/messages-answer dataset_id: mmlu_cot
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/gpqa_0shot_cot?split=test&name=gpqa_main type: uri
metadata: {} uri: huggingface://datasets/llamastack/gpqa_0shot_cot?split=test&name=gpqa_main
dataset_id: gpqa_cot metadata: {}
- purpose: eval/messages-answer dataset_id: gpqa_cot
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/math_500?split=test type: uri
metadata: {} uri: huggingface://datasets/llamastack/math_500?split=test
dataset_id: math_500 metadata: {}
- purpose: eval/messages-answer dataset_id: math_500
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/IfEval?split=train type: uri
metadata: {} uri: huggingface://datasets/llamastack/IfEval?split=train
dataset_id: ifeval metadata: {}
- purpose: eval/messages-answer dataset_id: ifeval
source: - purpose: eval/messages-answer
type: uri source:
uri: huggingface://datasets/llamastack/docvqa?split=val type: uri
metadata: {} uri: huggingface://datasets/llamastack/docvqa?split=val
dataset_id: docvqa metadata: {}
scoring_fns: [] dataset_id: docvqa
benchmarks: scoring_fns: []
- dataset_id: simpleqa benchmarks:
scoring_functions: - dataset_id: simpleqa
- llm-as-judge::405b-simpleqa scoring_functions:
metadata: {} - llm-as-judge::405b-simpleqa
benchmark_id: meta-reference-simpleqa metadata: {}
- dataset_id: mmlu_cot benchmark_id: meta-reference-simpleqa
scoring_functions: - dataset_id: mmlu_cot
- basic::regex_parser_multiple_choice_answer scoring_functions:
metadata: {} - basic::regex_parser_multiple_choice_answer
benchmark_id: meta-reference-mmlu-cot metadata: {}
- dataset_id: gpqa_cot benchmark_id: meta-reference-mmlu-cot
scoring_functions: - dataset_id: gpqa_cot
- basic::regex_parser_multiple_choice_answer scoring_functions:
metadata: {} - basic::regex_parser_multiple_choice_answer
benchmark_id: meta-reference-gpqa-cot metadata: {}
- dataset_id: math_500 benchmark_id: meta-reference-gpqa-cot
scoring_functions: - dataset_id: math_500
- basic::regex_parser_math_response scoring_functions:
metadata: {} - basic::regex_parser_math_response
benchmark_id: meta-reference-math-500 metadata: {}
- dataset_id: ifeval benchmark_id: meta-reference-math-500
scoring_functions: - dataset_id: ifeval
- basic::ifeval scoring_functions:
metadata: {} - basic::ifeval
benchmark_id: meta-reference-ifeval metadata: {}
- dataset_id: docvqa benchmark_id: meta-reference-ifeval
scoring_functions: - dataset_id: docvqa
- basic::docvqa scoring_functions:
metadata: {} - basic::docvqa
benchmark_id: meta-reference-docvqa metadata: {}
tool_groups: benchmark_id: meta-reference-docvqa
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -87,27 +87,28 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: registered_resources:
- metadata: {} models:
model_id: ${env.INFERENCE_MODEL} - metadata: {}
provider_id: vllm-inference model_id: ${env.INFERENCE_MODEL}
model_type: llm provider_id: vllm-inference
- metadata: model_type: llm
embedding_dimension: 768 - metadata:
model_id: nomic-embed-text-v1.5 embedding_dimension: 768
provider_id: sentence-transformers model_id: nomic-embed-text-v1.5
model_type: embedding provider_id: sentence-transformers
shields: model_type: embedding
- shield_id: meta-llama/Llama-Guard-3-8B shields:
vector_dbs: [] - shield_id: meta-llama/Llama-Guard-3-8B
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -250,23 +250,24 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: [] registered_resources:
shields: models: []
- shield_id: llama-guard shields:
provider_id: ${env.SAFETY_MODEL:+llama-guard} - shield_id: llama-guard
provider_shield_id: ${env.SAFETY_MODEL:=} provider_id: ${env.SAFETY_MODEL:+llama-guard}
- shield_id: code-scanner provider_shield_id: ${env.SAFETY_MODEL:=}
provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner} - shield_id: code-scanner
provider_shield_id: ${env.CODE_SCANNER_MODEL:=} provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner}
vector_dbs: [] provider_shield_id: ${env.CODE_SCANNER_MODEL:=}
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -247,23 +247,24 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: [] registered_resources:
shields: models: []
- shield_id: llama-guard shields:
provider_id: ${env.SAFETY_MODEL:+llama-guard} - shield_id: llama-guard
provider_shield_id: ${env.SAFETY_MODEL:=} provider_id: ${env.SAFETY_MODEL:+llama-guard}
- shield_id: code-scanner provider_shield_id: ${env.SAFETY_MODEL:=}
provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner} - shield_id: code-scanner
provider_shield_id: ${env.CODE_SCANNER_MODEL:=} provider_id: ${env.CODE_SCANNER_MODEL:+code-scanner}
vector_dbs: [] provider_shield_id: ${env.CODE_SCANNER_MODEL:=}
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry:

View file

@ -272,13 +272,15 @@ class RunConfigSettings(BaseModel):
"apis": apis, "apis": apis,
"providers": provider_configs, "providers": provider_configs,
"storage": storage_config, "storage": storage_config,
"models": [m.model_dump(exclude_none=True) for m in (self.default_models or [])], "registered_resources": {
"shields": [s.model_dump(exclude_none=True) for s in (self.default_shields or [])], "models": [m.model_dump(exclude_none=True) for m in (self.default_models or [])],
"vector_dbs": [], "shields": [s.model_dump(exclude_none=True) for s in (self.default_shields or [])],
"datasets": [d.model_dump(exclude_none=True) for d in (self.default_datasets or [])], "vector_dbs": [],
"scoring_fns": [], "datasets": [d.model_dump(exclude_none=True) for d in (self.default_datasets or [])],
"benchmarks": [b.model_dump(exclude_none=True) for b in (self.default_benchmarks or [])], "scoring_fns": [],
"tool_groups": [t.model_dump(exclude_none=True) for t in (self.default_tool_groups or [])], "benchmarks": [b.model_dump(exclude_none=True) for b in (self.default_benchmarks or [])],
"tool_groups": [t.model_dump(exclude_none=True) for t in (self.default_tool_groups or [])],
},
"server": { "server": {
"port": 8321, "port": 8321,
}, },

View file

@ -115,17 +115,18 @@ storage:
conversations: conversations:
table_name: openai_conversations table_name: openai_conversations
backend: sql_default backend: sql_default
models: [] registered_resources:
shields: [] models: []
vector_dbs: [] shields: []
datasets: [] vector_dbs: []
scoring_fns: [] datasets: []
benchmarks: [] scoring_fns: []
tool_groups: benchmarks: []
- toolgroup_id: builtin::websearch tool_groups:
provider_id: tavily-search - toolgroup_id: builtin::websearch
- toolgroup_id: builtin::rag provider_id: tavily-search
provider_id: rag-runtime - toolgroup_id: builtin::rag
provider_id: rag-runtime
server: server:
port: 8321 port: 8321
telemetry: telemetry: