@@ -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