返回提交历史
Modified
g4f/__init__.py
+19
-8
XFEstudio/gpt4free
feat: ignore providers(#1014)
c84ff591
代码差异
1 个文件
+19
-8
@@ -1,13 +1,14 @@
1
1
from __future__ import annotations
2
2
from requests import get
3
3
from g4f.models import Model, ModelUtils
4
from .Provider import BaseProvider
5
from .typing import Messages, CreateResult, Union
4
from .Provider import BaseProvider, RetryProvider
5
from .typing import Messages, CreateResult, Union, List
6
6
from .debug import logging
7
7
8
8
version = '0.1.6.2'
9
9
version_check = True
10
10
11
11
12
def check_pypi_version() -> None:
12
13
try:
13
14
response = get("https://pypi.org/pypi/g4f/json").json()
@@ -19,9 +20,11 @@ def check_pypi_version() -> None:
19
20
except Exception as e:
20
21
print(f'Failed to check g4f pypi version: {e}')
21
22
23
22
24
def get_model_and_provider(model : Union[Model, str],
23
25
provider : Union[type[BaseProvider], None],
24
stream : bool) -> tuple[Model, type[BaseProvider]]:
26
stream : bool,
27
ignored : List[str] = None) -> tuple[Model, type[BaseProvider]]:
25
28
26
29
if isinstance(model, str):
27
30
if model in ModelUtils.convert:
@@ -32,6 +35,9 @@ def get_model_and_provider(model : Union[Model, str],
32
35
if not provider:
33
36
provider = model.best_provider
34
37
38
if isinstance(provider, RetryProvider) and ignored:
39
provider.providers = [p for p in provider.providers if p.__name__ not in ignored]
40
35
41
if not provider:
36
42
raise RuntimeError(f'No provider found for model: {model}')
37
43
@@ -46,15 +52,17 @@ def get_model_and_provider(model : Union[Model, str],
46
52
47
53
return model, provider
48
54
55
49
56
class ChatCompletion:
50
57
@staticmethod
51
58
def create(model: Union[Model, str],
52
59
messages : Messages,
53
60
provider : Union[type[BaseProvider], None] = None,
54
61
stream : bool = False,
55
auth : Union[str, None] = None, **kwargs) -> Union[CreateResult, str]:
62
auth : Union[str, None] = None,
63
ignored : List[str] = None, **kwargs) -> Union[CreateResult, str]:
56
64
57
model, provider = get_model_and_provider(model, provider, stream)
65
model, provider = get_model_and_provider(model, provider, stream, ignored)
58
66
59
67
if provider.needs_auth and not auth:
60
68
raise ValueError(
@@ -71,15 +79,17 @@ class ChatCompletion:
71
79
model : Union[Model, str],
72
80
messages: Messages,
73
81
provider: Union[type[BaseProvider], None] = None,
74
stream : bool = False, **kwargs) -> str:
82
stream : bool = False,
83
ignored : List[str] = None, **kwargs) -> str:
75
84
76
85
if stream:
77
86
raise ValueError(f'"create_async" does not support "stream" argument')
78
87
79
model, provider = get_model_and_provider(model, provider, False)
88
model, provider = get_model_and_provider(model, provider, False, ignored)
80
89
81
90
return await provider.create_async(model.name, messages, **kwargs)
82
91
92
83
93
class Completion:
84
94
@staticmethod
85
95
def create(
@@ -87,6 +97,7 @@ class Completion:
87
97
prompt: str,
88
98
provider: Union[type[BaseProvider], None] = None,
89
99
stream: bool = False,
100
ignored : List[str] = None,
90
101
**kwargs
91
102
) -> Union[CreateResult, str]:
92
103
@@ -102,7 +113,7 @@ class Completion:
102
113
if model not in allowed_models:
103
114
raise Exception(f'ValueError: Can\'t use {model} with Completion.create()')
104
115
105
model, provider = get_model_and_provider(model, provider, stream)
116
model, provider = get_model_and_provider(model, provider, stream, ignored)
106
117
107
118
result = provider.create_completion(model.name, [{"role": "user", "content": prompt}], stream, **kwargs)
108
119