eval-studio-client 1.2.2a1__py3-none-any.whl → 1.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. eval_studio_client/api/models/adversarial_inputs_service_test_adversarial_inputs_robustness_request.py +5 -5
  2. eval_studio_client/api/models/perturbation_service_create_perturbation_request.py +11 -11
  3. eval_studio_client/api/models/prompt_generation_service_auto_generate_prompts_request.py +2 -2
  4. eval_studio_client/api/models/protobuf_any.py +2 -2
  5. eval_studio_client/api/models/required_the_dashboard_to_update.py +2 -2
  6. eval_studio_client/api/models/required_the_document_to_update.py +2 -2
  7. eval_studio_client/api/models/required_the_leaderboard_to_update.py +8 -8
  8. eval_studio_client/api/models/required_the_model_to_update.py +2 -2
  9. eval_studio_client/api/models/required_the_operation_to_finalize.py +2 -2
  10. eval_studio_client/api/models/required_the_operation_to_update.py +2 -2
  11. eval_studio_client/api/models/required_the_test_case_to_update.py +2 -2
  12. eval_studio_client/api/models/required_the_test_to_update.py +2 -2
  13. eval_studio_client/api/models/required_the_updated_workflow.py +5 -5
  14. eval_studio_client/api/models/required_the_updated_workflow_node.py +5 -5
  15. eval_studio_client/api/models/rpc_status.py +5 -5
  16. eval_studio_client/api/models/test_case_service_batch_delete_test_cases_request.py +2 -2
  17. eval_studio_client/api/models/test_service_clone_test_request.py +2 -2
  18. eval_studio_client/api/models/test_service_generate_test_cases_request.py +5 -5
  19. eval_studio_client/api/models/test_service_grant_test_access_request.py +2 -2
  20. eval_studio_client/api/models/test_service_import_test_cases_from_library_request.py +2 -2
  21. eval_studio_client/api/models/test_service_list_test_case_library_items_request.py +2 -2
  22. eval_studio_client/api/models/test_service_perturb_test_in_place_request.py +5 -5
  23. eval_studio_client/api/models/test_service_perturb_test_request.py +5 -5
  24. eval_studio_client/api/models/test_service_revoke_test_access_request.py +2 -2
  25. eval_studio_client/api/models/v1_abort_operation_response.py +2 -2
  26. eval_studio_client/api/models/v1_batch_create_leaderboards_request.py +5 -5
  27. eval_studio_client/api/models/v1_batch_create_leaderboards_response.py +2 -2
  28. eval_studio_client/api/models/v1_batch_delete_dashboards_request.py +2 -2
  29. eval_studio_client/api/models/v1_batch_delete_dashboards_response.py +5 -5
  30. eval_studio_client/api/models/v1_batch_delete_documents_request.py +2 -2
  31. eval_studio_client/api/models/v1_batch_delete_documents_response.py +5 -5
  32. eval_studio_client/api/models/v1_batch_delete_evaluators_request.py +2 -2
  33. eval_studio_client/api/models/v1_batch_delete_evaluators_response.py +5 -5
  34. eval_studio_client/api/models/v1_batch_delete_leaderboards_request.py +2 -2
  35. eval_studio_client/api/models/v1_batch_delete_leaderboards_response.py +5 -5
  36. eval_studio_client/api/models/v1_batch_delete_models_request.py +2 -2
  37. eval_studio_client/api/models/v1_batch_delete_models_response.py +5 -5
  38. eval_studio_client/api/models/v1_batch_delete_test_cases_response.py +5 -5
  39. eval_studio_client/api/models/v1_batch_delete_tests_request.py +2 -2
  40. eval_studio_client/api/models/v1_batch_delete_tests_response.py +5 -5
  41. eval_studio_client/api/models/v1_batch_delete_workflows_request.py +2 -2
  42. eval_studio_client/api/models/v1_batch_delete_workflows_response.py +5 -5
  43. eval_studio_client/api/models/v1_batch_get_dashboards_response.py +5 -5
  44. eval_studio_client/api/models/v1_batch_get_documents_response.py +5 -5
  45. eval_studio_client/api/models/v1_batch_get_leaderboards_response.py +5 -5
  46. eval_studio_client/api/models/v1_batch_get_models_response.py +5 -5
  47. eval_studio_client/api/models/v1_batch_get_operations_response.py +5 -5
  48. eval_studio_client/api/models/v1_batch_get_tests_response.py +5 -5
  49. eval_studio_client/api/models/v1_batch_get_workflow_edges_response.py +5 -5
  50. eval_studio_client/api/models/v1_batch_get_workflow_nodes_response.py +5 -5
  51. eval_studio_client/api/models/v1_batch_import_leaderboard_request.py +2 -2
  52. eval_studio_client/api/models/v1_batch_import_leaderboard_response.py +2 -2
  53. eval_studio_client/api/models/v1_batch_import_tests_request.py +2 -2
  54. eval_studio_client/api/models/v1_batch_import_tests_response.py +5 -5
  55. eval_studio_client/api/models/v1_check_base_models_response.py +2 -2
  56. eval_studio_client/api/models/v1_clone_test_response.py +2 -2
  57. eval_studio_client/api/models/v1_clone_workflow_response.py +2 -2
  58. eval_studio_client/api/models/v1_collection_info.py +2 -2
  59. eval_studio_client/api/models/v1_context.py +2 -2
  60. eval_studio_client/api/models/v1_create_dashboard_response.py +2 -2
  61. eval_studio_client/api/models/v1_create_document_response.py +2 -2
  62. eval_studio_client/api/models/v1_create_evaluation_request.py +5 -5
  63. eval_studio_client/api/models/v1_create_evaluator_response.py +2 -2
  64. eval_studio_client/api/models/v1_create_leaderboard_request.py +2 -2
  65. eval_studio_client/api/models/v1_create_leaderboard_response.py +2 -2
  66. eval_studio_client/api/models/v1_create_leaderboard_without_cache_response.py +2 -2
  67. eval_studio_client/api/models/v1_create_model_response.py +2 -2
  68. eval_studio_client/api/models/v1_create_perturbation_response.py +2 -2
  69. eval_studio_client/api/models/v1_create_test_case_response.py +2 -2
  70. eval_studio_client/api/models/v1_create_test_lab_response.py +2 -2
  71. eval_studio_client/api/models/v1_create_test_response.py +2 -2
  72. eval_studio_client/api/models/v1_create_workflow_edge_response.py +2 -2
  73. eval_studio_client/api/models/v1_create_workflow_node_response.py +2 -2
  74. eval_studio_client/api/models/v1_create_workflow_response.py +2 -2
  75. eval_studio_client/api/models/v1_dashboard.py +2 -2
  76. eval_studio_client/api/models/v1_delete_dashboard_response.py +2 -2
  77. eval_studio_client/api/models/v1_delete_document_response.py +2 -2
  78. eval_studio_client/api/models/v1_delete_evaluator_response.py +2 -2
  79. eval_studio_client/api/models/v1_delete_leaderboard_response.py +2 -2
  80. eval_studio_client/api/models/v1_delete_model_response.py +2 -2
  81. eval_studio_client/api/models/v1_delete_test_case_response.py +2 -2
  82. eval_studio_client/api/models/v1_delete_test_response.py +2 -2
  83. eval_studio_client/api/models/v1_delete_workflow_edge_response.py +2 -2
  84. eval_studio_client/api/models/v1_delete_workflow_node_response.py +2 -2
  85. eval_studio_client/api/models/v1_delete_workflow_response.py +2 -2
  86. eval_studio_client/api/models/v1_dependency_list.py +5 -5
  87. eval_studio_client/api/models/v1_document.py +2 -2
  88. eval_studio_client/api/models/v1_estimate_threshold_request.py +5 -5
  89. eval_studio_client/api/models/v1_evaluation_test.py +8 -8
  90. eval_studio_client/api/models/v1_evaluator.py +5 -5
  91. eval_studio_client/api/models/v1_evaluator_parameter.py +2 -2
  92. eval_studio_client/api/models/v1_finalize_operation_response.py +2 -2
  93. eval_studio_client/api/models/v1_find_all_test_cases_by_id_response.py +5 -5
  94. eval_studio_client/api/models/v1_find_test_lab_response.py +2 -2
  95. eval_studio_client/api/models/v1_find_workflows_by_collection_id_response.py +5 -5
  96. eval_studio_client/api/models/v1_generate_test_cases_response.py +2 -2
  97. eval_studio_client/api/models/v1_get_dashboard_response.py +2 -2
  98. eval_studio_client/api/models/v1_get_document_response.py +2 -2
  99. eval_studio_client/api/models/v1_get_evaluator_response.py +2 -2
  100. eval_studio_client/api/models/v1_get_guardrails_configuration_response.py +2 -2
  101. eval_studio_client/api/models/v1_get_info_response.py +2 -2
  102. eval_studio_client/api/models/v1_get_leaderboard_report_response.py +2 -2
  103. eval_studio_client/api/models/v1_get_leaderboard_response.py +2 -2
  104. eval_studio_client/api/models/v1_get_model_response.py +2 -2
  105. eval_studio_client/api/models/v1_get_operation_progress_by_parent_response.py +2 -2
  106. eval_studio_client/api/models/v1_get_operation_response.py +2 -2
  107. eval_studio_client/api/models/v1_get_perturbator_response.py +2 -2
  108. eval_studio_client/api/models/v1_get_stats_response.py +2 -2
  109. eval_studio_client/api/models/v1_get_test_case_response.py +2 -2
  110. eval_studio_client/api/models/v1_get_test_class_response.py +2 -2
  111. eval_studio_client/api/models/v1_get_test_response.py +2 -2
  112. eval_studio_client/api/models/v1_get_workflow_node_prerequisites_response.py +2 -2
  113. eval_studio_client/api/models/v1_get_workflow_node_response.py +2 -2
  114. eval_studio_client/api/models/v1_get_workflow_response.py +2 -2
  115. eval_studio_client/api/models/v1_get_workflow_result_corpus_patch_response.py +2 -2
  116. eval_studio_client/api/models/v1_get_workflow_result_report_response.py +2 -2
  117. eval_studio_client/api/models/v1_get_workflow_result_summary_response.py +2 -2
  118. eval_studio_client/api/models/v1_get_workflow_result_system_prompt_patch_response.py +2 -2
  119. eval_studio_client/api/models/v1_import_evaluation_request.py +2 -2
  120. eval_studio_client/api/models/v1_import_leaderboard_request.py +2 -2
  121. eval_studio_client/api/models/v1_import_leaderboard_response.py +2 -2
  122. eval_studio_client/api/models/v1_import_test_cases_from_library_response.py +2 -2
  123. eval_studio_client/api/models/v1_import_test_cases_request.py +2 -2
  124. eval_studio_client/api/models/v1_info.py +2 -2
  125. eval_studio_client/api/models/v1_init_workflow_node_response.py +2 -2
  126. eval_studio_client/api/models/v1_insight.py +2 -2
  127. eval_studio_client/api/models/v1_labeled_test_case.py +2 -2
  128. eval_studio_client/api/models/v1_leaderboard.py +8 -8
  129. eval_studio_client/api/models/v1_leaderboard_report.py +8 -8
  130. eval_studio_client/api/models/v1_leaderboard_report_actual_output_data.py +2 -2
  131. eval_studio_client/api/models/v1_leaderboard_report_actual_output_meta.py +5 -5
  132. eval_studio_client/api/models/v1_leaderboard_report_evaluator.py +11 -11
  133. eval_studio_client/api/models/v1_leaderboard_report_evaluator_parameter.py +2 -2
  134. eval_studio_client/api/models/v1_leaderboard_report_explanation.py +2 -2
  135. eval_studio_client/api/models/v1_leaderboard_report_metrics_meta_entry.py +2 -2
  136. eval_studio_client/api/models/v1_leaderboard_report_model.py +2 -2
  137. eval_studio_client/api/models/v1_leaderboard_report_result.py +11 -11
  138. eval_studio_client/api/models/v1_leaderboard_report_result_relationship.py +2 -2
  139. eval_studio_client/api/models/v1_list_base_models_response.py +2 -2
  140. eval_studio_client/api/models/v1_list_dashboard_access_response.py +5 -5
  141. eval_studio_client/api/models/v1_list_dashboards_response.py +5 -5
  142. eval_studio_client/api/models/v1_list_dashboards_shared_with_me_response.py +5 -5
  143. eval_studio_client/api/models/v1_list_documents_response.py +5 -5
  144. eval_studio_client/api/models/v1_list_evaluators_response.py +5 -5
  145. eval_studio_client/api/models/v1_list_leaderboards_response.py +5 -5
  146. eval_studio_client/api/models/v1_list_llm_models_response.py +2 -2
  147. eval_studio_client/api/models/v1_list_model_collections_response.py +5 -5
  148. eval_studio_client/api/models/v1_list_models_response.py +5 -5
  149. eval_studio_client/api/models/v1_list_most_recent_dashboards_response.py +5 -5
  150. eval_studio_client/api/models/v1_list_most_recent_leaderboards_response.py +5 -5
  151. eval_studio_client/api/models/v1_list_most_recent_models_response.py +5 -5
  152. eval_studio_client/api/models/v1_list_most_recent_tests_response.py +5 -5
  153. eval_studio_client/api/models/v1_list_operations_response.py +5 -5
  154. eval_studio_client/api/models/v1_list_perturbators_response.py +5 -5
  155. eval_studio_client/api/models/v1_list_prompt_library_items_response.py +5 -5
  156. eval_studio_client/api/models/v1_list_rag_collections_response.py +5 -5
  157. eval_studio_client/api/models/v1_list_test_access_response.py +5 -5
  158. eval_studio_client/api/models/v1_list_test_case_library_items_response.py +5 -5
  159. eval_studio_client/api/models/v1_list_test_case_relationships_response.py +5 -5
  160. eval_studio_client/api/models/v1_list_test_cases_response.py +5 -5
  161. eval_studio_client/api/models/v1_list_test_classes_response.py +5 -5
  162. eval_studio_client/api/models/v1_list_tests_response.py +5 -5
  163. eval_studio_client/api/models/v1_list_tests_shared_with_me_response.py +5 -5
  164. eval_studio_client/api/models/v1_list_workflow_access_response.py +5 -5
  165. eval_studio_client/api/models/v1_list_workflow_dependencies_response.py +8 -8
  166. eval_studio_client/api/models/v1_list_workflows_response.py +5 -5
  167. eval_studio_client/api/models/v1_list_workflows_shared_with_me_response.py +5 -5
  168. eval_studio_client/api/models/v1_metric_score.py +2 -2
  169. eval_studio_client/api/models/v1_metric_scores.py +5 -5
  170. eval_studio_client/api/models/v1_model.py +2 -2
  171. eval_studio_client/api/models/v1_operation.py +2 -2
  172. eval_studio_client/api/models/v1_operation_progress.py +2 -2
  173. eval_studio_client/api/models/v1_perturb_test_in_place_response.py +2 -2
  174. eval_studio_client/api/models/v1_perturb_test_response.py +2 -2
  175. eval_studio_client/api/models/v1_perturbator.py +2 -2
  176. eval_studio_client/api/models/v1_perturbator_configuration.py +2 -2
  177. eval_studio_client/api/models/v1_problem_and_action.py +2 -2
  178. eval_studio_client/api/models/v1_process_workflow_node_response.py +2 -2
  179. eval_studio_client/api/models/v1_prompt_library_item.py +2 -2
  180. eval_studio_client/api/models/v1_repeated_context.py +5 -5
  181. eval_studio_client/api/models/v1_repeated_string.py +2 -2
  182. eval_studio_client/api/models/v1_reset_workflow_node_response.py +2 -2
  183. eval_studio_client/api/models/v1_role_binding.py +2 -2
  184. eval_studio_client/api/models/v1_stats.py +2 -2
  185. eval_studio_client/api/models/v1_test.py +2 -2
  186. eval_studio_client/api/models/v1_test_case.py +2 -2
  187. eval_studio_client/api/models/v1_test_case_relationship.py +2 -2
  188. eval_studio_client/api/models/v1_test_class.py +2 -2
  189. eval_studio_client/api/models/v1_test_lab.py +2 -2
  190. eval_studio_client/api/models/v1_update_dashboard_response.py +2 -2
  191. eval_studio_client/api/models/v1_update_document_response.py +2 -2
  192. eval_studio_client/api/models/v1_update_leaderboard_response.py +2 -2
  193. eval_studio_client/api/models/v1_update_model_response.py +2 -2
  194. eval_studio_client/api/models/v1_update_operation_response.py +2 -2
  195. eval_studio_client/api/models/v1_update_test_case_response.py +2 -2
  196. eval_studio_client/api/models/v1_update_test_response.py +2 -2
  197. eval_studio_client/api/models/v1_update_workflow_node_response.py +2 -2
  198. eval_studio_client/api/models/v1_update_workflow_response.py +2 -2
  199. eval_studio_client/api/models/v1_who_am_i_response.py +2 -2
  200. eval_studio_client/api/models/v1_workflow.py +5 -5
  201. eval_studio_client/api/models/v1_workflow_dependency.py +2 -2
  202. eval_studio_client/api/models/v1_workflow_edge.py +2 -2
  203. eval_studio_client/api/models/v1_workflow_node.py +5 -5
  204. eval_studio_client/api/models/v1_workflow_node_artifact.py +2 -2
  205. eval_studio_client/api/models/v1_workflow_node_artifacts.py +5 -5
  206. eval_studio_client/api/models/v1_workflow_node_attributes.py +2 -2
  207. eval_studio_client/api/models/workflow_service_clone_workflow_request.py +2 -2
  208. eval_studio_client/api/models/workflow_service_revoke_workflow_access_request.py +2 -2
  209. eval_studio_client/leaderboards.py +17 -0
  210. eval_studio_client/models.py +153 -8
  211. {eval_studio_client-1.2.2a1.dist-info → eval_studio_client-1.2.3.dist-info}/METADATA +1 -1
  212. {eval_studio_client-1.2.2a1.dist-info → eval_studio_client-1.2.3.dist-info}/RECORD +213 -213
  213. {eval_studio_client-1.2.2a1.dist-info → eval_studio_client-1.2.3.dist-info}/WHEEL +0 -0
