document-qa / document_qa /custom_embeddings.py
lfoppiano's picture
move to modal.com for embeddings as well
9897f0e
raw
history blame
1.62 kB
from typing import List
import requests
from langchain_core.embeddings import Embeddings
class ModalEmbeddings(Embeddings):
def __init__(self, url: str, model_name: str, api_key: str = None):
self.url = url
self.model_name = model_name
self.api_key = api_key
def embed(self, text: List[str]) -> List[List[str]]:
# We remove newlines from the text to avoid issues with the embedding model.
cleaned_text = [t.replace("\n", " ") for t in text]
payload = {'text': "\n".join(cleaned_text)}
headers = {}
if self.api_key:
headers = {'x-api-key': self.api_key}
response = requests.post(
self.url,
data=payload,
files=[],
headers=headers
)
response.raise_for_status()
# print(response.text)
return response.json()
def embed_documents(self, text: List[str]) -> List[List[str]]:
"""
Embed a list of documents using the embedding model.
"""
return self.embed(text)
def embed_query(self, text: str) -> List[str]:
"""
Embed a query
"""
return self.embed([text])[0]
def get_model_name(self) -> str:
return self.model_name
if __name__ == "__main__":
embeds = ModalEmbeddings(
url="https://lfoppiano--intfloat-multilingual-e5-large-instruct-embed-5da184.modal.run/",
model_name="intfloat/multilingual-e5-large-instruct"
)
print(embeds.embed(
["We are surrounded by stupid kids",
"We are interested in the future of AI"]
))