xkcd-retriever/server-implementation/app.py
2024-12-07 13:25:38 +01:00

54 lines
1.6 KiB
Python

import pathlib
from gevent.pywsgi import WSGIServer
from tabulate import tabulate
from flask import Flask, request, render_template
from wtforms import Form, StringField, SubmitField
from wtforms.validators import DataRequired
from backend import AIBackend
app = Flask("xkcd_retriever", template_folder=pathlib.Path(__file__).parent / "templates")
print("Initializing backend")
backend = AIBackend()
# backend.warmup() # Only needed when there is no data in the pgvector database
backend._ready = True
print("AI backend initialized ...")
class BasicForm(Form):
ids = StringField("ID",validators=[DataRequired()])
submit = SubmitField("Submit")
@app.route("/",methods =['POST','GET'])
def main():
form = BasicForm()
return render_template("index.html", form = form)
@app.route("/search",methods =['POST','GET'])
def results():
topic = request.form.get('ids')
result = backend.query(f"Give an example for {topic}")
headers = ["ID", "Title", "Link"]
print(tabulate(backend.format_result(result), headers=headers, tablefmt="github"))
res = backend.format_for_api(result)
return render_template("results.html", results=res, topic=topic)
@app.route("/find")
def query_backend():
topic = request.args.get('topic')
result = backend.query(f"Give an example for {topic}")
headers = ["ID", "Title", "Link"]
print(tabulate(backend.format_result(result), headers=headers, tablefmt="github"))
return backend.format_for_api(result)
if __name__ == "__main__":
http_server = WSGIServer(("0.0.0.0", 8000), app)
http_server.serve_forever()