@@ -67,6 +67,7 @@ class Model:
67
67
  is_rag: bool
68
68
  create_time: Optional[datetime.datetime] = None
69
69
  update_time: Optional[datetime.datetime] = None
70
+ _model_parameters: Optional[str] = None
70
71
  _client: Optional[api.ApiClient] = None
71
72
 
72
73
  def __post_init__(self):
@@ -180,6 +181,7 @@ class Model:
180
181
  description: Optional[str] = None,
181
182
  base_models: Optional[List[str]] = None,
182
183
  existing_collection: Optional[str] = None,
184
+ model_parameters: Optional[Union[dict, str]] = None,
183
185
  ) -> Optional[d8s.Dashboard]:
184
186
  """Runs a new evaluation for the model and creates a new dashboard.
185
187
 
@@ -191,6 +193,10 @@ class Model:
191
193
  existing_collection (str): ID or the resource name of the existing
192
194
  collection, which will be used as a corpus for evaluation.
193
195
  NOTE: This option works only for the H2OGPTe and Amazon Bedrock model hosts ATM.
196
+ model_parameters (optional): Optional override of the model parameters.
197
+ This can be either a JSON string or a dictionary.
198
+ Examples:
199
+ model_parameters={"llm_args": {"temperature": 0.7, "use_agent": False}}
194
200
  """
