54 lines
1.6 KiB
Python
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()
|