mirror of https://github.com/xtekky/gpt4free
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
1 year ago
|
import sys
|
||
|
from pathlib import Path
|
||
|
import asyncio
|
||
|
from time import time
|
||
|
|
||
|
sys.path.append(str(Path(__file__).parent.parent))
|
||
|
|
||
|
import g4f
|
||
|
|
||
|
providers = [g4f.Provider.OpenaiChat, g4f.Provider.Bard, g4f.Provider.Bing]
|
||
|
|
||
|
# Async support
|
||
|
async def log_time_async(method: callable, **kwargs):
|
||
|
start = time()
|
||
|
result = await method(**kwargs)
|
||
|
secs = f"{round(time() - start, 2)} secs"
|
||
|
if result:
|
||
|
return " ".join([result, secs])
|
||
|
return secs
|
||
|
|
||
|
def log_time_yield(method: callable, **kwargs):
|
||
|
start = time()
|
||
|
result = yield from method(**kwargs)
|
||
|
yield f" {round(time() - start, 2)} secs"
|
||
|
|
||
|
def log_time(method: callable, **kwargs):
|
||
|
start = time()
|
||
|
result = method(**kwargs)
|
||
|
secs = f"{round(time() - start, 2)} secs"
|
||
|
if result:
|
||
|
return " ".join([result, secs])
|
||
|
return secs
|
||
|
|
||
|
async def run_async():
|
||
|
responses = []
|
||
|
for provider in providers:
|
||
|
responses.append(log_time_async(
|
||
|
provider.create_async,
|
||
|
model=None,
|
||
|
messages=[{"role": "user", "content": "Hello"}],
|
||
|
log_time=True
|
||
|
))
|
||
|
responses = await asyncio.gather(*responses)
|
||
|
for idx, provider in enumerate(providers):
|
||
|
print(f"{provider.__name__}:", responses[idx])
|
||
|
print("Async Total:", asyncio.run(log_time_async(run_async)))
|
||
|
|
||
|
# Streaming support:
|
||
|
def run_stream():
|
||
|
for provider in providers:
|
||
|
print(f"{provider.__name__}: ", end="")
|
||
|
for response in log_time_yield(
|
||
|
provider.create_completion,
|
||
|
model=None,
|
||
|
messages=[{"role": "user", "content": "Hello"}],
|
||
|
):
|
||
|
print(response, end="")
|
||
|
print()
|
||
|
print("Stream Total:", log_time(run_stream))
|
||
|
|
||
|
# No streaming support:
|
||
|
def create_completion():
|
||
|
for provider in providers:
|
||
|
print(f"{provider.__name__}:", end=" ")
|
||
|
for response in log_time_yield(
|
||
|
g4f.Provider.Bard.create_completion,
|
||
|
model=None,
|
||
|
messages=[{"role": "user", "content": "Hello"}],
|
||
|
):
|
||
|
print(response, end="")
|
||
|
print()
|
||
|
print("No Stream Total:", log_time(create_completion))
|
||
|
|
||
|
for response in g4f.Provider.Hugchat.create_completion(
|
||
|
model=None,
|
||
|
messages=[{"role": "user", "content": "Hello, tell about you."}],
|
||
|
):
|
||
|
print("Hugchat:", response)
|
||
|
|
||
|
"""
|
||
|
OpenaiChat: Hello! How can I assist you today? 2.0 secs
|
||
|
Bard: Hello! How can I help you today? 3.44 secs
|
||
|
Bing: Hello, this is Bing. How can I help? 😊 4.14 secs
|
||
|
Async Total: 4.25 secs
|
||
|
|
||
|
OpenaiChat: Hello! How can I assist you today? 1.85 secs
|
||
|
Bard: Hello! How can I help you today? 3.38 secs
|
||
|
Bing: Hello, this is Bing. How can I help? 😊 6.14 secs
|
||
|
Stream Total: 11.37 secs
|
||
|
|
||
|
OpenaiChat: Hello! How can I help you today? 3.28 secs
|
||
|
Bard: Hello there! How can I help you today? 3.58 secs
|
||
|
Bing: Hello! How can I help you today? 3.28 secs
|
||
|
No Stream Total: 10.14 secs
|
||
|
"""
|