#!/usr/bin/env python3 """ Debug version of ChatCal to identify the crash cause """ import gradio as gr import sys import traceback import os import json from version import get_version_info def test_imports(): """Test all imports to identify which one is failing""" results = [] # Test basic imports try: import gradio results.append("✅ gradio imported successfully") except Exception as e: results.append(f"❌ gradio import failed: {e}") try: import pydantic results.append(f"✅ pydantic {pydantic.VERSION} imported successfully") except Exception as e: results.append(f"❌ pydantic import failed: {e}") try: from llama_index.core.llms import ChatMessage, MessageRole results.append("✅ llama_index.core.llms imported successfully") except Exception as e: results.append(f"❌ llama_index.core.llms import failed: {e}") try: from core.config import config results.append("✅ core.config imported successfully") except Exception as e: results.append(f"❌ core.config import failed: {e}") try: from core.chat_agent import ChatCalAgent results.append("✅ core.chat_agent imported successfully") except Exception as e: results.append(f"❌ core.chat_agent import failed: {e}") # Test environment variables env_vars = [ "GROQ_API_KEY", "ANTHROPIC_API_KEY", "SECRET_KEY", "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET" ] for var in env_vars: if os.getenv(var): results.append(f"✅ {var} is set") else: results.append(f"⚠️ {var} is not set") return "\n".join(results) def simple_interface(): """Simple interface to test basic functionality""" return "ChatCal Debug App is working! Check import results above." try: # Run import tests import_results = test_imports() print("=== IMPORT TEST RESULTS ===") print(import_results) # Add version endpoint function def version_endpoint(): """Return version information as JSON""" return json.dumps(get_version_info(), indent=2) # Create simple Gradio interface with gr.Blocks(title="ChatCal Debug") as demo: gr.Markdown("# 🔧 ChatCal Debug Interface") gr.Markdown("## Version Information:") version_btn = gr.Button("Get Version Info") version_output = gr.Textbox(label="Version", interactive=False) version_btn.click(version_endpoint, outputs=version_output) gr.Markdown("## Import Test Results:") gr.Textbox(value=import_results, lines=15, label="Import Status", interactive=False) gr.Markdown("## Simple Test:") test_btn = gr.Button("Test Basic Functionality") output = gr.Textbox(label="Output") test_btn.click(simple_interface, outputs=output) # Add custom API route for version endpoint from fastapi import FastAPI from fastapi.responses import JSONResponse # Create FastAPI app fastapi_app = FastAPI() @fastapi_app.get("/version") async def get_version(): """RESTful API endpoint for version information""" return JSONResponse(content=get_version_info()) # Mount FastAPI to Gradio demo.mount_to(fastapi_app) # Launch with error handling demo.launch( server_name="0.0.0.0", server_port=7860, share=True, show_error=True ) except Exception as e: print(f"=== CRITICAL ERROR ===") print(f"Error: {e}") print(f"Traceback:") traceback.print_exc()