From fdc8b88d17f7b9fa59aafa02612017c8cb32dbf9 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Sat, 20 Apr 2024 20:06:35 +0200 Subject: Improve cli argparser, Improve curl_cffi websocket support --- g4f/cli.py | 22 +++++++++++----------- g4f/requests/curl_cffi.py | 16 +++++++++------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/g4f/cli.py b/g4f/cli.py index 70542993..6b39091d 100644 --- a/g4f/cli.py +++ b/g4f/cli.py @@ -1,32 +1,32 @@ import argparse -from enum import Enum -import g4f from g4f import Provider - from g4f.gui.run import gui_parser, run_gui_args -def run_gui(args): - print("Running GUI...") - def main(): - IgnoredProviders = Enum("ignore_providers", {key: key for key in Provider.__all__}) parser = argparse.ArgumentParser(description="Run gpt4free") subparsers = parser.add_subparsers(dest="mode", help="Mode to run the g4f in.") - api_parser=subparsers.add_parser("api") + api_parser = subparsers.add_parser("api") api_parser.add_argument("--bind", default="0.0.0.0:1337", help="The bind string.") api_parser.add_argument("--debug", action="store_true", help="Enable verbose logging.") api_parser.add_argument("--workers", type=int, default=None, help="Number of workers.") api_parser.add_argument("--disable_colors", action="store_true", help="Don't use colors.") - api_parser.add_argument("--ignored-providers", nargs="+", choices=[provider.name for provider in IgnoredProviders], + api_parser.add_argument("--ignored-providers", nargs="+", choices=[provider for provider in Provider.__map__], default=[], help="List of providers to ignore when processing request.") subparsers.add_parser("gui", parents=[gui_parser()], add_help=False) args = parser.parse_args() if args.mode == "api": import g4f.api - g4f.api.api.set_list_ignored_providers(args.ignored_providers) - g4f.api.run_api(bind=args.bind, debug=args.debug, workers=args.workers, use_colors=not args.disable_colors) + g4f.api.api.set_list_ignored_providers( + args.ignored_providers + ) + g4f.api.run_api( + bind=args.bind, + debug=args.debug, + workers=args.workers, + use_colors=not args.disable_colors + ) elif args.mode == "gui": run_gui_args(args) else: diff --git a/g4f/requests/curl_cffi.py b/g4f/requests/curl_cffi.py index d0d44ba7..1464cb32 100644 --- a/g4f/requests/curl_cffi.py +++ b/g4f/requests/curl_cffi.py @@ -79,10 +79,10 @@ class StreamSession(AsyncSession): return StreamResponse(super().request(method, url, stream=True, **kwargs)) def ws_connect(self, url, *args, **kwargs): - return WebSocket(self, url) + return WebSocket(self, url, **kwargs) - def _ws_connect(self, url): - return super().ws_connect(url) + def _ws_connect(self, url, **kwargs): + return super().ws_connect(url, **kwargs) # Defining HTTP methods as partial methods of the request method. head = partialmethod(request, "HEAD") @@ -102,20 +102,22 @@ else: raise RuntimeError("CurlMimi in curl_cffi is missing | pip install -U g4f[curl_cffi]") class WebSocket(): - def __init__(self, session, url) -> None: + def __init__(self, session, url, **kwargs) -> None: if not has_curl_ws: raise RuntimeError("CurlWsFlag in curl_cffi is missing | pip install -U g4f[curl_cffi]") self.session: StreamSession = session self.url: str = url + del kwargs["autoping"] + self.options: dict = kwargs async def __aenter__(self): - self.inner = await self.session._ws_connect(self.url) + self.inner = await self.session._ws_connect(self.url, **self.options) return self async def __aexit__(self, *args): - self.inner.aclose() + await self.inner.aclose() - async def receive_str(self) -> str: + async def receive_str(self, **kwargs) -> str: bytes, _ = await self.inner.arecv() return bytes.decode(errors="ignore") -- cgit v1.2.3