195
201
  _evaluators = (
196
202
  [evaluators] if isinstance(evaluators, e8s.Evaluator) else evaluators
@@ -198,6 +204,21 @@ class Model:
198
204
  _test_suites = (
199
205
  [test_suites] if isinstance(test_suites, tests.Test) else test_suites
200
206
  )
207
+ _model_parameters = None
208
+ if model_parameters:
209
+ if isinstance(model_parameters, str):
210
+ _model_parameters = model_parameters
211
+ elif isinstance(model_parameters, dict):
212
+ try:
213
+ _model_parameters = json.dumps(model_parameters)
214
+ except (TypeError, ValueError) as err:
215
+ raise ValueError("Invalid dictionary for model_parameters") from err
216
+ else:
217
+ _model_parameters = (
218
+ self._model_parameters
219
+ if isinstance(self._model_parameters, str)
220
+ else None
221
+ )
201
222
 
202
223
  create_lb_reqs: List[models.V1CreateLeaderboardRequest] = []
203
224
  for evaluator in _evaluators:
@@ -207,6 +228,7 @@ class Model:
207
228
  description=description or "",
208
229
  base_models=base_models or [],
209
230
  existing_collection=existing_collection,
231
+ _model_parameters=_model_parameters,
210
232
  _model_name=self.key,
211
233
  _evaluator_name=evaluator.key,
212
234
  _test_names=[t.key for t in _test_suites],
@@ -261,6 +283,24 @@ class Model:
261
283
 
262
284
  return None
263
285
 
286
+ @property
287
+ def model_parameters(self) -> dict:
288
+ """Retrieves the model parameters as a dictionary.
289
+
290
+ Returns:
291
+ dict: The model parameters as a dictionary. Returns empty dict if no parameters are set.
292
+ """
293
+ if self._model_parameters:
294
+ if isinstance(self._model_parameters, str):
295
+ try:
296
+ return json.loads(self._model_parameters)
297
+ except json.JSONDecodeError:
298
+ print("Failed to parse model parameters")
299
+ return {}
300
+ elif isinstance(self._model_parameters, dict):
301
+ return self._model_parameters
302
+ return {}
303
+
264
304
  def delete(self):
265
305
  """Deletes the model"""
266
306
  self._model_api.model_service_delete_model(self.key)
@@ -286,6 +326,7 @@ class Model:
286
326
  create_time=api_model.create_time,
287
327
  update_time=api_model.update_time,
288
328
  _client=client,
329
+ _model_parameters=api_model.parameters,
289
330
  )
