in google/generativeai/types/model_types.py [0:0]
def decode_tuned_model(tuned_model: protos.TunedModel | dict["str", Any]) -> TunedModel:
if isinstance(tuned_model, protos.TunedModel):
tuned_model = type(tuned_model).to_dict(
tuned_model, including_default_value_fields=False
) # pytype: disable=attribute-error
tuned_model["state"] = to_tuned_model_state(tuned_model.pop("state", None))
base_model = tuned_model.pop("base_model", None)
tuned_model_source = tuned_model.pop("tuned_model_source", None)
if base_model is not None:
tuned_model["base_model"] = base_model
tuned_model["source_model"] = base_model
elif tuned_model_source is not None:
tuned_model["base_model"] = tuned_model_source["base_model"]
tuned_model["source_model"] = tuned_model_source["tuned_model"]
idecode_time(tuned_model, "create_time")
idecode_time(tuned_model, "update_time")
task = tuned_model.pop("tuning_task", None)
if task is not None:
hype = task.pop("hyperparameters", None)
if hype is not None:
hype = Hyperparameters(**hype)
task["hyperparameters"] = hype
idecode_time(task, "start_time")
idecode_time(task, "complete_time")
snapshots = task.pop("snapshots", None)
if snapshots is not None:
for snap in snapshots:
idecode_time(snap, "compute_time")
task["snapshots"] = snapshots
task = TuningTask(**task)
tuned_model["tuning_task"] = task
return TunedModel(**tuned_model)