import gradio as gr from utils import SafeProgress from embeddings import create_product_embeddings from similarity import compute_similarities from chicory_api import call_chicory_parser from ui_core import embeddings, parse_input from ui_formatters import format_categories_html, create_results_container from openai_expansion import expand_product_descriptions def categorize_products(product_input, is_file=False, use_expansion=False, top_n=10, confidence_threshold=0.5): """Categorize products from text input or file""" progress_tracker = SafeProgress(gr.Progress()) progress_tracker(0, desc="Starting...") # Parse input product_names, error = parse_input(product_input, is_file) if error: return error # Validate embeddings are loaded if not embeddings: return "
Processing {len(product_names)} products.
" for product, similarities in all_similarities.items(): filtered_similarities = [(ingredient, score) for ingredient, score in similarities if score >= confidence_threshold] top_similarities = filtered_similarities[:int(top_n)] # Add expansion explanation if available expansion_text = expanded_descriptions.get(product, "") if use_expansion else "" # Debug info for Chicory results chicory_data = chicory_results.get(product, []) output_html += format_categories_html( product, top_similarities, chicory_result=chicory_data, explanation=expansion_text ) output_html += "