返回提交历史
Modified
g4f/Provider/needs_auth/GeminiPro.py
+4
-26
Modified
g4f/providers/asyncio.py
+4
-4
Modified
g4f/providers/base_provider.py
+6
-2
XFEstudio/gpt4free
Add default timeout
477c9b80
代码差异
3 个文件
+14
-32
@@ -57,31 +57,6 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
57
57
return cls.fallback_models
58
58
return cls.models
59
59
60
@classmethod
61
def get_model(cls, model: str, **kwargs) -> str:
62
"""Get the internal model name from the user-provided model name."""
63
# kwargs can contain api_key, api_base, etc. but we don't need them for model selection
64
if not model:
65
return cls.default_model
66
67
# Check if the model exists directly in our models list
68
if model in cls.models:
69
return model
70
71
# Check if there's an alias for this model
72
if model in cls.model_aliases:
73
alias = cls.model_aliases[model]
74
# If the alias is a list, randomly select one of the options
75
if isinstance(alias, list):
76
import random
77
selected_model = random.choice(alias)
78
debug.log(f"GeminiPro: Selected model '{selected_model}' from alias '{model}'")
79
return selected_model
80
debug.log(f"GeminiPro: Using model '{alias}' for alias '{model}'")
81
return alias
82
83
raise ModelNotFoundError(f"Model {model} not found")
84
85
60
@classmethod
86
61
async def create_async_generator(
87
62
cls,
@@ -100,7 +75,10 @@ class GeminiPro(AsyncGeneratorProvider, ProviderModelMixin):
100
75
if not api_key:
101
76
raise MissingAuthError('Add a "api_key"')
102
77
103
model = cls.get_model(model, api_key=api_key, api_base=api_base)
78
try:
79
model = cls.get_model(model, api_key=api_key, api_base=api_base)
80
except ModelNotFoundError:
81
pass
104
82
105
83
headers = params = None
106
84
if use_auth_header:
@@ -34,13 +34,13 @@ def get_running_loop(check_nested: bool) -> Optional[AbstractEventLoop]:
34
34
pass
35
35
36
36
# Fix for RuntimeError: async generator ignored GeneratorExit
37
async def await_callback(callback: Callable):
38
return await callback()
37
async def await_callback(callback: Callable, timeout: Optional[int] = None) -> any:
38
return await asyncio.wait_for(callback(), timeout) if timeout is not None else await callback()
39
39
40
40
async def async_generator_to_list(generator: AsyncIterator) -> list:
41
41
return [item async for item in generator]
42
42
43
def to_sync_generator(generator: AsyncIterator, stream: bool = True) -> Iterator:
43
def to_sync_generator(generator: AsyncIterator, stream: bool = True, timeout: int = None) -> Iterator:
44
44
loop = get_running_loop(check_nested=False)
45
45
if not stream:
46
46
yield from asyncio.run(async_generator_to_list(generator))
@@ -53,7 +53,7 @@ def to_sync_generator(generator: AsyncIterator, stream: bool = True) -> Iterator
53
53
gen = generator.__aiter__()
54
54
try:
55
55
while True:
56
yield loop.run_until_complete(await_callback(gen.__anext__))
56
yield loop.run_until_complete(await_callback(gen.__anext__, timeout))
57
57
except StopAsyncIteration:
58
58
pass
59
59
finally:
@@ -22,6 +22,8 @@ from .helper import concat_chunks
22
22
from ..cookies import get_cookies_dir
23
23
from ..errors import ModelNotFoundError, ResponseError, MissingAuthError, NoValidHarFileError, PaymentRequiredError
24
24
25
DEFAULT_TIMEOUT = 180
26
25
27
SAFE_PARAMETERS = [
26
28
"model", "messages", "stream", "timeout",
27
29
"proxy", "media", "response_format",
@@ -95,7 +97,7 @@ class AbstractProvider(BaseProvider):
95
97
model: str,
96
98
messages: Messages,
97
99
*,
98
timeout: int = None,
100
timeout: int = DEFAULT_TIMEOUT,
99
101
loop: AbstractEventLoop = None,
100
102
executor: ThreadPoolExecutor = None,
101
103
**kwargs
@@ -293,6 +295,7 @@ class AsyncGeneratorProvider(AbstractProvider):
293
295
model: str,
294
296
messages: Messages,
295
297
stream: bool = True,
298
timeout: int = DEFAULT_TIMEOUT,
296
299
**kwargs
297
300
) -> CreateResult:
298
301
"""
@@ -311,7 +314,8 @@ class AsyncGeneratorProvider(AbstractProvider):
311
314
"""
312
315
return to_sync_generator(
313
316
cls.create_async_generator(model, messages, stream=stream, **kwargs),
314
stream=stream
317
stream=stream,
318
timeout=timeout
315
319
)
316
320
317
321
@staticmethod