Spaces:
Sleeping
Sleeping
| """ | |
| Main entry point for DescribePDF application. | |
| This module handles command-line argument parsing and routes to the appropriate | |
| UI or CLI functionality based on the provided arguments. | |
| """ | |
| import argparse | |
| import sys | |
| from typing import List, Optional | |
| from describepdf.config import logger | |
| def parse_arguments(args: Optional[List[str]] = None) -> argparse.Namespace: | |
| """ | |
| Parse command line arguments. | |
| Args: | |
| args: List of command line arguments (default: sys.argv[1:]) | |
| Returns: | |
| argparse.Namespace: Parsed arguments | |
| """ | |
| parser = argparse.ArgumentParser(add_help=False) | |
| parser.add_argument('--web', action='store_true', help='Start in web mode with Gradio (OpenRouter)') | |
| parser.add_argument('--web-ollama', action='store_true', help='Start in web mode with Gradio (Ollama local)') | |
| # Parse known args to allow the rest to be processed by the CLI parser | |
| args, _ = parser.parse_known_args(args) | |
| return args | |
| def main(args: Optional[List[str]] = None) -> int: | |
| """ | |
| Main function that starts the appropriate application mode. | |
| Args: | |
| args: List of command line arguments (default: sys.argv[1:]) | |
| Returns: | |
| int: Exit code (0 for success, non-zero for error) | |
| """ | |
| # Logging is already configured in config.py, we just need to use the logger | |
| logger.info("Starting DescribePDF...") | |
| # Parse arguments | |
| parsed_args = parse_arguments(args) | |
| try: | |
| # Start in the appropriate mode | |
| if parsed_args.web: | |
| # Start web UI with OpenRouter | |
| from describepdf import ui | |
| logger.info("Starting in WEB mode with Gradio interface for OpenRouter...") | |
| app_ui = ui.create_ui() | |
| app_ui.launch() | |
| logger.info("Web UI stopped.") | |
| return 0 | |
| elif parsed_args.web_ollama: | |
| # Start web UI with Ollama | |
| from describepdf import ui_ollama | |
| logger.info("Starting in WEB mode with Gradio interface for Ollama...") | |
| app_ui = ui_ollama.create_ui() | |
| app_ui.launch() | |
| logger.info("Web UI (Ollama) stopped.") | |
| return 0 | |
| else: | |
| # Start CLI mode | |
| from describepdf import cli | |
| logger.info("Starting in CLI mode...") | |
| cli.run_cli() | |
| return 0 | |
| except ImportError as e: | |
| logger.error(f"Failed to start, likely a missing dependency: {e}") | |
| logger.error(f"Details: {e}") | |
| return 1 | |
| except KeyboardInterrupt: | |
| logger.info("Application stopped by user.") | |
| return 0 | |
| except Exception as e: | |
| logger.error(f"An unexpected error occurred: {e}", exc_info=True) | |
| return 1 | |
| if __name__ == "__main__": | |
| exit_code = main() | |
| sys.exit(exit_code) |