diff options
Diffstat (limited to 'autogpts/autogpt/autogpt/core/resource/schema.py')
-rw-r--r-- | autogpts/autogpt/autogpt/core/resource/schema.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/autogpts/autogpt/autogpt/core/resource/schema.py b/autogpts/autogpt/autogpt/core/resource/schema.py index 0f97aedb0..d8cc1de31 100644 --- a/autogpts/autogpt/autogpt/core/resource/schema.py +++ b/autogpts/autogpt/autogpt/core/resource/schema.py @@ -1,7 +1,7 @@ import abc import enum -from pydantic import SecretBytes, SecretField, SecretStr +from pydantic import BaseModel, SecretBytes, SecretField, SecretStr from autogpt.core.configuration import ( SystemConfiguration, @@ -31,14 +31,21 @@ class ProviderBudget(SystemConfiguration): usage: ProviderUsage @abc.abstractmethod - def update_usage_and_cost(self, *args, **kwargs) -> None: - """Update the usage and cost of the resource.""" + def update_usage_and_cost(self, *args, **kwargs) -> float: + """Update the usage and cost of the provider. + + Returns: + float: The (calculated) cost of the given model response. + """ ... class ProviderCredentials(SystemConfiguration): """Struct for credentials.""" + def unmasked(self) -> dict: + return unmask(self) + class Config: json_encoders = { SecretStr: lambda v: v.get_secret_value() if v else None, @@ -47,6 +54,17 @@ class ProviderCredentials(SystemConfiguration): } +def unmask(model: BaseModel): + unmasked_fields = {} + for field_name, _ in model.__fields__.items(): + value = getattr(model, field_name) + if isinstance(value, SecretStr): + unmasked_fields[field_name] = value.get_secret_value() + else: + unmasked_fields[field_name] = value + return unmasked_fields + + class ProviderSettings(SystemSettings): resource_type: ResourceType credentials: ProviderCredentials | None = None |