"""Entry point: python -m gemini_web2api""" import argparse import os from .config import CONFIG, load_config, find_config from .models import MODELS from .gemini import HAS_HTTPX from .server import GeminiHandler, ThreadedServer from . import __version__ def main(): parser = argparse.ArgumentParser(description="Gemini Web to OpenAI API") parser.add_argument("--port", type=int, default=None) parser.add_argument("--config", type=str, default=None) parser.add_argument("--cookie-file", type=str, default=None) parser.add_argument("--proxy", type=str, default=None, help="HTTP proxy, e.g. http://127.0.0.1:7890") parser.add_argument("--version", action="version", version=f"gemini-web2api {__version__}") args = parser.parse_args() config_path = args.config or os.environ.get("GEMINI_WEB2API_CONFIG") or find_config() if config_path: load_config(config_path) if args.port: CONFIG["port"] = args.port if args.cookie_file: CONFIG["cookie_file"] = args.cookie_file if args.proxy: CONFIG["proxy"] = args.proxy port = CONFIG["port"] server = ThreadedServer((CONFIG["host"], port), GeminiHandler) print(f"gemini-web2api v{__version__}") print(f" Listening: http://0.0.0.0:{port}") print(f" Base URL: http://localhost:{port}/v1") print(f" Models: {', '.join(MODELS.keys())}") print(f" Cookie: {'yes' if CONFIG.get('cookie_file') else 'none (anonymous)'}") print(f" Proxy: {CONFIG.get('proxy') or 'system env'}") print(f" Streaming: {'httpx (true streaming)' if HAS_HTTPX else 'urllib (buffered)'}") print() try: server.serve_forever() except KeyboardInterrupt: print("\nStopped.") server.shutdown() if __name__ == "__main__": main()