|
import random, string |
|
import sys |
|
from pathlib import Path |
|
|
|
sys.path.append(str(Path(__file__).parent.parent)) |
|
|
|
from g4f import BaseProvider, models, Provider |
|
|
|
|
|
def main(): |
|
providers = get_providers() |
|
results: list[list[str | bool]] = [] |
|
|
|
for _provider in providers: |
|
print("start", _provider.__name__) |
|
actual_working = judge(_provider) |
|
expected_working = _provider.working |
|
match = actual_working == expected_working |
|
|
|
results.append([_provider.__name__, expected_working, actual_working, match]) |
|
|
|
print("failed provider list") |
|
for result in results: |
|
if not result[3]: |
|
print(result) |
|
|
|
|
|
def get_providers() -> list[type[BaseProvider]]: |
|
provider_names = dir(Provider) |
|
ignore_names = [ |
|
"base_provider", |
|
"BaseProvider", |
|
] |
|
provider_names = [ |
|
provider_name |
|
for provider_name in provider_names |
|
if not provider_name.startswith("__") and provider_name not in ignore_names |
|
] |
|
return [getattr(Provider, provider_name) for provider_name in provider_names] |
|
|
|
|
|
def create_response(_provider: type[BaseProvider], _str: str) -> str: |
|
model = ( |
|
models.gpt_35_turbo.name |
|
if _provider is not Provider.H2o |
|
else models.falcon_7b.name |
|
) |
|
response = _provider.create_completion( |
|
model=model, |
|
messages=[{"role": "user", "content": f"just output \"{_str}\""}], |
|
stream=False, |
|
) |
|
return "".join(response) |
|
|
|
|
|
def judge(_provider: type[BaseProvider]) -> bool: |
|
if _provider.needs_auth: |
|
return _provider.working |
|
|
|
try: |
|
_str = "".join(random.choices(string.ascii_letters + string.digits, k=4)) |
|
response = create_response(_provider, _str) |
|
assert type(response) is str |
|
return len(response) > 1 and _str in response |
|
except Exception as e: |
|
print(f"{_provider.__name__}: {str(e)}") |
|
return False |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|