Merge pull request #911 from xtekky/revert-907-fix-type-hint

Revert "Fix type hint"
This commit is contained in:
Tekky 2023-09-17 22:24:04 +01:00 committed by GitHub
commit a1d000ea3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 250 additions and 39 deletions

View File

@ -145,7 +145,7 @@ import g4f
print(g4f.Provider.Ails.params) # supported args
# Automatic selection of Provider
# Automatic selection of provider
# streamed completion
response = g4f.ChatCompletion.create(
@ -166,7 +166,7 @@ response = g4f.ChatCompletion.create(
print(response)
# Set with Provider
# Set with provider
response = g4f.ChatCompletion.create(
model="gpt-3.5-turbo",
provider=g4f.Provider.DeepAi,
@ -474,8 +474,8 @@ if __name__ == "__main__":
to add another provider, its very simple:
1. create a new file in [g4f/Provider](./g4f/Provider) with the name of the Provider
2. Implement a class that extends [BaseProvider](./g4f/Provider/base_provider.py).
1. create a new file in [g4f/provider](./g4f/provider) with the name of the Provider
2. Implement a class that extends [BaseProvider](./g4f/provider/base_provider.py).
```py
from .base_provider import BaseProvider
@ -499,7 +499,7 @@ class HogeService(BaseProvider):
3. Here, you can adjust the settings, for example if the website does support streaming, set `working` to `True`...
4. Write code to request the provider in `create_completion` and `yield` the response, _even if_ its a one-time response, do not hesitate to look at other providers for inspiration
5. Add the Provider Name in [g4f/provider/\_\_init__.py](./g4f/Provider/__init__.py)
5. Add the Provider Name in [g4f/provider/**init**.py](./g4f/provider/__init__.py)
```py
from .base_provider import BaseProvider

View File

@ -70,4 +70,4 @@ class AItianhu(AsyncGeneratorProvider):
("top_p", "int"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -85,7 +85,7 @@ class Ails(AsyncGeneratorProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"
def _hash(json_data: dict[str, str]) -> SHA256:

View File

@ -75,4 +75,4 @@ class Aivvm(AsyncGeneratorProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -88,4 +88,4 @@ class Bard(AsyncProvider):
("proxy", "str"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -59,4 +59,4 @@ class ChatBase(AsyncGeneratorProvider):
("stream", "bool"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -64,4 +64,4 @@ class ChatgptLogin(AsyncProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -60,4 +60,4 @@ class CodeLinkAva(AsyncGeneratorProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -74,4 +74,4 @@ class DfeHub(BaseProvider):
("top_p", "int"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -108,4 +108,4 @@ class EasyChat(BaseProvider):
("active_server", "int"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -78,4 +78,4 @@ class Equing(BaseProvider):
("stream", "bool"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -83,4 +83,4 @@ class FastGpt(ABC):
("stream", "bool"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -66,7 +66,7 @@ class GetGpt(BaseProvider):
('max_tokens', 'int'),
]
param = ', '.join([': '.join(p) for p in params])
return f'g4f.Provider.{cls.__name__} supports: ({param})'
return f'g4f.provider.{cls.__name__} supports: ({param})'
def _encrypt(e: str):

View File

@ -98,4 +98,4 @@ class H2o(AsyncGeneratorProvider):
("return_full_text", "bool"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -103,4 +103,4 @@ class HuggingChat(AsyncGeneratorProvider):
("proxy", "str"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -88,4 +88,4 @@ class Liaobots(AsyncGeneratorProvider):
("auth", "str"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -61,4 +61,4 @@ class Lockchat(BaseProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -99,4 +99,4 @@ class OpenAssistant(AsyncGeneratorProvider):
("proxy", "str"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -91,4 +91,4 @@ class OpenaiChat(AsyncProvider):
("cookies", "dict[str, str]")
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -69,4 +69,4 @@ class Raycast(BaseProvider):
("auth", "str"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -94,4 +94,4 @@ class Theb(BaseProvider):
("top_p", "int")
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -64,4 +64,4 @@ class V50(BaseProvider):
("top_p", "int"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -63,4 +63,4 @@ class Vitalentum(AsyncGeneratorProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -60,4 +60,4 @@ class Wuguokai(BaseProvider):
("stream", "bool")
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -73,4 +73,4 @@ class Ylokh(AsyncGeneratorProvider):
("temperature", "float"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"

View File

@ -34,7 +34,7 @@ class BaseProvider(ABC):
("stream", "bool"),
]
param = ", ".join([": ".join(p) for p in params])
return f"g4f.Provider.{cls.__name__} supports: ({param})"
return f"g4f.provider.{cls.__name__} supports: ({param})"
_cookies = {}

View File

@ -6,7 +6,6 @@ import random
logging = False
class ChatCompletion:
@staticmethod
def create(
@ -22,8 +21,9 @@ class ChatCompletion:
except KeyError:
raise Exception(f'The model: {model} does not exist')
if not provider:
if isinstance(model.best_provider, list):
if isinstance(model.best_provider, tuple):
provider = random.choice(model.best_provider)
else:
provider = model.best_provider

212
g4f/models.py Normal file
View File

@ -0,0 +1,212 @@
from __future__ import annotations
from dataclasses import dataclass
from .Provider import BaseProvider, Bard, H2o, Vercel
from .Provider import Aichat, Aivvm, ChatBase, ChatgptAi, ChatgptLogin, CodeLinkAva
from .Provider import DeepAi, Vercel, Vitalentum, Ylokh, You, Yqcloud
from .typing import Union
@dataclass
class Model:
name: str
base_provider: str
best_provider: Union[type[BaseProvider], tuple[type[BaseProvider]]] = None
# Config for HuggingChat, OpenAssistant
# Works for Liaobots, H2o, OpenaiChat, Yqcloud, You
default = Model(
name="",
base_provider="huggingface"
)
# GPT-3.5 / GPT-4
gpt_35_turbo = Model(
name = 'gpt-3.5-turbo',
base_provider = 'openai',
best_provider = (
Vercel, Aichat, Aivvm, ChatBase, ChatgptAi, ChatgptLogin,
CodeLinkAva, DeepAi, Vitalentum, Ylokh, You, Yqcloud
)
)
gpt_4 = Model(
name = 'gpt-4',
base_provider = 'openai',
)
# Bard
palm = Model(
name = 'palm',
base_provider = 'google',
best_provider = Bard)
# H2o
falcon_7b = Model(
name = 'h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3',
base_provider = 'huggingface',
best_provider = H2o)
falcon_40b = Model(
name = 'h2oai/h2ogpt-gm-oasst1-en-2048-falcon-40b-v1',
base_provider = 'huggingface',
best_provider = H2o)
llama_13b = Model(
name = 'h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-13b',
base_provider = 'huggingface',
best_provider = H2o)
# Vercel
claude_instant_v1 = Model(
name = 'anthropic:claude-instant-v1',
base_provider = 'anthropic',
best_provider = Vercel)
claude_v1 = Model(
name = 'anthropic:claude-v1',
base_provider = 'anthropic',
best_provider = Vercel)
claude_v2 = Model(
name = 'anthropic:claude-v2',
base_provider = 'anthropic',
best_provider = Vercel)
command_light_nightly = Model(
name = 'cohere:command-light-nightly',
base_provider = 'cohere',
best_provider = Vercel)
command_nightly = Model(
name = 'cohere:command-nightly',
base_provider = 'cohere',
best_provider = Vercel)
gpt_neox_20b = Model(
name = 'huggingface:EleutherAI/gpt-neox-20b',
base_provider = 'huggingface',
best_provider = Vercel)
oasst_sft_1_pythia_12b = Model(
name = 'huggingface:OpenAssistant/oasst-sft-1-pythia-12b',
base_provider = 'huggingface',
best_provider = Vercel)
oasst_sft_4_pythia_12b_epoch_35 = Model(
name = 'huggingface:OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5',
base_provider = 'huggingface',
best_provider = Vercel)
santacoder = Model(
name = 'huggingface:bigcode/santacoder',
base_provider = 'huggingface',
best_provider = Vercel)
bloom = Model(
name = 'huggingface:bigscience/bloom',
base_provider = 'huggingface',
best_provider = Vercel)
flan_t5_xxl = Model(
name = 'huggingface:google/flan-t5-xxl',
base_provider = 'huggingface',
best_provider = Vercel)
code_davinci_002 = Model(
name = 'openai:code-davinci-002',
base_provider = 'openai',
best_provider = Vercel)
gpt_35_turbo_16k = Model(
name = 'openai:gpt-3.5-turbo-16k',
base_provider = 'openai',
best_provider = Vercel)
gpt_35_turbo_16k_0613 = Model(
name = 'openai:gpt-3.5-turbo-16k-0613',
base_provider = 'openai')
gpt_4_0613 = Model(
name = 'openai:gpt-4-0613',
base_provider = 'openai',
best_provider = Vercel)
text_ada_001 = Model(
name = 'openai:text-ada-001',
base_provider = 'openai',
best_provider = Vercel)
text_babbage_001 = Model(
name = 'openai:text-babbage-001',
base_provider = 'openai',
best_provider = Vercel)
text_curie_001 = Model(
name = 'openai:text-curie-001',
base_provider = 'openai',
best_provider = Vercel)
text_davinci_002 = Model(
name = 'openai:text-davinci-002',
base_provider = 'openai',
best_provider = Vercel)
text_davinci_003 = Model(
name = 'openai:text-davinci-003',
base_provider = 'openai',
best_provider = Vercel)
llama13b_v2_chat = Model(
name = 'replicate:a16z-infra/llama13b-v2-chat',
base_provider = 'replicate',
best_provider = Vercel)
llama7b_v2_chat = Model(
name = 'replicate:a16z-infra/llama7b-v2-chat',
base_provider = 'replicate',
best_provider = Vercel)
class ModelUtils:
convert: dict[str, Model] = {
# GPT-3.5 / GPT-4
'gpt-3.5-turbo' : gpt_35_turbo,
'gpt-4' : gpt_4,
# Bard
'palm2' : palm,
'palm' : palm,
'google' : palm,
'google-bard' : palm,
'google-palm' : palm,
'bard' : palm,
# H2o
'falcon-40b' : falcon_40b,
'falcon-7b' : falcon_7b,
'llama-13b' : llama_13b,
# Vercel
'claude-instant-v1' : claude_instant_v1,
'claude-v1' : claude_v1,
'claude-v2' : claude_v2,
'command-nightly' : command_nightly,
'gpt-neox-20b' : gpt_neox_20b,
'santacoder' : santacoder,
'bloom' : bloom,
'flan-t5-xxl' : flan_t5_xxl,
'code-davinci-002' : code_davinci_002,
'gpt-3.5-turbo-16k' : gpt_35_turbo_16k,
'gpt-4-0613' : gpt_4_0613,
'text-ada-001' : text_ada_001,
'text-babbage-001' : text_babbage_001,
'text-curie-001' : text_curie_001,
'text-davinci-002' : text_davinci_002,
'text-davinci-003' : text_davinci_003,
'llama13b-v2-chat' : llama13b_v2_chat,
'llama7b-v2-chat' : llama7b_v2_chat,
'oasst-sft-1-pythia-12b' : oasst_sft_1_pythia_12b,
'oasst-sft-4-pythia-12b-epoch-3.5' : oasst_sft_4_pythia_12b_epoch_35,
'command-light-nightly' : command_light_nightly,
'gpt-3.5-turbo-16k-0613' : gpt_35_turbo_16k_0613,
}

View File

@ -12,10 +12,9 @@ CreateResult = Generator[str, None, None]
__all__ = [
'Any',
'AsyncGenerator',
'CreateResult',
'Generator',
'SHA256',
'Tuple',
'TypedDict',
'Union',
'SHA256',
'CreateResult',
]

View File

@ -3,13 +3,13 @@ from pathlib import Path
def main():
content = create_content()
with open("g4f/Provider/__init__.py", "w", encoding="utf-8") as f:
with open("g4f/provider/__init__.py", "w", encoding="utf-8") as f:
f.write(content)
def create_content():
path = Path()
paths = path.glob("g4f/Provider/*.py")
paths = path.glob("g4f/provider/*.py")
paths = [p for p in paths if p.name not in ["__init__.py", "base_provider.py"]]
classnames = [p.stem for p in paths]

View File

@ -81,7 +81,7 @@ def print_providers():
netloc = urlparse(_provider.url).netloc
website = f"[{netloc}]({_provider.url})"
provider_name = f"g4f.Provider.{_provider.__name__}"
provider_name = f"g4f.provider.{_provider.__name__}"
has_gpt_35 = "✔️" if _provider.supports_gpt_35_turbo else ""
has_gpt_4 = "✔️" if _provider.supports_gpt_4 else ""
@ -128,7 +128,7 @@ def print_models():
name = re.split(r":|/", model.name)[-1]
base_provider = base_provider_names[model.base_provider]
provider_name = f"g4f.Provider.{model.best_provider.__name__}"
provider_name = f"g4f.provider.{model.best_provider.__name__}"
provider_url = provider_urls[model.best_provider.__name__]
netloc = urlparse(provider_url).netloc
website = f"[{netloc}]({provider_url})"