mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-06 02:30:41 -08:00
Update build
This commit is contained in:
parent
612e1faec5
commit
ae985be2eb
7 changed files with 35 additions and 69 deletions
15
.github/workflows/build-packages.yml
vendored
15
.github/workflows/build-packages.yml
vendored
|
|
@ -37,6 +37,21 @@ jobs:
|
||||||
echo "is_release=${IS_RELEASE}" >> $GITHUB_OUTPUT
|
echo "is_release=${IS_RELEASE}" >> $GITHUB_OUTPUT
|
||||||
echo "Building version: ${G4F_VERSION}"
|
echo "Building version: ${G4F_VERSION}"
|
||||||
|
|
||||||
|
cat > g4f_cli.py << EOF
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Entry point for g4f CLI executable builds
|
||||||
|
"""
|
||||||
|
|
||||||
|
import g4f.debug
|
||||||
|
g4f.debug.version_check = False
|
||||||
|
g4f.debug.version = "${{ needs.prepare.outputs.version }}"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from g4f.cli import main
|
||||||
|
main()
|
||||||
|
EOF
|
||||||
|
|
||||||
# PyPI Package
|
# PyPI Package
|
||||||
build-pypi:
|
build-pypi:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,4 @@
|
||||||
from __future__ import annotations
|
from g4f.cli import main
|
||||||
|
|
||||||
from .cli import get_api_parser, run_api_args
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
parser = get_api_parser()
|
|
||||||
args = parser.parse_args()
|
|
||||||
if args.gui is None:
|
|
||||||
args.gui = True
|
|
||||||
run_api_args(args)
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from .client import get_parser, run_client_args
|
from .client import get_parser, run_client_args
|
||||||
|
|
@ -13,7 +14,8 @@ def get_api_parser():
|
||||||
api_parser.add_argument("--bind", default=None, help="The bind string. (Default: 0.0.0.0:1337)")
|
api_parser.add_argument("--bind", default=None, help="The bind string. (Default: 0.0.0.0:1337)")
|
||||||
api_parser.add_argument("--port", "-p", default=None, help="Change the port of the server.")
|
api_parser.add_argument("--port", "-p", default=None, help="Change the port of the server.")
|
||||||
api_parser.add_argument("--debug", "-d", action="store_true", help="Enable verbose logging.")
|
api_parser.add_argument("--debug", "-d", action="store_true", help="Enable verbose logging.")
|
||||||
api_parser.add_argument("--gui", "-g", default=None, action="store_true", help="Start also the gui.")
|
api_parser.add_argument("--gui", "-g", default=None, action="store_true", help="(deprecated)")
|
||||||
|
api_parser.add_argument("--no-gui", "-ng", default=False, action="store_true", help="Start without the gui.")
|
||||||
api_parser.add_argument("--model", default=None, help="Default model for chat completion. (incompatible with --reload and --workers)")
|
api_parser.add_argument("--model", default=None, help="Default model for chat completion. (incompatible with --reload and --workers)")
|
||||||
api_parser.add_argument("--provider", choices=[provider.__name__ for provider in Provider.__providers__ if provider.working],
|
api_parser.add_argument("--provider", choices=[provider.__name__ for provider in Provider.__providers__ if provider.working],
|
||||||
default=None, help="Default provider for chat completion. (incompatible with --reload and --workers)")
|
default=None, help="Default provider for chat completion. (incompatible with --reload and --workers)")
|
||||||
|
|
@ -48,7 +50,7 @@ def run_api_args(args):
|
||||||
media_provider=args.media_provider,
|
media_provider=args.media_provider,
|
||||||
proxy=args.proxy,
|
proxy=args.proxy,
|
||||||
model=args.model,
|
model=args.model,
|
||||||
gui=args.gui,
|
gui=not args.no_gui,
|
||||||
demo=args.demo,
|
demo=args.demo,
|
||||||
timeout=args.timeout,
|
timeout=args.timeout,
|
||||||
)
|
)
|
||||||
|
|
@ -82,7 +84,9 @@ def main():
|
||||||
elif args.mode == "client":
|
elif args.mode == "client":
|
||||||
run_client_args(args)
|
run_client_args(args)
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
raise argparse.ArgumentError(None, "No valid mode specified. Use 'api', 'gui', or 'client'.")
|
||||||
exit(1)
|
|
||||||
except argparse.ArgumentError:
|
except argparse.ArgumentError:
|
||||||
run_client_args(get_parser().parse_args())
|
try:
|
||||||
|
run_client_args(get_parser(exit_on_error=False).parse_args(), exit_on_error=False)
|
||||||
|
except argparse.ArgumentError:
|
||||||
|
run_api_args(get_api_parser().parse_args())
|
||||||
|
|
@ -190,10 +190,11 @@ def save_content(content, media: Optional[MediaResponse], filepath: str, allowed
|
||||||
print("\nUnable to save content.", file=sys.stderr)
|
print("\nUnable to save content.", file=sys.stderr)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_parser():
|
def get_parser(exit_on_error=True):
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="G4F CLI client with conversation history",
|
description="G4F CLI client with conversation history",
|
||||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||||
|
exit_on_error=exit_on_error
|
||||||
)
|
)
|
||||||
parser.add_argument('-d', '--debug', action='store_true', help="Verbose debug")
|
parser.add_argument('-d', '--debug', action='store_true', help="Verbose debug")
|
||||||
parser.add_argument('-p', '--provider', default=None,
|
parser.add_argument('-p', '--provider', default=None,
|
||||||
|
|
@ -270,7 +271,7 @@ async def run_args(input_val, args):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def run_client_args(args):
|
def run_client_args(args, exit_on_error=True):
|
||||||
input_txt = ""
|
input_txt = ""
|
||||||
media = []
|
media = []
|
||||||
rest = 0
|
rest = 0
|
||||||
|
|
@ -317,9 +318,11 @@ def run_client_args(args):
|
||||||
else:
|
else:
|
||||||
val = input_txt.strip()
|
val = input_txt.strip()
|
||||||
|
|
||||||
if not val:
|
if exit_on_error and not val:
|
||||||
print("No input provided. Use -h.", file=sys.stderr)
|
print("No input provided. Use -h.", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
elif not val:
|
||||||
|
raise argparse.ArgumentError(None, "No input provided. Use -h for help.")
|
||||||
|
|
||||||
asyncio.run(run_args(val, args))
|
asyncio.run(run_args(val, args))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ def get_git_version() -> str | None:
|
||||||
text=True,
|
text=True,
|
||||||
stderr=PIPE
|
stderr=PIPE
|
||||||
).strip()
|
).strip()
|
||||||
except CalledProcessError:
|
except (CalledProcessError, FileNotFoundError):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Entry point for g4f CLI executable builds
|
|
||||||
"""
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
from g4f.cli import main
|
|
||||||
main()
|
|
||||||
43
test.py
43
test.py
|
|
@ -1,43 +0,0 @@
|
||||||
import asyncio
|
|
||||||
from pathlib import Path
|
|
||||||
from g4f.client import AsyncClient
|
|
||||||
from g4f.Provider import HuggingSpace, Azure
|
|
||||||
from g4f.cookies import read_cookie_files
|
|
||||||
|
|
||||||
# Load cookies and authentication environment variables needed by providers
|
|
||||||
read_cookie_files()
|
|
||||||
|
|
||||||
# Initialize asynchronous client to interact with providers
|
|
||||||
client = AsyncClient()
|
|
||||||
|
|
||||||
# Define an async function that creates an image variation using the HuggingSpace provider
|
|
||||||
async def main_with_hugging_space():
|
|
||||||
# Call create_variation with an image path, provider, model, prompt and desired response format
|
|
||||||
result = await client.images.create_variation(
|
|
||||||
image=Path("g4f.dev/docs/images/strawberry.jpg"), # Path to input image
|
|
||||||
provider=HuggingSpace, # Provider to use
|
|
||||||
model="flux-kontext-dev", # Model name for HuggingSpace
|
|
||||||
prompt="Change color to black and white", # Variation prompt
|
|
||||||
response_format="url" # Return URL to generated image
|
|
||||||
)
|
|
||||||
print(result) # Print the URL or result returned by the provider
|
|
||||||
|
|
||||||
# Define an async function that creates an image variation using the Azure provider
|
|
||||||
async def main_with_azure():
|
|
||||||
result = await client.images.create_variation(
|
|
||||||
image=Path("g4f.dev/docs/images/strawberry.jpg"),
|
|
||||||
provider=Azure,
|
|
||||||
model="flux-kontext",
|
|
||||||
prompt="Add text 'Hello World' in the center",
|
|
||||||
response_format="url"
|
|
||||||
)
|
|
||||||
print(result) # Print the returned URL or response
|
|
||||||
|
|
||||||
# Run the Azure image variation example asynchronously
|
|
||||||
asyncio.run(main_with_azure())
|
|
||||||
|
|
||||||
# Import helper function to get directory used for cookies and related files
|
|
||||||
from g4f.cookies import get_cookies_dir
|
|
||||||
|
|
||||||
# Print the directory currently used for storing cookies
|
|
||||||
print(get_cookies_dir())
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue