Files
Crumb-Core-v.1/app/lib/embedding_providers/base.py

86 lines
2.3 KiB
Python

# app/lib/embedding_providers/base.py
from abc import ABC, abstractmethod
from typing import List
class BaseProvider(ABC):
"""
Abstract base class for embedding and completion providers.
All provider implementations must inherit from this class.
"""
@property
@abstractmethod
def dimension(self) -> int:
"""
Return the dimensionality of embeddings produced by this provider.
This is used to configure Qdrant collections.
"""
pass
@property
@abstractmethod
def provider_name(self) -> str:
"""
Return the name of the provider (e.g., 'openai', 'openrouter', 'claude').
"""
pass
@property
@abstractmethod
def model_name(self) -> str:
"""
Return the specific model being used (e.g., 'text-embedding-3-small', 'gpt-4').
"""
pass
@abstractmethod
def get_embeddings(self, texts: List[str]) -> List[List[float]]:
"""
Generate embeddings for a list of text strings.
Args:
texts: List of text strings to embed
Returns:
List of embedding vectors (each vector is a list of floats)
Raises:
ValueError: If texts is empty or contains invalid data
RuntimeError: If API call fails
"""
pass
@abstractmethod
def get_completion(self, prompt: str, context: str = "") -> str:
"""
Generate a completion/response given a prompt and optional context.
Used for RAG-based question answering.
Args:
prompt: The user's question or prompt
context: Optional context from retrieved documents
Returns:
The generated response as a string
Raises:
ValueError: If prompt is empty
RuntimeError: If API call fails
"""
pass
def supports_embeddings(self) -> bool:
"""
Check if this provider supports embedding generation.
Default: True (most providers support embeddings)
"""
return True
def supports_completions(self) -> bool:
"""
Check if this provider supports completion/chat generation.
Default: True (most providers support completions)
"""
return True