import logging from src.config import settings from src.agent.graph import create_agent from src.ui import create_ui from langgraph.checkpoint.postgres import PostgresSaver logging.basicConfig( level=logging.DEBUG if settings.debug else logging.INFO, format="%(asctime)s [%(name)-12s] %(levelname)-7s %(message)s", datefmt="%H:%M:%S", ) # Quiet noisy third-party loggers for name in ("httpx", "httpcore", "urllib3", "hf_transfer", "gradio", "uvicorn", "openai", "anthropic", "google", "google.auth", "google.generativeai", "matplotlib", "psycopg", "psycopg.pool"): logging.getLogger(name).setLevel(logging.WARNING) logger = logging.getLogger("cashy.main") def main(): provider = settings.resolved_provider model_name = settings.model_name or "default" logger.info("Mode: %s", settings.app_mode) if provider: logger.info("LLM: %s (%s)", provider, model_name) else: logger.warning("LLM: No API key configured — user must provide one via UI") logger.info("Database: %s@%s:%s", settings.resolved_db_name, settings.db_host[:8] + "...", settings.db_port) with PostgresSaver.from_conn_string(settings.database_url) as checkpointer: checkpointer.setup() logger.info("Checkpoint tables ready") agent = create_agent(checkpointer=checkpointer) logger.info("Agent graph compiled") demo, theme = create_ui(agent) logger.info("Launching Gradio on http://localhost:7860") demo.launch(server_name="0.0.0.0", server_port=7860, theme=theme) if __name__ == "__main__": main()