290
331
 
291
332
  @staticmethod
@@ -342,7 +383,13 @@ class _Models:
342
383
  return self.get(DEFAULT_LLM_MODEL_KEY)
343
384
 
344
385
  def create_h2ogpte_model(
345
- self, name: str, is_rag: bool, description: str, url: str, api_key: str
386
+ self,
387
+ name: str,
388
+ is_rag: bool,
389
+ description: str,
390
+ url: str,
391
+ api_key: str,
392
+ model_parameters: Optional[Union[dict, str]] = None,
346
393
  ) -> Model:
347
394
  """Creates a new H2OGPTe model in Eval Studio.
348
395
 
@@ -355,18 +402,24 @@ class _Models:
355
402
  description: Description of the model.
356
403
  url: URL of the model host system.
357
404
  api_key: API key for the model host system.
405
+ model_parameters (optional): Optional model parameters.
406
+ This can be either a JSON string or a dictionary.
407
+ Examples:
408
+ model_parameters={"llm_args": {"temperature": 0.7}}
358
409
  """
359
410
  model_type = (
360
411
  models.V1ModelType.MODEL_TYPE_H2_OGPTE_RAG
361
412
  if is_rag
362
413
  else models.V1ModelType.MODEL_TYPE_H2_OGPTE_LLM
363
414
  )
