返回提交历史
Added
g4f/Provider/ApiAirforce.py
+12
-0
Modified
g4f/Provider/Copilot.py
+2
-0
Modified
g4f/Provider/__init__.py
+1
-0
Modified
g4f/Provider/needs_auth/LMArenaBeta.py
+13
-13
Modified
g4f/Provider/template/OpenaiTemplate.py
+1
-1
Modified
g4f/client/service.py
+4
-4
XFEstudio/gpt4free
Add ApiAirforce provider
05148d2b
代码差异
6 个文件
+33
-18
@@ -0,0 +1,12 @@
1
from __future__ import annotations
2
3
from .template import OpenaiTemplate
4
from ..config import DEFAULT_MODEL
5
6
class ApiAirforce(OpenaiTemplate):
7
parent = "Api.Airforce"
8
url = "https://api.airforce"
9
login_url = "https://panel.api.airforce/dashboard"
10
api_base = "https://api.airforce/v1"
11
working = True
12
active_by_default = True
@@ -223,6 +223,8 @@ class Copilot(AsyncAuthedProvider, ProviderModelMixin):
223
223
elif msg.get("event") == "partialImageGenerated":
224
224
mime_type = is_accepted_format(base64.b64decode(msg.get("content")[:12]))
225
225
yield ImagePreview(f"data:{mime_type};base64,{msg.get('content')}", image_prompt)
226
elif msg.get("event") == "chainOfThought":
227
yield Reasoning(msg.get("text"))
226
228
elif msg.get("event") == "error":
227
229
raise RuntimeError(f"Error: {msg}")
228
230
elif msg.get("event") not in ["received", "startMessage", "partCompleted", "connected"]:
@@ -33,6 +33,7 @@ except ImportError as e:
33
33
debug.error("Audio providers not loaded:", e)
34
34
35
35
from .deprecated.ARTA import ARTA
36
from .ApiAirforce import ApiAirforce
36
37
from .Blackbox import Blackbox
37
38
from .Chatai import Chatai
38
39
from .Cloudflare import Cloudflare
@@ -152,19 +152,19 @@ class LMArenaBeta(AsyncGeneratorProvider, ProviderModelMixin, AuthFileMixin):
152
152
if cache_file.exists():
153
153
with cache_file.open("r") as f:
154
154
args = json.load(f)
155
response = curl_cffi.get(f"{cls.url}/?mode=direct", **args)
156
if response.ok:
157
for line in response.text.splitlines():
158
if "initialModels" in line:
159
line = line.split("initialModels", maxsplit=1)[-1].split("initialModelAId")[0][3:-3].replace('\\', '')
160
models = json.loads(line)
161
cls.text_models = {model["publicName"]: model["id"] for model in models if "text" in model["capabilities"]["outputCapabilities"]}
162
cls.image_models = {model["publicName"]: model["id"] for model in models if "image" in model["capabilities"]["outputCapabilities"]}
163
cls.vision_models = [model["publicName"] for model in models if "image" in model["capabilities"]["inputCapabilities"]]
164
cls.models = list(cls.text_models) + list(cls.image_models)
165
cls.default_model = list(cls.text_models.keys())[0]
166
cls._models_loaded = True
167
break
155
response = curl_cffi.get(f"{cls.url}/?mode=direct", **args)
156
if response.ok:
157
for line in response.text.splitlines():
158
if "initialModels" in line:
159
line = line.split("initialModels", maxsplit=1)[-1].split("initialModelAId")[0][3:-3].replace('\\', '')
160
models = json.loads(line)
161
cls.text_models = {model["publicName"]: model["id"] for model in models if "text" in model["capabilities"]["outputCapabilities"]}
162
cls.image_models = {model["publicName"]: model["id"] for model in models if "image" in model["capabilities"]["outputCapabilities"]}
163
cls.vision_models = [model["publicName"] for model in models if "image" in model["capabilities"]["inputCapabilities"]]
164
cls.models = list(cls.text_models) + list(cls.image_models)
165
cls.default_model = list(cls.text_models.keys())[0]
166
cls._models_loaded = True
167
break
168
168
else:
169
169
debug.log(f"Failed to load models from {cls.url}: {response.status_code} {response.reason}")
170
170
return cls.models
@@ -47,7 +47,7 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin
47
47
raise_for_status(response)
48
48
data = response.json()
49
49
data = data.get("data") if isinstance(data, dict) else data
50
cls.image_models = [model.get("name") if cls.use_model_names else model.get("id", model.get("name")) for model in data if model.get("image") or model.get("type") == "image"]
50
cls.image_models = [model.get("name") if cls.use_model_names else model.get("id", model.get("name")) for model in data if model.get("image") or model.get("type") == "image" or model.get("supports_images")]
51
51
cls.vision_models = cls.vision_models.copy()
52
52
cls.vision_models += [model.get("name") if cls.use_model_names else model.get("id", model.get("name")) for model in data if model.get("vision")]
53
53
cls.models = [model.get("name") if cls.use_model_names else model.get("id", model.get("name")) for model in data]
@@ -55,11 +55,11 @@ def get_model_and_provider(model : Union[Model, str],
55
55
if isinstance(provider, str):
56
56
provider = convert_to_provider(provider)
57
57
58
if isinstance(model, str):
59
if model in ModelUtils.convert:
60
model = ModelUtils.convert[model]
61
62
58
if not provider:
59
if isinstance(model, str):
60
if model in ModelUtils.convert:
61
model = ModelUtils.convert[model]
62
63
63
if not model:
64
64
if has_images:
65
65
model = default_vision