mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-24 11:34:02 +03:00
fix(g4f/Provider/HuggingChat.py): handle JSON decode errors and response status
This commit is contained in:
parent
d0b80e2bab
commit
29835d951c
@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import json, requests, re
|
import json
|
||||||
|
import requests
|
||||||
|
|
||||||
from curl_cffi import requests as cf_reqs
|
from curl_cffi import requests as cf_reqs
|
||||||
from ..typing import CreateResult, Messages
|
from ..typing import CreateResult, Messages
|
||||||
@ -73,17 +74,18 @@ class HuggingChat(AbstractProvider, ProviderModelMixin):
|
|||||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
|
||||||
}
|
}
|
||||||
|
|
||||||
print(model)
|
|
||||||
json_data = {
|
json_data = {
|
||||||
'model': model,
|
'model': model,
|
||||||
}
|
}
|
||||||
|
|
||||||
response = session.post('https://huggingface.co/chat/conversation', json=json_data)
|
response = session.post('https://huggingface.co/chat/conversation', json=json_data)
|
||||||
conversationId = response.json()['conversationId']
|
if response.status_code != 200:
|
||||||
|
raise RuntimeError(f"Request failed with status code: {response.status_code}, response: {response.text}")
|
||||||
|
|
||||||
response = session.get(f'https://huggingface.co/chat/conversation/{conversationId}/__data.json?x-sveltekit-invalidated=11',)
|
conversationId = response.json().get('conversationId')
|
||||||
|
response = session.get(f'https://huggingface.co/chat/conversation/{conversationId}/__data.json?x-sveltekit-invalidated=11')
|
||||||
|
|
||||||
data: list = (response.json())["nodes"][1]["data"]
|
data: list = response.json()["nodes"][1]["data"]
|
||||||
keys: list[int] = data[data[0]["messages"]]
|
keys: list[int] = data[data[0]["messages"]]
|
||||||
message_keys: dict = data[keys[0]]
|
message_keys: dict = data[keys[0]]
|
||||||
messageId: str = data[message_keys["id"]]
|
messageId: str = data[message_keys["id"]]
|
||||||
@ -124,22 +126,26 @@ class HuggingChat(AbstractProvider, ProviderModelMixin):
|
|||||||
files=files,
|
files=files,
|
||||||
)
|
)
|
||||||
|
|
||||||
first_token = True
|
full_response = ""
|
||||||
for line in response.iter_lines():
|
for line in response.iter_lines():
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
line = json.loads(line)
|
line = json.loads(line)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"Failed to decode JSON: {line}, error: {e}")
|
||||||
|
continue
|
||||||
|
|
||||||
if "type" not in line:
|
if "type" not in line:
|
||||||
raise RuntimeError(f"Response: {line}")
|
raise RuntimeError(f"Response: {line}")
|
||||||
|
|
||||||
elif line["type"] == "stream":
|
elif line["type"] == "stream":
|
||||||
token = line["token"]
|
token = line["token"].replace('\u0000', '')
|
||||||
if first_token:
|
full_response += token
|
||||||
token = token.lstrip().replace('\u0000', '')
|
|
||||||
first_token = False
|
|
||||||
else:
|
|
||||||
token = token.replace('\u0000', '')
|
|
||||||
|
|
||||||
yield token
|
|
||||||
|
|
||||||
elif line["type"] == "finalAnswer":
|
elif line["type"] == "finalAnswer":
|
||||||
break
|
break
|
||||||
|
|
||||||
|
full_response = full_response.replace('<|im_end|', '').replace('\u0000', '').strip()
|
||||||
|
|
||||||
|
yield full_response
|
||||||
|
Loading…
Reference in New Issue
Block a user