415
+
364
416
  req = models.V1Model(
365
417
  display_name=name,
366
418
  description=description,
367
419
  url=url,
368
420
  api_key=api_key,
369
421
  type=model_type,
422
+ parameters=self._serialize_model_parameters(model_parameters),
370
423
  )
371
424
  res = self._api.model_service_create_model(req)
372
425
  if res and res.model:
@@ -375,7 +428,12 @@ class _Models:
375
428
  raise RuntimeError("Failed to create H2OGPTe model")
376
429
 
377
430
  def create_h2ogpt_model(
378
- self, name: str, description: str, url: str, api_key: str
431
+ self,
432
+ name: str,
433
+ description: str,
434
+ url: str,
435
+ api_key: str,
436
+ model_parameters: Optional[Union[dict, str]] = None,
379
437
  ) -> Model:
380
438
  """Creates a new H2OGPT model in Eval Studio.
381
439
 
@@ -384,13 +442,19 @@ class _Models:
384
442
  description: Description of the model.
385
443
  url: URL of the model host system.
386
444
  api_key: API key for the model host system.
445
+ model_parameters (optional): Optional model parameters.
446
+ This can be either a JSON string or a dictionary.
447
+ Examples:
448
+ model_parameters={"llm_args": {"temperature": 0.7}}
387
449
  """
