AmmarFahmy
adding all files
105b369
from typing import Optional, Dict, List, Tuple, Any
from phi.embedder.base import Embedder
from phi.utils.log import logger
try:
from ollama import Client as OllamaClient
except ImportError:
logger.error("`ollama` not installed")
raise
class OllamaEmbedder(Embedder):
model: str = "openhermes"
dimensions: int = 4096
host: Optional[str] = None
timeout: Optional[Any] = None
options: Optional[Any] = None
client_kwargs: Optional[Dict[str, Any]] = None
ollama_client: Optional[OllamaClient] = None
@property
def client(self) -> OllamaClient:
if self.ollama_client:
return self.ollama_client
_ollama_params: Dict[str, Any] = {}
if self.host:
_ollama_params["host"] = self.host
if self.timeout:
_ollama_params["timeout"] = self.timeout
if self.client_kwargs:
_ollama_params.update(self.client_kwargs)
return OllamaClient(**_ollama_params)
def _response(self, text: str) -> Dict[str, Any]:
kwargs: Dict[str, Any] = {}
if self.options is not None:
kwargs["options"] = self.options
return self.client.embeddings(prompt=text, model=self.model, **kwargs) # type: ignore
def get_embedding(self, text: str) -> List[float]:
try:
response = self._response(text=text)
if response is None:
return []
return response.get("embedding", [])
except Exception as e:
logger.warning(e)
return []
def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
embedding = []
usage = None
try:
response = self._response(text=text)
if response is not None:
embedding = response.get("embedding", [])
except Exception as e:
logger.warning(e)
return embedding, usage