返回提交历史
Added
g4f/Provider/PenguinAI.py
+49
-0
Modified
g4f/Provider/__init__.py
+1
-0
XFEstudio/gpt4free
feat: add PenguinAI provider
3d334377
代码差异
2 个文件
+50
-0
@@ -0,0 +1,49 @@
1
from __future__ import annotations
2
import requests
3
4
from .template import OpenaiTemplate
5
from ..requests import raise_for_status
6
from .. import debug
7
8
class PenguinAI(OpenaiTemplate):
9
label = "PenguinAI"
10
url = "https://penguinai.tech"
11
api_base = "https://api.penguinai.tech/v1"
12
working = True
13
14
default_model = "gpt-3.5-turbo"
15
default_vision_model = "gpt-4o"
16
17
# in reality, it uses pollinations
18
image_models = ["flux"]
19
20
@classmethod
21
def get_models(cls, api_key: str = None, api_base: str = None) -> list[str]:
22
if not cls.models:
23
try:
24
headers = {}
25
if api_base is None:
26
api_base = cls.api_base
27
if api_key is None and cls.api_key is not None:
28
api_key = cls.api_key
29
if api_key is not None:
30
headers["authorization"] = f"Bearer {api_key}"
31
response = requests.get(f"{api_base}/models", headers=headers, verify=cls.ssl)
32
raise_for_status(response)
33
data = response.json()
34
data = data.get("data") if isinstance(data, dict) else data
35
cls.image_models = [model.get("id") for model in data if "image" in model.get("type")]
36
cls.models = [model.get("id") for model in data]
37
if cls.sort_models:
38
cls.models.sort()
39
40
cls.vision_models = []
41
vision_model_prefixes = ["vision", "multimodal", "o1", "o3", "o4", "gpt-4", "claude-3", "claude-opus", "claude-sonnet"]
42
for model in cls.models:
43
for tag in vision_model_prefixes:
44
if tag in model and not "search" in model:
45
cls.vision_models.append(model)
46
except Exception as e:
47
debug.error(e)
48
return cls.fallback_models
49
return cls.models
@@ -46,6 +46,7 @@ from .LegacyLMArena import LegacyLMArena
46
46
from .OIVSCodeSer2 import OIVSCodeSer2
47
47
from .OIVSCodeSer0501 import OIVSCodeSer0501
48
48
from .OperaAria import OperaAria
49
from .PenguinAI import PenguinAI
49
50
from .PerplexityLabs import PerplexityLabs
50
51
from .PollinationsAI import PollinationsAI
51
52
from .PollinationsImage import PollinationsImage