mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-25 05:32:01 +00:00
feat: configure vector-io provider with an embedding model
Signed-off-by: Mustafa Elbehery <melbeher@redhat.com>
This commit is contained in:
parent
1f0766308d
commit
d8f013b35a
29 changed files with 228 additions and 24 deletions
|
|
@ -31,6 +31,8 @@ from llama_stack.providers.utils.inference.prompt_adapter import (
|
|||
interleaved_content_as_str,
|
||||
)
|
||||
from llama_stack.providers.utils.vector_io.vector_utils import generate_chunk_id
|
||||
from llama_stack.providers.utils.vector_io.chunk_utils import generate_chunk_id
|
||||
from llama_stack.providers.utils.vector_io.embedding_config import EmbeddingConfig
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -39,6 +41,41 @@ RERANKER_TYPE_RRF = "rrf"
|
|||
RERANKER_TYPE_WEIGHTED = "weighted"
|
||||
|
||||
|
||||
def apply_provider_embedding_defaults(
|
||||
vector_db: VectorDB, provider_embedding_config: EmbeddingConfig | None
|
||||
) -> VectorDB:
|
||||
"""Apply provider-level embedding defaults to a VectorDB if not already specified.
|
||||
|
||||
This allows providers to specify default embedding models for use-case specific
|
||||
vector stores, reducing the need for app developers to know embedding details.
|
||||
|
||||
Args:
|
||||
vector_db: The VectorDB to potentially modify
|
||||
provider_embedding_config: The provider's default embedding configuration
|
||||
|
||||
Returns:
|
||||
The VectorDB with embedding defaults applied if needed
|
||||
"""
|
||||
if provider_embedding_config is None:
|
||||
return vector_db
|
||||
|
||||
# Create a copy to avoid modifying the original
|
||||
db_dict = vector_db.model_dump()
|
||||
|
||||
# Apply embedding model default if not specified
|
||||
if not db_dict.get("embedding_model") and provider_embedding_config.model:
|
||||
db_dict["embedding_model"] = provider_embedding_config.model
|
||||
|
||||
# Apply embedding dimension default if not specified
|
||||
if not db_dict.get("embedding_dimension") and provider_embedding_config.dimensions:
|
||||
db_dict["embedding_dimension"] = provider_embedding_config.dimensions
|
||||
elif not db_dict.get("embedding_dimension"):
|
||||
# Fallback to default dimension if still not specified
|
||||
db_dict["embedding_dimension"] = provider_embedding_config.get_dimensions_or_default()
|
||||
|
||||
return VectorDB.model_validate(db_dict)
|
||||
|
||||
|
||||
def parse_pdf(data: bytes) -> str:
|
||||
# For PDF and DOC/DOCX files, we can't reliably convert to string
|
||||
pdf_bytes = io.BytesIO(data)
|
||||
|
|
|
|||
36
llama_stack/providers/utils/vector_io/embedding_config.py
Normal file
36
llama_stack/providers/utils/vector_io/embedding_config.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# 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.
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from llama_stack.schema_utils import json_schema_type
|
||||
|
||||
|
||||
@json_schema_type
|
||||
class EmbeddingConfig(BaseModel):
|
||||
"""Configuration for embedding model used by vector-io providers.
|
||||
|
||||
This allows providers to specify default embedding models for use-case specific
|
||||
vector stores, reducing the need for app developers to know embedding details.
|
||||
|
||||
Example usage in provider config:
|
||||
```yaml
|
||||
vector_io:
|
||||
- provider_id: question-answer
|
||||
provider_type: remote::pgvector
|
||||
config:
|
||||
embedding:
|
||||
model: prod/question-answer-embedder
|
||||
dimensions: 384
|
||||
```
|
||||
"""
|
||||
|
||||
model: str = Field(description="The embedding model identifier to use")
|
||||
dimensions: int | None = Field(default=None, description="The embedding dimensions (optional, can be inferred)")
|
||||
|
||||
def get_dimensions_or_default(self, default: int = 384) -> int:
|
||||
"""Get dimensions with fallback to default if not specified."""
|
||||
return self.dimensions if self.dimensions is not None else default
|
||||
Loading…
Add table
Add a link
Reference in a new issue