返回提交历史
Modified
g4f/Provider/CablyAI.py
+1
-2
Modified
g4f/Provider/hf_space/G4F.py
+15
-3
Modified
g4f/Provider/hf_space/Janus_Pro_7B.py
+4
-1
Modified
g4f/Provider/template/OpenaiTemplate.py
+2
-1
Modified
g4f/gui/client/demo.html
+12
-0
Modified
g4f/gui/client/static/js/chat.v1.js
+1
-4
Modified
g4f/tools/files.py
+2
-2
XFEstudio/gpt4free
Add zerogpu_uuid to demo
9994bb67
代码差异
7 个文件
+37
-13
@@ -26,7 +26,6 @@ class CablyAI(OpenaiTemplate):
26
26
] + reasoning_models
27
27
28
28
model_aliases = {
29
"searchgpt": "searchgpt (free)",
30
29
"gpt-4o-mini": "searchgpt",
31
30
"llama-3.1-8b": "llama-3.1-8b-instruct",
32
31
"deepseek-r1": "deepseek-r1-uncensored",
@@ -43,6 +42,6 @@ class CablyAI(OpenaiTemplate):
43
42
model = super().get_model(model, **kwargs)
44
43
return model.split(" (free)")[0]
45
44
except ModelNotSupportedError:
46
if f"f{model} (free)" in cls.models:
45
if f"{model} (free)" in cls.models:
47
46
return model
48
47
raise
@@ -34,10 +34,21 @@ class G4F(Janus_Pro_7B):
34
34
height: int = 1024,
35
35
seed: int = None,
36
36
cookies: dict = None,
37
zerogpu_token: str = None,
38
zerogpu_uuid: str = None,
37
39
**kwargs
38
40
) -> AsyncResult:
39
41
if cls.default_model not in model:
40
async for chunk in super().create_async_generator(model, messages, prompt=prompt, seed=seed, cookies=cookies, **kwargs):
42
async for chunk in super().create_async_generator(
43
model, messages,
44
proxy=proxy,
45
prompt=prompt,
46
seed=seed,
47
cookies=cookies,
48
zerogpu_token=zerogpu_token,
49
zerogpu_uuid=zerogpu_uuid,
50
**kwargs
51
):
41
52
yield chunk
42
53
return
43
54
@@ -64,8 +75,9 @@ class G4F(Janus_Pro_7B):
64
75
"trigger_id": 10
65
76
}
66
77
async with ClientSession() as session:
67
yield Reasoning(status="Acquiring GPU Token")
68
zerogpu_uuid, zerogpu_token = await get_zerogpu_token(cls.space, session, JsonConversation(), cookies)
78
if zerogpu_token is None:
79
yield Reasoning(status="Acquiring GPU Token")
80
zerogpu_uuid, zerogpu_token = await get_zerogpu_token(cls.space, session, JsonConversation(), cookies)
69
81
headers = {
70
82
"x-zerogpu-token": zerogpu_token,
71
83
"x-zerogpu-uuid": zerogpu_uuid,
@@ -70,6 +70,8 @@ class Janus_Pro_7B(AsyncGeneratorProvider, ProviderModelMixin):
70
70
prompt: str = None,
71
71
proxy: str = None,
72
72
cookies: Cookies = None,
73
zerogpu_token: str = None,
74
zerogpu_uuid: str = None,
73
75
return_conversation: bool = False,
74
76
conversation: JsonConversation = None,
75
77
seed: int = None,
@@ -90,7 +92,8 @@ class Janus_Pro_7B(AsyncGeneratorProvider, ProviderModelMixin):
90
92
session_hash = generate_session_hash() if conversation is None else getattr(conversation, "session_hash")
91
93
async with StreamSession(proxy=proxy, impersonate="chrome") as session:
92
94
session_hash = generate_session_hash() if conversation is None else getattr(conversation, "session_hash")
93
zerogpu_uuid, zerogpu_token = await get_zerogpu_token(cls.space, session, conversation, cookies)
95
if zerogpu_token is None:
96
zerogpu_uuid, zerogpu_token = await get_zerogpu_token(cls.space, session, conversation, cookies)
94
97
if conversation is None or not hasattr(conversation, "session_hash"):
95
98
conversation = JsonConversation(session_hash=session_hash, zerogpu_token=zerogpu_token, zerogpu_uuid=zerogpu_uuid)
96
99
conversation.zerogpu_token = zerogpu_token
@@ -85,8 +85,9 @@ class OpenaiTemplate(AsyncGeneratorProvider, ProviderModelMixin, RaiseErrorMixin
85
85
86
86
# Proxy for image generation feature
87
87
if model and model in cls.image_models:
88
prompt = format_image_prompt(messages, prompt)
88
89
data = {
89
"prompt": format_image_prompt(messages, prompt),
90
"prompt": prompt,
90
91
"model": model,
91
92
}
92
93
async with session.post(f"{api_base.rstrip('/')}/images/generations", json=data, ssl=cls.ssl) as response:
@@ -198,6 +198,15 @@
198
198
<a href="https://huggingface.co/settings/tokens" target="_blank">Get Access Token</a>
199
199
</p>
200
200
</form>
201
<script>
202
(async () => {
203
let chat_url = new URL(window.location.href)
204
let chat_params = new URLSearchParams(chat_url.search);
205
if (chat_params.get("__sign")) {
206
localStorage.setItem("zerogpu_token", chat_params.get("__sign"));
207
}
208
})();
209
</script>
201
210
<script type="module">
202
211
import * as hub from "@huggingface/hub";
203
212
@@ -205,6 +214,9 @@
205
214
const input = document.querySelector('form input[name="token"]');
206
215
async function check_access_token() {
207
216
const accessToken = input.value || localStorage.getItem("HuggingFace-api_key");
217
if (!accessToken) {
218
return;
219
}
208
220
let user;
209
221
try {
210
222
user = await hub.whoAmI({accessToken: accessToken});
@@ -1056,6 +1056,7 @@ const ask_gpt = async (message_id, message_index = -1, regenerate = false, provi
1056
1056
api_key: api_key,
1057
1057
api_base: api_base,
1058
1058
ignored: ignored,
1059
zerogpu_token: localStorage.getItem("zerogpu_token")
1059
1060
}, files, message_id, scroll, finish_message);
1060
1061
} catch (e) {
1061
1062
console.error(e);
@@ -1898,10 +1899,6 @@ async function on_load() {
1898
1899
load_conversation(window.conversation_id);
1899
1900
} else {
1900
1901
chatPrompt.value = document.getElementById("systemPrompt")?.value || "";
1901
example = document.getElementById("systemPrompt")?.dataset.example || ""
1902
if (chatPrompt.value == example) {
1903
messageInput.value = "";
1904
}
1905
1902
let chat_url = new URL(window.location.href)
1906
1903
let chat_params = new URLSearchParams(chat_url.search);
1907
1904
if (chat_params.get("prompt")) {
@@ -431,7 +431,7 @@ async def download_urls(
431
431
connector=get_connector(proxy=proxy),
432
432
timeout=ClientTimeout(timeout)
433
433
) as session:
434
async def download_url(url: str) -> str:
434
async def download_url(url: str, max_depth: int) -> str:
435
435
try:
436
436
async with session.get(url) as response:
437
437
response.raise_for_status()
@@ -457,7 +457,7 @@ async def download_urls(
457
457
except (ClientError, asyncio.TimeoutError) as e:
458
458
debug.log(f"Download failed: {e.__class__.__name__}: {e}")
459
459
return None
460
for filename in await asyncio.gather(*[download_url(url) for url in urls]):
460
for filename in await asyncio.gather(*[download_url(url, max_depth) for url in urls]):
461
461
if filename:
462
462
yield filename
463
463
else: