cj-dev-code/semantic_search
0
1from fastapi import FastAPI2from pydantic import BaseModel3from dotenv import load_dotenv4from azure.search.documents import SearchClient5from azure.search.documents._generated.models import Vector6from azure.core.credentials import AzureKeyCredential7from transformers import pipeline8import voyageai9import os10from openai import OpenAI11 12from frontend.app import iface13import gradio as gr14 15import os16from dotenv import load_dotenv17 18if os.getenv("HF_SPACE_ID") is None: # Only run locally19 load_dotenv()20 21 22vo = voyageai.Client()23# ๐ Credentials24endpoint = os.getenv("AZURE_AAIS_ENDPT")25key = os.getenv("AZURE_AAIS_KEY")26index_name = "main"27 28# โ ๏ธ Set API version to enable vector search29client = SearchClient(30 endpoint=endpoint,31 index_name=index_name,32 credential=AzureKeyCredential(key),33 api_version="2023-07-01-Preview" # ๐ก This unlocks vector search34)35clientt = OpenAI()36# ๐ค Embedding model37# embedder = pipeline("feature-extraction", model="sentence-transformers/all-MiniLM-L6-v2")38def embed(text):39 #response = vo.embed([text], model="voyage-3.5", input_type="document")40 #response = voyage.embed([text], model="voyage-3.5") # or "voyage-lite-01"41 # response = embedder(text)42 response = clientt.embeddings.create(43 input=text,44 model="text-embedding-3-large",45 dimensions=1024 46 )47 return response.data[0].embedding48 #return response.embeddings[0] # returns a list[float]49 50# ๐ง FastAPI setup51app = FastAPI() 52class QueryRequest(BaseModel):53 query: str54 55@app.post("/search")56async def vector_search(query_request: QueryRequest):57 query = query_request.query58 vector = embed(query)59 60 61 results = client.search(62 search_text=None,63 vectors=[64 Vector(65 value=vector,66 k=5,67 fields="embedding"68 )69 ],70 select=["text", "source"]71)72 73 # ๐ค Format response for Gradio74 return {75 "results": [76 {"text": r["text"], "source": r["source"]}77 for r in results78 ]79 }80 81app = gr.mount_gradio_app(app, iface, path="")