mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-11-29 22:34:08 +03:00
Improve cli argparser, Improve curl_cffi websocket support
This commit is contained in:
parent
a129c3db44
commit
fdc8b88d17
22
g4f/cli.py
22
g4f/cli.py
@ -1,32 +1,32 @@
|
|||||||
import argparse
|
import argparse
|
||||||
from enum import Enum
|
|
||||||
|
|
||||||
import g4f
|
|
||||||
from g4f import Provider
|
from g4f import Provider
|
||||||
|
|
||||||
from g4f.gui.run import gui_parser, run_gui_args
|
from g4f.gui.run import gui_parser, run_gui_args
|
||||||
|
|
||||||
def run_gui(args):
|
|
||||||
print("Running GUI...")
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
IgnoredProviders = Enum("ignore_providers", {key: key for key in Provider.__all__})
|
|
||||||
parser = argparse.ArgumentParser(description="Run gpt4free")
|
parser = argparse.ArgumentParser(description="Run gpt4free")
|
||||||
subparsers = parser.add_subparsers(dest="mode", help="Mode to run the g4f in.")
|
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("--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("--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("--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("--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.")
|
default=[], help="List of providers to ignore when processing request.")
|
||||||
subparsers.add_parser("gui", parents=[gui_parser()], add_help=False)
|
subparsers.add_parser("gui", parents=[gui_parser()], add_help=False)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
if args.mode == "api":
|
if args.mode == "api":
|
||||||
import g4f.api
|
import g4f.api
|
||||||
g4f.api.api.set_list_ignored_providers(args.ignored_providers)
|
g4f.api.api.set_list_ignored_providers(
|
||||||
g4f.api.run_api(bind=args.bind, debug=args.debug, workers=args.workers, use_colors=not args.disable_colors)
|
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":
|
elif args.mode == "gui":
|
||||||
run_gui_args(args)
|
run_gui_args(args)
|
||||||
else:
|
else:
|
||||||
|
@ -79,10 +79,10 @@ class StreamSession(AsyncSession):
|
|||||||
return StreamResponse(super().request(method, url, stream=True, **kwargs))
|
return StreamResponse(super().request(method, url, stream=True, **kwargs))
|
||||||
|
|
||||||
def ws_connect(self, url, *args, **kwargs):
|
def ws_connect(self, url, *args, **kwargs):
|
||||||
return WebSocket(self, url)
|
return WebSocket(self, url, **kwargs)
|
||||||
|
|
||||||
def _ws_connect(self, url):
|
def _ws_connect(self, url, **kwargs):
|
||||||
return super().ws_connect(url)
|
return super().ws_connect(url, **kwargs)
|
||||||
|
|
||||||
# Defining HTTP methods as partial methods of the request method.
|
# Defining HTTP methods as partial methods of the request method.
|
||||||
head = partialmethod(request, "HEAD")
|
head = partialmethod(request, "HEAD")
|
||||||
@ -102,20 +102,22 @@ else:
|
|||||||
raise RuntimeError("CurlMimi in curl_cffi is missing | pip install -U g4f[curl_cffi]")
|
raise RuntimeError("CurlMimi in curl_cffi is missing | pip install -U g4f[curl_cffi]")
|
||||||
|
|
||||||
class WebSocket():
|
class WebSocket():
|
||||||
def __init__(self, session, url) -> None:
|
def __init__(self, session, url, **kwargs) -> None:
|
||||||
if not has_curl_ws:
|
if not has_curl_ws:
|
||||||
raise RuntimeError("CurlWsFlag in curl_cffi is missing | pip install -U g4f[curl_cffi]")
|
raise RuntimeError("CurlWsFlag in curl_cffi is missing | pip install -U g4f[curl_cffi]")
|
||||||
self.session: StreamSession = session
|
self.session: StreamSession = session
|
||||||
self.url: str = url
|
self.url: str = url
|
||||||
|
del kwargs["autoping"]
|
||||||
|
self.options: dict = kwargs
|
||||||
|
|
||||||
async def __aenter__(self):
|
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
|
return self
|
||||||
|
|
||||||
async def __aexit__(self, *args):
|
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()
|
bytes, _ = await self.inner.arecv()
|
||||||
return bytes.decode(errors="ignore")
|
return bytes.decode(errors="ignore")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user