import asyncio import json import os from fastembed_vectorstore import FastembedVectorstore, FastembedEmbeddingModel class IconFinderService: def __init__(self): self.vector_store = self.get_icons_vectorstore() def get_icons_vectorstore(self): vector_store_path = "assets/icons_vectorstore.json" embedding_model = FastembedEmbeddingModel.BGESmallENV15 if os.path.exists(vector_store_path): return FastembedVectorstore.load(embedding_model, vector_store_path) vector_store = FastembedVectorstore(embedding_model) with open("assets/icons.json", "r") as f: icons = json.load(f) documents = [] for each in icons["icons"]: if each["name"].split("-")[-1] == "bold": documents.append(f"{each['name']}||{each['tags']}") vector_store.embed_documents(documents) vector_store.save(vector_store_path) return vector_store async def search_icons(self, query: str, k: int = 1): result = await asyncio.to_thread(self.vector_store.search, query, k) return [ f"/static/icons/bold/{result[0].split('||')[0]}.png" for result in result ]