This commit is contained in:
Charlie Doern 2025-06-26 20:19:43 +00:00 committed by GitHub
commit 56f764b7e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
285 changed files with 1053 additions and 206 deletions

View file

@ -37,9 +37,9 @@ from llama_stack.distribution.datatypes import (
) )
from llama_stack.distribution.distribution import get_provider_registry from llama_stack.distribution.distribution import get_provider_registry
from llama_stack.distribution.resolver import InvalidProviderError from llama_stack.distribution.resolver import InvalidProviderError
from llama_stack.distribution.stack import replace_env_vars
from llama_stack.distribution.utils.config_dirs import DISTRIBS_BASE_DIR, EXTERNAL_PROVIDERS_DIR from llama_stack.distribution.utils.config_dirs import DISTRIBS_BASE_DIR, EXTERNAL_PROVIDERS_DIR
from llama_stack.distribution.utils.dynamic import instantiate_class_type from llama_stack.distribution.utils.dynamic import instantiate_class_type
from llama_stack.distribution.utils.env import replace_env_vars
from llama_stack.distribution.utils.exec import formulate_run_args, run_command from llama_stack.distribution.utils.exec import formulate_run_args, run_command
from llama_stack.distribution.utils.image_types import LlamaStackImageType from llama_stack.distribution.utils.image_types import LlamaStackImageType
from llama_stack.providers.datatypes import Api from llama_stack.providers.datatypes import Api

View file

@ -156,7 +156,7 @@ class StackRun(Subcommand):
if callable(getattr(args, arg)): if callable(getattr(args, arg)):
continue continue
if arg == "config" and template_name: if arg == "config" and template_name:
server_args.config = str(config_file) server_args.template = str(template_name)
else: else:
setattr(server_args, arg, getattr(args, arg)) setattr(server_args, arg, getattr(args, arg))
@ -169,6 +169,8 @@ class StackRun(Subcommand):
if config_file: if config_file:
run_args.extend(["--config", str(config_file)]) run_args.extend(["--config", str(config_file)])
if template_name:
run_args.extend(["--template", str(template_name)])
if args.env: if args.env:
for env_var in args.env: for env_var in args.env:

View file