450
+
388
451
  req = models.V1Model(
389
452
  display_name=name,
390
453
  description=description,
391
454
  url=url,
392
455
  api_key=api_key,
393
456
  type=models.V1ModelType.MODEL_TYPE_H2_OGPT_LLM,
457
+ parameters=self._serialize_model_parameters(model_parameters),
394
458
  )
395
459
  res = self._api.model_service_create_model(req)
396
460
  if res and res.model:
@@ -399,7 +463,12 @@ class _Models:
399
463
  raise RuntimeError("Failed to create H2OGPT model")
400
464
 
401
465
  def create_h2o_llmops_model(
402
- self, name: str, description: str, url: str, api_key: str
466
+ self,
467
+ name: str,
468
+ description: str,
469
+ url: str,
470
+ api_key: str,
471
+ model_parameters: Optional[Union[dict, str]] = None,
403
472
  ) -> Model:
404
473
  """Creates a new H2O LLMOps Model.
405
474
 
@@ -408,6 +477,10 @@ class _Models:
408
477
  description: Description of the model.
409
478
  url: URL of the model host system.
410
479
  api_key: API key for the model host system.
480
+ model_parameters (optional): Optional model parameters.
481
+ This can be either a JSON string or a dictionary.
482
+ Examples:
483
+ model_parameters={"llm_args": {"temperature": 0.7}}
411
484
  """
