Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
import os | |
import sys | |
import logging | |
# Set up logging | |
logging.basicConfig( | |
level=logging.INFO, | |
format='%(asctime)s - %(levelname)s - %(message)s', | |
handlers=[logging.StreamHandler(sys.stdout)] | |
) | |
logger = logging.getLogger(__name__) | |
logger.info("Starting UK Public Transport Assistant app") | |
# Add error handling for module imports | |
try: | |
from llava_inference import LLaVAHelper | |
logger.info("Successfully imported LLaVAHelper") | |
except Exception as e: | |
logger.error(f"Failed to import LLaVAHelper: {e}") | |
logger.error("Stack trace:", exc_info=True) | |
model = None | |
else: | |
# Initialize model | |
try: | |
logger.info("Initializing LLaVA model...") | |
model = LLaVAHelper() | |
logger.info("LLaVA model initialized successfully") | |
except Exception as e: | |
logger.error(f"Failed to initialize LLaVA model: {e}") | |
logger.error("Stack trace:", exc_info=True) | |
model = None | |
def answer_question(image, question): | |
if model is None: | |
return "Model initialization failed. Please check server logs." | |
if image is None or question.strip() == "": | |
return "Please upload an image and enter a question." | |
try: | |
return model.generate_answer(image, question) | |
except Exception as e: | |
return f"Error processing request: {str(e)}" | |
# Create examples directory if it doesn't exist | |
os.makedirs("assets", exist_ok=True) | |
demo = gr.Interface( | |
fn=answer_question, | |
inputs=[ | |
gr.Image(type="pil", label="Upload Public Transport Signage"), | |
gr.Textbox(label="Ask a question (e.g., 'When is the next train to London?')") | |
], | |
outputs=gr.Textbox(label="Answer"), | |
title="UK Public Transport Assistant", | |
description="Upload an image of UK public transport signage (like train timetables or metro maps), and ask a question related to it. Powered by LLaVA-1.5.", | |
# Fix examples format - either provide valid examples or set to None | |
examples=None # Remove examples to avoid format errors | |
) | |
if __name__ == "__main__": | |
demo.launch(share=True) # Added share=True to make it accessible on a public URL |