@ -16,6 +16,7 @@ from llama_stack.distribution.datatypes import (
from llama_stack.distribution.distribution import ( from llama_stack.distribution.distribution import (
builtin_automatically_routed_apis, builtin_automatically_routed_apis,
get_provider_registry, get_provider_registry,
resolve_config,
) )
from llama_stack.distribution.utils.config_dirs import EXTERNAL_PROVIDERS_DIR from llama_stack.distribution.utils.config_dirs import EXTERNAL_PROVIDERS_DIR
from llama_stack.distribution.utils.dynamic import instantiate_class_type from llama_stack.distribution.utils.dynamic import instantiate_class_type
@ -30,7 +31,7 @@ def configure_single_provider(registry: dict[str, ProviderSpec], provider: Provi
config_type = instantiate_class_type(provider_spec.config_class) config_type = instantiate_class_type(provider_spec.config_class)
try: try:
if provider.config: if provider.config:
existing = config_type(**provider.config) existing = resolve_config(provider=provider, provider_spec=provider_spec)
else: else:
existing = None existing = None
except Exception: except Exception:

View file

@ -148,7 +148,10 @@ in the runtime configuration to help route to the correct provider.""",
class Provider(BaseModel): class Provider(BaseModel):
provider_id: str provider_id: str
provider_type: str provider_type: str
config: dict[str, Any] config: Path | dict[str, Any] | None = Field(
default=None,
description="Provider configuration dictionary or path to provider configuration file",
)
class LoggingConfig(BaseModel): class LoggingConfig(BaseModel):

View file

@ -7,11 +7,15 @@
import glob import glob
import importlib import importlib
import os import os
from pathlib import Path
from typing import Any from typing import Any
import yaml import yaml
from pydantic import BaseModel from pydantic import BaseModel
from llama_stack.distribution.datatypes import Provider
from llama_stack.distribution.utils.dynamic import instantiate_class_type
from llama_stack.distribution.utils.env import replace_env_vars
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.datatypes import ( from llama_stack.providers.datatypes import (
AdapterSpec, AdapterSpec,
@ -188,3 +192,22 @@ def get_provider_registry(
logger.error(f"Failed to load provider spec from {spec_path}: {e}") logger.error(f"Failed to load provider spec from {spec_path}: {e}")
raise e raise e
return ret return ret
def resolve_config(provider: Provider, provider_spec: ProviderSpec | None = None, api: str | None = None):
if not provider_spec:
if not api:
raise ValueError("In order to get provider spec, must have API")
registry = get_provider_registry()
provider_spec = registry[Api(api)][provider.provider_type]
config_type = instantiate_class_type(provider_spec.config_class)
try:
if provider.config and isinstance(provider.config, Path):
with open(provider.config.expanduser().resolve()) as f:
config: dict[str, Any] = yaml.safe_load(f)
replaced = replace_env_vars(config)
return config_type(**replaced)
elif provider.config is not None:
return config_type(**provider.config)
except Exception as e:
raise ValueError("Error getting provider config") from e

View file

@ -10,6 +10,7 @@ from typing import Any
from pydantic import BaseModel from pydantic import BaseModel
from llama_stack.apis.providers import ListProvidersResponse, ProviderInfo, Providers from llama_stack.apis.providers import ListProvidersResponse, ProviderInfo, Providers
from llama_stack.distribution.distribution import resolve_config
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.datatypes import HealthResponse, HealthStatus from llama_stack.providers.datatypes import HealthResponse, HealthStatus
@ -48,12 +49,13 @@ class ProviderImpl(Providers):
ret = [] ret = []
for api, providers in safe_config.providers.items(): for api, providers in safe_config.providers.items():
for p in providers: for p in providers:
config = resolve_config(provider=p, api=api)
ret.append( ret.append(
ProviderInfo( ProviderInfo(
api=api, api=api,
provider_id=p.provider_id, provider_id=p.provider_id,
provider_type=p.provider_type, provider_type=p.provider_type,
config=p.config, config=dict(config),
health=providers_health.get(api, {}).get( health=providers_health.get(api, {}).get(
p.provider_id, p.provider_id,
HealthResponse( HealthResponse(

View file

@ -34,9 +34,8 @@ from llama_stack.distribution.datatypes import (
RoutingTableProviderSpec, RoutingTableProviderSpec,
StackRunConfig, StackRunConfig,
) )
from llama_stack.distribution.distribution import builtin_automatically_routed_apis from llama_stack.distribution.distribution import builtin_automatically_routed_apis, resolve_config
from llama_stack.distribution.store import DistributionRegistry from llama_stack.distribution.store import DistributionRegistry
from llama_stack.distribution.utils.dynamic import instantiate_class_type
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.datatypes import ( from llama_stack.providers.datatypes import (
Api, Api,
@ -156,7 +155,7 @@ def specs_for_autorouted_apis(apis_to_serve: list[str] | set[str]) -> dict[str,
"__builtin__": ProviderWithSpec( "__builtin__": ProviderWithSpec(
provider_id="__routing_table__", provider_id="__routing_table__",
provider_type="__routing_table__", provider_type="__routing_table__",
config={}, config=None,
spec=RoutingTableProviderSpec( spec=RoutingTableProviderSpec(
api=info.routing_table_api, api=info.routing_table_api,
router_api=info.router_api, router_api=info.router_api,
@ -171,7 +170,7 @@ def specs_for_autorouted_apis(apis_to_serve: list[str] | set[str]) -> dict[str,
"__builtin__": ProviderWithSpec( "__builtin__": ProviderWithSpec(
provider_id="__autorouted__", provider_id="__autorouted__",
provider_type="__autorouted__", provider_type="__autorouted__",
config={}, config=None,
spec=AutoRoutedProviderSpec( spec=AutoRoutedProviderSpec(
api=info.router_api, api=info.router_api,
module="llama_stack.distribution.routers", module="llama_stack.distribution.routers",
@ -325,8 +324,8 @@ async def instantiate_provider(
module = importlib.import_module(provider_spec.module) module = importlib.import_module(provider_spec.module)
args = [] args = []
if isinstance(provider_spec, RemoteProviderSpec): if isinstance(provider_spec, RemoteProviderSpec):
config_type = instantiate_class_type(provider_spec.config_class) # config_type = instantiate_class_type(provider_spec.config_class)
config = config_type(**provider.config) config = resolve_config(provider=provider, provider_spec=provider_spec)
method = "get_adapter_impl" method = "get_adapter_impl"
args = [config, deps] args = [config, deps]
@ -344,8 +343,8 @@ async def instantiate_provider(
else: else:
method = "get_provider_impl" method = "get_provider_impl"
config_type = instantiate_class_type(provider_spec.config_class) # config_type = instantiate_class_type(provider_spec.config_class)
config = config_type(**provider.config) config = resolve_config(provider=provider, provider_spec=provider_spec)
args = [config, deps] args = [config, deps]
if "policy" in inspect.signature(getattr(module, method)).parameters: if "policy" in inspect.signature(getattr(module, method)).parameters:
args.append(policy) args.append(policy)

View file

@ -42,11 +42,10 @@ from llama_stack.distribution.server.routes import (
) )
from llama_stack.distribution.stack import ( from llama_stack.distribution.stack import (
construct_stack, construct_stack,
replace_env_vars,
validate_env_pair,
) )
from llama_stack.distribution.utils.config import redact_sensitive_fields from llama_stack.distribution.utils.config import redact_sensitive_fields
from llama_stack.distribution.utils.context import preserve_contexts_async_generator from llama_stack.distribution.utils.context import preserve_contexts_async_generator
from llama_stack.distribution.utils.env import replace_env_vars, validate_env_pair
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.datatypes import Api from llama_stack.providers.datatypes import Api
from llama_stack.providers.inline.telemetry.meta_reference.config import TelemetryConfig from llama_stack.providers.inline.telemetry.meta_reference.config import TelemetryConfig
@ -408,9 +407,10 @@ def main(args: argparse.Namespace | None = None):
log_line = f"Using config file: {config_file}" log_line = f"Using config file: {config_file}"
elif args.template: elif args.template:
config_file = Path(REPO_ROOT) / "llama_stack" / "templates" / args.template / "run.yaml" config_file = Path(REPO_ROOT) / "llama_stack" / "templates" / args.template / "run.yaml"
if not config_file.exists(): provider_configs = Path(REPO_ROOT) / "llama_stack" / "templates" / args.config / "provider_configs"
if not config_file.exists() or not provider_configs.exists():
raise ValueError(f"Template {args.template} does not exist") raise ValueError(f"Template {args.template} does not exist")
log_line = f"Using template {args.template} config file: {config_file}" log_line = f"Using template {args.template} config file: {config_file} and provider_config directory: {provider_configs}"
else: else:
raise ValueError("Either --config or --template must be provided") raise ValueError("Either --config or --template must be provided")

View file

@ -5,8 +5,6 @@
# the root directory of this source tree. # the root directory of this source tree.
import importlib.resources import importlib.resources
import os
import re
import tempfile import tempfile
from typing import Any from typing import Any
@ -40,6 +38,7 @@ from llama_stack.distribution.providers import ProviderImpl, ProviderImplConfig
from llama_stack.distribution.resolver import ProviderRegistry, resolve_impls from llama_stack.distribution.resolver import ProviderRegistry, resolve_impls
from llama_stack.distribution.store.registry import create_dist_registry from llama_stack.distribution.store.registry import create_dist_registry
from llama_stack.distribution.utils.dynamic import instantiate_class_type from llama_stack.distribution.utils.dynamic import instantiate_class_type
from llama_stack.distribution.utils.env import replace_env_vars
from llama_stack.log import get_logger from llama_stack.log import get_logger
from llama_stack.providers.datatypes import Api from llama_stack.providers.datatypes import Api
@ -123,125 +122,6 @@ async def register_resources(run_config: StackRunConfig, impls: dict[Api, Any]):
) )
class EnvVarError(Exception):
def __init__(self, var_name: str, path: str = ""):
self.var_name = var_name
self.path = path
super().__init__(
f"Environment variable '{var_name}' not set or empty {f'at {path}' if path else ''}. "
f"Use ${{env.{var_name}:=default_value}} to provide a default value, "
f"${{env.{var_name}:+value_if_set}} to make the field conditional, "
f"or ensure the environment variable is set."
)
def replace_env_vars(config: Any, path: str = "") -> Any:
if isinstance(config, dict):
result = {}
for k, v in config.items():
try:
result[k] = replace_env_vars(v, f"{path}.{k}" if path else k)
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return result
elif isinstance(config, list):
result = []
for i, v in enumerate(config):
try:
result.append(replace_env_vars(v, f"{path}[{i}]"))
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return result
elif isinstance(config, str):
# Pattern supports bash-like syntax: := for default and :+ for conditional and a optional value
pattern = r"\${env\.([A-Z0-9_]+)(?::([=+])([^}]*))?}"
def get_env_var(match: re.Match):
env_var = match.group(1)
operator = match.group(2) # '=' for default, '+' for conditional
value_expr = match.group(3)
env_value = os.environ.get(env_var)
if operator == "=": # Default value syntax: ${env.FOO:=default}
if not env_value:
# value_expr returns empty string (not None) when not matched
# This means ${env.FOO:=} is an error
if value_expr == "":
raise EnvVarError(env_var, path)
else:
value = value_expr
else:
value = env_value
elif operator == "+": # Conditional value syntax: ${env.FOO:+value_if_set}
if env_value:
value = value_expr
else:
# If env var is not set, return empty string for the conditional case
value = ""
else: # No operator case: ${env.FOO}
if not env_value:
raise EnvVarError(env_var, path)
value = env_value
# expand "~" from the values
return os.path.expanduser(value)
try:
result = re.sub(pattern, get_env_var, config)
return _convert_string_to_proper_type(result)
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return config
def _convert_string_to_proper_type(value: str) -> Any:
# This might be tricky depending on what the config type is, if 'str | None' we are
# good, if 'str' we need to keep the empty string... 'str | None' is more common and
# providers config should be typed this way.
# TODO: we could try to load the config class and see if the config has a field with type 'str | None'
# and then convert the empty string to None or not
if value == "":
return None
lowered = value.lower()
if lowered == "true":
return True
elif lowered == "false":
return False
try:
return int(value)
except ValueError:
pass
try:
return float(value)
except ValueError:
pass
return value
def validate_env_pair(env_pair: str) -> tuple[str, str]:
"""Validate and split an environment variable key-value pair."""
try:
key, value = env_pair.split("=", 1)
key = key.strip()
if not key:
raise ValueError(f"Empty key in environment variable pair: {env_pair}")
if not all(c.isalnum() or c == "_" for c in key):
raise ValueError(f"Key must contain only alphanumeric characters and underscores: {key}")
return key, value
except ValueError as e:
raise ValueError(
f"Invalid environment variable format '{env_pair}': {str(e)}. Expected format: KEY=value"
) from e
def add_internal_implementations(impls: dict[Api, Any], run_config: StackRunConfig) -> None: def add_internal_implementations(impls: dict[Api, Any], run_config: StackRunConfig) -> None:
"""Add internal implementations (inspect and providers) to the implementations dictionary. """Add internal implementations (inspect and providers) to the implementations dictionary.

View file

@ -0,0 +1,127 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
import os
import re
from typing import Any
from llama_stack.log import get_logger
logger = get_logger(name=__name__, category="core")
class EnvVarError(Exception):
def __init__(self, var_name: str, path: str = ""):
self.var_name = var_name
self.path = path
super().__init__(f"Environment variable '{var_name}' not set or empty{f' at {path}' if path else ''}")
def replace_env_vars(config: Any, path: str = "") -> Any:
if isinstance(config, dict):
result_dict: dict[Any, Any] = {}
for k, v in config.items():
try:
result_dict[k] = replace_env_vars(v, f"{path}.{k}" if path else k)
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return result_dict
elif isinstance(config, list):
result_list: list[Any] = []
for i, v in enumerate(config):
try:
result_list.append(replace_env_vars(v, f"{path}[{i}]"))
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return result_list
elif isinstance(config, str):
# Pattern supports bash-like syntax: := for default and :+ for conditional and a optional value
pattern = r"\${env\.([A-Z0-9_]+)(?::([=+])([^}]*))?}"
def get_env_var(match: re.Match):
env_var = match.group(1)
operator = match.group(2) # '=' for default, '+' for conditional
value_expr = match.group(3)
env_value = os.environ.get(env_var)
if operator == "=": # Default value syntax: ${env.FOO:=default}
if not env_value:
# value_expr returns empty string (not None) when not matched
# This means ${env.FOO:=} is an error
if value_expr == "":
raise EnvVarError(env_var, path)
else:
value = value_expr
else:
value = env_value
elif operator == "+": # Conditional value syntax: ${env.FOO:+value_if_set}
if env_value:
value = value_expr
else:
# If env var is not set, return empty string for the conditional case
value = ""
else: # No operator case: ${env.FOO}
if not env_value:
raise EnvVarError(env_var, path)
value = env_value
# expand "~" from the values
return os.path.expanduser(value)
try:
result: str = re.sub(pattern, get_env_var, config)
return _convert_string_to_proper_type(result)
except EnvVarError as e:
raise EnvVarError(e.var_name, e.path) from None
return config
def validate_env_pair(env_pair: str) -> tuple[str, str]:
"""Validate and split an environment variable key-value pair."""
try:
key, value = env_pair.split("=", 1)
key = key.strip()
if not key:
raise ValueError(f"Empty key in environment variable pair: {env_pair}")
if not all(c.isalnum() or c == "_" for c in key):
raise ValueError(f"Key must contain only alphanumeric characters and underscores: {key}")
return key, value
except ValueError as e:
raise ValueError(
f"Invalid environment variable format '{env_pair}': {str(e)}. Expected format: KEY=value"
) from e
def _convert_string_to_proper_type(value: str) -> Any:
# This might be tricky depending on what the config type is, if 'str | None' we are
# good, if 'str' we need to keep the empty string... 'str | None' is more common and
# providers config should be typed this way.
# TODO: we could try to load the config class and see if the config has a field with type 'str | None'
# and then convert the empty string to None or not
if value == "":
return None
lowered = value.lower()
if lowered == "true":
return True
elif lowered == "false":
return False
try:
return int(value)
except ValueError:
pass
try:
return float(value)
except ValueError:
pass
return value

View file

@ -48,10 +48,10 @@ class SqliteSqlStoreConfig(SqlAlchemySqlStoreConfig):
@classmethod @classmethod
def sample_run_config(cls, __distro_dir__: str, db_name: str = "sqlstore.db"): def sample_run_config(cls, __distro_dir__: str, db_name: str = "sqlstore.db"):
return cls( return {
type="sqlite", "type": "sqlite",
db_path="${env.SQLITE_STORE_DIR:=" + __distro_dir__ + "}/" + db_name, "db_path": "${env.SQLITE_STORE_DIR:=" + __distro_dir__ + "}/" + db_name,
) }
@property @property
def pip_packages(self) -> list[str]: def pip_packages(self) -> list[str]:
@ -76,14 +76,14 @@ class PostgresSqlStoreConfig(SqlAlchemySqlStoreConfig):
@classmethod @classmethod
def sample_run_config(cls, **kwargs): def sample_run_config(cls, **kwargs):
return cls( return {
type="postgres", "type": "postgres",
host="${env.POSTGRES_HOST:=localhost}", "host": "${env.POSTGRES_HOST:=localhost}",
port="${env.POSTGRES_PORT:=5432}", "port": "${env.POSTGRES_PORT:=5432}",
db="${env.POSTGRES_DB:=llamastack}", "db": "${env.POSTGRES_DB:=llamastack}",
user="${env.POSTGRES_USER:=llamastack}", "user": "${env.POSTGRES_USER:=llamastack}",
password="${env.POSTGRES_PASSWORD:=llamastack}", "password": "${env.POSTGRES_PASSWORD:=llamastack}",
) }
SqlStoreConfig = Annotated[ SqlStoreConfig = Annotated[

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/faiss_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/huggingface_datasetio.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/meta_reference_eval.db

View file

@ -0,0 +1,3 @@
service_name: "${env.OTEL_SERVICE_NAME:=\u200B}"
sinks: ${env.TELEMETRY_SINKS:=console,sqlite}
sqlite_db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/bedrock}/trace_store.db

View file

@ -0,0 +1,2 @@
api_key: ${env.TAVILY_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,2 @@
base_url: https://api.cerebras.ai
api_key: ${env.CEREBRAS_API_KEY}

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/faiss_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/huggingface_datasetio.db

View file

@ -0,0 +1 @@
excluded_categories: []

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/meta_reference_eval.db

View file

@ -0,0 +1,3 @@
service_name: "${env.OTEL_SERVICE_NAME:=\u200B}"
sinks: ${env.TELEMETRY_SINKS:=console,sqlite}
sqlite_db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/cerebras}/trace_store.db

View file

@ -0,0 +1,2 @@
api_key: ${env.TAVILY_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1 @@
url: ${env.CHROMA_URL}

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/huggingface_datasetio.db

View file

@ -0,0 +1 @@
excluded_categories: []

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/meta_reference_eval.db

View file

@ -0,0 +1,3 @@
service_name: "${env.OTEL_SERVICE_NAME:=\u200B}"
sinks: ${env.TELEMETRY_SINKS:=console,sqlite}
sqlite_db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/dell}/trace_store.db

View file

@ -0,0 +1,2 @@
api_key: ${env.TAVILY_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1 @@
url: ${env.DEH_URL}

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/experimental-post-training}/faiss_store.db

View file

@ -0,0 +1,3 @@
checkpoint_format: huggingface
distributed_backend: null
device: cpu

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/huggingface}/huggingface_datasetio.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/experimental-post-training}/localfs_datasetio.db

View file

@ -0,0 +1,4 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/experimental-post-training}/agents_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/meta-reference-gpu}/meta_reference_eval.db

View file

@ -0,0 +1,3 @@
max_seq_len: 4096
checkpoint_dir: null
create_distributed_process_group: False

View file

@ -0,0 +1 @@
url: ${env.OLLAMA_URL:=http://localhost:11434}

View file

@ -17,88 +17,55 @@ providers:
inference: inference:
- provider_id: meta-reference-inference - provider_id: meta-reference-inference
provider_type: inline::meta-reference provider_type: inline::meta-reference
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/meta-reference-inference.yaml
max_seq_len: 4096
checkpoint_dir: null
create_distributed_process_group: False
- provider_id: ollama - provider_id: ollama
provider_type: remote::ollama provider_type: remote::ollama
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/ollama.yaml
url: ${env.OLLAMA_URL:http://localhost:11434}
eval: eval:
- provider_id: meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference provider_type: inline::meta-reference
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/meta-reference-eval.yaml
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/meta-reference-gpu}/meta_reference_eval.db
scoring: scoring:
- provider_id: basic - provider_id: basic
provider_type: inline::basic provider_type: inline::basic
config: {}
- provider_id: braintrust - provider_id: braintrust
provider_type: inline::braintrust provider_type: inline::braintrust
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/braintrust.yaml
openai_api_key: ${env.OPENAI_API_KEY:}
datasetio: datasetio:
- provider_id: localfs - provider_id: localfs
provider_type: inline::localfs provider_type: inline::localfs
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/localfs.yaml
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/experimental-post-training}/localfs_datasetio.db
- provider_id: huggingface - provider_id: huggingface
provider_type: remote::huggingface provider_type: remote::huggingface
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/huggingface.yaml
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/huggingface}/huggingface_datasetio.db
telemetry: telemetry:
- provider_id: meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference provider_type: inline::meta-reference
config: {}
post_training: post_training:
- provider_id: huggingface - provider_id: huggingface
provider_type: inline::huggingface provider_type: inline::huggingface
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/huggingface-post-training.yaml
checkpoint_format: huggingface
distributed_backend: null
device: cpu
agents: agents:
- provider_id: meta-reference - provider_id: meta-reference
provider_type: inline::meta-reference provider_type: inline::meta-reference
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/meta-reference-agents.yaml
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/experimental-post-training}/agents_store.db
safety: safety:
- provider_id: llama-guard - provider_id: llama-guard
provider_type: inline::llama-guard provider_type: inline::llama-guard
config: {}
vector_io: vector_io:
- provider_id: faiss - provider_id: faiss
provider_type: inline::faiss provider_type: inline::faiss
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/faiss.yaml
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/experimental-post-training}/faiss_store.db
tool_runtime: tool_runtime:
- provider_id: brave-search - provider_id: brave-search
provider_type: remote::brave-search provider_type: remote::brave-search
config: config: ~/.llama/distributions/experimental-post-training/provider_configs/brave-search.yaml
api_key: ${env.BRAVE_SEARCH_API_KEY:}
max_results: 3
metadata_store: metadata_store:
namespace: null namespace: null
type: sqlite type: sqlite
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/experimental-post-training}/registry.db db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/experimental-post-training}/registry.db
models: [] models: []
shields: [] shields: []
vector_dbs: [] vector_dbs: []

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/faiss_store.db

View file

@ -0,0 +1,2 @@
url: https://api.fireworks.ai/inference/v1
api_key: ${env.FIREWORKS_API_KEY}

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/huggingface_datasetio.db

View file

@ -0,0 +1 @@
excluded_categories: []

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/meta_reference_eval.db

View file

@ -0,0 +1,4 @@
storage_dir: ${env.FILES_STORAGE_DIR:=~/.llama/distributions/fireworks/files}
metadata_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/files_metadata.db

View file

@ -0,0 +1,3 @@
service_name: "${env.OTEL_SERVICE_NAME:=\u200B}"
sinks: ${env.TELEMETRY_SINKS:=console,sqlite}
sqlite_db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/fireworks}/trace_store.db

View file

@ -0,0 +1,2 @@
api_key: ${env.TAVILY_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1 @@
api_key: ${env.WOLFRAM_ALPHA_API_KEY:+}

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/faiss_store.db

View file

@ -0,0 +1,2 @@
url: https://api.groq.com
api_key: ${env.GROQ_API_KEY}

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/huggingface_datasetio.db

View file

@ -0,0 +1 @@
excluded_categories: []

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/meta_reference_eval.db

View file

@ -0,0 +1,3 @@
service_name: "${env.OTEL_SERVICE_NAME:=\u200B}"
sinks: ${env.TELEMETRY_SINKS:=console,sqlite}
sqlite_db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/groq}/trace_store.db

View file

@ -0,0 +1,2 @@
api_key: ${env.TAVILY_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,5 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

View file

@ -0,0 +1 @@
openai_api_key: ${env.OPENAI_API_KEY:+}

View file

@ -0,0 +1,2 @@
api_key: ${env.BRAVE_SEARCH_API_KEY:+}
max_results: 3

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/faiss_store.db

View file

@ -0,0 +1,2 @@
endpoint_name: ${env.INFERENCE_ENDPOINT_NAME}
api_token: ${env.HF_API_TOKEN}

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/huggingface_datasetio.db

View file

@ -0,0 +1 @@
excluded_categories: []

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/localfs_datasetio.db

View file

@ -0,0 +1,7 @@
persistence_store:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/agents_store.db
responses_store:
type: sqlite
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/responses_store.db

View file

@ -0,0 +1,4 @@
kvstore:
type: sqlite
namespace: null
db_path: ${env.SQLITE_STORE_DIR:=~/.llama/distributions/hf-endpoint}/meta_reference_eval.db

Some files were not shown because too many files have changed in this diff Show more