412
485
  req = models.V1Model(
413
486
  display_name=name,
@@ -415,6 +488,7 @@ class _Models:
415
488
  url=url,
416
489
  api_key=api_key,
417
490
  type=models.V1ModelType.MODEL_TYPE_H2_OLLMOPS,
491
+ parameters=self._serialize_model_parameters(model_parameters),
418
492
  )
419
493
  res = self._api.model_service_create_model(req)
420
494
  if res and res.model:
@@ -429,6 +503,7 @@ class _Models:
429
503
  api_key: str,
430
504
  url: str = "",
431
505
  is_rag: bool = True,
506
+ model_parameters: Optional[Union[dict, str]] = None,
432
507
  ) -> Model:
433
508
  """Creates a new OpenAI model in Eval Studio.
434
509
 
@@ -440,6 +515,10 @@ class _Models:
440
515
  Otherwise can use custom OpenAI compatible API.
441
516
  is_rag (optional): If True, uses the OpenAI Assistants API for RAG.
442
517
  If False, uses plain OpenAI Chat.
518
+ model_parameters (optional): Optional model parameters.
519
+ This can be either a JSON string or a dictionary.
520
+ Examples:
521
+ model_parameters={"llm_args": {"temperature": 0.7}}
443
522
 
444
523
  """
445
524
  if url and is_rag:
@@ -458,6 +537,7 @@ class _Models:
458
537
  api_key=api_key,
459
538
  url=url or None,
460
539
  type=model_type,
540
+ parameters=self._serialize_model_parameters(model_parameters),
461
541
  )
462
542
  res = self._api.model_service_create_model(req)
463
543
  if res and res.model:
@@ -466,7 +546,13 @@ class _Models:
466
546
  raise RuntimeError("Failed to create OpenAI model")
467
547
 
468
548
  def create_azure_openai_model(
469
- self, name: str, description: str, url: str, api_key: str, environmentID: str
549
+ self,
550
+ name: str,
551
+ description: str,
552
+ url: str,
553
+ api_key: str,
554
+ environmentID: str,
555
+ model_parameters: Optional[Union[dict, str]] = None,
470
556
  ) -> Model:
471
557
  """Creates a new Azure-hosted OpenAI model in Eval Studio.
472
558
 
@@ -476,15 +562,20 @@ class _Models:
476
562
  url: URL of the model host system.
477
563
  api_key: API key for the model host system.
478
564
  environmentID: Azure environment ID.
565
+ model_parameters (optional): Optional model parameters.
566
+ This can be either a JSON string or a dictionary.
567
+ Note: The environment_id parameter will be automatically added.
568
+ Examples:
569
+ model_parameters={"llm_args": {"temperature": 0.7}}
479
570
  """
480
- params = {_AZURE_ENV_ID_PARAM: environmentID}
571
+ extra_params = {_AZURE_ENV_ID_PARAM: environmentID}
481
572
  req = models.V1Model(
482
573
  display_name=name,
483
574
  description=description,
484
575
  url=url,
485
576
  api_key=api_key,
486
577
  type=models.V1ModelType.MODEL_TYPE_AZURE_OPENAI_CHAT,
487
- parameters=json.dumps(params),
578
+ parameters=self._serialize_model_parameters(model_parameters, extra_params),
488
579
  )
489
580
  res = self._api.model_service_create_model(req)
490
581
  if res and res.model:
@@ -493,7 +584,12 @@ class _Models:
493
584
  raise RuntimeError("Failed to create Azure model")
494
585
 
495
586
  def create_ollama_model(
496
- self, name: str, description: str, url: str, api_key: str
587
+ self,
588
+ name: str,
589
+ description: str,
590
+ url: str,
591
+ api_key: str,
592
+ model_parameters: Optional[Union[dict, str]] = None,
497
593
  ) -> Model:
