prompt-engine / main.py
Lazar Radojevic
update README
3556e6f
raw
history blame
2.56 kB
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(
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Prompt Search Engine</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
p { margin-bottom: 10px; }
code { background: #f4f4f4; padding: 2px 4px; border-radius: 4px; }
.container { max-width: 800px; margin: 0 auto; }
</style>
</head>
<body>
<div class="container">
<h1>Prompt Search Engine API</h1>
<p>Use this API to find similar prompts based on a query.</p>
<h2>POST /most_similar</h2>
<p><strong>Request:</strong> <code>{"query": "string", "n": 5}</code></p>
<p><strong>Response:</strong> <code>{"similar_prompts": [{"score": 0.95, "prompt": "Example prompt 1"}]}</code></p>
<p>For more info, visit <a href="https://github.com/your-repository">GitHub</a>.</p>
</div>
</body>
</html>
"""
)