zinoubm's picture
refactroing the project to be modular
64ef551
raw
history blame
1.04 kB
from abc import ABC, abstractmethod
import jsonlines
from gpt_3_manager import Gpt3Manager
from utils import dot_similarity
class Index(ABC):
@abstractmethod
def load(self, path):
pass
class JsonLinesIndex(Index):
def load(self, path):
with jsonlines.open(path) as passages:
indexes = list(passages)
return indexes
class IndexSearchEngine:
def __init__(self, indexes, gpt_manager):
self.indexes = indexes
self.gpt_manager = gpt_manager
def search(self, question, count=4):
question_embedding = self.gpt_manager.get_embedding(prompt=question)
simmilarities = []
for index in self.indexes:
embedding = index["embedding"]
score = dot_similarity(question_embedding, embedding)
simmilarities.append({"index": index, "score": score})
sorted_similarities = sorted(
simmilarities, key=lambda x: x["score"], reverse=True
)
return sorted_similarities[:count]