Spaces:
Running
Running
""" | |
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) |