Spaces:
Sleeping
Sleeping
from llama_cpp import Llama | |
from typing import Any, List | |
from llama_index.core.embeddings import BaseEmbedding | |
from llama_index.core.bridge.pydantic import PrivateAttr | |
class LlamaCppIndexEmbedding(BaseEmbedding): | |
_model: Llama = PrivateAttr() | |
def __init__( | |
self, | |
model_path: str = "models/bge-m3-Q4_K_M.gguf", | |
**kwargs: Any, | |
) -> None: | |
super().__init__(**kwargs) | |
self._model = Llama(model_path=model_path, embedding=True) | |
def class_name(cls) -> str: | |
return "llama-cpp-bge-m3-embeddings" | |
async def _aget_query_embedding(self, query: str) -> List[float]: | |
return self._get_query_embedding(query) | |
async def _aget_text_embedding(self, text: str) -> List[float]: | |
return self._get_text_embedding(text) | |
def _get_query_embedding(self, query: str) -> List[float]: | |
# Generate embedding using llama-cpp-python | |
response = self._model.create_embedding(input=query) | |
embedding = response['data'][0]['embedding'] | |
return embedding | |
def _get_text_embedding(self, text: str) -> List[float]: | |
# Generate embedding for a single text | |
response = self._model.create_embedding(input=text) | |
embedding = response['data'][0]['embedding'] | |
return embedding | |
def _get_text_embeddings(self, texts: List[str]) -> List[List[float]]: | |
# Generate embeddings for a list of texts | |
embeddings = [] | |
for text in texts: | |
embedding = self._get_text_embedding(text) | |
embeddings.append(embedding) | |
return embeddings |