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

XFEstudio/gpt4free

feat: ignore providers(#1014)

c84ff591
hs_junxiang <jimmy871117@gmail.com>
提交于

代码差异

1 个文件 +19 -8
Modified g4f/__init__.py +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