XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

Add default timeout

477c9b80
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

3 个文件 +14 -32
Modified g4f/Provider/needs_auth/GeminiPro.py +4 -26
@@ -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:
Modified g4f/providers/asyncio.py +4 -4
@@ -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:
Modified g4f/providers/base_provider.py +6 -2
@@ -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