esilver's picture
compare to chicory-ui
115a2ec
raw
history blame
2.37 kB
import argparse
import os
import sys
import gradio as gr
from utils import load_embeddings
from ui import create_demo, embeddings
def main():
"""Main entry point for the application"""
parser = argparse.ArgumentParser(description='Run the Product Categorization web app')
parser.add_argument('--embeddings', default='ingredient_embeddings_voyageai.pkl',
help='Path to the ingredient embeddings pickle file')
parser.add_argument('--share', action='store_true', help='Create a public link for sharing')
args = parser.parse_args()
# Check if embeddings file exists
if not os.path.exists(args.embeddings):
print(f"Error: Embeddings file {args.embeddings} not found!")
print(f"Please ensure the file exists at {os.path.abspath(args.embeddings)}")
sys.exit(1)
# Load embeddings
try:
global embeddings
embeddings_data = load_embeddings(args.embeddings)
# Update the embeddings in the ui module
import ui
ui.embeddings = embeddings_data
except Exception as e:
print(f"Error loading embeddings: {e}")
sys.exit(1)
# Create and launch the interface
demo = create_demo()
# Register keyboard shortcuts for the interface
demo.launch(
share=args.share,
# These are the keyboard shortcuts - use these options instead of custom JS
show_api=False,
# This sets the keyboard shortcuts at the Gradio level which is more reliable
_js="""
document.addEventListener('keydown', function(e) {
if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {
// Find visible buttons in the active tab
const buttons = document.querySelectorAll('button.primary');
buttons.forEach(button => {
// Check if the button is visible
const rect = button.getBoundingClientRect();
if (rect.width > 0 && rect.height > 0 && getComputedStyle(button).display !== 'none') {
// Click the first visible button
button.click();
e.preventDefault();
return;
}
});
}
});
"""
)
if __name__ == "__main__":
main()