Skip to content

Commit afec995

Browse files
Update hugchat.py
1 parent 413fef7 commit afec995

1 file changed

Lines changed: 61 additions & 56 deletions

File tree

‎src/hugchat/hugchat.py‎

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ def get_llm_from_name(self, name: str) -> Union[Model, None]:
395395

396396
# Gives information such as name, websiteUrl, description, displayName, parameters, etc.
397397
# We can use it in the future if we need to get information about models
398+
398399
def get_remote_llms(self) -> list:
399400
"""
400401
Fetches all possible LLMs that could be used. Returns the LLMs in a list
@@ -411,66 +412,70 @@ def get_remote_llms(self) -> list:
411412
f"Failed to get remote LLMs with status code: {r.status_code}"
412413
)
413414

414-
data = r.json()["nodes"][0]["data"]
415-
modelsIndices = data[data[0]["models"]]
415+
import json
416416
model_list = []
417-
418-
def return_data_from_index(
419-
index): return None if index == -1 else data[index]
420-
421-
for modelIndex in modelsIndices:
422-
model_data = data[modelIndex]
423-
424-
# Model is unlisted, skip it
425-
if data[model_data["unlisted"]]:
426-
continue
427-
428-
m = Model(
429-
id=return_data_from_index(model_data["id"]),
430-
name=return_data_from_index(model_data["name"]),
431-
displayName=return_data_from_index(model_data["displayName"]),
432-
preprompt=return_data_from_index(model_data["preprompt"]),
433-
# promptExamples = return_data_from_index(model_data["promptExamples"]),
434-
websiteUrl=return_data_from_index(model_data["websiteUrl"]),
435-
description=return_data_from_index(model_data["description"]),
436-
datasetName=return_data_from_index(model_data["datasetName"]),
437-
datasetUrl=return_data_from_index(model_data["datasetUrl"]),
438-
modelUrl=return_data_from_index(model_data["modelUrl"]),
439-
# parameters = return_data_from_index(model_data["parameters"]),
440-
)
441-
442-
prompt_list = return_data_from_index(model_data["promptExamples"])
443-
if prompt_list is not None:
444-
_promptExamples = [
445-
return_data_from_index(index) for index in prompt_list
446-
]
447-
m.promptExamples = [
448-
{"title": data[prompt["title"]],
449-
"prompt": data[prompt["prompt"]]}
450-
for prompt in _promptExamples
451-
]
452-
453-
indices_parameters_dict = return_data_from_index(
454-
model_data["parameters"])
455-
out_parameters_dict = {}
456-
for key, value in indices_parameters_dict.items():
457-
if value == -1:
458-
out_parameters_dict[key] = None
459-
continue
460-
461-
if isinstance(type(data[value]), list):
462-
out_parameters_dict[key] = [data[index]
463-
for index in data[value]]
464-
continue
465-
466-
out_parameters_dict[key] = data[value]
467-
468-
m.parameters = out_parameters_dict
469-
470-
model_list.append(m)
417+
try:
418+
# Splitting the response text by lines or another delimiter if appropriate
419+
lines = r.text.splitlines()
420+
421+
for line in lines:
422+
try:
423+
# Attempt to load each line as JSON individually
424+
data = json.loads(line)["nodes"][0]["data"]
425+
426+
# Rest of your processing with `data` as per your original logic
427+
modelsIndices = data[data[0]["models"]]
428+
def return_data_from_index(index): return None if index == -1 else data[index]
429+
430+
for modelIndex in modelsIndices:
431+
model_data = data[modelIndex]
432+
if data[model_data["unlisted"]]:
433+
continue
434+
435+
m = Model(
436+
id=return_data_from_index(model_data["id"]),
437+
name=return_data_from_index(model_data["name"]),
438+
displayName=return_data_from_index(model_data["displayName"]),
439+
preprompt=return_data_from_index(model_data["preprompt"]),
440+
websiteUrl=return_data_from_index(model_data["websiteUrl"]),
441+
description=return_data_from_index(model_data["description"]),
442+
datasetName=return_data_from_index(model_data["datasetName"]),
443+
datasetUrl=return_data_from_index(model_data["datasetUrl"]),
444+
modelUrl=return_data_from_index(model_data["modelUrl"]),
445+
)
446+
447+
prompt_list = return_data_from_index(model_data["promptExamples"])
448+
if prompt_list is not None:
449+
_promptExamples = [return_data_from_index(index) for index in prompt_list]
450+
m.promptExamples = [
451+
{"title": data[prompt["title"]], "prompt": data[prompt["prompt"]]}
452+
for prompt in _promptExamples
453+
]
454+
455+
indices_parameters_dict = return_data_from_index(model_data["parameters"])
456+
out_parameters_dict = {}
457+
for key, value in indices_parameters_dict.items():
458+
if value == -1:
459+
out_parameters_dict[key] = None
460+
continue
461+
if isinstance(data[value], list):
462+
out_parameters_dict[key] = [data[index] for index in data[value]]
463+
continue
464+
out_parameters_dict[key] = data[value]
465+
466+
m.parameters = out_parameters_dict
467+
model_list.append(m)
468+
469+
except json.JSONDecodeError:
470+
# Skip or log the error for this specific line
471+
print(f"Skipping non-JSON or malformed line: {line}")
472+
473+
except Exception as e:
474+
print("An error occurred while parsing:", e)
471475

472476
return model_list
473477

478+
474479
def get_remote_conversations(self, replace_conversation_list=True):
475480
"""
476481
Returns all the remote conversations for the active account. Returns the conversations in a list.

0 commit comments

Comments
 (0)