Spaces:
Runtime error
Runtime error
import json | |
import gradio as gr | |
from typing import Tuple, Dict | |
from paddleocr import PaddleOCR | |
from qdrant_client import QdrantClient | |
from fastembed import TextEmbedding | |
from llama_index.llms.openai import OpenAI | |
from utils import extract_food_items, synthesize_food_item | |
from engine import RecommendationEngine | |
ocr = PaddleOCR(use_angle_cls=True, lang="en", use_gpu=False) | |
llm = OpenAI(model="gpt-3.5-turbo") | |
rec_engine = RecommendationEngine("food", QdrantClient(path="qdrant-rec-sys-data"), TextEmbedding()) | |
def run_ocr(img_path) -> str: | |
result = ocr.ocr(img_path, cls=True)[0] | |
return "\n".join([line[1][0] for line in result]) | |
def recommend( | |
likes_str, dislikes_str, img_path | |
) -> Tuple[str, str, str, Dict[str, float]]: | |
likes = [c.strip() for c in likes_str.split(",")] | |
dislikes = [c.strip() for c in dislikes_str.split(",")] | |
print(likes, dislikes) | |
rec_engine.reset() | |
for food_name in likes: | |
rec_engine.like(synthesize_food_item(food_name, llm)) | |
for food_name in dislikes: | |
rec_engine.dislike(synthesize_food_item(food_name, llm)) | |
ocr_text = run_ocr(img_path) | |
food_names = extract_food_items(ocr_text, llm) | |
food_items = [synthesize_food_item(name, llm) for name in food_names] | |
print("New food items from menu", food_items) | |
recommendations = rec_engine.recommend_from_given(food_items) | |
print(recommendations) | |
return ( | |
ocr_text, | |
json.dumps(food_names, indent=4), | |
json.dumps([item.model_dump() for item in food_items], indent=4), | |
recommendations, | |
) | |
title = "Food recommender" | |
description = "Food recommender by <a href='https://kshivendu.dev/bio'>KShivendu</a> using Qdrant Recommendation API + OpenAI Function calling + FastEmbed embeddings" | |
article = "<a href='https://github.com/KShivendu/rag-cookbook'>Github Repo</a></p>" | |
examples = [ | |
[ | |
"fanta, waffles, chicken biriyani, most of indian food", | |
"virgin mojito, any pork dishes", | |
"sf-menu3.jpg", | |
] | |
] | |
step1_ocr = gr.Text(label="OCR Output") | |
step2_extraction = gr.Code(language="json", label="Extracted food items") | |
step3_enrichment = gr.Code(language="json", label="Enriched food items") | |
step4_recommend = gr.Label(label="Recommendations") | |
app = gr.Interface( | |
fn=recommend, | |
inputs=[ | |
gr.Textbox(label="Likes (comma seperated)"), | |
gr.Textbox(label="Dislikes (comma seperated)"), | |
gr.Image(type="filepath", label="Input", width=20), | |
], | |
outputs=[step1_ocr, step2_extraction, step3_enrichment, step4_recommend], | |
title=title, | |
description=description, | |
article=article, | |
examples=examples, | |
) | |
app.queue(max_size=10) | |
app.launch(debug=True) | |