import gradio as gr
import pandas as pd
from thirdai import bolt, licensing
import os
import time
licensing.set_path("license.serialized")
max_posts = 5
df = pd.read_csv("processed_recipes_3.csv")
model = bolt.UniversalDeepTransformer.load("1bn_name_ctg_keywords.bolt")
recipe_id_to_row_num = {}
for i in range(df.shape[0]):
recipe_id_to_row_num[df.iloc[i,0]] = i
LIKE_TEXT = "👍"
FEEDBACK_RECEIVED_TEXT = "Model updated 👌"
SHOW_MORE = "Show more"
SHOW_LESS = "Show less"
def retrain(query, doc_id):
df = pd.DataFrame({
"Name": [query.replace('\n', ' ')],
"RecipeId": [str(doc_id)]
})
filename = f"temptrain{hash(query)}{hash(doc_id)}{time.time()}.csv"
df.to_csv(filename)
prediction = None
while prediction != doc_id:
model.train(filename, epochs=1)
prediction = model.predict(
{"Name": query.replace('\n', ' ')},
return_predicted_class=True)
os.remove(filename)
# sample = {"query": query.replace('\n', ' '), "id": str(doc_id)}
# batch = [sample]
# prediction = None
# while prediction != doc_id:
# model.train_batch(batch, metrics=["categorical_accuracy"])
# prediction = model.predict(sample, return_predicted_class=True)
def search(query):
scores = model.predict({"Name": query.lower()})
K = min(2*max_posts, len(scores) - 1)
sorted_post_ids = scores.argsort()[-K:][::-1]
count = 0
relevant_posts = []
for pid in sorted_post_ids:
if pid in recipe_id_to_row_num:
relevant_posts.append(df.iloc[recipe_id_to_row_num[pid]])
##
count += 1
if count==max_posts:
break
##
header = [gr.Markdown.update(visible=True)]
boxes = [
gr.Box.update(visible=True)
for _ in relevant_posts
]
titles = [
gr.Markdown.update(f"## {post['Name']}")
for post in relevant_posts
]
toggles = [
gr.Button.update(
visible=True,
value=SHOW_MORE,
interactive=True,
)
for _ in relevant_posts
]
matches = [
gr.Button.update(
value=LIKE_TEXT,
interactive=True,
)
for _ in relevant_posts
]
bodies = [
gr.HTML.update(
visible=False,
value=f"
"
f"