498
594
  """Creates a new OLLAMA model in Eval Studio.
499
595
 
@@ -502,6 +598,10 @@ class _Models:
502
598
  description: Description of the model.
503
599
  url: URL of the model host system.
504
600
  api_key: API key for the model host system.
601
+ model_parameters (optional): Optional model parameters.
602
+ This can be either a JSON string or a dictionary.
603
+ Examples:
604
+ model_parameters={"llm_args": {"temperature": 0.7}}
505
605
  """
506
606
  req = models.V1Model(
507
607
  display_name=name,
@@ -509,6 +609,7 @@ class _Models:
509
609
  url=url,
510
610
  api_key=api_key,
511
611
  type=models.V1ModelType.MODEL_TYPE_OLLAMA,
612
+ parameters=self._serialize_model_parameters(model_parameters),
512
613
  )
513
614
  res = self._api.model_service_create_model(req)
514
615
  if res and res.model:
@@ -524,6 +625,7 @@ class _Models:
524
625
  aws_secret_access_key: str,
525
626
  aws_session_token: str,
526
627
  aws_region: str,
628
+ model_parameters: Optional[Union[dict, str]] = None,
527
629
  ) -> Model:
528
630
  """Creates a new Amazon Bedrock model in Eval Studio.
529
631
 
@@ -534,18 +636,26 @@ class _Models:
534
636
  aws_secret_access_key: AWS secret access key.
535
637
  aws_session_token: AWS session token.
536
638
  aws_region: AWS region.
639
+ model_parameters (optional): Optional model parameters.
640
+ This can be either a JSON string or a dictionary.
641
+ Note: The region parameter will be automatically added.
642
+ Examples:
643
+ model_parameters={"llm_args": {"temperature": 0.7}}
537
644
  """
538
645
  credentials = {
539
646
  "aws_access_key_id": aws_access_key_id,
540
647
  "aws_secret_access_key": aws_secret_access_key,
541
648
  "aws_session_token": aws_session_token,
542
649
  }
650
+
651
+ extra_params = {"region": aws_region}
652
+
543
653
  req = models.V1Model(
544
654
  display_name=name,
545
655
  description=description,
546
656
  type=models.V1ModelType.MODEL_TYPE_AMAZON_BEDROCK,
547
657
  api_key=json.dumps(credentials),
548
- parameters=json.dumps({"region": aws_region}),
658
+ parameters=self._serialize_model_parameters(model_parameters, extra_params),
549
659
  )
550
660
  res = self._api.model_service_create_model(req)
551
661
  if res and res.model:
@@ -569,3 +679,38 @@ class _Models:
569
679
  return [Model._from_api_model(m, self._client) for m in res_models]
570
680
 
571
681
  return []
682
+
683
+ def _serialize_model_parameters(
684
+ self,
685
+ model_parameters: Optional[Union[dict, str]] = None,
686
+ additional_params: Optional[dict] = None,
687
+ ) -> Optional[str]:
688
+ """Helper method to serialize model parameters."""
689
+ if model_parameters:
690
+ if isinstance(model_parameters, str):
691
+ if additional_params:
692
+ try:
693
+ params_dict = json.loads(model_parameters)
694
+ params_dict.update(additional_params)
695
+ return json.dumps(params_dict)
696
+ except json.JSONDecodeError as err:
697
+ raise ValueError(
698
+ "Invalid JSON string for model_parameters"
699
+ ) from err
700
+
701
+ return model_parameters
702
+ elif isinstance(model_parameters, dict):
703
+ if additional_params:
704
+ model_parameters.update(additional_params)
705
+
706
+ try:
707
+ return json.dumps(model_parameters)
708
+ except (TypeError, ValueError) as err:
709
+ raise ValueError("Invalid dictionary for model_parameters") from err
710
+ elif additional_params:
711
+ try:
712
+ return json.dumps(additional_params)
713
+ except (TypeError, ValueError):
714
+ print("Failed to serialize additional model parameters")
715
+
716
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eval-studio-client
3
- Version: 1.2.2a1
3
+ Version: 1.2.3
4
4
  Project-URL: Source, https://github.com/h2oai/eval-studio/tree/main/client-py/src/
5
5
  Project-URL: Issues, https://github.com/h2oai/eval-studio/issues
6
6
  Author-email: "H2O.ai" <support@h2o.ai>