from typing import List from fastapi import FastAPI, HTTPException from fastapi.responses import HTMLResponse from pydantic import BaseModel from src.prompt_loader import PromptLoader from src.search_engine import PromptSearchEngine # Constants SEED = 42 DATA_SIZE = 100 # Initialize the prompt loader and search engine prompts = PromptLoader(seed=SEED).load_data(size=DATA_SIZE) engine = PromptSearchEngine(prompts) # Initialize FastAPI app = FastAPI() # Request and Response Models class QueryRequest(BaseModel): query: str n: int = 5 class SimilarPrompt(BaseModel): score: float prompt: str class QueryResponse(BaseModel): similar_prompts: List[SimilarPrompt] # API endpoint @app.post("/most_similar", response_model=QueryResponse) async def get_most_similar(query_request: QueryRequest): try: similar_prompts = engine.most_similar( query=query_request.query, n=query_request.n ) response = QueryResponse( similar_prompts=[ SimilarPrompt(score=score, prompt=prompt) for score, prompt in similar_prompts ] ) return response except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.get("/", response_class=HTMLResponse) async def home_page(): return HTMLResponse( """ Prompt Search Engine

Prompt Search Engine API

Use this API to find similar prompts based on a query.

POST /most_similar

Request: {"query": "string", "n": 5}

Response: {"similar_prompts": [{"score": 0.95, "prompt": "Example prompt 1"}]}

For more info, visit GitHub.

""" )