pull/912/head
abc 10 months ago
commit 54f4f3904e

@ -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

@ -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})"

@ -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:

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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):

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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})"

@ -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 = {}

@ -21,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

@ -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,
}

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

@ -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]

@ -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})"

Loading…
Cancel
Save