Team Ai
Apppublic

cj-dev-code/semantic_search

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
backend.py81 linesDownload Raw Back to backend
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="")