From 8e131c2847024b9b34d228810b0225231ba0c8fc Mon Sep 17 00:00:00 2001
From: Firq <firelp42@gmail.com>
Date: Sat, 7 Dec 2024 13:25:38 +0100
Subject: [PATCH] Finalized

---
 .gitignore                                    |   2 ++
 pipeline.indexing.png                         | Bin 0 -> 34791 bytes
 ...id-retrieval.png => pipeline.retrieval.png | Bin
 .../__pycache__/backend.cpython-310.pyc       | Bin 5536 -> 5536 bytes
 server-implementation/app.py                  |   9 ++++++---
 server-implementation/backend.py              |   2 +-
 server-implementation/templates/results.html  |   2 +-
 7 files changed, 10 insertions(+), 5 deletions(-)
 create mode 100644 pipeline.indexing.png
 rename hybrid-retrieval.png => pipeline.retrieval.png (100%)

diff --git a/.gitignore b/.gitignore
index 1ca6115..a7c73d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,12 @@
 # env
 .env
 *venv/
+**/__pycache__/
 
 # Binaries for installation
 *.deb
 *.whl
+.install/
 
 # Test data
 data/pgvector.sql
diff --git a/pipeline.indexing.png b/pipeline.indexing.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4900ea3c7b27d958e28c96665bcca0d178840e7
GIT binary patch
literal 34791
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

literal 0
HcmV?d00001

diff --git a/hybrid-retrieval.png b/pipeline.retrieval.png
similarity index 100%
rename from hybrid-retrieval.png
rename to pipeline.retrieval.png
diff --git a/server-implementation/__pycache__/backend.cpython-310.pyc b/server-implementation/__pycache__/backend.cpython-310.pyc
index aaba6667f89a5b4a9a92df760a27a750d5c36562..782d9ece4911febf44e14d345d19c91e99de62c5 100644
GIT binary patch
delta 22
ccmZ3Wy+E5cpO=@50SIE)Led{?<ee-E06ZuKoB#j-

delta 22
ccmZ3Wy+E5cpO=@50SGSV1gAgQ$U9jS07HrfdH?_b

diff --git a/server-implementation/app.py b/server-implementation/app.py
index df75429..14123c0 100644
--- a/server-implementation/app.py
+++ b/server-implementation/app.py
@@ -1,7 +1,9 @@
 import pathlib
+
 from gevent.pywsgi import WSGIServer
-from flask import Flask, request, render_template
 from tabulate import tabulate
+
+from flask import Flask, request, render_template
 from wtforms import Form, StringField, SubmitField
 from wtforms.validators import DataRequired
 
@@ -47,5 +49,6 @@ def query_backend():
 
     return backend.format_for_api(result)
 
-http_server = WSGIServer(("0.0.0.0", 8000), app)
-http_server.serve_forever()
+if __name__ == "__main__":
+    http_server = WSGIServer(("0.0.0.0", 8000), app)
+    http_server.serve_forever()
diff --git a/server-implementation/backend.py b/server-implementation/backend.py
index 8032108..94473e6 100644
--- a/server-implementation/backend.py
+++ b/server-implementation/backend.py
@@ -27,7 +27,7 @@ class AIBackend:
     document_store: PgvectorDocumentStore
     documents: list[Document] = []
 
-    def __init__(self, load_dataset = False):
+    def __init__(self, load_dataset=False):
         get_torch_info()
         try:
             self.gpu = ComponentDevice.from_str("cuda:0")
diff --git a/server-implementation/templates/results.html b/server-implementation/templates/results.html
index 1a09d22..09af5eb 100644
--- a/server-implementation/templates/results.html
+++ b/server-implementation/templates/results.html
@@ -73,7 +73,7 @@
     flex-direction: column;
     position: relative;
     width: 220px;
-    height: 250px;
+    height: 275px;
     border: 2px solid #b86cff;
     margin: 1rem;
     justify-items: flex-start;