ScouterAI / modal_apps /task_model_retriever.py
stevenbucaille's picture
Enhance app.py with improved user interface and instructions, update model ID in llm.py, and add image classification capabilities across various components. Introduce segment anything functionality and refine README for clarity on model capabilities.
518d841
raw
history blame
1.78 kB
import modal
from langchain_community.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings
from .app import app
from .image import image
from .volume import volume
@app.cls(gpu="T4", image=image, volumes={"/volume": volume})
class TaskModelRetrieverModalApp:
@modal.enter()
def setup(self):
tasks = ["object-detection", "image-segmentation", "image-classification"]
self.vector_stores = {}
for task in tasks:
self.vector_stores[task] = FAISS.load_local(
folder_path=f"/volume/vector_store/{task}",
embeddings=HuggingFaceEmbeddings(
model_name="all-MiniLM-L6-v2",
model_kwargs={"device": "cuda"},
encode_kwargs={"normalize_embeddings": True},
show_progress=True,
),
index_name="faiss_index",
allow_dangerous_deserialization=True,
)
def forward(self, task: str, query: str) -> str:
docs = self.vector_stores[task].similarity_search(query, k=7)
model_ids = [doc.metadata["model_id"] for doc in docs]
model_labels = [doc.metadata["model_labels"] for doc in docs]
models_dict = {model_id: model_labels for model_id, model_labels in zip(model_ids, model_labels)}
return models_dict
@modal.method()
def object_detection_search(self, query: str) -> str:
return self.forward("object-detection", query)
@modal.method()
def image_segmentation_search(self, query: str) -> str:
return self.forward("image-segmentation", query)
@modal.method()
def image_classification_search(self, query: str) -> str:
return self.forward("image-classification", query)