From 3a574ef23cf109186738985b28b582c697eb3ba8 Mon Sep 17 00:00:00 2001 From: Nehanth Narendrula Date: Thu, 31 Jul 2025 12:11:08 -0400 Subject: [PATCH 1/4] fix: remove unused DPO parameters from schema and tests (#2988) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? I removed these DPO parameters from the schema in [this PR](https://github.com/meta-llama/llama-stack/pull/2804), but I may not have done it correctly, since they were reintroduced in [this commit](https://github.com/meta-llama/llama-stack/commit/cb7354a9cebad943c6a88b9d2ff4c12a00b36155#diff-4e9a8cb358213d6118c4b6ec2a76d0367af06441bf0717e13a775ade75e2061dR15081)—likely due to a pre-commit hook. I've made the changes again, and the pre-commit hook automatically updated the spec sheet. --- docs/_static/llama-stack-spec.html | 20 ------------------- docs/_static/llama-stack-spec.yaml | 18 ----------------- .../apis/post_training/post_training.py | 8 -------- .../post_training/test_post_training.py | 4 ---- 4 files changed, 50 deletions(-) diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 6a8945bd1..f9af10165 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -15078,22 +15078,6 @@ "DPOAlignmentConfig": { "type": "object", "properties": { - "reward_scale": { - "type": "number", - "description": "Scaling factor for the reward signal" - }, - "reward_clip": { - "type": "number", - "description": "Maximum absolute value for reward clipping" - }, - "epsilon": { - "type": "number", - "description": "Small value added for numerical stability" - }, - "gamma": { - "type": "number", - "description": "Discount factor for future rewards" - }, "beta": { "type": "number", "description": "Temperature parameter for the DPO loss" @@ -15106,10 +15090,6 @@ }, "additionalProperties": false, "required": [ - "reward_scale", - "reward_clip", - "epsilon", - "gamma", "beta", "loss_type" ], diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index f1bb40dc1..d2c41b2bf 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -11163,20 +11163,6 @@ components: DPOAlignmentConfig: type: object properties: - reward_scale: - type: number - description: Scaling factor for the reward signal - reward_clip: - type: number - description: >- - Maximum absolute value for reward clipping - epsilon: - type: number - description: >- - Small value added for numerical stability - gamma: - type: number - description: Discount factor for future rewards beta: type: number description: Temperature parameter for the DPO loss @@ -11186,10 +11172,6 @@ components: description: The type of loss function to use for DPO additionalProperties: false required: - - reward_scale - - reward_clip - - epsilon - - gamma - beta - loss_type title: DPOAlignmentConfig diff --git a/llama_stack/apis/post_training/post_training.py b/llama_stack/apis/post_training/post_training.py index 9170cba51..c16221289 100644 --- a/llama_stack/apis/post_training/post_training.py +++ b/llama_stack/apis/post_training/post_training.py @@ -193,18 +193,10 @@ class DPOLossType(Enum): class DPOAlignmentConfig(BaseModel): """Configuration for Direct Preference Optimization (DPO) alignment. - :param reward_scale: Scaling factor for the reward signal - :param reward_clip: Maximum absolute value for reward clipping - :param epsilon: Small value added for numerical stability - :param gamma: Discount factor for future rewards :param beta: Temperature parameter for the DPO loss :param loss_type: The type of loss function to use for DPO """ - reward_scale: float - reward_clip: float - epsilon: float - gamma: float beta: float loss_type: DPOLossType = DPOLossType.sigmoid diff --git a/tests/integration/post_training/test_post_training.py b/tests/integration/post_training/test_post_training.py index 839b9b1f2..002da1160 100644 --- a/tests/integration/post_training/test_post_training.py +++ b/tests/integration/post_training/test_post_training.py @@ -195,10 +195,6 @@ class TestPostTraining: algorithm_config = DPOAlignmentConfig( beta=0.1, loss_type=DPOLossType.sigmoid, # Default loss type - reward_scale=1.0, # Scaling factor for reward signal (neutral scaling) - reward_clip=5.0, # Maximum absolute value for reward clipping (prevents extreme values) - epsilon=1e-8, # Small value for numerical stability - gamma=1.0, ) data_config = DataConfig( dataset_id=dataset.identifier, From 8a6c0fb93042d995d0ad5b091c52885b1f95fc4b Mon Sep 17 00:00:00 2001 From: Kelly Brown <86735520+kelbrown20@users.noreply.github.com> Date: Thu, 31 Jul 2025 12:21:13 -0400 Subject: [PATCH 2/4] docs: Reformat external provider documentation (#2982) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description** This PR adjusts the external providers documentation to align with the new providers format. Splits up sections into the existing external providers and how to create them as well. Screenshot 2025-07-31 at 9 48 26 AM Open to feedback and adjusting titles --- .../external-providers-guide.md} | 96 ++++++++----------- .../external/external-providers-list.md | 10 ++ docs/source/providers/external/index.md | 13 +++ docs/source/providers/index.md | 2 +- 4 files changed, 65 insertions(+), 56 deletions(-) rename docs/source/providers/{external.md => external/external-providers-guide.md} (85%) create mode 100644 docs/source/providers/external/external-providers-list.md create mode 100644 docs/source/providers/external/index.md diff --git a/docs/source/providers/external.md b/docs/source/providers/external/external-providers-guide.md similarity index 85% rename from docs/source/providers/external.md rename to docs/source/providers/external/external-providers-guide.md index f906890f1..2479d406f 100644 --- a/docs/source/providers/external.md +++ b/docs/source/providers/external/external-providers-guide.md @@ -1,9 +1,4 @@ -# External Providers Guide - -Llama Stack supports external providers that live outside of the main codebase. This allows you to: -- Create and maintain your own providers independently -- Share providers with others without contributing to the main codebase -- Keep provider-specific code separate from the core Llama Stack code +# Creating External Providers ## Configuration @@ -55,17 +50,6 @@ Llama Stack supports two types of external providers: 1. **Remote Providers**: Providers that communicate with external services (e.g., cloud APIs) 2. **Inline Providers**: Providers that run locally within the Llama Stack process -## Known External Providers - -Here's a list of known external providers that you can use with Llama Stack: - -| Name | Description | API | Type | Repository | -|------|-------------|-----|------|------------| -| KubeFlow Training | Train models with KubeFlow | Post Training | Remote | [llama-stack-provider-kft](https://github.com/opendatahub-io/llama-stack-provider-kft) | -| KubeFlow Pipelines | Train models with KubeFlow Pipelines | Post Training | Inline **and** Remote | [llama-stack-provider-kfp-trainer](https://github.com/opendatahub-io/llama-stack-provider-kfp-trainer) | -| RamaLama | Inference models with RamaLama | Inference | Remote | [ramalama-stack](https://github.com/containers/ramalama-stack) | -| TrustyAI LM-Eval | Evaluate models with TrustyAI LM-Eval | Eval | Remote | [llama-stack-provider-lmeval](https://github.com/trustyai-explainability/llama-stack-provider-lmeval) | - ### Remote Provider Specification Remote providers are used when you need to communicate with external services. Here's an example for a custom Ollama provider: @@ -119,9 +103,9 @@ container_image: custom-vector-store:latest # optional - `provider_data_validator`: Optional validator for provider data - `container_image`: Optional container image to use instead of pip packages -## Required Implementation +## Required Fields -## All Providers +### All Providers All providers must contain a `get_provider_spec` function in their `provider` module. This is a standardized structure that Llama Stack expects and is necessary for getting things such as the config class. The `get_provider_spec` method returns a structure identical to the `adapter`. An example function may look like: @@ -146,7 +130,7 @@ def get_provider_spec() -> ProviderSpec: ) ``` -### Remote Providers +#### Remote Providers Remote providers must expose a `get_adapter_impl()` function in their module that takes two arguments: 1. `config`: An instance of the provider's config class @@ -162,7 +146,7 @@ async def get_adapter_impl( return OllamaInferenceAdapter(config) ``` -### Inline Providers +#### Inline Providers Inline providers must expose a `get_provider_impl()` function in their module that takes two arguments: 1. `config`: An instance of the provider's config class @@ -189,7 +173,40 @@ Version: 0.1.0 Location: /path/to/venv/lib/python3.10/site-packages ``` -## Example using `external_providers_dir`: Custom Ollama Provider +## Best Practices + +1. **Package Naming**: Use the prefix `llama-stack-provider-` for your provider packages to make them easily identifiable. + +2. **Version Management**: Keep your provider package versioned and compatible with the Llama Stack version you're using. + +3. **Dependencies**: Only include the minimum required dependencies in your provider package. + +4. **Documentation**: Include clear documentation in your provider package about: + - Installation requirements + - Configuration options + - Usage examples + - Any limitations or known issues + +5. **Testing**: Include tests in your provider package to ensure it works correctly with Llama Stack. +You can refer to the [integration tests +guide](https://github.com/meta-llama/llama-stack/blob/main/tests/integration/README.md) for more +information. Execute the test for the Provider type you are developing. + +## Troubleshooting + +If your external provider isn't being loaded: + +1. Check that `module` points to a published pip package with a top level `provider` module including `get_provider_spec`. +1. Check that the `external_providers_dir` path is correct and accessible. +2. Verify that the YAML files are properly formatted. +3. Ensure all required Python packages are installed. +4. Check the Llama Stack server logs for any error messages - turn on debug logging to get more + information using `LLAMA_STACK_LOGGING=all=debug`. +5. Verify that the provider package is installed in your Python environment if using `external_providers_dir`. + +## Examples + +### Example using `external_providers_dir`: Custom Ollama Provider Here's a complete example of creating and using a custom Ollama provider: @@ -241,7 +258,7 @@ external_providers_dir: ~/.llama/providers.d/ The provider will now be available in Llama Stack with the type `remote::custom_ollama`. -## Example using `module`: ramalama-stack +### Example using `module`: ramalama-stack [ramalama-stack](https://github.com/containers/ramalama-stack) is a recognized external provider that supports installation via module. @@ -266,35 +283,4 @@ additional_pip_packages: No other steps are required other than `llama stack build` and `llama stack run`. The build process will use `module` to install all of the provider dependencies, retrieve the spec, etc. -The provider will now be available in Llama Stack with the type `remote::ramalama`. - -## Best Practices - -1. **Package Naming**: Use the prefix `llama-stack-provider-` for your provider packages to make them easily identifiable. - -2. **Version Management**: Keep your provider package versioned and compatible with the Llama Stack version you're using. - -3. **Dependencies**: Only include the minimum required dependencies in your provider package. - -4. **Documentation**: Include clear documentation in your provider package about: - - Installation requirements - - Configuration options - - Usage examples - - Any limitations or known issues - -5. **Testing**: Include tests in your provider package to ensure it works correctly with Llama Stack. -You can refer to the [integration tests -guide](https://github.com/meta-llama/llama-stack/blob/main/tests/integration/README.md) for more -information. Execute the test for the Provider type you are developing. - -## Troubleshooting - -If your external provider isn't being loaded: - -1. Check that `module` points to a published pip package with a top level `provider` module including `get_provider_spec`. -1. Check that the `external_providers_dir` path is correct and accessible. -2. Verify that the YAML files are properly formatted. -3. Ensure all required Python packages are installed. -4. Check the Llama Stack server logs for any error messages - turn on debug logging to get more - information using `LLAMA_STACK_LOGGING=all=debug`. -5. Verify that the provider package is installed in your Python environment if using `external_providers_dir`. +The provider will now be available in Llama Stack with the type `remote::ramalama`. \ No newline at end of file diff --git a/docs/source/providers/external/external-providers-list.md b/docs/source/providers/external/external-providers-list.md new file mode 100644 index 000000000..49f49076b --- /dev/null +++ b/docs/source/providers/external/external-providers-list.md @@ -0,0 +1,10 @@ +# Known External Providers + +Here's a list of known external providers that you can use with Llama Stack: + +| Name | Description | API | Type | Repository | +|------|-------------|-----|------|------------| +| KubeFlow Training | Train models with KubeFlow | Post Training | Remote | [llama-stack-provider-kft](https://github.com/opendatahub-io/llama-stack-provider-kft) | +| KubeFlow Pipelines | Train models with KubeFlow Pipelines | Post Training | Inline **and** Remote | [llama-stack-provider-kfp-trainer](https://github.com/opendatahub-io/llama-stack-provider-kfp-trainer) | +| RamaLama | Inference models with RamaLama | Inference | Remote | [ramalama-stack](https://github.com/containers/ramalama-stack) | +| TrustyAI LM-Eval | Evaluate models with TrustyAI LM-Eval | Eval | Remote | [llama-stack-provider-lmeval](https://github.com/trustyai-explainability/llama-stack-provider-lmeval) | \ No newline at end of file diff --git a/docs/source/providers/external/index.md b/docs/source/providers/external/index.md new file mode 100644 index 000000000..989a7f5b8 --- /dev/null +++ b/docs/source/providers/external/index.md @@ -0,0 +1,13 @@ +# External Providers + +Llama Stack supports external providers that live outside of the main codebase. This allows you to: +- Create and maintain your own providers independently +- Share providers with others without contributing to the main codebase +- Keep provider-specific code separate from the core Llama Stack code + +```{toctree} +:maxdepth: 1 + +external-providers-list +external-providers-guide +``` \ No newline at end of file diff --git a/docs/source/providers/index.md b/docs/source/providers/index.md index 97971c232..3f66ecd0c 100644 --- a/docs/source/providers/index.md +++ b/docs/source/providers/index.md @@ -15,7 +15,7 @@ Importantly, Llama Stack always strives to provide at least one fully inline pro ```{toctree} :maxdepth: 1 -external +external/index openai inference/index agents/index From ea8dd581442924c80778260ecaef9b9e5663d446 Mon Sep 17 00:00:00 2001 From: Christian Zaccaria <73656840+ChristianZaccaria@users.noreply.github.com> Date: Thu, 31 Jul 2025 17:21:30 +0100 Subject: [PATCH 3/4] chore: Remove coverage badge from README.md (#2976) # What does this PR do? It looks like the coverage badge is still present in the README. This PR removes it. For more context: https://github.com/meta-llama/llama-stack/pull/2950 --- .github/workflows/README.md | 2 +- README.md | 1 - scripts/gen-ci-docs.py | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/README.md b/.github/workflows/README.md index f38008b8a..4ac80e68b 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -1,6 +1,6 @@ # Llama Stack CI -Llama Stack uses GitHub Actions for Continous Integration (CI). Below is a table detailing what CI the project includes and the purpose. +Llama Stack uses GitHub Actions for Continuous Integration (CI). Below is a table detailing what CI the project includes and the purpose. | Name | File | Purpose | | ---- | ---- | ------- | diff --git a/README.md b/README.md index 7f0fed345..9148ce05d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ [![Discord](https://img.shields.io/discord/1257833999603335178?color=6A7EC2&logo=discord&logoColor=ffffff)](https://discord.gg/llama-stack) [![Unit Tests](https://github.com/meta-llama/llama-stack/actions/workflows/unit-tests.yml/badge.svg?branch=main)](https://github.com/meta-llama/llama-stack/actions/workflows/unit-tests.yml?query=branch%3Amain) [![Integration Tests](https://github.com/meta-llama/llama-stack/actions/workflows/integration-tests.yml/badge.svg?branch=main)](https://github.com/meta-llama/llama-stack/actions/workflows/integration-tests.yml?query=branch%3Amain) -![coverage badge](./coverage.svg) [**Quick Start**](https://llama-stack.readthedocs.io/en/latest/getting_started/index.html) | [**Documentation**](https://llama-stack.readthedocs.io/en/latest/index.html) | [**Colab Notebook**](./docs/getting_started.ipynb) | [**Discord**](https://discord.gg/llama-stack) diff --git a/scripts/gen-ci-docs.py b/scripts/gen-ci-docs.py index 630cfe765..e40e3ed3a 100755 --- a/scripts/gen-ci-docs.py +++ b/scripts/gen-ci-docs.py @@ -36,7 +36,7 @@ def generate_ci_docs(): # Header section to preserve header = """# Llama Stack CI -Llama Stack uses GitHub Actions for Continous Integration (CI). Below is a table detailing what CI the project includes and the purpose. +Llama Stack uses GitHub Actions for Continuous Integration (CI). Below is a table detailing what CI the project includes and the purpose. | Name | File | Purpose | | ---- | ---- | ------- | From ffb6306fbd86ae43665c94a3e55601a5253a867b Mon Sep 17 00:00:00 2001 From: Nathan Weinberg <31703736+nathan-weinberg@users.noreply.github.com> Date: Thu, 31 Jul 2025 12:22:04 -0400 Subject: [PATCH 4/4] fix: remove redundant code from unregister_vector_db (#2983) get_vector_db() will raise an exception if a vector store won't be returned client handling is redundant Signed-off-by: Nathan Weinberg --- llama_stack/core/routing_tables/vector_dbs.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/llama_stack/core/routing_tables/vector_dbs.py b/llama_stack/core/routing_tables/vector_dbs.py index 5ea4e9854..c81a27a3b 100644 --- a/llama_stack/core/routing_tables/vector_dbs.py +++ b/llama_stack/core/routing_tables/vector_dbs.py @@ -84,8 +84,6 @@ class VectorDBsRoutingTable(CommonRoutingTableImpl, VectorDBs): async def unregister_vector_db(self, vector_db_id: str) -> None: existing_vector_db = await self.get_vector_db(vector_db_id) - if existing_vector_db is None: - raise VectorStoreNotFoundError(vector_db_id) await self.unregister_object(existing_vector_db) async def openai_retrieve_vector_store(