CoolFace
Apppublic

kwedel/FrameworkMatchmaker

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes
app.py62 linesDownload Raw Back to root
1import os2from fastapi import FastAPI, HTTPException, Request3from pydantic import BaseModel4from langchain_openai import OpenAIEmbeddings5from langchain_community.vectorstores import FAISS6 7# Load OpenAI key from Hugging Face secret8openai_key = os.getenv("OPENAI_API_KEY")9if not openai_key:10    raise ValueError("โŒ OPENAI_API_KEY is missing. Add it in Hugging Face Secrets.")11 12# Load FAISS index13vectorstore = FAISS.load_local(14    "framework_index",15    OpenAIEmbeddings(openai_api_key=openai_key),16    allow_dangerous_deserialization=True17)18 19app = FastAPI(title="Framework Matchmaker API")20 21# Request schema22class TaskQuery(BaseModel):23    task_description: str24    top_k: int = 325    source: str = ""26 27# Health check route for container pings28@app.get("/")29def root():30    return {"status": "Framework Matchmaker API is running."}31 32# Main endpoint33@app.post("/recommend")34def recommend_frameworks(query: TaskQuery, request: Request):35    # Soft access control: only allow from Custom GPT36    if query.source != "gpt-custom":37        raise HTTPException(status_code=403, detail="Unauthorized request")38 39    print(f"๐Ÿ” Source: {query.source}")40    print(f"๐ŸŽฏ Task Description: {query.task_description}")41 42    try:43        retriever = vectorstore.as_retriever(search_kwargs={"k": query.top_k})44        results = retriever.get_relevant_documents(query.task_description)45        print(f"โœ… Retrieved {len(results)} results")46 47        frameworks = []48        for doc in results:49            meta = doc.metadata50            frameworks.append({51                "name": meta.get("name", "N/A"),52                "category": meta.get("category", "N/A"),53                "description": meta.get("description", "N/A"),54                "template_link": meta.get("template_link", "N/A"),55                "ai_prompt": meta.get("ai_prompt", "N/A")56            })57 58        return {"recommendations": frameworks}59 60    except Exception as e:61        print(f"โŒ Error: {str(e)}")62        raise HTTPException(status_code=500, detail=str(e))