File size: 2,564 Bytes
3556e6f
 
7af929b
45462fb
7af929b
3556e6f
7af929b
3556e6f
7af929b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be043a6
45462fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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>
        """
    )