返回提交历史
Modified
g4f/Provider/Bing.py
+11
-7
Modified
g4f/Provider/BingCreateImages.py
+1
-0
Modified
g4f/Provider/DeepInfra.py
+1
-0
Modified
g4f/Provider/HuggingChat.py
+1
-1
Modified
g4f/Provider/Local.py
+1
-0
Modified
g4f/Provider/needs_auth/Groq.py
+1
-0
Modified
g4f/Provider/needs_auth/OpenRouter.py
+1
-0
Modified
g4f/Provider/needs_auth/Openai.py
+1
-0
Modified
g4f/Provider/needs_auth/OpenaiChat.py
+1
-0
Modified
g4f/Provider/needs_auth/Theb.py
+1
-0
Modified
g4f/Provider/needs_auth/ThebApi.py
+1
-0
Modified
g4f/gui/client/static/js/chat.v1.js
+3
-2
Modified
g4f/gui/server/api.py
+10
-1
XFEstudio/gpt4free
Add labels to provider list
f724c07f
代码差异
13 个文件
+34
-11
@@ -6,7 +6,7 @@ import uuid
6
6
import time
7
7
import asyncio
8
8
from urllib import parse
9
from datetime import datetime
9
from datetime import datetime, date
10
10
from aiohttp import ClientSession, ClientTimeout, BaseConnector, WSMsgType
11
11
12
12
from ..typing import AsyncResult, Messages, ImageType, Cookies
@@ -32,6 +32,7 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
32
32
"""
33
33
Bing provider for generating responses using the Bing API.
34
34
"""
35
label = "Microsoft Copilot in Bing"
35
36
url = "https://bing.com/chat"
36
37
working = True
37
38
supports_message_history = True
@@ -47,7 +48,7 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
47
48
proxy: str = None,
48
49
timeout: int = 900,
49
50
api_key: str = None,
50
cookies: Cookies = {},
51
cookies: Cookies = None,
51
52
connector: BaseConnector = None,
52
53
tone: str = None,
53
54
image: ImageType = None,
@@ -69,8 +70,6 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
69
70
:return: An asynchronous result object.
70
71
"""
71
72
prompt = messages[-1]["content"]
72
if api_key is not None:
73
cookies["_U"] = api_key
74
73
if context is None:
75
74
context = create_context(messages[:-1]) if len(messages) > 1 else None
76
75
if tone is None:
@@ -79,7 +78,7 @@ class Bing(AsyncGeneratorProvider, ProviderModelMixin):
79
78
gpt4_turbo = True if model.startswith("gpt-4-turbo") else False
80
79
81
80
return stream_generate(
82
prompt, tone, image, context, cookies,
81
prompt, tone, image, context, api_key, cookies,
83
82
get_connector(connector, proxy, True),
84
83
proxy, web_search, gpt4_turbo, timeout,
85
84
**kwargs
@@ -110,11 +109,15 @@ def get_default_cookies():
110
109
'SUID' : '',
111
110
'SRCHUSR' : '',
112
111
'SRCHHPGUSR' : f'HV={int(time.time())}',
112
'BCP' : 'AD=1&AL=1&SM=1',
113
'_Rwho' : f'u=d&ts={date.today().isoformat()}',
113
114
}
114
115
115
def create_headers(cookies: Cookies = None) -> dict:
116
def create_headers(cookies: Cookies = None, api_key: str = None) -> dict:
116
117
if cookies is None:
117
118
cookies = get_default_cookies()
119
if api_key is not None:
120
cookies["_U"] = api_key
118
121
headers = Defaults.headers.copy()
119
122
headers["cookie"] = "; ".join(f"{k}={v}" for k, v in cookies.items())
120
123
headers["x-forwarded-for"] = get_ip_address()
@@ -364,6 +367,7 @@ async def stream_generate(
364
367
image: ImageType = None,
365
368
context: str = None,
366
369
cookies: dict = None,
370
api_key: str = None,
367
371
connector: BaseConnector = None,
368
372
proxy: str = None,
369
373
web_search: bool = False,
@@ -389,7 +393,7 @@ async def stream_generate(
389
393
:param timeout: Timeout for the request.
390
394
:return: An asynchronous generator yielding responses.
391
395
"""
392
headers = create_headers(cookies)
396
headers = create_headers(cookies, api_key)
393
397
new_conversation = conversation is None
394
398
max_retries = (5 if new_conversation else 0) if max_retries is None else max_retries
395
399
async with ClientSession(
@@ -12,6 +12,7 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
12
12
from .bing.create_images import create_images, create_session, get_cookies_from_browser
13
13
14
14
class BingCreateImages(AsyncGeneratorProvider, ProviderModelMixin):
15
label = "Microsoft Designer"
15
16
url = "https://www.bing.com/images/create"
16
17
working = True
17
18
@@ -5,6 +5,7 @@ from ..typing import AsyncResult, Messages
5
5
from .needs_auth.Openai import Openai
6
6
7
7
class DeepInfra(Openai):
8
label = "DeepInfra"
8
9
url = "https://deepinfra.com"
9
10
working = True
10
11
needs_auth = False
@@ -12,7 +12,7 @@ from .helper import format_prompt, get_connector
12
12
class HuggingChat(AsyncGeneratorProvider, ProviderModelMixin):
13
13
url = "https://huggingface.co/chat"
14
14
working = True
15
default_model = "meta-llama/Llama-2-70b-chat-hf"
15
default_model = "mistralai/Mixtral-8x7B-Instruct-v0.1"
16
16
models = [
17
17
"mistralai/Mixtral-8x7B-Instruct-v0.1",
18
18
"google/gemma-7b-it",
@@ -12,6 +12,7 @@ from ..providers.base_provider import AbstractProvider, ProviderModelMixin
12
12
from ..errors import MissingRequirementsError
13
13
14
14
class Local(AbstractProvider, ProviderModelMixin):
15
label = "gpt4all"
15
16
working = True
16
17
supports_message_history = True
17
18
supports_system_message = True
@@ -4,6 +4,7 @@ from .Openai import Openai
4
4
from ...typing import AsyncResult, Messages
5
5
6
6
class Groq(Openai):
7
lebel = "Groq"
7
8
url = "https://console.groq.com/playground"
8
9
working = True
9
10
default_model = "mixtral-8x7b-32768"
@@ -6,6 +6,7 @@ from .Openai import Openai
6
6
from ...typing import AsyncResult, Messages
7
7
8
8
class OpenRouter(Openai):
9
label = "OpenRouter"
9
10
url = "https://openrouter.ai"
10
11
working = True
11
12
default_model = "openrouter/auto"
@@ -9,6 +9,7 @@ from ...requests import StreamSession, raise_for_status
9
9
from ...errors import MissingAuthError, ResponseError
10
10
11
11
class Openai(AsyncGeneratorProvider, ProviderModelMixin):
12
label = "OpenAI API"
12
13
url = "https://openai.com"
13
14
working = True
14
15
needs_auth = True
@@ -35,6 +35,7 @@ from ... import debug
35
35
class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
36
36
"""A class for creating and managing conversations with OpenAI chat service"""
37
37
38
lebel = "OpenAI ChatGPT"
38
39
url = "https://chat.openai.com"
39
40
working = True
40
41
supports_gpt_35_turbo = True
@@ -32,6 +32,7 @@ models = {
32
32
}
33
33
34
34
class Theb(AbstractProvider):
35
label = "TheB.AI"
35
36
url = "https://beta.theb.ai"
36
37
working = True
37
38
supports_gpt_35_turbo = True
@@ -28,6 +28,7 @@ models = {
28
28
}
29
29
30
30
class ThebApi(Openai):
31
label = "TheB.AI API"
31
32
url = "https://theb.ai"
32
33
working = True
33
34
needs_auth = True
@@ -1026,9 +1026,10 @@ async function on_api() {
1026
1026
});
1027
1027
1028
1028
providers = await api("providers")
1029
providers.forEach((provider) => {
1029
Object.entries(providers).forEach(([provider, label]) => {
1030
1030
let option = document.createElement("option");
1031
option.value = option.text = provider;
1031
option.value = provider;
1032
option.text = label;
1032
1033
providerSelect.appendChild(option);
1033
1034
})
1034
1035