diff --git a/reference.md b/reference.md
index a014e3e6..4b6d0cbc 100644
--- a/reference.md
+++ b/reference.md
@@ -1,4 +1,172 @@
# Reference
+client.apply(...)
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Applies a given manifest to create or update resources of specific types, such as provider-account, cluster, workspace, or ml-repo.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from truefoundry_sdk import Collaborator, MlRepoManifest, TrueFoundry
+
+client = TrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+)
+client.apply(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**manifest:** `TrueFoundryApplyRequestManifest` — manifest of the resource to be created or updated
+
+
+
+
+
+-
+
+**dry_run:** `typing.Optional[bool]` — Dry run the apply operation without actually applying
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.delete(...)
+
+-
+
+#### 📝 Description
+
+
+-
+
+
+-
+
+Deletes resources of specific types, such as provider-account, cluster, workspace, or application.
+
+
+
+
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from truefoundry_sdk import Collaborator, MlRepoManifest, TrueFoundry
+
+client = TrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+)
+client.delete(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**manifest:** `TrueFoundryDeleteRequestManifest` — manifest of the resource to be deleted
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
## Internal
client.internal.get_id_from_fqn(...)
diff --git a/src/truefoundry_sdk/__init__.py b/src/truefoundry_sdk/__init__.py
index 18d13893..4d109d4e 100644
--- a/src/truefoundry_sdk/__init__.py
+++ b/src/truefoundry_sdk/__init__.py
@@ -11,17 +11,27 @@
Agent,
AgentApp,
AgentManifest,
+ AgentManifestWithFqn,
AgentOpenApiToolManifest,
AgentOpenApiToolManifestOpenapiSpec,
- AgentOpenApiToolWithFqn,
- AgentOpenApiToolWithFqnOpenapiSpec,
+ AgentOpenApiToolManifestWithFqn,
+ AgentOpenApiToolManifestWithFqnOpenapiSpec,
AgentVersion,
- AgentWithFqn,
+ Ai21Integrations,
+ Ai21KeyAuth,
+ Ai21Model,
+ Ai21ProviderAccount,
Alert,
+ AlertConfig,
+ AlertSeverity,
AlertStatus,
AmqpInputConfig,
AmqpMetricConfig,
AmqpOutputConfig,
+ AnthropicIntegrations,
+ AnthropicKeyAuth,
+ AnthropicModel,
+ AnthropicProviderAccount,
Application,
ApplicationDebugInfo,
ApplicationLifecycleStage,
@@ -51,18 +61,69 @@
AsyncServiceReplicas,
Autoshutdown,
AwsAccessKeyAuth,
+ AwsAccessKeyBasedAuth,
+ AwsAssumedRoleBasedAuth,
+ AwsBedrockProviderAccount,
+ AwsBedrockProviderAccountAuthData,
+ AwsEcr,
+ AwsEcrAuthData,
+ AwsEksIntegration,
+ AwsEksIntegrationAuthData,
AwsInferentia,
+ AwsIntegrations,
+ AwsParameterStore,
+ AwsParameterStoreAuthData,
+ AwsProviderAccount,
+ AwsProviderAccountAuthData,
+ AwsRegion,
+ AwsS3,
+ AwsS3AuthData,
+ AwsSecretsManager,
+ AwsSecretsManagerAuthData,
+ AzureAiInferenceModel,
+ AzureAiInferenceModelDeploymentDetails,
+ AzureAiManagedDeployment,
+ AzureAiServerlessDeployment,
+ AzureAksIntegration,
+ AzureBasicAuth,
+ AzureBlobStorage,
+ AzureConnectionStringAuth,
+ AzureContainerRegistry,
+ AzureFoundryModel,
+ AzureFoundryModelV2,
+ AzureFoundryProviderAccount,
+ AzureIntegrations,
+ AzureKeyAuth,
+ AzureOAuth,
+ AzureOpenAiModel,
+ AzureOpenAiModelV2,
+ AzureOpenAiProviderAccount,
+ AzureProviderAccount,
+ AzureReposIntegration,
+ AzureVault,
BaseArtifactVersion,
BaseArtifactVersionManifest,
BaseAutoscaling,
+ BaseOAuth2Login,
+ BaseOAuth2LoginJwtSource,
BaseService,
BaseServiceImage,
BaseServiceMountsItem,
BaseWorkbenchInput,
BaseWorkbenchInputMountsItem,
BasicAuthCreds,
+ BedrockKeyAuth,
+ BedrockModel,
+ BedrockModelAuthData,
+ BedrockModelV2,
+ BitbucketIntegration,
+ BitbucketProviderAccount,
BlobStorageReference,
BlueGreen,
+ BudgetConfig,
+ BudgetLimitUnit,
+ BudgetRule,
+ BudgetWhen,
Build,
BuildBuildSource,
BuildBuildSpec,
@@ -82,6 +143,10 @@
ClusterManifestWorkbenchConfig,
ClusterType,
Codeserver,
+ CohereIntegrations,
+ CohereKeyAuth,
+ CohereModel,
+ CohereProviderAccount,
Collaborator,
ContainerTaskConfig,
ContainerTaskConfigImage,
@@ -91,10 +156,32 @@
CreateMultiPartUploadRequest,
CreatePersonalAccessTokenResponse,
CronMetric,
+ CustomBasicAuth,
+ CustomBearerAuth,
+ CustomBlobStorage,
+ CustomHelmRepo,
+ CustomIntegrations,
+ CustomJwtAuthIntegration,
+ CustomMcpServerIntegration,
+ CustomModel,
+ CustomModelAuthData,
+ CustomModelModelServer,
+ CustomProviderAccount,
+ CustomUsernamePasswordArtifactsRegistry,
DataDirectory,
DataDirectoryManifest,
DataDirectoryManifestSource,
+ DatabricksApiKeyAuth,
+ DatabricksIntegrations,
+ DatabricksModel,
+ DatabricksProviderAccount,
+ DatabricksProviderAccountAuthData,
+ DatabricksServicePrincipalAuth,
DeactivateUserResponse,
+ DeepinfraIntegrations,
+ DeepinfraKeyAuth,
+ DeepinfraModel,
+ DeepinfraProviderAccount,
DeleteApplicationResponse,
DeleteJobRunResponse,
DeletePersonalAccessTokenResponse,
@@ -111,8 +198,13 @@
DeveloperMessageContent,
DockerFileBuild,
DockerFileBuildCommand,
+ DockerhubBasicAuth,
+ DockerhubIntegrations,
+ DockerhubProviderAccount,
+ DockerhubRegistry,
DynamicVolumeConfig,
Email,
+ EmailNotificationChannel,
EmptyResponse,
Endpoint,
Environment,
@@ -124,6 +216,11 @@
EventChartCategory,
EventInvolvedObject,
ExternalBlobStorageSource,
+ FailureToleranceConfig,
+ FallbackConfig,
+ FallbackModel,
+ FallbackRule,
+ FallbackWhen,
FastAiFramework,
FileInfo,
FlyteLaunchPlan,
@@ -140,7 +237,19 @@
ForwardAction,
Function,
FunctionSchema,
+ GatewayConfig,
+ GcpApiKeyAuth,
+ GcpGcr,
+ GcpGcs,
+ GcpGkeIntegration,
+ GcpGsm,
+ GcpIntegrations,
+ GcpKeyFileAuth,
+ GcpProviderAccount,
+ GcpProviderAccountAuthData,
+ GcpRegion,
GcpTpu,
+ GeminiModelV2,
GetAgentResponse,
GetAgentVersionResponse,
GetAlertsResponse,
@@ -177,9 +286,26 @@
GitHelmRepo,
GitRepositoryExistsResponse,
GitSource,
+ GithubIntegration,
+ GithubProviderAccount,
+ GitlabIntegration,
+ GitlabProviderAccount,
GluonFramework,
+ GoogleGeminiProviderAccount,
+ GoogleModel,
+ GoogleVertexProviderAccount,
Graph,
GraphChartType,
+ GroqIntegrations,
+ GroqKeyAuth,
+ GroqModel,
+ GroqProviderAccount,
+ GuardrailConfig,
+ GuardrailConfigAction,
+ GuardrailsConfig,
+ GuardrailsOptions,
+ GuardrailsRule,
+ GuardrailsWhen,
H2OFramework,
HeaderMatch,
HealthProbe,
@@ -199,6 +325,8 @@
ImageUrl,
ImageUrlUrl,
InferMethodName,
+ InfraProviderAccount,
+ InputOutputBasedCostMetricValue,
Intercept,
InterceptRulesItem,
InterceptRulesItemAction,
@@ -208,6 +336,10 @@
InternalModelVersion,
InviteUserResponse,
IsClusterConnectedResponse,
+ JFrogIntegrations,
+ JfrogArtifactsRegistry,
+ JfrogBasicAuth,
+ JfrogProviderAccount,
Job,
JobAlert,
JobImage,
@@ -227,6 +359,8 @@
KafkaSaslAuth,
KerasFramework,
Kustomize,
+ LatencyBasedLoadBalanceTarget,
+ LatencyBasedLoadBalancingRule,
LibraryName,
LightGbmFramework,
ListAgentVersionsResponse,
@@ -258,6 +392,10 @@
ListVirtualAccountResponse,
ListWorkspacesResponse,
LiteralMap,
+ LoadBalanceTarget,
+ LoadBalancingConfig,
+ LoadBalancingRule,
+ LoadBalancingWhen,
LocalArtifactSource,
LocalModelSource,
LocalSource,
@@ -266,17 +404,31 @@
LogsSearchOperatorType,
LogsSortingDirection,
Manual,
+ McpServerAuth,
+ McpServerHeaderAuth,
+ McpServerIntegration,
+ McpServerIntegrations,
+ McpServerOAuth2,
+ McpServerProviderAccount,
Method,
Metric,
MimeType,
MirrorAction,
+ MistralAiIntegrations,
+ MistralAiKeyAuth,
+ MistralAiModel,
+ MistralAiProviderAccount,
MlRepo,
MlRepoManifest,
Model,
+ ModelConfig,
ModelConfiguration,
+ ModelCostMetric,
ModelManifest,
ModelManifestFramework,
ModelManifestSource,
+ ModelProviderAccount,
+ ModelType,
ModelVersion,
ModelVersionEnvironment,
MultiPartUpload,
@@ -290,38 +442,86 @@
NodeSelectorCapacityType,
Nodepool,
NodepoolSelector,
+ NomicIntegrations,
+ NomicKeyAuth,
+ NomicModel,
+ NomicProviderAccount,
Notebook,
NotebookConfig,
NotificationTarget,
+ NotificationTargetForAlertRule,
NvidiaGpu,
NvidiaMiggpu,
NvidiaMiggpuProfile,
NvidiaTimeslicingGpu,
+ OAuth2LoginProvider,
OciRepo,
+ OllamaIntegrations,
+ OllamaKeyAuth,
+ OllamaModel,
+ OllamaProviderAccount,
OnnxFramework,
+ OpenAiIntegrations,
+ OpenAiModel,
+ OpenaiApiKeyAuth,
+ OpenaiProviderAccount,
Operation,
PaddleFramework,
+ PagerDuty,
+ PagerDutyIntegration,
+ PagerDutyIntegrationKeyAuth,
+ PagerDutyIntegrations,
+ PagerDutyProviderAccount,
Pagination,
+ PalmIntegrations,
+ PalmKeyAuth,
+ PalmModel,
+ PalmProviderAccount,
Param,
ParamParamType,
Parameters,
ParametersStop,
+ PerThousandEmbeddingTokensCostMetric,
+ PerThousandTokensCostMetric,
Permissions,
+ PerplexityAiKeyAuth,
+ PerplexityAiModel,
+ PerplexityAiProviderAccount,
+ PerplexityIntegrations,
+ PolicyActions,
+ PolicyEntityTypes,
+ PolicyFilters,
+ PolicyManifest,
+ PolicyManifestMode,
+ PolicyManifestOperation,
+ PolicyMutationOperation,
+ PolicyValidationOperation,
Port,
PortAppProtocol,
PortAuth,
PortProtocol,
PreRegisterUsersResponse,
PresignedUrlObject,
+ PrometheusAlertRule,
Prompt,
PromptVersion,
+ ProviderAccounts,
+ PublicCostMetric,
PyTorchFramework,
PythonBuild,
PythonBuildCommand,
PythonTaskConfig,
PythonTaskConfigImage,
PythonTaskConfigMountsItem,
+ QuayArtifactsRegistry,
+ QuayBasicAuth,
+ QuayIntegrations,
+ QuayProviderAccount,
RStudio,
+ RateLimitConfig,
+ RateLimitRule,
+ RateLimitUnit,
+ RateLimitWhen,
Recommendation,
RefusalContentPart,
RemoteSource,
@@ -338,6 +538,11 @@
SecretInput,
SecretMount,
SecretVersion,
+ SelfHostedModel,
+ SelfHostedModelAuthData,
+ SelfHostedModelIntegrations,
+ SelfHostedModelModelServer,
+ SelfHostedModelProviderAccount,
Service,
ServiceAutoscaling,
ServiceAutoscalingMetrics,
@@ -349,7 +554,14 @@
SklearnModelSchema,
SklearnSerializationFormat,
SlackBot,
+ SlackBotAuth,
+ SlackBotIntegration,
+ SlackIntegrations,
+ SlackProviderAccount,
SlackWebhook,
+ SlackWebhookAuth,
+ SlackWebhookIntegration,
+ SmtpCredentials,
SpaCyFramework,
SparkBuild,
SparkConfig,
@@ -390,6 +602,10 @@
TerminateJobResponse,
TextContentPart,
TextContentPartText,
+ TogetherAiIntegrations,
+ TogetherAiKeyAuth,
+ TogetherAiModel,
+ TogetherAiProviderAccount,
TokenPagination,
Tool,
ToolCall,
@@ -401,12 +617,24 @@
TracingProjectManifest,
TransformersFramework,
TriggerJobRunResponse,
+ TrueFoundryApplyRequestManifest,
+ TrueFoundryApplyResponse,
+ TrueFoundryApplyResponseAction,
+ TrueFoundryApplyResponseExistingManifest,
TrueFoundryArtifactSource,
+ TrueFoundryDbssm,
+ TrueFoundryDeleteRequestManifest,
+ TrueFoundryIntegrations,
TrueFoundryInteractiveLogin,
TrueFoundryManagedSource,
+ TrueFoundryProviderAccount,
+ TtlIntegrations,
+ TtlProviderAccount,
+ TtlRegistry,
UpdateSecretInput,
UpdateUserRolesResponse,
UpgradeData,
+ UsageLimits,
User,
UserMessage,
UserMessageContent,
@@ -414,12 +642,21 @@
UserMetadata,
ValidationError,
ValidationErrorLocItem,
+ VertexModel,
+ VertexModelV2,
VirtualAccount,
VirtualAccountManifest,
Volume,
VolumeBrowser,
VolumeConfig,
VolumeMount,
+ WebhookBasicAuth,
+ WebhookBearerAuth,
+ WebhookIntegration,
+ WebhookIntegrationAuthData,
+ WebhookIntegrations,
+ WebhookProviderAccount,
+ WeightBasedLoadBalancingRule,
WorkbenchImage,
WorkerConfig,
WorkerConfigInputConfig,
@@ -498,17 +735,27 @@
"Agent",
"AgentApp",
"AgentManifest",
+ "AgentManifestWithFqn",
"AgentOpenApiToolManifest",
"AgentOpenApiToolManifestOpenapiSpec",
- "AgentOpenApiToolWithFqn",
- "AgentOpenApiToolWithFqnOpenapiSpec",
+ "AgentOpenApiToolManifestWithFqn",
+ "AgentOpenApiToolManifestWithFqnOpenapiSpec",
"AgentVersion",
- "AgentWithFqn",
+ "Ai21Integrations",
+ "Ai21KeyAuth",
+ "Ai21Model",
+ "Ai21ProviderAccount",
"Alert",
+ "AlertConfig",
+ "AlertSeverity",
"AlertStatus",
"AmqpInputConfig",
"AmqpMetricConfig",
"AmqpOutputConfig",
+ "AnthropicIntegrations",
+ "AnthropicKeyAuth",
+ "AnthropicModel",
+ "AnthropicProviderAccount",
"Application",
"ApplicationDebugInfo",
"ApplicationLifecycleStage",
@@ -542,19 +789,70 @@
"AsyncTrueFoundry",
"Autoshutdown",
"AwsAccessKeyAuth",
+ "AwsAccessKeyBasedAuth",
+ "AwsAssumedRoleBasedAuth",
+ "AwsBedrockProviderAccount",
+ "AwsBedrockProviderAccountAuthData",
+ "AwsEcr",
+ "AwsEcrAuthData",
+ "AwsEksIntegration",
+ "AwsEksIntegrationAuthData",
"AwsInferentia",
+ "AwsIntegrations",
+ "AwsParameterStore",
+ "AwsParameterStoreAuthData",
+ "AwsProviderAccount",
+ "AwsProviderAccountAuthData",
+ "AwsRegion",
+ "AwsS3",
+ "AwsS3AuthData",
+ "AwsSecretsManager",
+ "AwsSecretsManagerAuthData",
+ "AzureAiInferenceModel",
+ "AzureAiInferenceModelDeploymentDetails",
+ "AzureAiManagedDeployment",
+ "AzureAiServerlessDeployment",
+ "AzureAksIntegration",
+ "AzureBasicAuth",
+ "AzureBlobStorage",
+ "AzureConnectionStringAuth",
+ "AzureContainerRegistry",
+ "AzureFoundryModel",
+ "AzureFoundryModelV2",
+ "AzureFoundryProviderAccount",
+ "AzureIntegrations",
+ "AzureKeyAuth",
+ "AzureOAuth",
+ "AzureOpenAiModel",
+ "AzureOpenAiModelV2",
+ "AzureOpenAiProviderAccount",
+ "AzureProviderAccount",
+ "AzureReposIntegration",
+ "AzureVault",
"BadRequestError",
"BaseArtifactVersion",
"BaseArtifactVersionManifest",
"BaseAutoscaling",
+ "BaseOAuth2Login",
+ "BaseOAuth2LoginJwtSource",
"BaseService",
"BaseServiceImage",
"BaseServiceMountsItem",
"BaseWorkbenchInput",
"BaseWorkbenchInputMountsItem",
"BasicAuthCreds",
+ "BedrockKeyAuth",
+ "BedrockModel",
+ "BedrockModelAuthData",
+ "BedrockModelV2",
+ "BitbucketIntegration",
+ "BitbucketProviderAccount",
"BlobStorageReference",
"BlueGreen",
+ "BudgetConfig",
+ "BudgetLimitUnit",
+ "BudgetRule",
+ "BudgetWhen",
"Build",
"BuildBuildSource",
"BuildBuildSpec",
@@ -575,6 +873,10 @@
"ClusterType",
"ClustersDeleteResponse",
"Codeserver",
+ "CohereIntegrations",
+ "CohereKeyAuth",
+ "CohereModel",
+ "CohereProviderAccount",
"Collaborator",
"ConflictError",
"ContainerTaskConfig",
@@ -585,10 +887,32 @@
"CreateMultiPartUploadRequest",
"CreatePersonalAccessTokenResponse",
"CronMetric",
+ "CustomBasicAuth",
+ "CustomBearerAuth",
+ "CustomBlobStorage",
+ "CustomHelmRepo",
+ "CustomIntegrations",
+ "CustomJwtAuthIntegration",
+ "CustomMcpServerIntegration",
+ "CustomModel",
+ "CustomModelAuthData",
+ "CustomModelModelServer",
+ "CustomProviderAccount",
+ "CustomUsernamePasswordArtifactsRegistry",
"DataDirectory",
"DataDirectoryManifest",
"DataDirectoryManifestSource",
+ "DatabricksApiKeyAuth",
+ "DatabricksIntegrations",
+ "DatabricksModel",
+ "DatabricksProviderAccount",
+ "DatabricksProviderAccountAuthData",
+ "DatabricksServicePrincipalAuth",
"DeactivateUserResponse",
+ "DeepinfraIntegrations",
+ "DeepinfraKeyAuth",
+ "DeepinfraModel",
+ "DeepinfraProviderAccount",
"DeleteApplicationResponse",
"DeleteJobRunResponse",
"DeletePersonalAccessTokenResponse",
@@ -605,8 +929,13 @@
"DeveloperMessageContent",
"DockerFileBuild",
"DockerFileBuildCommand",
+ "DockerhubBasicAuth",
+ "DockerhubIntegrations",
+ "DockerhubProviderAccount",
+ "DockerhubRegistry",
"DynamicVolumeConfig",
"Email",
+ "EmailNotificationChannel",
"EmptyResponse",
"Endpoint",
"Environment",
@@ -620,6 +949,11 @@
"ExpectationFailedError",
"ExternalBlobStorageSource",
"FailedDependencyError",
+ "FailureToleranceConfig",
+ "FallbackConfig",
+ "FallbackModel",
+ "FallbackRule",
+ "FallbackWhen",
"FastAiFramework",
"FileInfo",
"FlyteLaunchPlan",
@@ -637,7 +971,19 @@
"ForwardAction",
"Function",
"FunctionSchema",
+ "GatewayConfig",
+ "GcpApiKeyAuth",
+ "GcpGcr",
+ "GcpGcs",
+ "GcpGkeIntegration",
+ "GcpGsm",
+ "GcpIntegrations",
+ "GcpKeyFileAuth",
+ "GcpProviderAccount",
+ "GcpProviderAccountAuthData",
+ "GcpRegion",
"GcpTpu",
+ "GeminiModelV2",
"GetAgentResponse",
"GetAgentVersionResponse",
"GetAlertsResponse",
@@ -674,9 +1020,26 @@
"GitHelmRepo",
"GitRepositoryExistsResponse",
"GitSource",
+ "GithubIntegration",
+ "GithubProviderAccount",
+ "GitlabIntegration",
+ "GitlabProviderAccount",
"GluonFramework",
+ "GoogleGeminiProviderAccount",
+ "GoogleModel",
+ "GoogleVertexProviderAccount",
"Graph",
"GraphChartType",
+ "GroqIntegrations",
+ "GroqKeyAuth",
+ "GroqModel",
+ "GroqProviderAccount",
+ "GuardrailConfig",
+ "GuardrailConfigAction",
+ "GuardrailsConfig",
+ "GuardrailsOptions",
+ "GuardrailsRule",
+ "GuardrailsWhen",
"H2OFramework",
"HeaderMatch",
"HealthProbe",
@@ -696,6 +1059,8 @@
"ImageUrl",
"ImageUrlUrl",
"InferMethodName",
+ "InfraProviderAccount",
+ "InputOutputBasedCostMetricValue",
"Intercept",
"InterceptRulesItem",
"InterceptRulesItemAction",
@@ -705,6 +1070,10 @@
"InternalModelVersion",
"InviteUserResponse",
"IsClusterConnectedResponse",
+ "JFrogIntegrations",
+ "JfrogArtifactsRegistry",
+ "JfrogBasicAuth",
+ "JfrogProviderAccount",
"Job",
"JobAlert",
"JobImage",
@@ -724,6 +1093,8 @@
"KafkaSaslAuth",
"KerasFramework",
"Kustomize",
+ "LatencyBasedLoadBalanceTarget",
+ "LatencyBasedLoadBalancingRule",
"LibraryName",
"LightGbmFramework",
"ListAgentVersionsResponse",
@@ -755,6 +1126,10 @@
"ListVirtualAccountResponse",
"ListWorkspacesResponse",
"LiteralMap",
+ "LoadBalanceTarget",
+ "LoadBalancingConfig",
+ "LoadBalancingRule",
+ "LoadBalancingWhen",
"LocalArtifactSource",
"LocalModelSource",
"LocalSource",
@@ -763,18 +1138,32 @@
"LogsSearchOperatorType",
"LogsSortingDirection",
"Manual",
+ "McpServerAuth",
+ "McpServerHeaderAuth",
+ "McpServerIntegration",
+ "McpServerIntegrations",
+ "McpServerOAuth2",
+ "McpServerProviderAccount",
"Method",
"MethodNotAllowedError",
"Metric",
"MimeType",
"MirrorAction",
+ "MistralAiIntegrations",
+ "MistralAiKeyAuth",
+ "MistralAiModel",
+ "MistralAiProviderAccount",
"MlRepo",
"MlRepoManifest",
"Model",
+ "ModelConfig",
"ModelConfiguration",
+ "ModelCostMetric",
"ModelManifest",
"ModelManifestFramework",
"ModelManifestSource",
+ "ModelProviderAccount",
+ "ModelType",
"ModelVersion",
"ModelVersionEnvironment",
"MultiPartUpload",
@@ -788,40 +1177,88 @@
"NodeSelectorCapacityType",
"Nodepool",
"NodepoolSelector",
+ "NomicIntegrations",
+ "NomicKeyAuth",
+ "NomicModel",
+ "NomicProviderAccount",
"NotFoundError",
"NotImplementedError",
"Notebook",
"NotebookConfig",
"NotificationTarget",
+ "NotificationTargetForAlertRule",
"NvidiaGpu",
"NvidiaMiggpu",
"NvidiaMiggpuProfile",
"NvidiaTimeslicingGpu",
+ "OAuth2LoginProvider",
"OciRepo",
+ "OllamaIntegrations",
+ "OllamaKeyAuth",
+ "OllamaModel",
+ "OllamaProviderAccount",
"OnnxFramework",
+ "OpenAiIntegrations",
+ "OpenAiModel",
+ "OpenaiApiKeyAuth",
+ "OpenaiProviderAccount",
"Operation",
"PaddleFramework",
+ "PagerDuty",
+ "PagerDutyIntegration",
+ "PagerDutyIntegrationKeyAuth",
+ "PagerDutyIntegrations",
+ "PagerDutyProviderAccount",
"Pagination",
+ "PalmIntegrations",
+ "PalmKeyAuth",
+ "PalmModel",
+ "PalmProviderAccount",
"Param",
"ParamParamType",
"Parameters",
"ParametersStop",
+ "PerThousandEmbeddingTokensCostMetric",
+ "PerThousandTokensCostMetric",
"Permissions",
+ "PerplexityAiKeyAuth",
+ "PerplexityAiModel",
+ "PerplexityAiProviderAccount",
+ "PerplexityIntegrations",
+ "PolicyActions",
+ "PolicyEntityTypes",
+ "PolicyFilters",
+ "PolicyManifest",
+ "PolicyManifestMode",
+ "PolicyManifestOperation",
+ "PolicyMutationOperation",
+ "PolicyValidationOperation",
"Port",
"PortAppProtocol",
"PortAuth",
"PortProtocol",
"PreRegisterUsersResponse",
"PresignedUrlObject",
+ "PrometheusAlertRule",
"Prompt",
"PromptVersion",
+ "ProviderAccounts",
+ "PublicCostMetric",
"PyTorchFramework",
"PythonBuild",
"PythonBuildCommand",
"PythonTaskConfig",
"PythonTaskConfigImage",
"PythonTaskConfigMountsItem",
+ "QuayArtifactsRegistry",
+ "QuayBasicAuth",
+ "QuayIntegrations",
+ "QuayProviderAccount",
"RStudio",
+ "RateLimitConfig",
+ "RateLimitRule",
+ "RateLimitUnit",
+ "RateLimitWhen",
"Recommendation",
"RefusalContentPart",
"RemoteSource",
@@ -838,6 +1275,11 @@
"SecretInput",
"SecretMount",
"SecretVersion",
+ "SelfHostedModel",
+ "SelfHostedModelAuthData",
+ "SelfHostedModelIntegrations",
+ "SelfHostedModelModelServer",
+ "SelfHostedModelProviderAccount",
"Service",
"ServiceAutoscaling",
"ServiceAutoscalingMetrics",
@@ -849,7 +1291,14 @@
"SklearnModelSchema",
"SklearnSerializationFormat",
"SlackBot",
+ "SlackBotAuth",
+ "SlackBotIntegration",
+ "SlackIntegrations",
+ "SlackProviderAccount",
"SlackWebhook",
+ "SlackWebhookAuth",
+ "SlackWebhookIntegration",
+ "SmtpCredentials",
"SpaCyFramework",
"SparkBuild",
"SparkConfig",
@@ -891,6 +1340,10 @@
"TerminateJobResponse",
"TextContentPart",
"TextContentPartText",
+ "TogetherAiIntegrations",
+ "TogetherAiKeyAuth",
+ "TogetherAiModel",
+ "TogetherAiProviderAccount",
"TokenPagination",
"Tool",
"ToolCall",
@@ -904,14 +1357,26 @@
"TriggerJobRequestInput",
"TriggerJobRunResponse",
"TrueFoundry",
+ "TrueFoundryApplyRequestManifest",
+ "TrueFoundryApplyResponse",
+ "TrueFoundryApplyResponseAction",
+ "TrueFoundryApplyResponseExistingManifest",
"TrueFoundryArtifactSource",
+ "TrueFoundryDbssm",
+ "TrueFoundryDeleteRequestManifest",
+ "TrueFoundryIntegrations",
"TrueFoundryInteractiveLogin",
"TrueFoundryManagedSource",
+ "TrueFoundryProviderAccount",
+ "TtlIntegrations",
+ "TtlProviderAccount",
+ "TtlRegistry",
"UnauthorizedError",
"UnprocessableEntityError",
"UpdateSecretInput",
"UpdateUserRolesResponse",
"UpgradeData",
+ "UsageLimits",
"User",
"UserMessage",
"UserMessageContent",
@@ -919,12 +1384,21 @@
"UserMetadata",
"ValidationError",
"ValidationErrorLocItem",
+ "VertexModel",
+ "VertexModelV2",
"VirtualAccount",
"VirtualAccountManifest",
"Volume",
"VolumeBrowser",
"VolumeConfig",
"VolumeMount",
+ "WebhookBasicAuth",
+ "WebhookBearerAuth",
+ "WebhookIntegration",
+ "WebhookIntegrationAuthData",
+ "WebhookIntegrations",
+ "WebhookProviderAccount",
+ "WeightBasedLoadBalancingRule",
"WorkbenchImage",
"WorkerConfig",
"WorkerConfigInputConfig",
diff --git a/src/truefoundry_sdk/base_client.py b/src/truefoundry_sdk/base_client.py
index 0022a047..a53291f7 100644
--- a/src/truefoundry_sdk/base_client.py
+++ b/src/truefoundry_sdk/base_client.py
@@ -14,6 +14,7 @@
from .clusters.client import AsyncClustersClient, ClustersClient
from .core.api_error import ApiError
from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .core.request_options import RequestOptions
from .data_directories.client import AsyncDataDirectoriesClient, DataDirectoriesClient
from .environments.client import AsyncEnvironmentsClient, EnvironmentsClient
from .events.client import AsyncEventsClient, EventsClient
@@ -26,16 +27,23 @@
from .personal_access_tokens.client import AsyncPersonalAccessTokensClient, PersonalAccessTokensClient
from .prompt_versions.client import AsyncPromptVersionsClient, PromptVersionsClient
from .prompts.client import AsyncPromptsClient, PromptsClient
+from .raw_base_client import AsyncRawBaseTrueFoundry, RawBaseTrueFoundry
from .secret_groups.client import AsyncSecretGroupsClient, SecretGroupsClient
from .secrets.client import AsyncSecretsClient, SecretsClient
from .teams.client import AsyncTeamsClient, TeamsClient
from .tool_versions.client import AsyncToolVersionsClient, ToolVersionsClient
from .tools.client import AsyncToolsClient, ToolsClient
from .tracing_projects.client import AsyncTracingProjectsClient, TracingProjectsClient
+from .types.true_foundry_apply_request_manifest import TrueFoundryApplyRequestManifest
+from .types.true_foundry_apply_response import TrueFoundryApplyResponse
+from .types.true_foundry_delete_request_manifest import TrueFoundryDeleteRequestManifest
from .users.client import AsyncUsersClient, UsersClient
from .virtual_accounts.client import AsyncVirtualAccountsClient, VirtualAccountsClient
from .workspaces.client import AsyncWorkspacesClient, WorkspacesClient
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
class BaseTrueFoundry:
"""
@@ -90,6 +98,7 @@ def __init__(
else httpx.Client(timeout=_defaulted_timeout),
timeout=_defaulted_timeout,
)
+ self._raw_client = RawBaseTrueFoundry(client_wrapper=self._client_wrapper)
self.internal = InternalClient(client_wrapper=self._client_wrapper)
self.users = UsersClient(client_wrapper=self._client_wrapper)
self.teams = TeamsClient(client_wrapper=self._client_wrapper)
@@ -120,6 +129,109 @@ def __init__(
self.data_directories = DataDirectoriesClient(client_wrapper=self._client_wrapper)
self.tracing_projects = TracingProjectsClient(client_wrapper=self._client_wrapper)
+ @property
+ def with_raw_response(self) -> RawBaseTrueFoundry:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ RawBaseTrueFoundry
+ """
+ return self._raw_client
+
+ def apply(
+ self,
+ *,
+ manifest: TrueFoundryApplyRequestManifest,
+ dry_run: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> TrueFoundryApplyResponse:
+ """
+ Applies a given manifest to create or update resources of specific types, such as provider-account, cluster, workspace, or ml-repo.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryApplyRequestManifest
+ manifest of the resource to be created or updated
+
+ dry_run : typing.Optional[bool]
+ Dry run the apply operation without actually applying
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ TrueFoundryApplyResponse
+ The resource has been successfully created or updated.
+
+ Examples
+ --------
+ from truefoundry_sdk import Collaborator, MlRepoManifest, TrueFoundry
+
+ client = TrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+ )
+ client.apply(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+ )
+ """
+ _response = self._raw_client.apply(manifest=manifest, dry_run=dry_run, request_options=request_options)
+ return _response.data
+
+ def delete(
+ self, *, manifest: TrueFoundryDeleteRequestManifest, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Deletes resources of specific types, such as provider-account, cluster, workspace, or application.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryDeleteRequestManifest
+ manifest of the resource to be deleted
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ from truefoundry_sdk import Collaborator, MlRepoManifest, TrueFoundry
+
+ client = TrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+ )
+ client.delete(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+ )
+ """
+ _response = self._raw_client.delete(manifest=manifest, request_options=request_options)
+ return _response.data
+
class AsyncBaseTrueFoundry:
"""
@@ -174,6 +286,7 @@ def __init__(
else httpx.AsyncClient(timeout=_defaulted_timeout),
timeout=_defaulted_timeout,
)
+ self._raw_client = AsyncRawBaseTrueFoundry(client_wrapper=self._client_wrapper)
self.internal = AsyncInternalClient(client_wrapper=self._client_wrapper)
self.users = AsyncUsersClient(client_wrapper=self._client_wrapper)
self.teams = AsyncTeamsClient(client_wrapper=self._client_wrapper)
@@ -203,3 +316,122 @@ def __init__(
self.agent_versions = AsyncAgentVersionsClient(client_wrapper=self._client_wrapper)
self.data_directories = AsyncDataDirectoriesClient(client_wrapper=self._client_wrapper)
self.tracing_projects = AsyncTracingProjectsClient(client_wrapper=self._client_wrapper)
+
+ @property
+ def with_raw_response(self) -> AsyncRawBaseTrueFoundry:
+ """
+ Retrieves a raw implementation of this client that returns raw responses.
+
+ Returns
+ -------
+ AsyncRawBaseTrueFoundry
+ """
+ return self._raw_client
+
+ async def apply(
+ self,
+ *,
+ manifest: TrueFoundryApplyRequestManifest,
+ dry_run: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> TrueFoundryApplyResponse:
+ """
+ Applies a given manifest to create or update resources of specific types, such as provider-account, cluster, workspace, or ml-repo.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryApplyRequestManifest
+ manifest of the resource to be created or updated
+
+ dry_run : typing.Optional[bool]
+ Dry run the apply operation without actually applying
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ TrueFoundryApplyResponse
+ The resource has been successfully created or updated.
+
+ Examples
+ --------
+ import asyncio
+
+ from truefoundry_sdk import AsyncTrueFoundry, Collaborator, MlRepoManifest
+
+ client = AsyncTrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+ )
+
+
+ async def main() -> None:
+ await client.apply(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.apply(manifest=manifest, dry_run=dry_run, request_options=request_options)
+ return _response.data
+
+ async def delete(
+ self, *, manifest: TrueFoundryDeleteRequestManifest, request_options: typing.Optional[RequestOptions] = None
+ ) -> None:
+ """
+ Deletes resources of specific types, such as provider-account, cluster, workspace, or application.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryDeleteRequestManifest
+ manifest of the resource to be deleted
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ None
+
+ Examples
+ --------
+ import asyncio
+
+ from truefoundry_sdk import AsyncTrueFoundry, Collaborator, MlRepoManifest
+
+ client = AsyncTrueFoundry(
+ api_key="YOUR_API_KEY",
+ base_url="https://yourhost.com/path/to/api",
+ )
+
+
+ async def main() -> None:
+ await client.delete(
+ manifest=MlRepoManifest(
+ name="name",
+ storage_integration_fqn="storage_integration_fqn",
+ collaborators=[
+ Collaborator(
+ subject="subject",
+ role_id="role_id",
+ )
+ ],
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete(manifest=manifest, request_options=request_options)
+ return _response.data
diff --git a/src/truefoundry_sdk/raw_base_client.py b/src/truefoundry_sdk/raw_base_client.py
new file mode 100644
index 00000000..117f4a47
--- /dev/null
+++ b/src/truefoundry_sdk/raw_base_client.py
@@ -0,0 +1,219 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+from json.decoder import JSONDecodeError
+
+from .core.api_error import ApiError
+from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .core.http_response import AsyncHttpResponse, HttpResponse
+from .core.pydantic_utilities import parse_obj_as
+from .core.request_options import RequestOptions
+from .core.serialization import convert_and_respect_annotation_metadata
+from .types.true_foundry_apply_request_manifest import TrueFoundryApplyRequestManifest
+from .types.true_foundry_apply_response import TrueFoundryApplyResponse
+from .types.true_foundry_delete_request_manifest import TrueFoundryDeleteRequestManifest
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
+
+class RawBaseTrueFoundry:
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ def apply(
+ self,
+ *,
+ manifest: TrueFoundryApplyRequestManifest,
+ dry_run: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[TrueFoundryApplyResponse]:
+ """
+ Applies a given manifest to create or update resources of specific types, such as provider-account, cluster, workspace, or ml-repo.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryApplyRequestManifest
+ manifest of the resource to be created or updated
+
+ dry_run : typing.Optional[bool]
+ Dry run the apply operation without actually applying
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[TrueFoundryApplyResponse]
+ The resource has been successfully created or updated.
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "api/svc/v1/apply",
+ method="PUT",
+ json={
+ "manifest": convert_and_respect_annotation_metadata(
+ object_=manifest, annotation=TrueFoundryApplyRequestManifest, direction="write"
+ ),
+ "dryRun": dry_run,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ TrueFoundryApplyResponse,
+ parse_obj_as(
+ type_=TrueFoundryApplyResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ def delete(
+ self, *, manifest: TrueFoundryDeleteRequestManifest, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[None]:
+ """
+ Deletes resources of specific types, such as provider-account, cluster, workspace, or application.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryDeleteRequestManifest
+ manifest of the resource to be deleted
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[None]
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "api/svc/v1/delete",
+ method="POST",
+ json={
+ "manifest": convert_and_respect_annotation_metadata(
+ object_=manifest, annotation=TrueFoundryDeleteRequestManifest, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return HttpResponse(response=_response, data=None)
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+
+class AsyncRawBaseTrueFoundry:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def apply(
+ self,
+ *,
+ manifest: TrueFoundryApplyRequestManifest,
+ dry_run: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[TrueFoundryApplyResponse]:
+ """
+ Applies a given manifest to create or update resources of specific types, such as provider-account, cluster, workspace, or ml-repo.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryApplyRequestManifest
+ manifest of the resource to be created or updated
+
+ dry_run : typing.Optional[bool]
+ Dry run the apply operation without actually applying
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[TrueFoundryApplyResponse]
+ The resource has been successfully created or updated.
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "api/svc/v1/apply",
+ method="PUT",
+ json={
+ "manifest": convert_and_respect_annotation_metadata(
+ object_=manifest, annotation=TrueFoundryApplyRequestManifest, direction="write"
+ ),
+ "dryRun": dry_run,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ TrueFoundryApplyResponse,
+ parse_obj_as(
+ type_=TrueFoundryApplyResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
+
+ async def delete(
+ self, *, manifest: TrueFoundryDeleteRequestManifest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[None]:
+ """
+ Deletes resources of specific types, such as provider-account, cluster, workspace, or application.
+
+ Parameters
+ ----------
+ manifest : TrueFoundryDeleteRequestManifest
+ manifest of the resource to be deleted
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[None]
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "api/svc/v1/delete",
+ method="POST",
+ json={
+ "manifest": convert_and_respect_annotation_metadata(
+ object_=manifest, annotation=TrueFoundryDeleteRequestManifest, direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ return AsyncHttpResponse(response=_response, data=None)
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
diff --git a/src/truefoundry_sdk/types/__init__.py b/src/truefoundry_sdk/types/__init__.py
index 0141feac..dc01a0b1 100644
--- a/src/truefoundry_sdk/types/__init__.py
+++ b/src/truefoundry_sdk/types/__init__.py
@@ -13,17 +13,27 @@
from .agent import Agent
from .agent_app import AgentApp
from .agent_manifest import AgentManifest
+from .agent_manifest_with_fqn import AgentManifestWithFqn
from .agent_open_api_tool_manifest import AgentOpenApiToolManifest
from .agent_open_api_tool_manifest_openapi_spec import AgentOpenApiToolManifestOpenapiSpec
-from .agent_open_api_tool_with_fqn import AgentOpenApiToolWithFqn
-from .agent_open_api_tool_with_fqn_openapi_spec import AgentOpenApiToolWithFqnOpenapiSpec
+from .agent_open_api_tool_manifest_with_fqn import AgentOpenApiToolManifestWithFqn
+from .agent_open_api_tool_manifest_with_fqn_openapi_spec import AgentOpenApiToolManifestWithFqnOpenapiSpec
from .agent_version import AgentVersion
-from .agent_with_fqn import AgentWithFqn
+from .ai21integrations import Ai21Integrations
+from .ai21key_auth import Ai21KeyAuth
+from .ai21model import Ai21Model
+from .ai21provider_account import Ai21ProviderAccount
from .alert import Alert
+from .alert_config import AlertConfig
+from .alert_severity import AlertSeverity
from .alert_status import AlertStatus
from .amqp_input_config import AmqpInputConfig
from .amqp_metric_config import AmqpMetricConfig
from .amqp_output_config import AmqpOutputConfig
+from .anthropic_integrations import AnthropicIntegrations
+from .anthropic_key_auth import AnthropicKeyAuth
+from .anthropic_model import AnthropicModel
+from .anthropic_provider_account import AnthropicProviderAccount
from .application import Application
from .application_debug_info import ApplicationDebugInfo
from .application_lifecycle_stage import ApplicationLifecycleStage
@@ -53,18 +63,69 @@
from .async_service_replicas import AsyncServiceReplicas
from .autoshutdown import Autoshutdown
from .aws_access_key_auth import AwsAccessKeyAuth
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+from .aws_bedrock_provider_account import AwsBedrockProviderAccount
+from .aws_bedrock_provider_account_auth_data import AwsBedrockProviderAccountAuthData
+from .aws_ecr import AwsEcr
+from .aws_ecr_auth_data import AwsEcrAuthData
+from .aws_eks_integration import AwsEksIntegration
+from .aws_eks_integration_auth_data import AwsEksIntegrationAuthData
from .aws_inferentia import AwsInferentia
+from .aws_integrations import AwsIntegrations
+from .aws_parameter_store import AwsParameterStore
+from .aws_parameter_store_auth_data import AwsParameterStoreAuthData
+from .aws_provider_account import AwsProviderAccount
+from .aws_provider_account_auth_data import AwsProviderAccountAuthData
+from .aws_region import AwsRegion
+from .aws_s3 import AwsS3
+from .aws_s3auth_data import AwsS3AuthData
+from .aws_secrets_manager import AwsSecretsManager
+from .aws_secrets_manager_auth_data import AwsSecretsManagerAuthData
+from .azure_ai_inference_model import AzureAiInferenceModel
+from .azure_ai_inference_model_deployment_details import AzureAiInferenceModelDeploymentDetails
+from .azure_ai_managed_deployment import AzureAiManagedDeployment
+from .azure_ai_serverless_deployment import AzureAiServerlessDeployment
+from .azure_aks_integration import AzureAksIntegration
+from .azure_basic_auth import AzureBasicAuth
+from .azure_blob_storage import AzureBlobStorage
+from .azure_connection_string_auth import AzureConnectionStringAuth
+from .azure_container_registry import AzureContainerRegistry
+from .azure_foundry_model import AzureFoundryModel
+from .azure_foundry_model_v2 import AzureFoundryModelV2
+from .azure_foundry_provider_account import AzureFoundryProviderAccount
+from .azure_integrations import AzureIntegrations
+from .azure_key_auth import AzureKeyAuth
+from .azure_o_auth import AzureOAuth
+from .azure_open_ai_model import AzureOpenAiModel
+from .azure_open_ai_model_v2 import AzureOpenAiModelV2
+from .azure_open_ai_provider_account import AzureOpenAiProviderAccount
+from .azure_provider_account import AzureProviderAccount
+from .azure_repos_integration import AzureReposIntegration
+from .azure_vault import AzureVault
from .base_artifact_version import BaseArtifactVersion
from .base_artifact_version_manifest import BaseArtifactVersionManifest
from .base_autoscaling import BaseAutoscaling
+from .base_o_auth2login import BaseOAuth2Login
+from .base_o_auth2login_jwt_source import BaseOAuth2LoginJwtSource
from .base_service import BaseService
from .base_service_image import BaseServiceImage
from .base_service_mounts_item import BaseServiceMountsItem
from .base_workbench_input import BaseWorkbenchInput
from .base_workbench_input_mounts_item import BaseWorkbenchInputMountsItem
from .basic_auth_creds import BasicAuthCreds
+from .bedrock_key_auth import BedrockKeyAuth
+from .bedrock_model import BedrockModel
+from .bedrock_model_auth_data import BedrockModelAuthData
+from .bedrock_model_v2 import BedrockModelV2
+from .bitbucket_integration import BitbucketIntegration
+from .bitbucket_provider_account import BitbucketProviderAccount
from .blob_storage_reference import BlobStorageReference
from .blue_green import BlueGreen
+from .budget_config import BudgetConfig
+from .budget_limit_unit import BudgetLimitUnit
+from .budget_rule import BudgetRule
+from .budget_when import BudgetWhen
from .build import Build
from .build_build_source import BuildBuildSource
from .build_build_spec import BuildBuildSpec
@@ -84,6 +145,10 @@
from .cluster_manifest_workbench_config import ClusterManifestWorkbenchConfig
from .cluster_type import ClusterType
from .codeserver import Codeserver
+from .cohere_integrations import CohereIntegrations
+from .cohere_key_auth import CohereKeyAuth
+from .cohere_model import CohereModel
+from .cohere_provider_account import CohereProviderAccount
from .collaborator import Collaborator
from .container_task_config import ContainerTaskConfig
from .container_task_config_image import ContainerTaskConfigImage
@@ -93,10 +158,32 @@
from .create_multi_part_upload_request import CreateMultiPartUploadRequest
from .create_personal_access_token_response import CreatePersonalAccessTokenResponse
from .cron_metric import CronMetric
+from .custom_basic_auth import CustomBasicAuth
+from .custom_bearer_auth import CustomBearerAuth
+from .custom_blob_storage import CustomBlobStorage
+from .custom_helm_repo import CustomHelmRepo
+from .custom_integrations import CustomIntegrations
+from .custom_jwt_auth_integration import CustomJwtAuthIntegration
+from .custom_mcp_server_integration import CustomMcpServerIntegration
+from .custom_model import CustomModel
+from .custom_model_auth_data import CustomModelAuthData
+from .custom_model_model_server import CustomModelModelServer
+from .custom_provider_account import CustomProviderAccount
+from .custom_username_password_artifacts_registry import CustomUsernamePasswordArtifactsRegistry
from .data_directory import DataDirectory
from .data_directory_manifest import DataDirectoryManifest
from .data_directory_manifest_source import DataDirectoryManifestSource
+from .databricks_api_key_auth import DatabricksApiKeyAuth
+from .databricks_integrations import DatabricksIntegrations
+from .databricks_model import DatabricksModel
+from .databricks_provider_account import DatabricksProviderAccount
+from .databricks_provider_account_auth_data import DatabricksProviderAccountAuthData
+from .databricks_service_principal_auth import DatabricksServicePrincipalAuth
from .deactivate_user_response import DeactivateUserResponse
+from .deepinfra_integrations import DeepinfraIntegrations
+from .deepinfra_key_auth import DeepinfraKeyAuth
+from .deepinfra_model import DeepinfraModel
+from .deepinfra_provider_account import DeepinfraProviderAccount
from .delete_application_response import DeleteApplicationResponse
from .delete_job_run_response import DeleteJobRunResponse
from .delete_personal_access_token_response import DeletePersonalAccessTokenResponse
@@ -113,8 +200,13 @@
from .developer_message_content import DeveloperMessageContent
from .docker_file_build import DockerFileBuild
from .docker_file_build_command import DockerFileBuildCommand
+from .dockerhub_basic_auth import DockerhubBasicAuth
+from .dockerhub_integrations import DockerhubIntegrations
+from .dockerhub_provider_account import DockerhubProviderAccount
+from .dockerhub_registry import DockerhubRegistry
from .dynamic_volume_config import DynamicVolumeConfig
from .email import Email
+from .email_notification_channel import EmailNotificationChannel
from .empty_response import EmptyResponse
from .endpoint import Endpoint
from .environment import Environment
@@ -126,6 +218,11 @@
from .event_chart_category import EventChartCategory
from .event_involved_object import EventInvolvedObject
from .external_blob_storage_source import ExternalBlobStorageSource
+from .failure_tolerance_config import FailureToleranceConfig
+from .fallback_config import FallbackConfig
+from .fallback_model import FallbackModel
+from .fallback_rule import FallbackRule
+from .fallback_when import FallbackWhen
from .fast_ai_framework import FastAiFramework
from .file_info import FileInfo
from .flyte_launch_plan import FlyteLaunchPlan
@@ -142,7 +239,19 @@
from .forward_action import ForwardAction
from .function import Function
from .function_schema import FunctionSchema
+from .gateway_config import GatewayConfig
+from .gcp_api_key_auth import GcpApiKeyAuth
+from .gcp_gcr import GcpGcr
+from .gcp_gcs import GcpGcs
+from .gcp_gke_integration import GcpGkeIntegration
+from .gcp_gsm import GcpGsm
+from .gcp_integrations import GcpIntegrations
+from .gcp_key_file_auth import GcpKeyFileAuth
+from .gcp_provider_account import GcpProviderAccount
+from .gcp_provider_account_auth_data import GcpProviderAccountAuthData
+from .gcp_region import GcpRegion
from .gcp_tpu import GcpTpu
+from .gemini_model_v2 import GeminiModelV2
from .get_agent_response import GetAgentResponse
from .get_agent_version_response import GetAgentVersionResponse
from .get_alerts_response import GetAlertsResponse
@@ -179,9 +288,26 @@
from .git_helm_repo import GitHelmRepo
from .git_repository_exists_response import GitRepositoryExistsResponse
from .git_source import GitSource
+from .github_integration import GithubIntegration
+from .github_provider_account import GithubProviderAccount
+from .gitlab_integration import GitlabIntegration
+from .gitlab_provider_account import GitlabProviderAccount
from .gluon_framework import GluonFramework
+from .google_gemini_provider_account import GoogleGeminiProviderAccount
+from .google_model import GoogleModel
+from .google_vertex_provider_account import GoogleVertexProviderAccount
from .graph import Graph
from .graph_chart_type import GraphChartType
+from .groq_integrations import GroqIntegrations
+from .groq_key_auth import GroqKeyAuth
+from .groq_model import GroqModel
+from .groq_provider_account import GroqProviderAccount
+from .guardrail_config import GuardrailConfig
+from .guardrail_config_action import GuardrailConfigAction
+from .guardrails_config import GuardrailsConfig
+from .guardrails_options import GuardrailsOptions
+from .guardrails_rule import GuardrailsRule
+from .guardrails_when import GuardrailsWhen
from .h2o_framework import H2OFramework
from .header_match import HeaderMatch
from .health_probe import HealthProbe
@@ -201,6 +327,8 @@
from .image_url import ImageUrl
from .image_url_url import ImageUrlUrl
from .infer_method_name import InferMethodName
+from .infra_provider_account import InfraProviderAccount
+from .input_output_based_cost_metric_value import InputOutputBasedCostMetricValue
from .intercept import Intercept
from .intercept_rules_item import InterceptRulesItem
from .intercept_rules_item_action import InterceptRulesItemAction
@@ -210,6 +338,10 @@
from .internal_model_version import InternalModelVersion
from .invite_user_response import InviteUserResponse
from .is_cluster_connected_response import IsClusterConnectedResponse
+from .j_frog_integrations import JFrogIntegrations
+from .jfrog_artifacts_registry import JfrogArtifactsRegistry
+from .jfrog_basic_auth import JfrogBasicAuth
+from .jfrog_provider_account import JfrogProviderAccount
from .job import Job
from .job_alert import JobAlert
from .job_image import JobImage
@@ -229,6 +361,8 @@
from .kafka_sasl_auth import KafkaSaslAuth
from .keras_framework import KerasFramework
from .kustomize import Kustomize
+from .latency_based_load_balance_target import LatencyBasedLoadBalanceTarget
+from .latency_based_load_balancing_rule import LatencyBasedLoadBalancingRule
from .library_name import LibraryName
from .light_gbm_framework import LightGbmFramework
from .list_agent_versions_response import ListAgentVersionsResponse
@@ -260,6 +394,10 @@
from .list_virtual_account_response import ListVirtualAccountResponse
from .list_workspaces_response import ListWorkspacesResponse
from .literal_map import LiteralMap
+from .load_balance_target import LoadBalanceTarget
+from .load_balancing_config import LoadBalancingConfig
+from .load_balancing_rule import LoadBalancingRule
+from .load_balancing_when import LoadBalancingWhen
from .local_artifact_source import LocalArtifactSource
from .local_model_source import LocalModelSource
from .local_source import LocalSource
@@ -268,17 +406,31 @@
from .logs_search_operator_type import LogsSearchOperatorType
from .logs_sorting_direction import LogsSortingDirection
from .manual import Manual
+from .mcp_server_auth import McpServerAuth
+from .mcp_server_header_auth import McpServerHeaderAuth
+from .mcp_server_integration import McpServerIntegration
+from .mcp_server_integrations import McpServerIntegrations
+from .mcp_server_o_auth2 import McpServerOAuth2
+from .mcp_server_provider_account import McpServerProviderAccount
from .method import Method
from .metric import Metric
from .mime_type import MimeType
from .mirror_action import MirrorAction
+from .mistral_ai_integrations import MistralAiIntegrations
+from .mistral_ai_key_auth import MistralAiKeyAuth
+from .mistral_ai_model import MistralAiModel
+from .mistral_ai_provider_account import MistralAiProviderAccount
from .ml_repo import MlRepo
from .ml_repo_manifest import MlRepoManifest
from .model import Model
+from .model_config import ModelConfig
from .model_configuration import ModelConfiguration
+from .model_cost_metric import ModelCostMetric
from .model_manifest import ModelManifest
from .model_manifest_framework import ModelManifestFramework
from .model_manifest_source import ModelManifestSource
+from .model_provider_account import ModelProviderAccount
+from .model_type import ModelType
from .model_version import ModelVersion
from .model_version_environment import ModelVersionEnvironment
from .multi_part_upload import MultiPartUpload
@@ -292,38 +444,86 @@
from .node_selector_capacity_type import NodeSelectorCapacityType
from .nodepool import Nodepool
from .nodepool_selector import NodepoolSelector
+from .nomic_integrations import NomicIntegrations
+from .nomic_key_auth import NomicKeyAuth
+from .nomic_model import NomicModel
+from .nomic_provider_account import NomicProviderAccount
from .notebook import Notebook
from .notebook_config import NotebookConfig
from .notification_target import NotificationTarget
+from .notification_target_for_alert_rule import NotificationTargetForAlertRule
from .nvidia_gpu import NvidiaGpu
from .nvidia_miggpu import NvidiaMiggpu
from .nvidia_miggpu_profile import NvidiaMiggpuProfile
from .nvidia_timeslicing_gpu import NvidiaTimeslicingGpu
+from .o_auth2login_provider import OAuth2LoginProvider
from .oci_repo import OciRepo
+from .ollama_integrations import OllamaIntegrations
+from .ollama_key_auth import OllamaKeyAuth
+from .ollama_model import OllamaModel
+from .ollama_provider_account import OllamaProviderAccount
from .onnx_framework import OnnxFramework
+from .open_ai_integrations import OpenAiIntegrations
+from .open_ai_model import OpenAiModel
+from .openai_api_key_auth import OpenaiApiKeyAuth
+from .openai_provider_account import OpenaiProviderAccount
from .operation import Operation
from .paddle_framework import PaddleFramework
+from .pager_duty import PagerDuty
+from .pager_duty_integration import PagerDutyIntegration
+from .pager_duty_integration_key_auth import PagerDutyIntegrationKeyAuth
+from .pager_duty_integrations import PagerDutyIntegrations
+from .pager_duty_provider_account import PagerDutyProviderAccount
from .pagination import Pagination
+from .palm_integrations import PalmIntegrations
+from .palm_key_auth import PalmKeyAuth
+from .palm_model import PalmModel
+from .palm_provider_account import PalmProviderAccount
from .param import Param
from .param_param_type import ParamParamType
from .parameters import Parameters
from .parameters_stop import ParametersStop
+from .per_thousand_embedding_tokens_cost_metric import PerThousandEmbeddingTokensCostMetric
+from .per_thousand_tokens_cost_metric import PerThousandTokensCostMetric
from .permissions import Permissions
+from .perplexity_ai_key_auth import PerplexityAiKeyAuth
+from .perplexity_ai_model import PerplexityAiModel
+from .perplexity_ai_provider_account import PerplexityAiProviderAccount
+from .perplexity_integrations import PerplexityIntegrations
+from .policy_actions import PolicyActions
+from .policy_entity_types import PolicyEntityTypes
+from .policy_filters import PolicyFilters
+from .policy_manifest import PolicyManifest
+from .policy_manifest_mode import PolicyManifestMode
+from .policy_manifest_operation import PolicyManifestOperation
+from .policy_mutation_operation import PolicyMutationOperation
+from .policy_validation_operation import PolicyValidationOperation
from .port import Port
from .port_app_protocol import PortAppProtocol
from .port_auth import PortAuth
from .port_protocol import PortProtocol
from .pre_register_users_response import PreRegisterUsersResponse
from .presigned_url_object import PresignedUrlObject
+from .prometheus_alert_rule import PrometheusAlertRule
from .prompt import Prompt
from .prompt_version import PromptVersion
+from .provider_accounts import ProviderAccounts
+from .public_cost_metric import PublicCostMetric
from .py_torch_framework import PyTorchFramework
from .python_build import PythonBuild
from .python_build_command import PythonBuildCommand
from .python_task_config import PythonTaskConfig
from .python_task_config_image import PythonTaskConfigImage
from .python_task_config_mounts_item import PythonTaskConfigMountsItem
+from .quay_artifacts_registry import QuayArtifactsRegistry
+from .quay_basic_auth import QuayBasicAuth
+from .quay_integrations import QuayIntegrations
+from .quay_provider_account import QuayProviderAccount
from .r_studio import RStudio
+from .rate_limit_config import RateLimitConfig
+from .rate_limit_rule import RateLimitRule
+from .rate_limit_unit import RateLimitUnit
+from .rate_limit_when import RateLimitWhen
from .recommendation import Recommendation
from .refusal_content_part import RefusalContentPart
from .remote_source import RemoteSource
@@ -337,6 +537,11 @@
from .secret_input import SecretInput
from .secret_mount import SecretMount
from .secret_version import SecretVersion
+from .self_hosted_model import SelfHostedModel
+from .self_hosted_model_auth_data import SelfHostedModelAuthData
+from .self_hosted_model_integrations import SelfHostedModelIntegrations
+from .self_hosted_model_model_server import SelfHostedModelModelServer
+from .self_hosted_model_provider_account import SelfHostedModelProviderAccount
from .service import Service
from .service_autoscaling import ServiceAutoscaling
from .service_autoscaling_metrics import ServiceAutoscalingMetrics
@@ -348,7 +553,14 @@
from .sklearn_model_schema import SklearnModelSchema
from .sklearn_serialization_format import SklearnSerializationFormat
from .slack_bot import SlackBot
+from .slack_bot_auth import SlackBotAuth
+from .slack_bot_integration import SlackBotIntegration
+from .slack_integrations import SlackIntegrations
+from .slack_provider_account import SlackProviderAccount
from .slack_webhook import SlackWebhook
+from .slack_webhook_auth import SlackWebhookAuth
+from .slack_webhook_integration import SlackWebhookIntegration
+from .smtp_credentials import SmtpCredentials
from .spa_cy_framework import SpaCyFramework
from .spark_build import SparkBuild
from .spark_config import SparkConfig
@@ -389,6 +601,10 @@
from .terminate_job_response import TerminateJobResponse
from .text_content_part import TextContentPart
from .text_content_part_text import TextContentPartText
+from .together_ai_integrations import TogetherAiIntegrations
+from .together_ai_key_auth import TogetherAiKeyAuth
+from .together_ai_model import TogetherAiModel
+from .together_ai_provider_account import TogetherAiProviderAccount
from .token_pagination import TokenPagination
from .tool import Tool
from .tool_call import ToolCall
@@ -400,12 +616,24 @@
from .tracing_project_manifest import TracingProjectManifest
from .transformers_framework import TransformersFramework
from .trigger_job_run_response import TriggerJobRunResponse
+from .true_foundry_apply_request_manifest import TrueFoundryApplyRequestManifest
+from .true_foundry_apply_response import TrueFoundryApplyResponse
+from .true_foundry_apply_response_action import TrueFoundryApplyResponseAction
+from .true_foundry_apply_response_existing_manifest import TrueFoundryApplyResponseExistingManifest
from .true_foundry_artifact_source import TrueFoundryArtifactSource
+from .true_foundry_dbssm import TrueFoundryDbssm
+from .true_foundry_delete_request_manifest import TrueFoundryDeleteRequestManifest
+from .true_foundry_integrations import TrueFoundryIntegrations
from .true_foundry_interactive_login import TrueFoundryInteractiveLogin
from .true_foundry_managed_source import TrueFoundryManagedSource
+from .true_foundry_provider_account import TrueFoundryProviderAccount
+from .ttl_integrations import TtlIntegrations
+from .ttl_provider_account import TtlProviderAccount
+from .ttl_registry import TtlRegistry
from .update_secret_input import UpdateSecretInput
from .update_user_roles_response import UpdateUserRolesResponse
from .upgrade_data import UpgradeData
+from .usage_limits import UsageLimits
from .user import User
from .user_message import UserMessage
from .user_message_content import UserMessageContent
@@ -413,12 +641,21 @@
from .user_metadata import UserMetadata
from .validation_error import ValidationError
from .validation_error_loc_item import ValidationErrorLocItem
+from .vertex_model import VertexModel
+from .vertex_model_v2 import VertexModelV2
from .virtual_account import VirtualAccount
from .virtual_account_manifest import VirtualAccountManifest
from .volume import Volume
from .volume_browser import VolumeBrowser
from .volume_config import VolumeConfig
from .volume_mount import VolumeMount
+from .webhook_basic_auth import WebhookBasicAuth
+from .webhook_bearer_auth import WebhookBearerAuth
+from .webhook_integration import WebhookIntegration
+from .webhook_integration_auth_data import WebhookIntegrationAuthData
+from .webhook_integrations import WebhookIntegrations
+from .webhook_provider_account import WebhookProviderAccount
+from .weight_based_load_balancing_rule import WeightBasedLoadBalancingRule
from .workbench_image import WorkbenchImage
from .worker_config import WorkerConfig
from .worker_config_input_config import WorkerConfigInputConfig
@@ -442,17 +679,27 @@
"Agent",
"AgentApp",
"AgentManifest",
+ "AgentManifestWithFqn",
"AgentOpenApiToolManifest",
"AgentOpenApiToolManifestOpenapiSpec",
- "AgentOpenApiToolWithFqn",
- "AgentOpenApiToolWithFqnOpenapiSpec",
+ "AgentOpenApiToolManifestWithFqn",
+ "AgentOpenApiToolManifestWithFqnOpenapiSpec",
"AgentVersion",
- "AgentWithFqn",
+ "Ai21Integrations",
+ "Ai21KeyAuth",
+ "Ai21Model",
+ "Ai21ProviderAccount",
"Alert",
+ "AlertConfig",
+ "AlertSeverity",
"AlertStatus",
"AmqpInputConfig",
"AmqpMetricConfig",
"AmqpOutputConfig",
+ "AnthropicIntegrations",
+ "AnthropicKeyAuth",
+ "AnthropicModel",
+ "AnthropicProviderAccount",
"Application",
"ApplicationDebugInfo",
"ApplicationLifecycleStage",
@@ -482,18 +729,69 @@
"AsyncServiceReplicas",
"Autoshutdown",
"AwsAccessKeyAuth",
+ "AwsAccessKeyBasedAuth",
+ "AwsAssumedRoleBasedAuth",
+ "AwsBedrockProviderAccount",
+ "AwsBedrockProviderAccountAuthData",
+ "AwsEcr",
+ "AwsEcrAuthData",
+ "AwsEksIntegration",
+ "AwsEksIntegrationAuthData",
"AwsInferentia",
+ "AwsIntegrations",
+ "AwsParameterStore",
+ "AwsParameterStoreAuthData",
+ "AwsProviderAccount",
+ "AwsProviderAccountAuthData",
+ "AwsRegion",
+ "AwsS3",
+ "AwsS3AuthData",
+ "AwsSecretsManager",
+ "AwsSecretsManagerAuthData",
+ "AzureAiInferenceModel",
+ "AzureAiInferenceModelDeploymentDetails",
+ "AzureAiManagedDeployment",
+ "AzureAiServerlessDeployment",
+ "AzureAksIntegration",
+ "AzureBasicAuth",
+ "AzureBlobStorage",
+ "AzureConnectionStringAuth",
+ "AzureContainerRegistry",
+ "AzureFoundryModel",
+ "AzureFoundryModelV2",
+ "AzureFoundryProviderAccount",
+ "AzureIntegrations",
+ "AzureKeyAuth",
+ "AzureOAuth",
+ "AzureOpenAiModel",
+ "AzureOpenAiModelV2",
+ "AzureOpenAiProviderAccount",
+ "AzureProviderAccount",
+ "AzureReposIntegration",
+ "AzureVault",
"BaseArtifactVersion",
"BaseArtifactVersionManifest",
"BaseAutoscaling",
+ "BaseOAuth2Login",
+ "BaseOAuth2LoginJwtSource",
"BaseService",
"BaseServiceImage",
"BaseServiceMountsItem",
"BaseWorkbenchInput",
"BaseWorkbenchInputMountsItem",
"BasicAuthCreds",
+ "BedrockKeyAuth",
+ "BedrockModel",
+ "BedrockModelAuthData",
+ "BedrockModelV2",
+ "BitbucketIntegration",
+ "BitbucketProviderAccount",
"BlobStorageReference",
"BlueGreen",
+ "BudgetConfig",
+ "BudgetLimitUnit",
+ "BudgetRule",
+ "BudgetWhen",
"Build",
"BuildBuildSource",
"BuildBuildSpec",
@@ -513,6 +811,10 @@
"ClusterManifestWorkbenchConfig",
"ClusterType",
"Codeserver",
+ "CohereIntegrations",
+ "CohereKeyAuth",
+ "CohereModel",
+ "CohereProviderAccount",
"Collaborator",
"ContainerTaskConfig",
"ContainerTaskConfigImage",
@@ -522,10 +824,32 @@
"CreateMultiPartUploadRequest",
"CreatePersonalAccessTokenResponse",
"CronMetric",
+ "CustomBasicAuth",
+ "CustomBearerAuth",
+ "CustomBlobStorage",
+ "CustomHelmRepo",
+ "CustomIntegrations",
+ "CustomJwtAuthIntegration",
+ "CustomMcpServerIntegration",
+ "CustomModel",
+ "CustomModelAuthData",
+ "CustomModelModelServer",
+ "CustomProviderAccount",
+ "CustomUsernamePasswordArtifactsRegistry",
"DataDirectory",
"DataDirectoryManifest",
"DataDirectoryManifestSource",
+ "DatabricksApiKeyAuth",
+ "DatabricksIntegrations",
+ "DatabricksModel",
+ "DatabricksProviderAccount",
+ "DatabricksProviderAccountAuthData",
+ "DatabricksServicePrincipalAuth",
"DeactivateUserResponse",
+ "DeepinfraIntegrations",
+ "DeepinfraKeyAuth",
+ "DeepinfraModel",
+ "DeepinfraProviderAccount",
"DeleteApplicationResponse",
"DeleteJobRunResponse",
"DeletePersonalAccessTokenResponse",
@@ -542,8 +866,13 @@
"DeveloperMessageContent",
"DockerFileBuild",
"DockerFileBuildCommand",
+ "DockerhubBasicAuth",
+ "DockerhubIntegrations",
+ "DockerhubProviderAccount",
+ "DockerhubRegistry",
"DynamicVolumeConfig",
"Email",
+ "EmailNotificationChannel",
"EmptyResponse",
"Endpoint",
"Environment",
@@ -555,6 +884,11 @@
"EventChartCategory",
"EventInvolvedObject",
"ExternalBlobStorageSource",
+ "FailureToleranceConfig",
+ "FallbackConfig",
+ "FallbackModel",
+ "FallbackRule",
+ "FallbackWhen",
"FastAiFramework",
"FileInfo",
"FlyteLaunchPlan",
@@ -571,7 +905,19 @@
"ForwardAction",
"Function",
"FunctionSchema",
+ "GatewayConfig",
+ "GcpApiKeyAuth",
+ "GcpGcr",
+ "GcpGcs",
+ "GcpGkeIntegration",
+ "GcpGsm",
+ "GcpIntegrations",
+ "GcpKeyFileAuth",
+ "GcpProviderAccount",
+ "GcpProviderAccountAuthData",
+ "GcpRegion",
"GcpTpu",
+ "GeminiModelV2",
"GetAgentResponse",
"GetAgentVersionResponse",
"GetAlertsResponse",
@@ -608,9 +954,26 @@
"GitHelmRepo",
"GitRepositoryExistsResponse",
"GitSource",
+ "GithubIntegration",
+ "GithubProviderAccount",
+ "GitlabIntegration",
+ "GitlabProviderAccount",
"GluonFramework",
+ "GoogleGeminiProviderAccount",
+ "GoogleModel",
+ "GoogleVertexProviderAccount",
"Graph",
"GraphChartType",
+ "GroqIntegrations",
+ "GroqKeyAuth",
+ "GroqModel",
+ "GroqProviderAccount",
+ "GuardrailConfig",
+ "GuardrailConfigAction",
+ "GuardrailsConfig",
+ "GuardrailsOptions",
+ "GuardrailsRule",
+ "GuardrailsWhen",
"H2OFramework",
"HeaderMatch",
"HealthProbe",
@@ -630,6 +993,8 @@
"ImageUrl",
"ImageUrlUrl",
"InferMethodName",
+ "InfraProviderAccount",
+ "InputOutputBasedCostMetricValue",
"Intercept",
"InterceptRulesItem",
"InterceptRulesItemAction",
@@ -639,6 +1004,10 @@
"InternalModelVersion",
"InviteUserResponse",
"IsClusterConnectedResponse",
+ "JFrogIntegrations",
+ "JfrogArtifactsRegistry",
+ "JfrogBasicAuth",
+ "JfrogProviderAccount",
"Job",
"JobAlert",
"JobImage",
@@ -658,6 +1027,8 @@
"KafkaSaslAuth",
"KerasFramework",
"Kustomize",
+ "LatencyBasedLoadBalanceTarget",
+ "LatencyBasedLoadBalancingRule",
"LibraryName",
"LightGbmFramework",
"ListAgentVersionsResponse",
@@ -689,6 +1060,10 @@
"ListVirtualAccountResponse",
"ListWorkspacesResponse",
"LiteralMap",
+ "LoadBalanceTarget",
+ "LoadBalancingConfig",
+ "LoadBalancingRule",
+ "LoadBalancingWhen",
"LocalArtifactSource",
"LocalModelSource",
"LocalSource",
@@ -697,17 +1072,31 @@
"LogsSearchOperatorType",
"LogsSortingDirection",
"Manual",
+ "McpServerAuth",
+ "McpServerHeaderAuth",
+ "McpServerIntegration",
+ "McpServerIntegrations",
+ "McpServerOAuth2",
+ "McpServerProviderAccount",
"Method",
"Metric",
"MimeType",
"MirrorAction",
+ "MistralAiIntegrations",
+ "MistralAiKeyAuth",
+ "MistralAiModel",
+ "MistralAiProviderAccount",
"MlRepo",
"MlRepoManifest",
"Model",
+ "ModelConfig",
"ModelConfiguration",
+ "ModelCostMetric",
"ModelManifest",
"ModelManifestFramework",
"ModelManifestSource",
+ "ModelProviderAccount",
+ "ModelType",
"ModelVersion",
"ModelVersionEnvironment",
"MultiPartUpload",
@@ -721,38 +1110,86 @@
"NodeSelectorCapacityType",
"Nodepool",
"NodepoolSelector",
+ "NomicIntegrations",
+ "NomicKeyAuth",
+ "NomicModel",
+ "NomicProviderAccount",
"Notebook",
"NotebookConfig",
"NotificationTarget",
+ "NotificationTargetForAlertRule",
"NvidiaGpu",
"NvidiaMiggpu",
"NvidiaMiggpuProfile",
"NvidiaTimeslicingGpu",
+ "OAuth2LoginProvider",
"OciRepo",
+ "OllamaIntegrations",
+ "OllamaKeyAuth",
+ "OllamaModel",
+ "OllamaProviderAccount",
"OnnxFramework",
+ "OpenAiIntegrations",
+ "OpenAiModel",
+ "OpenaiApiKeyAuth",
+ "OpenaiProviderAccount",
"Operation",
"PaddleFramework",
+ "PagerDuty",
+ "PagerDutyIntegration",
+ "PagerDutyIntegrationKeyAuth",
+ "PagerDutyIntegrations",
+ "PagerDutyProviderAccount",
"Pagination",
+ "PalmIntegrations",
+ "PalmKeyAuth",
+ "PalmModel",
+ "PalmProviderAccount",
"Param",
"ParamParamType",
"Parameters",
"ParametersStop",
+ "PerThousandEmbeddingTokensCostMetric",
+ "PerThousandTokensCostMetric",
"Permissions",
+ "PerplexityAiKeyAuth",
+ "PerplexityAiModel",
+ "PerplexityAiProviderAccount",
+ "PerplexityIntegrations",
+ "PolicyActions",
+ "PolicyEntityTypes",
+ "PolicyFilters",
+ "PolicyManifest",
+ "PolicyManifestMode",
+ "PolicyManifestOperation",
+ "PolicyMutationOperation",
+ "PolicyValidationOperation",
"Port",
"PortAppProtocol",
"PortAuth",
"PortProtocol",
"PreRegisterUsersResponse",
"PresignedUrlObject",
+ "PrometheusAlertRule",
"Prompt",
"PromptVersion",
+ "ProviderAccounts",
+ "PublicCostMetric",
"PyTorchFramework",
"PythonBuild",
"PythonBuildCommand",
"PythonTaskConfig",
"PythonTaskConfigImage",
"PythonTaskConfigMountsItem",
+ "QuayArtifactsRegistry",
+ "QuayBasicAuth",
+ "QuayIntegrations",
+ "QuayProviderAccount",
"RStudio",
+ "RateLimitConfig",
+ "RateLimitRule",
+ "RateLimitUnit",
+ "RateLimitWhen",
"Recommendation",
"RefusalContentPart",
"RemoteSource",
@@ -769,6 +1206,11 @@
"SecretInput",
"SecretMount",
"SecretVersion",
+ "SelfHostedModel",
+ "SelfHostedModelAuthData",
+ "SelfHostedModelIntegrations",
+ "SelfHostedModelModelServer",
+ "SelfHostedModelProviderAccount",
"Service",
"ServiceAutoscaling",
"ServiceAutoscalingMetrics",
@@ -780,7 +1222,14 @@
"SklearnModelSchema",
"SklearnSerializationFormat",
"SlackBot",
+ "SlackBotAuth",
+ "SlackBotIntegration",
+ "SlackIntegrations",
+ "SlackProviderAccount",
"SlackWebhook",
+ "SlackWebhookAuth",
+ "SlackWebhookIntegration",
+ "SmtpCredentials",
"SpaCyFramework",
"SparkBuild",
"SparkConfig",
@@ -821,6 +1270,10 @@
"TerminateJobResponse",
"TextContentPart",
"TextContentPartText",
+ "TogetherAiIntegrations",
+ "TogetherAiKeyAuth",
+ "TogetherAiModel",
+ "TogetherAiProviderAccount",
"TokenPagination",
"Tool",
"ToolCall",
@@ -832,12 +1285,24 @@
"TracingProjectManifest",
"TransformersFramework",
"TriggerJobRunResponse",
+ "TrueFoundryApplyRequestManifest",
+ "TrueFoundryApplyResponse",
+ "TrueFoundryApplyResponseAction",
+ "TrueFoundryApplyResponseExistingManifest",
"TrueFoundryArtifactSource",
+ "TrueFoundryDbssm",
+ "TrueFoundryDeleteRequestManifest",
+ "TrueFoundryIntegrations",
"TrueFoundryInteractiveLogin",
"TrueFoundryManagedSource",
+ "TrueFoundryProviderAccount",
+ "TtlIntegrations",
+ "TtlProviderAccount",
+ "TtlRegistry",
"UpdateSecretInput",
"UpdateUserRolesResponse",
"UpgradeData",
+ "UsageLimits",
"User",
"UserMessage",
"UserMessageContent",
@@ -845,12 +1310,21 @@
"UserMetadata",
"ValidationError",
"ValidationErrorLocItem",
+ "VertexModel",
+ "VertexModelV2",
"VirtualAccount",
"VirtualAccountManifest",
"Volume",
"VolumeBrowser",
"VolumeConfig",
"VolumeMount",
+ "WebhookBasicAuth",
+ "WebhookBearerAuth",
+ "WebhookIntegration",
+ "WebhookIntegrationAuthData",
+ "WebhookIntegrations",
+ "WebhookProviderAccount",
+ "WeightBasedLoadBalancingRule",
"WorkbenchImage",
"WorkerConfig",
"WorkerConfigInputConfig",
diff --git a/src/truefoundry_sdk/types/addon_component_name.py b/src/truefoundry_sdk/types/addon_component_name.py
index 6af6eaa0..27183a01 100644
--- a/src/truefoundry_sdk/types/addon_component_name.py
+++ b/src/truefoundry_sdk/types/addon_component_name.py
@@ -33,6 +33,7 @@ class AddonComponentName(str, enum.Enum):
TRUEFOUNDRY = "TRUEFOUNDRY"
TFY_PROMETHEUS_CONFIG = "TFY_PROMETHEUS_CONFIG"
SPARK_OPERATOR = "SPARK_OPERATOR"
+ TFY_LOGS = "TFY_LOGS"
def visit(
self,
@@ -62,6 +63,7 @@ def visit(
truefoundry: typing.Callable[[], T_Result],
tfy_prometheus_config: typing.Callable[[], T_Result],
spark_operator: typing.Callable[[], T_Result],
+ tfy_logs: typing.Callable[[], T_Result],
) -> T_Result:
if self is AddonComponentName.ARGOCD:
return argocd()
@@ -115,3 +117,5 @@ def visit(
return tfy_prometheus_config()
if self is AddonComponentName.SPARK_OPERATOR:
return spark_operator()
+ if self is AddonComponentName.TFY_LOGS:
+ return tfy_logs()
diff --git a/src/truefoundry_sdk/types/agent_app.py b/src/truefoundry_sdk/types/agent_app.py
index caaae32f..8412be60 100644
--- a/src/truefoundry_sdk/types/agent_app.py
+++ b/src/truefoundry_sdk/types/agent_app.py
@@ -4,18 +4,18 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
-from .agent_open_api_tool_with_fqn import AgentOpenApiToolWithFqn
-from .agent_with_fqn import AgentWithFqn
+from .agent_manifest_with_fqn import AgentManifestWithFqn
+from .agent_open_api_tool_manifest_with_fqn import AgentOpenApiToolManifestWithFqn
class AgentApp(UniversalBaseModel):
type: typing.Optional[typing.Literal["agent-app"]] = None
- tools: typing.List[AgentOpenApiToolWithFqn] = pydantic.Field()
+ tools: typing.List[AgentOpenApiToolManifestWithFqn] = pydantic.Field()
"""
Tools available to the Agent app
"""
- agents: typing.List[AgentWithFqn] = pydantic.Field()
+ agents: typing.List[AgentManifestWithFqn] = pydantic.Field()
"""
Agents available to the Agent app
"""
diff --git a/src/truefoundry_sdk/types/agent_with_fqn.py b/src/truefoundry_sdk/types/agent_manifest_with_fqn.py
similarity index 97%
rename from src/truefoundry_sdk/types/agent_with_fqn.py
rename to src/truefoundry_sdk/types/agent_manifest_with_fqn.py
index e4d14b66..df57b2a1 100644
--- a/src/truefoundry_sdk/types/agent_with_fqn.py
+++ b/src/truefoundry_sdk/types/agent_manifest_with_fqn.py
@@ -6,7 +6,7 @@
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
-class AgentWithFqn(UniversalBaseModel):
+class AgentManifestWithFqn(UniversalBaseModel):
name: typing.Optional[str] = pydantic.Field(default=None)
"""
Name of the entity
diff --git a/src/truefoundry_sdk/types/agent_open_api_tool_with_fqn.py b/src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn.py
similarity index 90%
rename from src/truefoundry_sdk/types/agent_open_api_tool_with_fqn.py
rename to src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn.py
index f0a1aab1..11429de6 100644
--- a/src/truefoundry_sdk/types/agent_open_api_tool_with_fqn.py
+++ b/src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn.py
@@ -4,11 +4,11 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
-from .agent_open_api_tool_with_fqn_openapi_spec import AgentOpenApiToolWithFqnOpenapiSpec
+from .agent_open_api_tool_manifest_with_fqn_openapi_spec import AgentOpenApiToolManifestWithFqnOpenapiSpec
from .method import Method
-class AgentOpenApiToolWithFqn(UniversalBaseModel):
+class AgentOpenApiToolManifestWithFqn(UniversalBaseModel):
name: typing.Optional[str] = pydantic.Field(default=None)
"""
Name of the entity
@@ -40,7 +40,7 @@ class AgentOpenApiToolWithFqn(UniversalBaseModel):
Type of the agent
"""
- openapi_spec: AgentOpenApiToolWithFqnOpenapiSpec = pydantic.Field()
+ openapi_spec: AgentOpenApiToolManifestWithFqnOpenapiSpec = pydantic.Field()
"""
OpenAPI Spec for the tool describing the API, endpoints and parameters. [Sample OpenAPI Spec Link](https://assets.production.truefoundry.com/sample-openapi.json)
"""
diff --git a/src/truefoundry_sdk/types/agent_open_api_tool_with_fqn_openapi_spec.py b/src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn_openapi_spec.py
similarity index 50%
rename from src/truefoundry_sdk/types/agent_open_api_tool_with_fqn_openapi_spec.py
rename to src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn_openapi_spec.py
index 09b58587..33942763 100644
--- a/src/truefoundry_sdk/types/agent_open_api_tool_with_fqn_openapi_spec.py
+++ b/src/truefoundry_sdk/types/agent_open_api_tool_manifest_with_fqn_openapi_spec.py
@@ -4,4 +4,6 @@
from .blob_storage_reference import BlobStorageReference
-AgentOpenApiToolWithFqnOpenapiSpec = typing.Union[BlobStorageReference, typing.Dict[str, typing.Optional[typing.Any]]]
+AgentOpenApiToolManifestWithFqnOpenapiSpec = typing.Union[
+ BlobStorageReference, typing.Dict[str, typing.Optional[typing.Any]]
+]
diff --git a/src/truefoundry_sdk/types/ai21integrations.py b/src/truefoundry_sdk/types/ai21integrations.py
new file mode 100644
index 00000000..e62bb89c
--- /dev/null
+++ b/src/truefoundry_sdk/types/ai21integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .ai21model import Ai21Model
+
+Ai21Integrations = Ai21Model
diff --git a/src/truefoundry_sdk/types/ai21key_auth.py b/src/truefoundry_sdk/types/ai21key_auth.py
new file mode 100644
index 00000000..0e40b7c7
--- /dev/null
+++ b/src/truefoundry_sdk/types/ai21key_auth.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class Ai21KeyAuth(UniversalBaseModel):
+ """
+ +label=AI21 API Key Auth
+ +usage=Authentication method using AI21 API key
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +sort=100
+ +uiType=Password
+ +usage=The API key for AI21 authentication
+ +message=API key must not be empty
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ai21model.py b/src/truefoundry_sdk/types/ai21model.py
new file mode 100644
index 00000000..26805085
--- /dev/null
+++ b/src/truefoundry_sdk/types/ai21model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class Ai21Model(UniversalBaseModel):
+ """
+ +label=AI21 Model
+ +icon=ai21
+ """
+
+ type: typing.Literal["integration/model/ai21"] = pydantic.Field(default="integration/model/ai21")
+ """
+ +value=integration/model/ai21
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this AI21 model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The unique identifier for the AI21 model
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the AI21 model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ai21provider_account.py b/src/truefoundry_sdk/types/ai21provider_account.py
new file mode 100644
index 00000000..f3afe935
--- /dev/null
+++ b/src/truefoundry_sdk/types/ai21provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .ai21integrations import Ai21Integrations
+from .ai21key_auth import Ai21KeyAuth
+from .collaborator import Collaborator
+
+
+class Ai21ProviderAccount(UniversalBaseModel):
+ """
+ +label=AI21
+ +icon=ai21
+ """
+
+ type: typing.Literal["provider-account/ai21"] = pydantic.Field(default="provider-account/ai21")
+ """
+ +value=provider-account/ai21
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the AI21 provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: Ai21KeyAuth
+ integrations: typing.Optional[typing.List[Ai21Integrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=400
+ +usage=List of integrations that are associated with the AI21 provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=200
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/alert_config.py b/src/truefoundry_sdk/types/alert_config.py
new file mode 100644
index 00000000..7bdc57ec
--- /dev/null
+++ b/src/truefoundry_sdk/types/alert_config.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .notification_target_for_alert_rule import NotificationTargetForAlertRule
+from .prometheus_alert_rule import PrometheusAlertRule
+
+
+class AlertConfig(UniversalBaseModel):
+ type: typing.Literal["alert-config"] = pydantic.Field(default="alert-config")
+ """
+ +label=Type
+ +value=alert-config
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +message=3 to 35 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"descriptionInline":true}
+ +uiType=Hidden
+ """
+
+ application_fqn: str = pydantic.Field()
+ """
+ +label=Application FQN
+ +uiType=Hidden
+ """
+
+ notification_targets: typing.List[NotificationTargetForAlertRule] = pydantic.Field()
+ """
+ +label=Notification Targets
+ +usage=Configure one or more notification targets where alerts will be sent. Each target specifies a notification channel (email or slack).
+ +uiProps={"descriptionInline":true}
+ +sort=1
+ """
+
+ rules: typing.List[PrometheusAlertRule] = pydantic.Field()
+ """
+ +label=Rules
+ +usage=Define one or more alert rules that specify the conditions to monitor, when to trigger alerts, and how they should be handled.
+ +uiProps={"descriptionInline":true}
+ +uiType=Structs
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/alert_severity.py b/src/truefoundry_sdk/types/alert_severity.py
new file mode 100644
index 00000000..f9c14d66
--- /dev/null
+++ b/src/truefoundry_sdk/types/alert_severity.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class AlertSeverity(str, enum.Enum):
+ WARNING = "warning"
+ CRITICAL = "critical"
+
+ def visit(self, warning: typing.Callable[[], T_Result], critical: typing.Callable[[], T_Result]) -> T_Result:
+ if self is AlertSeverity.WARNING:
+ return warning()
+ if self is AlertSeverity.CRITICAL:
+ return critical()
diff --git a/src/truefoundry_sdk/types/anthropic_integrations.py b/src/truefoundry_sdk/types/anthropic_integrations.py
new file mode 100644
index 00000000..49a62e1b
--- /dev/null
+++ b/src/truefoundry_sdk/types/anthropic_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .anthropic_model import AnthropicModel
+
+AnthropicIntegrations = AnthropicModel
diff --git a/src/truefoundry_sdk/types/anthropic_key_auth.py b/src/truefoundry_sdk/types/anthropic_key_auth.py
new file mode 100644
index 00000000..124a5e54
--- /dev/null
+++ b/src/truefoundry_sdk/types/anthropic_key_auth.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AnthropicKeyAuth(UniversalBaseModel):
+ """
+ +label=Anthropic API Key Auth
+ +usage=Authentication method using Anthropic API key
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +sort=100
+ +uiType=Password
+ +usage=The API key for Anthropic authentication
+ +message=API key must not be empty
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/anthropic_model.py b/src/truefoundry_sdk/types/anthropic_model.py
new file mode 100644
index 00000000..309649f8
--- /dev/null
+++ b/src/truefoundry_sdk/types/anthropic_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AnthropicModel(UniversalBaseModel):
+ """
+ +label=Anthropic Model
+ +icon=anthropic
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Anthropic model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The unique identifier for the Anthropic model
+ +message=Model ID must not be empty
+ """
+
+ type: typing.Literal["integration/model/anthropic"] = pydantic.Field(default="integration/model/anthropic")
+ """
+ +value=integration/model/anthropic
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Anthropic model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/anthropic_provider_account.py b/src/truefoundry_sdk/types/anthropic_provider_account.py
new file mode 100644
index 00000000..c133cc70
--- /dev/null
+++ b/src/truefoundry_sdk/types/anthropic_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .anthropic_integrations import AnthropicIntegrations
+from .anthropic_key_auth import AnthropicKeyAuth
+from .collaborator import Collaborator
+
+
+class AnthropicProviderAccount(UniversalBaseModel):
+ """
+ +label=Anthropic
+ +icon=anthropic
+ """
+
+ type: typing.Literal["provider-account/anthropic"] = pydantic.Field(default="provider-account/anthropic")
+ """
+ +value=provider-account/anthropic
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Anthropic provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: AnthropicKeyAuth
+ integrations: typing.Optional[typing.List[AnthropicIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Anthropic provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_access_key_based_auth.py b/src/truefoundry_sdk/types/aws_access_key_based_auth.py
new file mode 100644
index 00000000..63b5099c
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_access_key_based_auth.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AwsAccessKeyBasedAuth(UniversalBaseModel):
+ """
+ +label=AWS Access Key Based Auth
+ """
+
+ type: typing.Literal["access-key-based"] = pydantic.Field(default="access-key-based")
+ """
+ +value=access-key-based
+ """
+
+ access_key_id: str = pydantic.Field()
+ """
+ +label=AWS access key ID
+ +usage=AWS access key ID that you want to use for authentication.
+ +sort=100
+ +uiType=Password
+ """
+
+ secret_access_key: str = pydantic.Field()
+ """
+ +label=AWS access key secret
+ +usage=AWS access key secret that you want to use for authentication.
+ +sort=200
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_assumed_role_based_auth.py b/src/truefoundry_sdk/types/aws_assumed_role_based_auth.py
new file mode 100644
index 00000000..f6e247d5
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_assumed_role_based_auth.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AwsAssumedRoleBasedAuth(UniversalBaseModel):
+ """
+ +label=AWS Assumed Role Based Auth
+ """
+
+ type: typing.Literal["assumed-role-based"] = pydantic.Field(default="assumed-role-based")
+ """
+ +value=assumed-role-based
+ """
+
+ assumed_role_arn: str = pydantic.Field()
+ """
+ +label=AWS Assumed Role ARN
+ +usage=ARN of the role you want to assume.
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_bedrock_provider_account.py b/src/truefoundry_sdk/types/aws_bedrock_provider_account.py
new file mode 100644
index 00000000..b75b40df
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_bedrock_provider_account.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_bedrock_provider_account_auth_data import AwsBedrockProviderAccountAuthData
+from .aws_region import AwsRegion
+from .bedrock_model_v2 import BedrockModelV2
+from .collaborator import Collaborator
+
+
+class AwsBedrockProviderAccount(UniversalBaseModel):
+ """
+ +label=AWS Bedrock
+ +icon=aws
+ """
+
+ type: typing.Literal["provider-account/aws-bedrock"] = pydantic.Field(default="provider-account/aws-bedrock")
+ """
+ +value=provider-account/aws-bedrock
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the AWS Bedrock provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ region: AwsRegion
+ auth_data: typing.Optional[AwsBedrockProviderAccountAuthData] = pydantic.Field(default=None)
+ """
+ +label=AWS Account Auth Data
+ +sort=400
+ +usage=Authentication data for the AWS account
+ """
+
+ integrations: typing.List[BedrockModelV2] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the AWS Bedrock provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=600
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_bedrock_provider_account_auth_data.py b/src/truefoundry_sdk/types/aws_bedrock_provider_account_auth_data.py
new file mode 100644
index 00000000..47136830
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_bedrock_provider_account_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsBedrockProviderAccountAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_ecr.py b/src/truefoundry_sdk/types/aws_ecr.py
new file mode 100644
index 00000000..9f9d6cae
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_ecr.py
@@ -0,0 +1,59 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_ecr_auth_data import AwsEcrAuthData
+
+
+class AwsEcr(UniversalBaseModel):
+ """
+ +label=AWS ECR
+ +icon=aws-ecr
+ """
+
+ type: typing.Literal["integration/docker-registry/aws/ecr"] = pydantic.Field(
+ default="integration/docker-registry/aws/ecr"
+ )
+ """
+ +value=integration/docker-registry/aws/ecr
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[AwsEcrAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=300
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_ecr_auth_data.py b/src/truefoundry_sdk/types/aws_ecr_auth_data.py
new file mode 100644
index 00000000..b3f6cba7
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_ecr_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsEcrAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_eks_integration.py b/src/truefoundry_sdk/types/aws_eks_integration.py
new file mode 100644
index 00000000..43200152
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_eks_integration.py
@@ -0,0 +1,59 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_eks_integration_auth_data import AwsEksIntegrationAuthData
+from .aws_region import AwsRegion
+
+
+class AwsEksIntegration(UniversalBaseModel):
+ """
+ +label=AWS EKS
+ +icon=aws-eks
+ """
+
+ type: typing.Literal["integration/cluster/aws/eks"] = pydantic.Field(default="integration/cluster/aws/eks")
+ """
+ +value=integration/cluster/aws/eks
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ region: AwsRegion
+ cluster_name: str = pydantic.Field()
+ """
+ +label=Cluster Name
+ +usage=Name of the cluster given in the cloud account.
+ +sort=300
+ """
+
+ auth_data: typing.Optional[AwsEksIntegrationAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=400
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_eks_integration_auth_data.py b/src/truefoundry_sdk/types/aws_eks_integration_auth_data.py
new file mode 100644
index 00000000..77d55efc
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_eks_integration_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsEksIntegrationAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_integrations.py b/src/truefoundry_sdk/types/aws_integrations.py
new file mode 100644
index 00000000..a87ae83b
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_integrations.py
@@ -0,0 +1,12 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_ecr import AwsEcr
+from .aws_eks_integration import AwsEksIntegration
+from .aws_parameter_store import AwsParameterStore
+from .aws_s3 import AwsS3
+from .aws_secrets_manager import AwsSecretsManager
+from .bedrock_model import BedrockModel
+
+AwsIntegrations = typing.Union[AwsEcr, AwsS3, AwsParameterStore, AwsSecretsManager, AwsEksIntegration, BedrockModel]
diff --git a/src/truefoundry_sdk/types/aws_parameter_store.py b/src/truefoundry_sdk/types/aws_parameter_store.py
new file mode 100644
index 00000000..bc08dc68
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_parameter_store.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_parameter_store_auth_data import AwsParameterStoreAuthData
+from .aws_region import AwsRegion
+
+
+class AwsParameterStore(UniversalBaseModel):
+ """
+ +label=AWS Parameter Store
+ +icon=aws-ssm
+ """
+
+ type: typing.Literal["integration/secret-store/aws/parameter-store"] = pydantic.Field(
+ default="integration/secret-store/aws/parameter-store"
+ )
+ """
+ +value=integration/secret-store/aws/parameter-store
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=150
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ region: AwsRegion
+ auth_data: typing.Optional[AwsParameterStoreAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=300
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_parameter_store_auth_data.py b/src/truefoundry_sdk/types/aws_parameter_store_auth_data.py
new file mode 100644
index 00000000..cf3e84a9
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_parameter_store_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsParameterStoreAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_provider_account.py b/src/truefoundry_sdk/types/aws_provider_account.py
new file mode 100644
index 00000000..6d22a684
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_provider_account.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_integrations import AwsIntegrations
+from .aws_provider_account_auth_data import AwsProviderAccountAuthData
+
+
+class AwsProviderAccount(UniversalBaseModel):
+ """
+ +label=AWS
+ +icon=aws
+ +heroDataKey=aws_account_id
+ """
+
+ type: typing.Literal["provider-account/aws"] = pydantic.Field(default="provider-account/aws")
+ """
+ +value=provider-account/aws
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the AWS provider account.
+ +sort=200
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ aws_account_id: str = pydantic.Field()
+ """
+ +label=AWS Account ID
+ +usage=The AWS account ID.
+ +sort=300
+ """
+
+ auth_data: typing.Optional[AwsProviderAccountAuthData] = pydantic.Field(default=None)
+ """
+ +label=AWS Account Auth Data
+ +usage=Authentication data for the AWS account.
+ +sort=400
+ """
+
+ integrations: typing.List[AwsIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the AWS provider account.
+ +sort=500
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_provider_account_auth_data.py b/src/truefoundry_sdk/types/aws_provider_account_auth_data.py
new file mode 100644
index 00000000..50c40180
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_provider_account_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsProviderAccountAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_region.py b/src/truefoundry_sdk/types/aws_region.py
new file mode 100644
index 00000000..8074f036
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_region.py
@@ -0,0 +1,157 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class AwsRegion(str, enum.Enum):
+ AF_SOUTH1 = "af-south-1"
+ AP_EAST1 = "ap-east-1"
+ AP_NORTHEAST1 = "ap-northeast-1"
+ AP_NORTHEAST2 = "ap-northeast-2"
+ AP_NORTHEAST3 = "ap-northeast-3"
+ AP_SOUTH1 = "ap-south-1"
+ AP_SOUTH2 = "ap-south-2"
+ AP_SOUTHEAST1 = "ap-southeast-1"
+ AP_SOUTHEAST2 = "ap-southeast-2"
+ AP_SOUTHEAST3 = "ap-southeast-3"
+ AP_SOUTHEAST4 = "ap-southeast-4"
+ AP_SOUTHEAST5 = "ap-southeast-5"
+ AP_SOUTHEAST7 = "ap-southeast-7"
+ CA_CENTRAL1 = "ca-central-1"
+ CA_WEST1 = "ca-west-1"
+ CN_NORTH1 = "cn-north-1"
+ CN_NORTHWEST1 = "cn-northwest-1"
+ EU_CENTRAL1 = "eu-central-1"
+ EU_CENTRAL2 = "eu-central-2"
+ EU_NORTH1 = "eu-north-1"
+ EU_SOUTH1 = "eu-south-1"
+ EU_SOUTH2 = "eu-south-2"
+ EU_WEST1 = "eu-west-1"
+ EU_WEST2 = "eu-west-2"
+ EU_WEST3 = "eu-west-3"
+ IL_CENTRAL1 = "il-central-1"
+ ME_CENTRAL1 = "me-central-1"
+ ME_SOUTH1 = "me-south-1"
+ MX_CENTRAL1 = "mx-central-1"
+ SA_EAST1 = "sa-east-1"
+ US_EAST1 = "us-east-1"
+ US_EAST2 = "us-east-2"
+ US_GOV_EAST1 = "us-gov-east-1"
+ US_GOV_WEST1 = "us-gov-west-1"
+ US_WEST1 = "us-west-1"
+ US_WEST2 = "us-west-2"
+
+ def visit(
+ self,
+ af_south1: typing.Callable[[], T_Result],
+ ap_east1: typing.Callable[[], T_Result],
+ ap_northeast1: typing.Callable[[], T_Result],
+ ap_northeast2: typing.Callable[[], T_Result],
+ ap_northeast3: typing.Callable[[], T_Result],
+ ap_south1: typing.Callable[[], T_Result],
+ ap_south2: typing.Callable[[], T_Result],
+ ap_southeast1: typing.Callable[[], T_Result],
+ ap_southeast2: typing.Callable[[], T_Result],
+ ap_southeast3: typing.Callable[[], T_Result],
+ ap_southeast4: typing.Callable[[], T_Result],
+ ap_southeast5: typing.Callable[[], T_Result],
+ ap_southeast7: typing.Callable[[], T_Result],
+ ca_central1: typing.Callable[[], T_Result],
+ ca_west1: typing.Callable[[], T_Result],
+ cn_north1: typing.Callable[[], T_Result],
+ cn_northwest1: typing.Callable[[], T_Result],
+ eu_central1: typing.Callable[[], T_Result],
+ eu_central2: typing.Callable[[], T_Result],
+ eu_north1: typing.Callable[[], T_Result],
+ eu_south1: typing.Callable[[], T_Result],
+ eu_south2: typing.Callable[[], T_Result],
+ eu_west1: typing.Callable[[], T_Result],
+ eu_west2: typing.Callable[[], T_Result],
+ eu_west3: typing.Callable[[], T_Result],
+ il_central1: typing.Callable[[], T_Result],
+ me_central1: typing.Callable[[], T_Result],
+ me_south1: typing.Callable[[], T_Result],
+ mx_central1: typing.Callable[[], T_Result],
+ sa_east1: typing.Callable[[], T_Result],
+ us_east1: typing.Callable[[], T_Result],
+ us_east2: typing.Callable[[], T_Result],
+ us_gov_east1: typing.Callable[[], T_Result],
+ us_gov_west1: typing.Callable[[], T_Result],
+ us_west1: typing.Callable[[], T_Result],
+ us_west2: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is AwsRegion.AF_SOUTH1:
+ return af_south1()
+ if self is AwsRegion.AP_EAST1:
+ return ap_east1()
+ if self is AwsRegion.AP_NORTHEAST1:
+ return ap_northeast1()
+ if self is AwsRegion.AP_NORTHEAST2:
+ return ap_northeast2()
+ if self is AwsRegion.AP_NORTHEAST3:
+ return ap_northeast3()
+ if self is AwsRegion.AP_SOUTH1:
+ return ap_south1()
+ if self is AwsRegion.AP_SOUTH2:
+ return ap_south2()
+ if self is AwsRegion.AP_SOUTHEAST1:
+ return ap_southeast1()
+ if self is AwsRegion.AP_SOUTHEAST2:
+ return ap_southeast2()
+ if self is AwsRegion.AP_SOUTHEAST3:
+ return ap_southeast3()
+ if self is AwsRegion.AP_SOUTHEAST4:
+ return ap_southeast4()
+ if self is AwsRegion.AP_SOUTHEAST5:
+ return ap_southeast5()
+ if self is AwsRegion.AP_SOUTHEAST7:
+ return ap_southeast7()
+ if self is AwsRegion.CA_CENTRAL1:
+ return ca_central1()
+ if self is AwsRegion.CA_WEST1:
+ return ca_west1()
+ if self is AwsRegion.CN_NORTH1:
+ return cn_north1()
+ if self is AwsRegion.CN_NORTHWEST1:
+ return cn_northwest1()
+ if self is AwsRegion.EU_CENTRAL1:
+ return eu_central1()
+ if self is AwsRegion.EU_CENTRAL2:
+ return eu_central2()
+ if self is AwsRegion.EU_NORTH1:
+ return eu_north1()
+ if self is AwsRegion.EU_SOUTH1:
+ return eu_south1()
+ if self is AwsRegion.EU_SOUTH2:
+ return eu_south2()
+ if self is AwsRegion.EU_WEST1:
+ return eu_west1()
+ if self is AwsRegion.EU_WEST2:
+ return eu_west2()
+ if self is AwsRegion.EU_WEST3:
+ return eu_west3()
+ if self is AwsRegion.IL_CENTRAL1:
+ return il_central1()
+ if self is AwsRegion.ME_CENTRAL1:
+ return me_central1()
+ if self is AwsRegion.ME_SOUTH1:
+ return me_south1()
+ if self is AwsRegion.MX_CENTRAL1:
+ return mx_central1()
+ if self is AwsRegion.SA_EAST1:
+ return sa_east1()
+ if self is AwsRegion.US_EAST1:
+ return us_east1()
+ if self is AwsRegion.US_EAST2:
+ return us_east2()
+ if self is AwsRegion.US_GOV_EAST1:
+ return us_gov_east1()
+ if self is AwsRegion.US_GOV_WEST1:
+ return us_gov_west1()
+ if self is AwsRegion.US_WEST1:
+ return us_west1()
+ if self is AwsRegion.US_WEST2:
+ return us_west2()
diff --git a/src/truefoundry_sdk/types/aws_s3.py b/src/truefoundry_sdk/types/aws_s3.py
new file mode 100644
index 00000000..7395457d
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_s3.py
@@ -0,0 +1,59 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_region import AwsRegion
+from .aws_s3auth_data import AwsS3AuthData
+
+
+class AwsS3(UniversalBaseModel):
+ """
+ +label=AWS S3
+ +icon=aws-s3
+ """
+
+ type: typing.Literal["integration/blob-storage/aws/s3"] = pydantic.Field(default="integration/blob-storage/aws/s3")
+ """
+ +value=integration/blob-storage/aws/s3
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ storage_root: str = pydantic.Field()
+ """
+ +label=Storage Root
+ +usage=The root path of the storage.
+ +sort=200
+ """
+
+ region: AwsRegion
+ auth_data: typing.Optional[AwsS3AuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=400
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_s3auth_data.py b/src/truefoundry_sdk/types/aws_s3auth_data.py
new file mode 100644
index 00000000..0d510fe3
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_s3auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsS3AuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/aws_secrets_manager.py b/src/truefoundry_sdk/types/aws_secrets_manager.py
new file mode 100644
index 00000000..3e5872e5
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_secrets_manager.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_region import AwsRegion
+from .aws_secrets_manager_auth_data import AwsSecretsManagerAuthData
+
+
+class AwsSecretsManager(UniversalBaseModel):
+ """
+ +label=AWS Secrets Manager
+ +icon=aws-secrets-manager
+ """
+
+ type: typing.Literal["integration/secret-store/aws/secrets-manager"] = pydantic.Field(
+ default="integration/secret-store/aws/secrets-manager"
+ )
+ """
+ +value=integration/secret-store/aws/secrets-manager
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=150
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ region: AwsRegion
+ auth_data: typing.Optional[AwsSecretsManagerAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=300
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/aws_secrets_manager_auth_data.py b/src/truefoundry_sdk/types/aws_secrets_manager_auth_data.py
new file mode 100644
index 00000000..1f34da30
--- /dev/null
+++ b/src/truefoundry_sdk/types/aws_secrets_manager_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_access_key_based_auth import AwsAccessKeyBasedAuth
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+
+AwsSecretsManagerAuthData = typing.Union[AwsAccessKeyBasedAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/azure_ai_inference_model.py b/src/truefoundry_sdk/types/azure_ai_inference_model.py
new file mode 100644
index 00000000..539e1c1c
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_ai_inference_model.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .azure_ai_inference_model_deployment_details import AzureAiInferenceModelDeploymentDetails
+from .azure_key_auth import AzureKeyAuth
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AzureAiInferenceModel(UniversalBaseModel):
+ """
+ +label=Azure AI Inference Model
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=Name to identify this Azure AI model
+ +sort=100
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ type: typing.Literal["integration/model/azure/ai-inference"] = pydantic.Field(
+ default="integration/model/azure/ai-inference"
+ )
+ """
+ +value=integration/model/azure/ai-inference
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +usage=Types of models supported by this Azure AI deployment
+ +sort=200
+ """
+
+ auth_data: typing.Optional[AzureKeyAuth] = None
+ deployment_details: typing_extensions.Annotated[
+ AzureAiInferenceModelDeploymentDetails, FieldMetadata(alias="deploymentDetails")
+ ] = pydantic.Field()
+ """
+ +label=Deployment Configuration
+ +usage=Configuration details for the Azure AI deployment
+ +sort=400
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_ai_inference_model_deployment_details.py b/src/truefoundry_sdk/types/azure_ai_inference_model_deployment_details.py
new file mode 100644
index 00000000..8512aa3c
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_ai_inference_model_deployment_details.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .azure_ai_managed_deployment import AzureAiManagedDeployment
+from .azure_ai_serverless_deployment import AzureAiServerlessDeployment
+
+AzureAiInferenceModelDeploymentDetails = typing.Union[AzureAiManagedDeployment, AzureAiServerlessDeployment]
diff --git a/src/truefoundry_sdk/types/azure_ai_managed_deployment.py b/src/truefoundry_sdk/types/azure_ai_managed_deployment.py
new file mode 100644
index 00000000..1227d44b
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_ai_managed_deployment.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class AzureAiManagedDeployment(UniversalBaseModel):
+ """
+ +label=Azure AI Managed Deployment
+ """
+
+ type: typing.Literal["managed"] = pydantic.Field(default="managed")
+ """
+ +value=managed
+ """
+
+ deployment_name: typing_extensions.Annotated[str, FieldMetadata(alias="deploymentName")] = pydantic.Field()
+ """
+ +label=Azure Deployment Name
+ +usage=Name of the Azure AI deployment
+ +sort=1
+ """
+
+ endpoint_name: typing_extensions.Annotated[str, FieldMetadata(alias="endpointName")] = pydantic.Field()
+ """
+ +label=Azure Endpoint Name
+ +usage=Name of the Azure AI endpoint
+ +sort=2
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_ai_serverless_deployment.py b/src/truefoundry_sdk/types/azure_ai_serverless_deployment.py
new file mode 100644
index 00000000..b7baaf58
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_ai_serverless_deployment.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class AzureAiServerlessDeployment(UniversalBaseModel):
+ """
+ +label=Azure AI Serverless Deployment
+ """
+
+ type: typing.Literal["serverless"] = pydantic.Field(default="serverless")
+ """
+ +value=serverless
+ """
+
+ deployment_name: typing_extensions.Annotated[str, FieldMetadata(alias="deploymentName")] = pydantic.Field()
+ """
+ +label=Azure Deployment Name
+ +usage=Name of the Azure AI deployment
+ +sort=100
+ """
+
+ region: str = pydantic.Field()
+ """
+ +label=Azure Region
+ +usage=Region where the Azure AI deployment is located
+ +sort=200
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_aks_integration.py b/src/truefoundry_sdk/types/azure_aks_integration.py
new file mode 100644
index 00000000..56758c58
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_aks_integration.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_o_auth import AzureOAuth
+
+
+class AzureAksIntegration(UniversalBaseModel):
+ """
+ +icon=azure-aks
+ +label=Azure AKS
+ """
+
+ type: typing.Literal["integration/cluster/azure/aks"] = pydantic.Field(default="integration/cluster/azure/aks")
+ """
+ +value=integration/cluster/azure/aks
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ resource_group: str = pydantic.Field()
+ """
+ +label=Resource Group
+ +usage=The resource group of the cluster in the cloud account.
+ +sort=200
+ """
+
+ cluster_name: str = pydantic.Field()
+ """
+ +label=Cluster Name
+ +usage=Name of the cluster given in the cloud account.
+ +sort=300
+ """
+
+ auth_data: typing.Optional[AzureOAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_basic_auth.py b/src/truefoundry_sdk/types/azure_basic_auth.py
new file mode 100644
index 00000000..5d8e5bf8
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_basic_auth.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AzureBasicAuth(UniversalBaseModel):
+ """
+ +label=Azure Basic Auth
+ """
+
+ type: typing.Literal["basic-auth"] = pydantic.Field(default="basic-auth")
+ """
+ +value=basic-auth
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=The username for the Azure managed identity.
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +sort=200
+ +label=Password
+ +usage=The password for the Azure managed identity.
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_blob_storage.py b/src/truefoundry_sdk/types/azure_blob_storage.py
new file mode 100644
index 00000000..55f54675
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_blob_storage.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_connection_string_auth import AzureConnectionStringAuth
+
+
+class AzureBlobStorage(UniversalBaseModel):
+ """
+ +icon=azure-blob
+ +label=Azure ABS
+ """
+
+ type: typing.Literal["integration/blob-storage/azure/blob"] = pydantic.Field(
+ default="integration/blob-storage/azure/blob"
+ )
+ """
+ +value=integration/blob-storage/azure/blob
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ storage_root: str = pydantic.Field()
+ """
+ +label=Storage Root
+ +usage=The root path of the storage.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[AzureConnectionStringAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_connection_string_auth.py b/src/truefoundry_sdk/types/azure_connection_string_auth.py
new file mode 100644
index 00000000..b3630182
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_connection_string_auth.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AzureConnectionStringAuth(UniversalBaseModel):
+ """
+ +label=Azure Connection String
+ """
+
+ type: typing.Literal["connection-string"] = pydantic.Field(default="connection-string")
+ """
+ +value=connection-string
+ """
+
+ connection_string: str = pydantic.Field()
+ """
+ +label=Connection String
+ +usage=The connection string for the Azure managed identity.
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_container_registry.py b/src/truefoundry_sdk/types/azure_container_registry.py
new file mode 100644
index 00000000..689a2441
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_container_registry.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_basic_auth import AzureBasicAuth
+
+
+class AzureContainerRegistry(UniversalBaseModel):
+ """
+ +icon=azure-acr
+ +label=Azure ACR
+ """
+
+ type: typing.Literal["integration/docker-registry/azure/acr"] = pydantic.Field(
+ default="integration/docker-registry/azure/acr"
+ )
+ """
+ +value=integration/docker-registry/azure/acr
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[AzureBasicAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_foundry_model.py b/src/truefoundry_sdk/types/azure_foundry_model.py
new file mode 100644
index 00000000..3fd7cdb4
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_foundry_model.py
@@ -0,0 +1,68 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_key_auth import AzureKeyAuth
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AzureFoundryModel(UniversalBaseModel):
+ """
+ +label=Azure AI Foundry Model
+ """
+
+ type: typing.Literal["integration/model/azure/ai-foundry"] = pydantic.Field(
+ default="integration/model/azure/ai-foundry"
+ )
+ """
+ +value=integration/model/azure/ai-foundry
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=Name to identify this Azure AI Foundry model
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +sort=2
+ +label=Model Name
+ +usage=This is the Model Name on Azure
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +usage=Types of models supported by this Azure AI Foundry deployment
+ +sort=200
+ """
+
+ azure_endpoint: str = pydantic.Field()
+ """
+ +sort=300
+ +label=Azure Endpoint
+ +usage=Azure Foundry endpoint
+ """
+
+ auth_data: typing.Optional[AzureKeyAuth] = None
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_foundry_model_v2.py b/src/truefoundry_sdk/types/azure_foundry_model_v2.py
new file mode 100644
index 00000000..a79529c0
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_foundry_model_v2.py
@@ -0,0 +1,76 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_key_auth import AzureKeyAuth
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AzureFoundryModelV2(UniversalBaseModel):
+ """
+ +label=Azure Foundry Model
+ +icon=azure
+ """
+
+ type: typing.Literal["integration/model/azure-foundry"] = pydantic.Field(default="integration/model/azure-foundry")
+ """
+ +value=integration/model/azure-foundry
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Azure Foundry model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: AzureKeyAuth
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Types of models supported by this Azure AI Foundry deployment
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Azure Deployment Name
+ +sort=3
+ +usage=The name of the Azure Foundry deployment
+ """
+
+ azure_endpoint: str = pydantic.Field()
+ """
+ +label=Azure Endpoint
+ +sort=4
+ +usage=The Azure AI Foundry endpoint URL
+ +message=Endpoint URL must not be empty
+ """
+
+ api_version: str = pydantic.Field()
+ """
+ +label=API Version
+ +sort=5
+ +usage=The API version for the Azure Foundry model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=7
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_foundry_provider_account.py b/src/truefoundry_sdk/types/azure_foundry_provider_account.py
new file mode 100644
index 00000000..d8c91b38
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_foundry_provider_account.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_foundry_model_v2 import AzureFoundryModelV2
+from .collaborator import Collaborator
+
+
+class AzureFoundryProviderAccount(UniversalBaseModel):
+ """
+ +label=Azure Foundry Provider Account
+ +icon=azure
+ """
+
+ type: typing.Literal["provider-account/azure-foundry"] = pydantic.Field(default="provider-account/azure-foundry")
+ """
+ +value=provider-account/azure-foundry
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Azure Foundry provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ integrations: typing.List[AzureFoundryModelV2] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=200
+ +usage=List of integrations that are associated with the Azure Foundry provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=300
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_integrations.py b/src/truefoundry_sdk/types/azure_integrations.py
new file mode 100644
index 00000000..4c7e3c96
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_integrations.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .azure_ai_inference_model import AzureAiInferenceModel
+from .azure_aks_integration import AzureAksIntegration
+from .azure_blob_storage import AzureBlobStorage
+from .azure_container_registry import AzureContainerRegistry
+from .azure_foundry_model import AzureFoundryModel
+from .azure_open_ai_model import AzureOpenAiModel
+from .azure_repos_integration import AzureReposIntegration
+from .azure_vault import AzureVault
+
+AzureIntegrations = typing.Union[
+ AzureAksIntegration,
+ AzureContainerRegistry,
+ AzureBlobStorage,
+ AzureOpenAiModel,
+ AzureVault,
+ AzureReposIntegration,
+ AzureAiInferenceModel,
+ AzureFoundryModel,
+]
diff --git a/src/truefoundry_sdk/types/azure_key_auth.py b/src/truefoundry_sdk/types/azure_key_auth.py
new file mode 100644
index 00000000..f752ef54
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AzureKeyAuth(UniversalBaseModel):
+ """
+ +label=Azure API Key Auth
+ +icon=azure
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for Azure AI Foundry authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_o_auth.py b/src/truefoundry_sdk/types/azure_o_auth.py
new file mode 100644
index 00000000..8bfbe089
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_o_auth.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AzureOAuth(UniversalBaseModel):
+ """
+ +label=Azure OAuth
+ """
+
+ type: typing.Literal["oauth"] = pydantic.Field(default="oauth")
+ """
+ +value=oauth
+ """
+
+ tenant_id: str = pydantic.Field()
+ """
+ +label=Azure Tenant ID
+ +usage=The Azure Active Directory tenant (directory) ID.
+ +sort=100
+ """
+
+ client_id: str = pydantic.Field()
+ """
+ +label=Azure Client ID
+ +usage=The client (application) ID of an App Registration in the tenant.
+ +sort=200
+ """
+
+ client_secret: str = pydantic.Field()
+ """
+ +label=Azure Client secret
+ +sort=300
+ +usage=A client secret that was generated for the App Registration.
+ +uiType=Password
+ """
+
+ subscription_id: str = pydantic.Field()
+ """
+ +label=Azure Subscription ID
+ +usage=The ID of the target subscription. The value must be an UUID.
+ +sort=400
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_open_ai_model.py b/src/truefoundry_sdk/types/azure_open_ai_model.py
new file mode 100644
index 00000000..d722b425
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_open_ai_model.py
@@ -0,0 +1,70 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_key_auth import AzureKeyAuth
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AzureOpenAiModel(UniversalBaseModel):
+ """
+ +label=Azure OpenAI Model
+ +icon=azure
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +sort=2
+ +label=Model ID
+ +usage=This is the name of the deployment
+ """
+
+ type: typing.Literal["integration/model/azure"] = pydantic.Field(default="integration/model/azure")
+ """
+ +value=integration/model/azure
+ """
+
+ auth_data: AzureKeyAuth
+ azure_endpoint: str = pydantic.Field()
+ """
+ +sort=100
+ +label=Azure Endpoint
+ +usage=Azure OpenAI Service endpoint
+ """
+
+ api_version: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_open_ai_model_v2.py b/src/truefoundry_sdk/types/azure_open_ai_model_v2.py
new file mode 100644
index 00000000..be11e684
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_open_ai_model_v2.py
@@ -0,0 +1,68 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class AzureOpenAiModelV2(UniversalBaseModel):
+ """
+ +label=Azure OpenAI Model
+ +icon=azure
+ """
+
+ type: typing.Literal["integration/model/azure-openai"] = pydantic.Field(default="integration/model/azure-openai")
+ """
+ +value=integration/model/azure-openai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Azure OpenAI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Azure OpenAI model deployment (e.g. gpt-35-turbo, gpt-4). Used for cost tracking and management
+ +message=Model ID must not be empty
+ """
+
+ api_version: str = pydantic.Field()
+ """
+ +label=API Version
+ +sort=3
+ +usage=The Azure OpenAI API version to use
+ +message=API version must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=4
+ +usage=Specify the type of the Azure OpenAI model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=6
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_open_ai_provider_account.py b/src/truefoundry_sdk/types/azure_open_ai_provider_account.py
new file mode 100644
index 00000000..54973978
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_open_ai_provider_account.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_key_auth import AzureKeyAuth
+from .azure_open_ai_model_v2 import AzureOpenAiModelV2
+from .collaborator import Collaborator
+
+
+class AzureOpenAiProviderAccount(UniversalBaseModel):
+ """
+ +label=Azure OpenAI Provider Account
+ +icon=azure
+ """
+
+ type: typing.Literal["provider-account/azure-openai"] = pydantic.Field(default="provider-account/azure-openai")
+ """
+ +value=provider-account/azure-openai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Azure OpenAI provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ azure_endpoint: str = pydantic.Field()
+ """
+ +label=Azure Endpoint
+ +sort=300
+ +usage=The Azure OpenAI Service endpoint URL
+ +message=Endpoint URL must not be empty
+ """
+
+ auth_data: AzureKeyAuth
+ integrations: typing.List[AzureOpenAiModelV2] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the Azure OpenAI provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=200
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_provider_account.py b/src/truefoundry_sdk/types/azure_provider_account.py
new file mode 100644
index 00000000..7873fa99
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_provider_account.py
@@ -0,0 +1,52 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_integrations import AzureIntegrations
+
+
+class AzureProviderAccount(UniversalBaseModel):
+ """
+ +label=Azure
+ +icon=azure
+ +heroDataKey=subscription_id
+ """
+
+ type: typing.Literal["provider-account/azure"] = pydantic.Field(default="provider-account/azure")
+ """
+ +value=provider-account/azure
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the Azure provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ subscription_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Azure Subscription Id
+ +usage=The ID of the target subscription. The value must be an UUID.
+ +sort=200
+ """
+
+ integrations: typing.List[AzureIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the Azure provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_repos_integration.py b/src/truefoundry_sdk/types/azure_repos_integration.py
new file mode 100644
index 00000000..66c50c11
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_repos_integration.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AzureReposIntegration(UniversalBaseModel):
+ """
+ +label=Azure Repo
+ +icon=azure
+ """
+
+ type: typing.Literal["integration/vcs/azure"] = pydantic.Field(default="integration/vcs/azure")
+ """
+ +value=integration/vcs/azure
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ account_name: str = pydantic.Field()
+ """
+ +label=Account Name
+ +sort=200
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/azure_vault.py b/src/truefoundry_sdk/types/azure_vault.py
new file mode 100644
index 00000000..53061fd5
--- /dev/null
+++ b/src/truefoundry_sdk/types/azure_vault.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .azure_o_auth import AzureOAuth
+
+
+class AzureVault(UniversalBaseModel):
+ """
+ +label=Azure Vault
+ +icon=azure-vault
+ """
+
+ type: typing.Literal["integration/secret-store/azure/vault"] = pydantic.Field(
+ default="integration/secret-store/azure/vault"
+ )
+ """
+ +value=integration/secret-store/azure/vault
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=150
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: typing.Optional[AzureOAuth] = None
+ key_vault_name: str = pydantic.Field()
+ """
+ +label=Azure Key vault Name
+ +usage=Name of key vault name.
+ +sort=300
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=400
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/base_o_auth2login.py b/src/truefoundry_sdk/types/base_o_auth2login.py
new file mode 100644
index 00000000..5639db32
--- /dev/null
+++ b/src/truefoundry_sdk/types/base_o_auth2login.py
@@ -0,0 +1,64 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .base_o_auth2login_jwt_source import BaseOAuth2LoginJwtSource
+
+
+class BaseOAuth2Login(UniversalBaseModel):
+ """
+ +label=OAuth2 Client Configuration
+ +usage=OAuth2 client configuration to get the JWT.
+ """
+
+ client_id: str = pydantic.Field()
+ """
+ +label=Client ID
+ +usage=client ID for OAuth2.
+ +sort=200
+ """
+
+ client_secret: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Client Secret
+ +usage=Client secret or the TrueFoundry secret containing the client secret for OAuth2.
+ +sort=300
+ """
+
+ authorization_url: str = pydantic.Field()
+ """
+ +label=Authorization URL
+ +usage=URL for the authorization request
+ +sort=400
+ """
+
+ token_url: str = pydantic.Field()
+ """
+ +label=Token URL
+ +usage=The endpoint to exchange auth code for tokens.
+ +sort=500
+ """
+
+ scopes: typing.List[str] = pydantic.Field()
+ """
+ +label=Scopes
+ +usage=List of scopes to request from the OAuth2 provider.
+ +sort=600
+ """
+
+ jwt_source: BaseOAuth2LoginJwtSource = pydantic.Field()
+ """
+ +label=JWT Source
+ +usage=Source of the JWT token to be used for verification.
+ +sort=700
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/base_o_auth2login_jwt_source.py b/src/truefoundry_sdk/types/base_o_auth2login_jwt_source.py
new file mode 100644
index 00000000..eba51688
--- /dev/null
+++ b/src/truefoundry_sdk/types/base_o_auth2login_jwt_source.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class BaseOAuth2LoginJwtSource(str, enum.Enum):
+ """
+ +label=JWT Source
+ +usage=Source of the JWT token to be used for verification.
+ +sort=700
+ """
+
+ ACCESS_TOKEN = "access_token"
+ ID_TOKEN = "id_token"
+
+ def visit(self, access_token: typing.Callable[[], T_Result], id_token: typing.Callable[[], T_Result]) -> T_Result:
+ if self is BaseOAuth2LoginJwtSource.ACCESS_TOKEN:
+ return access_token()
+ if self is BaseOAuth2LoginJwtSource.ID_TOKEN:
+ return id_token()
diff --git a/src/truefoundry_sdk/types/bedrock_key_auth.py b/src/truefoundry_sdk/types/bedrock_key_auth.py
new file mode 100644
index 00000000..811aa724
--- /dev/null
+++ b/src/truefoundry_sdk/types/bedrock_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BedrockKeyAuth(UniversalBaseModel):
+ """
+ +label=Bedrock API Key Auth
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ access_key: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ access_key_secret: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/bedrock_model.py b/src/truefoundry_sdk/types/bedrock_model.py
new file mode 100644
index 00000000..ca55bfeb
--- /dev/null
+++ b/src/truefoundry_sdk/types/bedrock_model.py
@@ -0,0 +1,62 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_region import AwsRegion
+from .bedrock_model_auth_data import BedrockModelAuthData
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class BedrockModel(UniversalBaseModel):
+ """
+ +label=Bedrock Model
+ +icon=aws-bedrock
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +sort=2
+ """
+
+ type: typing.Literal["integration/model/aws"] = pydantic.Field(default="integration/model/aws")
+ """
+ +value=integration/model/aws
+ """
+
+ auth_data: typing.Optional[BedrockModelAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ """
+
+ region: AwsRegion
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/bedrock_model_auth_data.py b/src/truefoundry_sdk/types/bedrock_model_auth_data.py
new file mode 100644
index 00000000..88b5770e
--- /dev/null
+++ b/src/truefoundry_sdk/types/bedrock_model_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_assumed_role_based_auth import AwsAssumedRoleBasedAuth
+from .bedrock_key_auth import BedrockKeyAuth
+
+BedrockModelAuthData = typing.Union[BedrockKeyAuth, AwsAssumedRoleBasedAuth]
diff --git a/src/truefoundry_sdk/types/bedrock_model_v2.py b/src/truefoundry_sdk/types/bedrock_model_v2.py
new file mode 100644
index 00000000..aab3f3fd
--- /dev/null
+++ b/src/truefoundry_sdk/types/bedrock_model_v2.py
@@ -0,0 +1,62 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .aws_region import AwsRegion
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class BedrockModelV2(UniversalBaseModel):
+ """
+ +label=Bedrock Model
+ +icon=aws-bedrock
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Bedrock model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The unique identifier for the Bedrock model
+ +message=Model ID must not be empty
+ """
+
+ type: typing.Literal["integration/model/bedrock"] = pydantic.Field(default="integration/model/bedrock")
+ """
+ +value=integration/model/bedrock
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Bedrock model
+ """
+
+ region: typing.Optional[AwsRegion] = None
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=6
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/bitbucket_integration.py b/src/truefoundry_sdk/types/bitbucket_integration.py
new file mode 100644
index 00000000..185eb82e
--- /dev/null
+++ b/src/truefoundry_sdk/types/bitbucket_integration.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BitbucketIntegration(UniversalBaseModel):
+ """
+ +label=Bitbucket
+ +icon=bitbucket
+ """
+
+ type: typing.Literal["integration/vcs/bitbucket"] = pydantic.Field(default="integration/vcs/bitbucket")
+ """
+ +value=integration/vcs/bitbucket
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ account_name: str = pydantic.Field()
+ """
+ +label=Account Name
+ +sort=200
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/bitbucket_provider_account.py b/src/truefoundry_sdk/types/bitbucket_provider_account.py
new file mode 100644
index 00000000..ae4a9c80
--- /dev/null
+++ b/src/truefoundry_sdk/types/bitbucket_provider_account.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .bitbucket_integration import BitbucketIntegration
+
+
+class BitbucketProviderAccount(UniversalBaseModel):
+ """
+ +label=Bitbucket
+ +icon=bitbucket
+ """
+
+ type: typing.Literal["provider-account/bitbucket"] = pydantic.Field(default="provider-account/bitbucket")
+ """
+ +value=provider-account/bitbucket
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ """
+
+ integrations: typing.List[BitbucketIntegration] = pydantic.Field()
+ """
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/budget_config.py b/src/truefoundry_sdk/types/budget_config.py
new file mode 100644
index 00000000..206c9ee8
--- /dev/null
+++ b/src/truefoundry_sdk/types/budget_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .budget_rule import BudgetRule
+
+
+class BudgetConfig(UniversalBaseModel):
+ name: str
+ type: typing.Literal["gateway-budget-config"] = "gateway-budget-config"
+ rules: typing.List[BudgetRule]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/budget_limit_unit.py b/src/truefoundry_sdk/types/budget_limit_unit.py
new file mode 100644
index 00000000..fc3eab6d
--- /dev/null
+++ b/src/truefoundry_sdk/types/budget_limit_unit.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class BudgetLimitUnit(str, enum.Enum):
+ COST_PER_DAY = "cost_per_day"
+ COST_PER_MONTH = "cost_per_month"
+ TOKENS_PER_DAY = "tokens_per_day"
+ TOKENS_PER_MONTH = "tokens_per_month"
+
+ def visit(
+ self,
+ cost_per_day: typing.Callable[[], T_Result],
+ cost_per_month: typing.Callable[[], T_Result],
+ tokens_per_day: typing.Callable[[], T_Result],
+ tokens_per_month: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is BudgetLimitUnit.COST_PER_DAY:
+ return cost_per_day()
+ if self is BudgetLimitUnit.COST_PER_MONTH:
+ return cost_per_month()
+ if self is BudgetLimitUnit.TOKENS_PER_DAY:
+ return tokens_per_day()
+ if self is BudgetLimitUnit.TOKENS_PER_MONTH:
+ return tokens_per_month()
diff --git a/src/truefoundry_sdk/types/budget_rule.py b/src/truefoundry_sdk/types/budget_rule.py
new file mode 100644
index 00000000..1d53239d
--- /dev/null
+++ b/src/truefoundry_sdk/types/budget_rule.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .budget_limit_unit import BudgetLimitUnit
+from .budget_when import BudgetWhen
+
+
+class BudgetRule(UniversalBaseModel):
+ id: str
+ when: BudgetWhen
+ limit_to: float
+ unit: BudgetLimitUnit
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/budget_when.py b/src/truefoundry_sdk/types/budget_when.py
new file mode 100644
index 00000000..45ad05fd
--- /dev/null
+++ b/src/truefoundry_sdk/types/budget_when.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class BudgetWhen(UniversalBaseModel):
+ subjects: typing.Optional[typing.List[str]] = None
+ models: typing.Optional[typing.List[str]] = None
+ metadata: typing.Optional[typing.Dict[str, str]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/cohere_integrations.py b/src/truefoundry_sdk/types/cohere_integrations.py
new file mode 100644
index 00000000..56bc838d
--- /dev/null
+++ b/src/truefoundry_sdk/types/cohere_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .cohere_model import CohereModel
+
+CohereIntegrations = CohereModel
diff --git a/src/truefoundry_sdk/types/cohere_key_auth.py b/src/truefoundry_sdk/types/cohere_key_auth.py
new file mode 100644
index 00000000..630b399f
--- /dev/null
+++ b/src/truefoundry_sdk/types/cohere_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CohereKeyAuth(UniversalBaseModel):
+ """
+ +label=Cohere API Key Auth
+ +icon=cohere
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for Cohere authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/cohere_model.py b/src/truefoundry_sdk/types/cohere_model.py
new file mode 100644
index 00000000..758174c9
--- /dev/null
+++ b/src/truefoundry_sdk/types/cohere_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class CohereModel(UniversalBaseModel):
+ """
+ +label=Cohere Model
+ +icon=cohere
+ """
+
+ type: typing.Literal["integration/model/cohere"] = pydantic.Field(default="integration/model/cohere")
+ """
+ +value=integration/model/cohere
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Cohere model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Cohere model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Cohere model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/cohere_provider_account.py b/src/truefoundry_sdk/types/cohere_provider_account.py
new file mode 100644
index 00000000..2a4cec9a
--- /dev/null
+++ b/src/truefoundry_sdk/types/cohere_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .cohere_integrations import CohereIntegrations
+from .cohere_key_auth import CohereKeyAuth
+from .collaborator import Collaborator
+
+
+class CohereProviderAccount(UniversalBaseModel):
+ """
+ +label=Cohere Provider Account
+ +icon=cohere
+ """
+
+ type: typing.Literal["provider-account/cohere"] = pydantic.Field(default="provider-account/cohere")
+ """
+ +value=provider-account/cohere
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Cohere provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: CohereKeyAuth
+ integrations: typing.Optional[typing.List[CohereIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Cohere provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_basic_auth.py b/src/truefoundry_sdk/types/custom_basic_auth.py
new file mode 100644
index 00000000..6400298b
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_basic_auth.py
@@ -0,0 +1,39 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CustomBasicAuth(UniversalBaseModel):
+ """
+ +label=Custom Basic Auth
+ """
+
+ type: typing.Literal["basic-auth"] = pydantic.Field(default="basic-auth")
+ """
+ +value=basic-auth
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=The username for the basic authentication.
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +label=Password
+ +usage=The password for the basic authentication.
+ +sort=200
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_bearer_auth.py b/src/truefoundry_sdk/types/custom_bearer_auth.py
new file mode 100644
index 00000000..aaa15a91
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_bearer_auth.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CustomBearerAuth(UniversalBaseModel):
+ type: typing.Literal["bearer-auth"] = pydantic.Field(default="bearer-auth")
+ """
+ +value=bearer-auth
+ """
+
+ bearer_token: str = pydantic.Field()
+ """
+ +label=Bearer Token
+ +usage=The bearer token for the custom bearer authentication.
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_blob_storage.py b/src/truefoundry_sdk/types/custom_blob_storage.py
new file mode 100644
index 00000000..30f793d9
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_blob_storage.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_basic_auth import CustomBasicAuth
+
+
+class CustomBlobStorage(UniversalBaseModel):
+ """
+ +label=Custom Blob Storage
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/blob-storage/custom"] = pydantic.Field(default="integration/blob-storage/custom")
+ """
+ +value=integration/blob-storage/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ endpoint: str = pydantic.Field()
+ """
+ +label=Endpoint
+ +usage=The endpoint of the storage provider.
+ +sort=200
+ """
+
+ storage_root: str = pydantic.Field()
+ """
+ +label=Storage Root
+ +usage=The root path of the storage.
+ +sort=200
+ """
+
+ auth_data: CustomBasicAuth
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=400
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_helm_repo.py b/src/truefoundry_sdk/types/custom_helm_repo.py
new file mode 100644
index 00000000..4e3710b6
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_helm_repo.py
@@ -0,0 +1,51 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_basic_auth import CustomBasicAuth
+
+
+class CustomHelmRepo(UniversalBaseModel):
+ """
+ +label=Custom Helm Repo
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/helm-repo/custom"] = pydantic.Field(default="integration/helm-repo/custom")
+ """
+ +value=integration/helm-repo/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ repo_url: str = pydantic.Field()
+ """
+ +label=Helm Repo URL
+ +usage=The URL of the Helm Repo.
+ +sort=200
+ """
+
+ auth_data: CustomBasicAuth
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_integrations.py b/src/truefoundry_sdk/types/custom_integrations.py
new file mode 100644
index 00000000..5a0a12e2
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_integrations.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .custom_blob_storage import CustomBlobStorage
+from .custom_helm_repo import CustomHelmRepo
+from .custom_jwt_auth_integration import CustomJwtAuthIntegration
+from .custom_mcp_server_integration import CustomMcpServerIntegration
+from .custom_model import CustomModel
+from .custom_username_password_artifacts_registry import CustomUsernamePasswordArtifactsRegistry
+from .email_notification_channel import EmailNotificationChannel
+
+CustomIntegrations = typing.Union[
+ CustomUsernamePasswordArtifactsRegistry,
+ CustomModel,
+ EmailNotificationChannel,
+ CustomHelmRepo,
+ CustomBlobStorage,
+ CustomJwtAuthIntegration,
+ CustomMcpServerIntegration,
+]
diff --git a/src/truefoundry_sdk/types/custom_jwt_auth_integration.py b/src/truefoundry_sdk/types/custom_jwt_auth_integration.py
new file mode 100644
index 00000000..c939eacc
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_jwt_auth_integration.py
@@ -0,0 +1,58 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .o_auth2login_provider import OAuth2LoginProvider
+
+
+class CustomJwtAuthIntegration(UniversalBaseModel):
+ """
+ +label=Custom JWT Auth Integration
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/jwt-auth/custom"] = pydantic.Field(default="integration/jwt-auth/custom")
+ """
+ +value=integration/jwt-auth/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ issuer: str = pydantic.Field()
+ """
+ +label=Issuer
+ +usage=The base URL of the authentication provider.
+ +sort=200
+ """
+
+ jwks_uri: str = pydantic.Field()
+ """
+ +label=JWKS URI
+ +usage=The JSON Web Key Set URI for JWT verification.
+ +sort=300
+ """
+
+ login_provider: typing.Optional[OAuth2LoginProvider] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=500
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_mcp_server_integration.py b/src/truefoundry_sdk/types/custom_mcp_server_integration.py
new file mode 100644
index 00000000..4719a175
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_mcp_server_integration.py
@@ -0,0 +1,59 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mcp_server_auth import McpServerAuth
+
+
+class CustomMcpServerIntegration(UniversalBaseModel):
+ """
+ +label=Custom MCP Server
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/mcp-server/custom"] = pydantic.Field(default="integration/mcp-server/custom")
+ """
+ +value=integration/mcp-server/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ """
+
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Description
+ +uiType=TextArea
+ +usage=The Description of the integration that will be displayed in the TrueFoundry UI.
+ +sort=200
+ +uiProps={"descriptionInline":true}
+ """
+
+ url: str = pydantic.Field()
+ """
+ +label=URL
+ +usage=The endpoint URL for the MCP server.
+ +sort=300
+ """
+
+ auth: typing.Optional[McpServerAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=500
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_model.py b/src/truefoundry_sdk/types/custom_model.py
new file mode 100644
index 00000000..a7cc807d
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_model.py
@@ -0,0 +1,77 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_model_auth_data import CustomModelAuthData
+from .custom_model_model_server import CustomModelModelServer
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class CustomModel(UniversalBaseModel):
+ """
+ +label=Custom Model
+ +icon=puzzle-piece
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ hosted_model_name: str
+ url: str = pydantic.Field()
+ """
+ +message=enter valid https/http URL that should not end with trailing slash
+ """
+
+ model_server: CustomModelModelServer
+ tfy_application_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +uiType=Hidden
+ """
+
+ type: typing.Literal["integration/model/custom"] = pydantic.Field(default="integration/model/custom")
+ """
+ +value=integration/model/custom
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ auth_data: typing.Optional[CustomModelAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=Custom authentication data for the integration.
+ +sort=300
+ """
+
+ headers: typing.Optional[typing.Dict[str, str]] = pydantic.Field(default=None)
+ """
+ +label=Custom Headers
+ +usage=Custom headers for the integration. Forwarded to the provider as is. For example: `{"Authorization": "APIKey "}`
+ +sort=500
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_model_auth_data.py b/src/truefoundry_sdk/types/custom_model_auth_data.py
new file mode 100644
index 00000000..6233c356
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_model_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .custom_basic_auth import CustomBasicAuth
+from .custom_bearer_auth import CustomBearerAuth
+
+CustomModelAuthData = typing.Union[CustomBasicAuth, CustomBearerAuth]
diff --git a/src/truefoundry_sdk/types/custom_model_model_server.py b/src/truefoundry_sdk/types/custom_model_model_server.py
new file mode 100644
index 00000000..a710aa41
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_model_model_server.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class CustomModelModelServer(str, enum.Enum):
+ VLLM_OPENAI = "vllm-openai"
+ TEI = "tei"
+ INFINITY = "infinity"
+ NEMO_RETRIEVER = "nemo-retriever"
+
+ def visit(
+ self,
+ vllm_openai: typing.Callable[[], T_Result],
+ tei: typing.Callable[[], T_Result],
+ infinity: typing.Callable[[], T_Result],
+ nemo_retriever: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is CustomModelModelServer.VLLM_OPENAI:
+ return vllm_openai()
+ if self is CustomModelModelServer.TEI:
+ return tei()
+ if self is CustomModelModelServer.INFINITY:
+ return infinity()
+ if self is CustomModelModelServer.NEMO_RETRIEVER:
+ return nemo_retriever()
diff --git a/src/truefoundry_sdk/types/custom_provider_account.py b/src/truefoundry_sdk/types/custom_provider_account.py
new file mode 100644
index 00000000..1de6a2cd
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_provider_account.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_basic_auth import CustomBasicAuth
+from .custom_integrations import CustomIntegrations
+
+
+class CustomProviderAccount(UniversalBaseModel):
+ """
+ +label=Custom
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["provider-account/custom"] = pydantic.Field(default="provider-account/custom")
+ """
+ +value=provider-account/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: typing.Optional[CustomBasicAuth] = None
+ integrations: typing.List[CustomIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/custom_username_password_artifacts_registry.py b/src/truefoundry_sdk/types/custom_username_password_artifacts_registry.py
new file mode 100644
index 00000000..f6a8ca8f
--- /dev/null
+++ b/src/truefoundry_sdk/types/custom_username_password_artifacts_registry.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .custom_basic_auth import CustomBasicAuth
+
+
+class CustomUsernamePasswordArtifactsRegistry(UniversalBaseModel):
+ """
+ +label=Custom Docker Registry
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/docker-registry/custom"] = pydantic.Field(
+ default="integration/docker-registry/custom"
+ )
+ """
+ +value=integration/docker-registry/custom
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[CustomBasicAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/databricks_api_key_auth.py b/src/truefoundry_sdk/types/databricks_api_key_auth.py
new file mode 100644
index 00000000..f505f87f
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_api_key_auth.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DatabricksApiKeyAuth(UniversalBaseModel):
+ """
+ +label=Databricks API Key Based Auth
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +usage=API key for Databricks authentication.
+ +sort=100
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/databricks_integrations.py b/src/truefoundry_sdk/types/databricks_integrations.py
new file mode 100644
index 00000000..05abfa97
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .databricks_model import DatabricksModel
+
+DatabricksIntegrations = DatabricksModel
diff --git a/src/truefoundry_sdk/types/databricks_model.py b/src/truefoundry_sdk/types/databricks_model.py
new file mode 100644
index 00000000..8cb056d6
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_model.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class DatabricksModel(UniversalBaseModel):
+ """
+ +label=Databricks Model
+ +icon=databricks
+ """
+
+ type: typing.Literal["integration/model/databricks"] = pydantic.Field(default="integration/model/databricks")
+ """
+ +value=integration/model/databricks
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Databricks model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Databricks model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Databricks model
+ +uiType=Select
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/databricks_provider_account.py b/src/truefoundry_sdk/types/databricks_provider_account.py
new file mode 100644
index 00000000..82037348
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_provider_account.py
@@ -0,0 +1,69 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .databricks_integrations import DatabricksIntegrations
+from .databricks_provider_account_auth_data import DatabricksProviderAccountAuthData
+
+
+class DatabricksProviderAccount(UniversalBaseModel):
+ """
+ +label=Databricks Provider Account
+ +icon=databricks
+ """
+
+ type: typing.Literal["provider-account/databricks"] = pydantic.Field(default="provider-account/databricks")
+ """
+ +value=provider-account/databricks
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Databricks provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: DatabricksProviderAccountAuthData = pydantic.Field()
+ """
+ +label=Auth Data
+ +sort=300
+ +usage=Databricks authentication credentials
+ """
+
+ base_url: str = pydantic.Field()
+ """
+ +label=Base URL
+ +sort=400
+ +usage=The base URL of your Databricks workspace
+ +message=Base URL must not be empty
+ """
+
+ integrations: typing.List[DatabricksIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the Databricks provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=200
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/databricks_provider_account_auth_data.py b/src/truefoundry_sdk/types/databricks_provider_account_auth_data.py
new file mode 100644
index 00000000..66ccf511
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_provider_account_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .databricks_api_key_auth import DatabricksApiKeyAuth
+from .databricks_service_principal_auth import DatabricksServicePrincipalAuth
+
+DatabricksProviderAccountAuthData = typing.Union[DatabricksServicePrincipalAuth, DatabricksApiKeyAuth]
diff --git a/src/truefoundry_sdk/types/databricks_service_principal_auth.py b/src/truefoundry_sdk/types/databricks_service_principal_auth.py
new file mode 100644
index 00000000..ca0752cd
--- /dev/null
+++ b/src/truefoundry_sdk/types/databricks_service_principal_auth.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DatabricksServicePrincipalAuth(UniversalBaseModel):
+ """
+ +label=Databricks Service Principal Auth
+ +usage=You can authenticate using Databricks service principal. To generate OAuth secret and Client ID, go to Databricks workspace -> Workspace Settings -> Identity and Access -> Service Principals -> Secrets.
+ """
+
+ type: typing.Literal["service-principal"] = pydantic.Field(default="service-principal")
+ """
+ +value=service-principal
+ """
+
+ oauth_secret: str = pydantic.Field()
+ """
+ +label=OAuth Secret
+ +usage=OAuth secret of the Databricks service principal.
+ +sort=200
+ +uiType=Password
+ """
+
+ client_id: str = pydantic.Field()
+ """
+ +label=Client ID
+ +usage=Client ID or Application ID of the Databricks service principal.
+ +sort=100
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/deepinfra_integrations.py b/src/truefoundry_sdk/types/deepinfra_integrations.py
new file mode 100644
index 00000000..58384e0a
--- /dev/null
+++ b/src/truefoundry_sdk/types/deepinfra_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .deepinfra_model import DeepinfraModel
+
+DeepinfraIntegrations = DeepinfraModel
diff --git a/src/truefoundry_sdk/types/deepinfra_key_auth.py b/src/truefoundry_sdk/types/deepinfra_key_auth.py
new file mode 100644
index 00000000..3d858f45
--- /dev/null
+++ b/src/truefoundry_sdk/types/deepinfra_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DeepinfraKeyAuth(UniversalBaseModel):
+ """
+ +label=DeepInfra API Key Auth
+ +icon=deepinfra
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for DeepInfra authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/deepinfra_model.py b/src/truefoundry_sdk/types/deepinfra_model.py
new file mode 100644
index 00000000..b46ff5e1
--- /dev/null
+++ b/src/truefoundry_sdk/types/deepinfra_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class DeepinfraModel(UniversalBaseModel):
+ """
+ +label=DeepInfra Model
+ +icon=deepinfra
+ """
+
+ type: typing.Literal["integration/model/deepinfra"] = pydantic.Field(default="integration/model/deepinfra")
+ """
+ +value=integration/model/deepinfra
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this DeepInfra model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the DeepInfra model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the DeepInfra model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/deepinfra_provider_account.py b/src/truefoundry_sdk/types/deepinfra_provider_account.py
new file mode 100644
index 00000000..64c359db
--- /dev/null
+++ b/src/truefoundry_sdk/types/deepinfra_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .deepinfra_integrations import DeepinfraIntegrations
+from .deepinfra_key_auth import DeepinfraKeyAuth
+
+
+class DeepinfraProviderAccount(UniversalBaseModel):
+ """
+ +label=DeepInfra Provider Account
+ +icon=deepinfra
+ """
+
+ type: typing.Literal["provider-account/deepinfra"] = pydantic.Field(default="provider-account/deepinfra")
+ """
+ +value=provider-account/deepinfra
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the DeepInfra provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: DeepinfraKeyAuth
+ integrations: typing.Optional[typing.List[DeepinfraIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the DeepInfra provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/dockerhub_basic_auth.py b/src/truefoundry_sdk/types/dockerhub_basic_auth.py
new file mode 100644
index 00000000..23bb828e
--- /dev/null
+++ b/src/truefoundry_sdk/types/dockerhub_basic_auth.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class DockerhubBasicAuth(UniversalBaseModel):
+ """
+ +label=Dockerhub Basic Auth
+ """
+
+ type: typing.Literal["basic-auth"] = pydantic.Field(default="basic-auth")
+ """
+ +value=basic-auth
+ """
+
+ username: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +sort=200
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/dockerhub_integrations.py b/src/truefoundry_sdk/types/dockerhub_integrations.py
new file mode 100644
index 00000000..ba121df0
--- /dev/null
+++ b/src/truefoundry_sdk/types/dockerhub_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .dockerhub_registry import DockerhubRegistry
+
+DockerhubIntegrations = DockerhubRegistry
diff --git a/src/truefoundry_sdk/types/dockerhub_provider_account.py b/src/truefoundry_sdk/types/dockerhub_provider_account.py
new file mode 100644
index 00000000..a61a97e0
--- /dev/null
+++ b/src/truefoundry_sdk/types/dockerhub_provider_account.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .dockerhub_basic_auth import DockerhubBasicAuth
+from .dockerhub_integrations import DockerhubIntegrations
+
+
+class DockerhubProviderAccount(UniversalBaseModel):
+ """
+ +label=Dockerhub
+ +icon=docker
+ """
+
+ type: typing.Literal["provider-account/dockerhub"] = pydantic.Field(default="provider-account/dockerhub")
+ """
+ +value=provider-account/dockerhub
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Account Name
+ """
+
+ auth_data: typing.Optional[DockerhubBasicAuth] = None
+ integrations: typing.List[DockerhubIntegrations] = pydantic.Field()
+ """
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/dockerhub_registry.py b/src/truefoundry_sdk/types/dockerhub_registry.py
new file mode 100644
index 00000000..159720ff
--- /dev/null
+++ b/src/truefoundry_sdk/types/dockerhub_registry.py
@@ -0,0 +1,52 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .dockerhub_basic_auth import DockerhubBasicAuth
+
+
+class DockerhubRegistry(UniversalBaseModel):
+ """
+ +label=Dockerhub Registry
+ +icon=docker
+ """
+
+ type: typing.Literal["integration/docker-registry/dockerhub"] = pydantic.Field(
+ default="integration/docker-registry/dockerhub"
+ )
+ """
+ +value=integration/docker-registry/dockerhub
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +sort=200
+ """
+
+ auth_data: typing.Optional[DockerhubBasicAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/dynamic_volume_config.py b/src/truefoundry_sdk/types/dynamic_volume_config.py
index 2f996f80..cd697890 100644
--- a/src/truefoundry_sdk/types/dynamic_volume_config.py
+++ b/src/truefoundry_sdk/types/dynamic_volume_config.py
@@ -26,7 +26,7 @@ class DynamicVolumeConfig(UniversalBaseModel):
size: int = pydantic.Field()
"""
- +label=Size
+ +label=Size(Gi)
+unit=Gi
+usage=Size of volume in Gi
"""
diff --git a/src/truefoundry_sdk/types/email_notification_channel.py b/src/truefoundry_sdk/types/email_notification_channel.py
new file mode 100644
index 00000000..28ef7e60
--- /dev/null
+++ b/src/truefoundry_sdk/types/email_notification_channel.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .smtp_credentials import SmtpCredentials
+
+
+class EmailNotificationChannel(UniversalBaseModel):
+ """
+ +label=Email Notification Channel
+ +icon=envelope
+ """
+
+ type: typing.Literal["integration/notification-channel/email"] = pydantic.Field(
+ default="integration/notification-channel/email"
+ )
+ """
+ +value=integration/notification-channel/email
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: SmtpCredentials
+ from_email: str = pydantic.Field()
+ """
+ +label=From Email
+ +usage=The email address from which the email will be sent.
+ +sort=1000
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=1200
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/failure_tolerance_config.py b/src/truefoundry_sdk/types/failure_tolerance_config.py
new file mode 100644
index 00000000..1bc496d5
--- /dev/null
+++ b/src/truefoundry_sdk/types/failure_tolerance_config.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FailureToleranceConfig(UniversalBaseModel):
+ allowed_failures_per_minute: int
+ cooldown_period_minutes: int
+ failure_status_codes: typing.List[int]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/fallback_config.py b/src/truefoundry_sdk/types/fallback_config.py
new file mode 100644
index 00000000..3858809e
--- /dev/null
+++ b/src/truefoundry_sdk/types/fallback_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .fallback_rule import FallbackRule
+
+
+class FallbackConfig(UniversalBaseModel):
+ name: str
+ type: typing.Literal["gateway-fallback-config"] = "gateway-fallback-config"
+ rules: typing.List[FallbackRule]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/fallback_model.py b/src/truefoundry_sdk/types/fallback_model.py
new file mode 100644
index 00000000..539e0287
--- /dev/null
+++ b/src/truefoundry_sdk/types/fallback_model.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FallbackModel(UniversalBaseModel):
+ target: str
+ override_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/fallback_rule.py b/src/truefoundry_sdk/types/fallback_rule.py
new file mode 100644
index 00000000..16d04b73
--- /dev/null
+++ b/src/truefoundry_sdk/types/fallback_rule.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .fallback_model import FallbackModel
+from .fallback_when import FallbackWhen
+
+
+class FallbackRule(UniversalBaseModel):
+ id: str
+ when: FallbackWhen
+ fallback_models: typing.List[FallbackModel]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/fallback_when.py b/src/truefoundry_sdk/types/fallback_when.py
new file mode 100644
index 00000000..3f8bf8e6
--- /dev/null
+++ b/src/truefoundry_sdk/types/fallback_when.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class FallbackWhen(UniversalBaseModel):
+ subjects: typing.Optional[typing.List[str]] = None
+ models: typing.Optional[typing.List[str]] = None
+ metadata: typing.Optional[typing.Dict[str, str]] = None
+ response_status_codes: typing.List[int]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gateway_config.py b/src/truefoundry_sdk/types/gateway_config.py
new file mode 100644
index 00000000..3b845f51
--- /dev/null
+++ b/src/truefoundry_sdk/types/gateway_config.py
@@ -0,0 +1,11 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .budget_config import BudgetConfig
+from .fallback_config import FallbackConfig
+from .guardrails_config import GuardrailsConfig
+from .load_balancing_config import LoadBalancingConfig
+from .rate_limit_config import RateLimitConfig
+
+GatewayConfig = typing.Union[RateLimitConfig, FallbackConfig, LoadBalancingConfig, GuardrailsConfig, BudgetConfig]
diff --git a/src/truefoundry_sdk/types/gcp_api_key_auth.py b/src/truefoundry_sdk/types/gcp_api_key_auth.py
new file mode 100644
index 00000000..718e3068
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_api_key_auth.py
@@ -0,0 +1,33 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class GcpApiKeyAuth(UniversalBaseModel):
+ """
+ +label=GCP API Key Auth
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: typing_extensions.Annotated[str, FieldMetadata(alias="apiKey")] = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_gcr.py b/src/truefoundry_sdk/types/gcp_gcr.py
new file mode 100644
index 00000000..b360dd66
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_gcr.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_key_file_auth import GcpKeyFileAuth
+
+
+class GcpGcr(UniversalBaseModel):
+ """
+ +icon=gcp-gcr
+ +label=GCP GCR
+ """
+
+ type: typing.Literal["integration/docker-registry/gcp/gcr"] = pydantic.Field(
+ default="integration/docker-registry/gcp/gcr"
+ )
+ """
+ +value=integration/docker-registry/gcp/gcr
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[GcpKeyFileAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_gcs.py b/src/truefoundry_sdk/types/gcp_gcs.py
new file mode 100644
index 00000000..158f81f0
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_gcs.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_key_file_auth import GcpKeyFileAuth
+
+
+class GcpGcs(UniversalBaseModel):
+ """
+ +icon=gcp-gcs
+ +label=GCP GCS
+ """
+
+ type: typing.Literal["integration/blob-storage/gcp/gcs"] = pydantic.Field(
+ default="integration/blob-storage/gcp/gcs"
+ )
+ """
+ +value=integration/blob-storage/gcp/gcs
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ storage_root: str = pydantic.Field()
+ """
+ +label=Storage Root
+ +usage=The root path of the storage.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[GcpKeyFileAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_gke_integration.py b/src/truefoundry_sdk/types/gcp_gke_integration.py
new file mode 100644
index 00000000..c3058179
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_gke_integration.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_key_file_auth import GcpKeyFileAuth
+from .gcp_region import GcpRegion
+
+
+class GcpGkeIntegration(UniversalBaseModel):
+ """
+ +icon=gcp-gke
+ +label=GCP GKE
+ """
+
+ type: typing.Literal["integration/cluster/gcp/gke-standard"] = pydantic.Field(
+ default="integration/cluster/gcp/gke-standard"
+ )
+ """
+ +value=integration/cluster/gcp/gke-standard
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ location: GcpRegion
+ cluster_name: str = pydantic.Field()
+ """
+ +label=Cluster Name
+ +usage=Name of the cluster given in the cloud account.
+ +sort=300
+ """
+
+ auth_data: typing.Optional[GcpKeyFileAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_gsm.py b/src/truefoundry_sdk/types/gcp_gsm.py
new file mode 100644
index 00000000..def1915d
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_gsm.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_key_file_auth import GcpKeyFileAuth
+
+
+class GcpGsm(UniversalBaseModel):
+ """
+ +icon=gcp-gsm
+ +label=GCP GSM
+ """
+
+ type: typing.Literal["integration/secret-store/gcp/gsm"] = pydantic.Field(
+ default="integration/secret-store/gcp/gsm"
+ )
+ """
+ +value=integration/secret-store/gcp/gsm
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: typing.Optional[GcpKeyFileAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_integrations.py b/src/truefoundry_sdk/types/gcp_integrations.py
new file mode 100644
index 00000000..f826d4bd
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_integrations.py
@@ -0,0 +1,12 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .gcp_gcr import GcpGcr
+from .gcp_gcs import GcpGcs
+from .gcp_gke_integration import GcpGkeIntegration
+from .gcp_gsm import GcpGsm
+from .google_model import GoogleModel
+from .vertex_model import VertexModel
+
+GcpIntegrations = typing.Union[GcpGcr, GcpGcs, GcpGsm, GcpGkeIntegration, VertexModel, GoogleModel]
diff --git a/src/truefoundry_sdk/types/gcp_key_file_auth.py b/src/truefoundry_sdk/types/gcp_key_file_auth.py
new file mode 100644
index 00000000..ef92de65
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_key_file_auth.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GcpKeyFileAuth(UniversalBaseModel):
+ """
+ +label=GCP Key File Auth
+ """
+
+ type: typing.Literal["key-file"] = pydantic.Field(default="key-file")
+ """
+ +value=key-file
+ """
+
+ key_file_content: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field()
+ """
+ +uiType=JsonInput
+ +label=Key File Content
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_provider_account.py b/src/truefoundry_sdk/types/gcp_provider_account.py
new file mode 100644
index 00000000..344e95f7
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_provider_account.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_integrations import GcpIntegrations
+from .gcp_provider_account_auth_data import GcpProviderAccountAuthData
+
+
+class GcpProviderAccount(UniversalBaseModel):
+ """
+ +label=GCP
+ +icon=googleCloud
+ +heroDataKey=project_id
+ """
+
+ type: typing.Literal["provider-account/gcp"] = pydantic.Field(default="provider-account/gcp")
+ """
+ +value=provider-account/gcp
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the GCP provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Project Id
+ +usage=The project id of the GCP account.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[GcpProviderAccountAuthData] = pydantic.Field(default=None)
+ """
+ +label=GCP Account Auth Data
+ +usage=Authentication data for the GCP account.
+ +sort=400
+ """
+
+ integrations: typing.List[GcpIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the GCP provider account.
+ +sort=500
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gcp_provider_account_auth_data.py b/src/truefoundry_sdk/types/gcp_provider_account_auth_data.py
new file mode 100644
index 00000000..e3702657
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_provider_account_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .gcp_api_key_auth import GcpApiKeyAuth
+from .gcp_key_file_auth import GcpKeyFileAuth
+
+GcpProviderAccountAuthData = typing.Union[GcpKeyFileAuth, GcpApiKeyAuth]
diff --git a/src/truefoundry_sdk/types/gcp_region.py b/src/truefoundry_sdk/types/gcp_region.py
new file mode 100644
index 00000000..8434758b
--- /dev/null
+++ b/src/truefoundry_sdk/types/gcp_region.py
@@ -0,0 +1,161 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class GcpRegion(str, enum.Enum):
+ NORTHAMERICA_NORTHEAST1 = "northamerica-northeast1"
+ NORTHAMERICA_NORTHEAST2 = "northamerica-northeast2"
+ SOUTHAMERICA_EAST1 = "southamerica-east1"
+ US_CENTRAL1 = "us-central1"
+ US_EAST1 = "us-east1"
+ US_EAST4 = "us-east4"
+ US_EAST5 = "us-east5"
+ US_SOUTH1 = "us-south1"
+ US_WEST1 = "us-west1"
+ US_WEST2 = "us-west2"
+ US_WEST3 = "us-west3"
+ US_WEST4 = "us-west4"
+ ASIA_EAST1 = "asia-east1"
+ ASIA_EAST2 = "asia-east2"
+ ASIA_NORTHEAST1 = "asia-northeast1"
+ ASIA_NORTHEAST2 = "asia-northeast2"
+ ASIA_NORTHEAST3 = "asia-northeast3"
+ ASIA_SOUTH1 = "asia-south1"
+ ASIA_SOUTH2 = "asia-south2"
+ ASIA_SOUTHEAST1 = "asia-southeast1"
+ ASIA_SOUTHEAST2 = "asia-southeast2"
+ AUSTRALIA_SOUTHEAST1 = "australia-southeast1"
+ AUSTRALIA_SOUTHEAST2 = "australia-southeast2"
+ EUROPE_CENTRAL2 = "europe-central2"
+ EUROPE_NORTH1 = "europe-north1"
+ EUROPE_SOUTHWEST1 = "europe-southwest1"
+ EUROPE_WEST1 = "europe-west1"
+ EUROPE_WEST2 = "europe-west2"
+ EUROPE_WEST3 = "europe-west3"
+ EUROPE_WEST4 = "europe-west4"
+ EUROPE_WEST6 = "europe-west6"
+ EUROPE_WEST8 = "europe-west8"
+ EUROPE_WEST9 = "europe-west9"
+ ME_CENTRAL1 = "me-central1"
+ ME_CENTRAL2 = "me-central2"
+ ME_WEST1 = "me-west1"
+ GLOBAL = "global"
+
+ def visit(
+ self,
+ northamerica_northeast1: typing.Callable[[], T_Result],
+ northamerica_northeast2: typing.Callable[[], T_Result],
+ southamerica_east1: typing.Callable[[], T_Result],
+ us_central1: typing.Callable[[], T_Result],
+ us_east1: typing.Callable[[], T_Result],
+ us_east4: typing.Callable[[], T_Result],
+ us_east5: typing.Callable[[], T_Result],
+ us_south1: typing.Callable[[], T_Result],
+ us_west1: typing.Callable[[], T_Result],
+ us_west2: typing.Callable[[], T_Result],
+ us_west3: typing.Callable[[], T_Result],
+ us_west4: typing.Callable[[], T_Result],
+ asia_east1: typing.Callable[[], T_Result],
+ asia_east2: typing.Callable[[], T_Result],
+ asia_northeast1: typing.Callable[[], T_Result],
+ asia_northeast2: typing.Callable[[], T_Result],
+ asia_northeast3: typing.Callable[[], T_Result],
+ asia_south1: typing.Callable[[], T_Result],
+ asia_south2: typing.Callable[[], T_Result],
+ asia_southeast1: typing.Callable[[], T_Result],
+ asia_southeast2: typing.Callable[[], T_Result],
+ australia_southeast1: typing.Callable[[], T_Result],
+ australia_southeast2: typing.Callable[[], T_Result],
+ europe_central2: typing.Callable[[], T_Result],
+ europe_north1: typing.Callable[[], T_Result],
+ europe_southwest1: typing.Callable[[], T_Result],
+ europe_west1: typing.Callable[[], T_Result],
+ europe_west2: typing.Callable[[], T_Result],
+ europe_west3: typing.Callable[[], T_Result],
+ europe_west4: typing.Callable[[], T_Result],
+ europe_west6: typing.Callable[[], T_Result],
+ europe_west8: typing.Callable[[], T_Result],
+ europe_west9: typing.Callable[[], T_Result],
+ me_central1: typing.Callable[[], T_Result],
+ me_central2: typing.Callable[[], T_Result],
+ me_west1: typing.Callable[[], T_Result],
+ global_: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is GcpRegion.NORTHAMERICA_NORTHEAST1:
+ return northamerica_northeast1()
+ if self is GcpRegion.NORTHAMERICA_NORTHEAST2:
+ return northamerica_northeast2()
+ if self is GcpRegion.SOUTHAMERICA_EAST1:
+ return southamerica_east1()
+ if self is GcpRegion.US_CENTRAL1:
+ return us_central1()
+ if self is GcpRegion.US_EAST1:
+ return us_east1()
+ if self is GcpRegion.US_EAST4:
+ return us_east4()
+ if self is GcpRegion.US_EAST5:
+ return us_east5()
+ if self is GcpRegion.US_SOUTH1:
+ return us_south1()
+ if self is GcpRegion.US_WEST1:
+ return us_west1()
+ if self is GcpRegion.US_WEST2:
+ return us_west2()
+ if self is GcpRegion.US_WEST3:
+ return us_west3()
+ if self is GcpRegion.US_WEST4:
+ return us_west4()
+ if self is GcpRegion.ASIA_EAST1:
+ return asia_east1()
+ if self is GcpRegion.ASIA_EAST2:
+ return asia_east2()
+ if self is GcpRegion.ASIA_NORTHEAST1:
+ return asia_northeast1()
+ if self is GcpRegion.ASIA_NORTHEAST2:
+ return asia_northeast2()
+ if self is GcpRegion.ASIA_NORTHEAST3:
+ return asia_northeast3()
+ if self is GcpRegion.ASIA_SOUTH1:
+ return asia_south1()
+ if self is GcpRegion.ASIA_SOUTH2:
+ return asia_south2()
+ if self is GcpRegion.ASIA_SOUTHEAST1:
+ return asia_southeast1()
+ if self is GcpRegion.ASIA_SOUTHEAST2:
+ return asia_southeast2()
+ if self is GcpRegion.AUSTRALIA_SOUTHEAST1:
+ return australia_southeast1()
+ if self is GcpRegion.AUSTRALIA_SOUTHEAST2:
+ return australia_southeast2()
+ if self is GcpRegion.EUROPE_CENTRAL2:
+ return europe_central2()
+ if self is GcpRegion.EUROPE_NORTH1:
+ return europe_north1()
+ if self is GcpRegion.EUROPE_SOUTHWEST1:
+ return europe_southwest1()
+ if self is GcpRegion.EUROPE_WEST1:
+ return europe_west1()
+ if self is GcpRegion.EUROPE_WEST2:
+ return europe_west2()
+ if self is GcpRegion.EUROPE_WEST3:
+ return europe_west3()
+ if self is GcpRegion.EUROPE_WEST4:
+ return europe_west4()
+ if self is GcpRegion.EUROPE_WEST6:
+ return europe_west6()
+ if self is GcpRegion.EUROPE_WEST8:
+ return europe_west8()
+ if self is GcpRegion.EUROPE_WEST9:
+ return europe_west9()
+ if self is GcpRegion.ME_CENTRAL1:
+ return me_central1()
+ if self is GcpRegion.ME_CENTRAL2:
+ return me_central2()
+ if self is GcpRegion.ME_WEST1:
+ return me_west1()
+ if self is GcpRegion.GLOBAL:
+ return global_()
diff --git a/src/truefoundry_sdk/types/gemini_model_v2.py b/src/truefoundry_sdk/types/gemini_model_v2.py
new file mode 100644
index 00000000..df169183
--- /dev/null
+++ b/src/truefoundry_sdk/types/gemini_model_v2.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class GeminiModelV2(UniversalBaseModel):
+ """
+ +label=Gemini Model
+ +icon=googleCloud
+ """
+
+ type: typing.Literal["integration/model/gemini"] = pydantic.Field(default="integration/model/gemini")
+ """
+ +value=integration/model/gemini
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Gemini model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The unique identifier for the Gemini model
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Gemini model (e.g., chat, text, etc.)
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/github_integration.py b/src/truefoundry_sdk/types/github_integration.py
new file mode 100644
index 00000000..a4b977b9
--- /dev/null
+++ b/src/truefoundry_sdk/types/github_integration.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GithubIntegration(UniversalBaseModel):
+ """
+ +label=Github
+ +icon=github
+ """
+
+ type: typing.Literal["integration/vcs/github"] = pydantic.Field(default="integration/vcs/github")
+ """
+ +value=integration/vcs/github
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ account_name: str = pydantic.Field()
+ """
+ +label=Account Name
+ +sort=200
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/github_provider_account.py b/src/truefoundry_sdk/types/github_provider_account.py
new file mode 100644
index 00000000..aa06a9d2
--- /dev/null
+++ b/src/truefoundry_sdk/types/github_provider_account.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .github_integration import GithubIntegration
+
+
+class GithubProviderAccount(UniversalBaseModel):
+ """
+ +label=Github
+ +icon=github
+ """
+
+ type: typing.Literal["provider-account/github"] = pydantic.Field(default="provider-account/github")
+ """
+ +value=provider-account/github
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ """
+
+ integrations: typing.List[GithubIntegration] = pydantic.Field()
+ """
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gitlab_integration.py b/src/truefoundry_sdk/types/gitlab_integration.py
new file mode 100644
index 00000000..810de13d
--- /dev/null
+++ b/src/truefoundry_sdk/types/gitlab_integration.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GitlabIntegration(UniversalBaseModel):
+ """
+ +label=Gitlab
+ +icon=gitlab
+ """
+
+ type: typing.Literal["integration/vcs/gitlab"] = pydantic.Field(default="integration/vcs/gitlab")
+ """
+ +value=integration/vcs/gitlab
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=100
+ """
+
+ account_name: str = pydantic.Field()
+ """
+ +label=Account Name
+ +sort=200
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/gitlab_provider_account.py b/src/truefoundry_sdk/types/gitlab_provider_account.py
new file mode 100644
index 00000000..20b432fa
--- /dev/null
+++ b/src/truefoundry_sdk/types/gitlab_provider_account.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gitlab_integration import GitlabIntegration
+
+
+class GitlabProviderAccount(UniversalBaseModel):
+ """
+ +label=Gitlab
+ +icon=gitlab
+ """
+
+ type: typing.Literal["provider-account/gitlab"] = pydantic.Field(default="provider-account/gitlab")
+ """
+ +value=provider-account/gitlab
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ """
+
+ integrations: typing.List[GitlabIntegration] = pydantic.Field()
+ """
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/google_gemini_provider_account.py b/src/truefoundry_sdk/types/google_gemini_provider_account.py
new file mode 100644
index 00000000..58873078
--- /dev/null
+++ b/src/truefoundry_sdk/types/google_gemini_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .gcp_api_key_auth import GcpApiKeyAuth
+from .gemini_model_v2 import GeminiModelV2
+
+
+class GoogleGeminiProviderAccount(UniversalBaseModel):
+ """
+ +label=Google Gemini Provider Account
+ +icon=googleCloud
+ """
+
+ type: typing.Literal["provider-account/google-gemini"] = pydantic.Field(default="provider-account/google-gemini")
+ """
+ +value=provider-account/google-gemini
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Google Gemini provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: GcpApiKeyAuth
+ integrations: typing.List[GeminiModelV2] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the Google Gemini provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=200
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/google_model.py b/src/truefoundry_sdk/types/google_model.py
new file mode 100644
index 00000000..61c3b6fc
--- /dev/null
+++ b/src/truefoundry_sdk/types/google_model.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_api_key_auth import GcpApiKeyAuth
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class GoogleModel(UniversalBaseModel):
+ """
+ +label=Google Model
+ +icon=googleCloud
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +sort=2
+ """
+
+ type: typing.Literal["integration/model/gcp/google"] = pydantic.Field(default="integration/model/gcp/google")
+ """
+ +value=integration/model/gcp/google
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ auth_data: typing.Optional[GcpApiKeyAuth] = None
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/google_vertex_provider_account.py b/src/truefoundry_sdk/types/google_vertex_provider_account.py
new file mode 100644
index 00000000..82aa8120
--- /dev/null
+++ b/src/truefoundry_sdk/types/google_vertex_provider_account.py
@@ -0,0 +1,66 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .gcp_key_file_auth import GcpKeyFileAuth
+from .gcp_region import GcpRegion
+from .vertex_model_v2 import VertexModelV2
+
+
+class GoogleVertexProviderAccount(UniversalBaseModel):
+ """
+ +label=Google Vertex Provider Account
+ +icon=googleCloud
+ +heroDataKey=project_id
+ """
+
+ type: typing.Literal["provider-account/google-vertex"] = pydantic.Field(default="provider-account/google-vertex")
+ """
+ +value=provider-account/google-vertex
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Google Vertex provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ project_id: str = pydantic.Field()
+ """
+ +label=Project ID
+ +sort=200
+ +usage=The Google Cloud project ID where Vertex AI is enabled
+ +message=Project ID must not be empty
+ """
+
+ region: GcpRegion
+ auth_data: typing.Optional[GcpKeyFileAuth] = None
+ integrations: typing.List[VertexModelV2] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the Google Vertex provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=600
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/groq_integrations.py b/src/truefoundry_sdk/types/groq_integrations.py
new file mode 100644
index 00000000..0a94547a
--- /dev/null
+++ b/src/truefoundry_sdk/types/groq_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .groq_model import GroqModel
+
+GroqIntegrations = GroqModel
diff --git a/src/truefoundry_sdk/types/groq_key_auth.py b/src/truefoundry_sdk/types/groq_key_auth.py
new file mode 100644
index 00000000..f781dd72
--- /dev/null
+++ b/src/truefoundry_sdk/types/groq_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GroqKeyAuth(UniversalBaseModel):
+ """
+ +label=Groq API Key Auth
+ +icon=groq
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for Groq authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/groq_model.py b/src/truefoundry_sdk/types/groq_model.py
new file mode 100644
index 00000000..a7115f3d
--- /dev/null
+++ b/src/truefoundry_sdk/types/groq_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class GroqModel(UniversalBaseModel):
+ """
+ +label=Groq Model
+ +icon=groq
+ """
+
+ type: typing.Literal["integration/model/groq"] = pydantic.Field(default="integration/model/groq")
+ """
+ +value=integration/model/groq
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Groq model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Groq model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Groq model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/groq_provider_account.py b/src/truefoundry_sdk/types/groq_provider_account.py
new file mode 100644
index 00000000..aeaa39f4
--- /dev/null
+++ b/src/truefoundry_sdk/types/groq_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .groq_integrations import GroqIntegrations
+from .groq_key_auth import GroqKeyAuth
+
+
+class GroqProviderAccount(UniversalBaseModel):
+ """
+ +label=Groq Provider Account
+ +icon=groq
+ """
+
+ type: typing.Literal["provider-account/groq"] = pydantic.Field(default="provider-account/groq")
+ """
+ +value=provider-account/groq
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Groq provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: GroqKeyAuth
+ integrations: typing.Optional[typing.List[GroqIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Groq provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/guardrail_config.py b/src/truefoundry_sdk/types/guardrail_config.py
new file mode 100644
index 00000000..d561d95c
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrail_config.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardrail_config_action import GuardrailConfigAction
+from .guardrails_options import GuardrailsOptions
+
+
+class GuardrailConfig(UniversalBaseModel):
+ type: str = pydantic.Field()
+ """
+ +usage=Type of the guardrail
+ """
+
+ action: GuardrailConfigAction = pydantic.Field()
+ """
+ +usage=Action to perform with the guardrail
+ """
+
+ options: GuardrailsOptions
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/guardrail_config_action.py b/src/truefoundry_sdk/types/guardrail_config_action.py
new file mode 100644
index 00000000..05f5f202
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrail_config_action.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class GuardrailConfigAction(str, enum.Enum):
+ """
+ +usage=Action to perform with the guardrail
+ """
+
+ VALIDATE = "validate"
+ TRANSFORM = "transform"
+
+ def visit(self, validate: typing.Callable[[], T_Result], transform: typing.Callable[[], T_Result]) -> T_Result:
+ if self is GuardrailConfigAction.VALIDATE:
+ return validate()
+ if self is GuardrailConfigAction.TRANSFORM:
+ return transform()
diff --git a/src/truefoundry_sdk/types/guardrails_config.py b/src/truefoundry_sdk/types/guardrails_config.py
new file mode 100644
index 00000000..f798cae2
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrails_config.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardrails_rule import GuardrailsRule
+
+
+class GuardrailsConfig(UniversalBaseModel):
+ name: str = pydantic.Field()
+ """
+ +usage=Name of the guardrails configuration
+ """
+
+ type: typing.Literal["gateway-guardrails-config"] = pydantic.Field(default="gateway-guardrails-config")
+ """
+ +value=gateway-guardrails-config
+ """
+
+ rules: typing.List[GuardrailsRule] = pydantic.Field()
+ """
+ +usage=List of guardrail rules
+ """
+
+ guardrails_service_url: str = pydantic.Field()
+ """
+ +usage=URL of the guardrails service
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/guardrails_options.py b/src/truefoundry_sdk/types/guardrails_options.py
new file mode 100644
index 00000000..98bdcc08
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrails_options.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+GuardrailsOptions = typing.Dict[str, typing.Optional[typing.Any]]
diff --git a/src/truefoundry_sdk/types/guardrails_rule.py b/src/truefoundry_sdk/types/guardrails_rule.py
new file mode 100644
index 00000000..7041025a
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrails_rule.py
@@ -0,0 +1,34 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .guardrail_config import GuardrailConfig
+from .guardrails_when import GuardrailsWhen
+
+
+class GuardrailsRule(UniversalBaseModel):
+ id: str = pydantic.Field()
+ """
+ +usage=Unique identifier for the rule
+ """
+
+ when: GuardrailsWhen
+ input_guardrails: typing.List[GuardrailConfig] = pydantic.Field()
+ """
+ +usage=Guardrails to apply to the input
+ """
+
+ output_guardrails: typing.List[GuardrailConfig] = pydantic.Field()
+ """
+ +usage=Guardrails to apply to the output
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/guardrails_when.py b/src/truefoundry_sdk/types/guardrails_when.py
new file mode 100644
index 00000000..ee751785
--- /dev/null
+++ b/src/truefoundry_sdk/types/guardrails_when.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class GuardrailsWhen(UniversalBaseModel):
+ subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +usage=List of subjects that this rule applies to
+ """
+
+ models: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +usage=List of models that this rule applies to
+ """
+
+ metadata: typing.Optional[typing.Dict[str, str]] = pydantic.Field(default=None)
+ """
+ +usage=Metadata key-value pairs that this rule applies to
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/infra_provider_account.py b/src/truefoundry_sdk/types/infra_provider_account.py
new file mode 100644
index 00000000..c2248965
--- /dev/null
+++ b/src/truefoundry_sdk/types/infra_provider_account.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .aws_provider_account import AwsProviderAccount
+from .azure_provider_account import AzureProviderAccount
+from .bitbucket_provider_account import BitbucketProviderAccount
+from .custom_provider_account import CustomProviderAccount
+from .dockerhub_provider_account import DockerhubProviderAccount
+from .gcp_provider_account import GcpProviderAccount
+from .github_provider_account import GithubProviderAccount
+from .gitlab_provider_account import GitlabProviderAccount
+from .jfrog_provider_account import JfrogProviderAccount
+from .pager_duty_provider_account import PagerDutyProviderAccount
+from .quay_provider_account import QuayProviderAccount
+from .slack_provider_account import SlackProviderAccount
+from .true_foundry_provider_account import TrueFoundryProviderAccount
+from .ttl_provider_account import TtlProviderAccount
+from .webhook_provider_account import WebhookProviderAccount
+
+InfraProviderAccount = typing.Union[
+ AwsProviderAccount,
+ AzureProviderAccount,
+ GcpProviderAccount,
+ DockerhubProviderAccount,
+ BitbucketProviderAccount,
+ CustomProviderAccount,
+ GithubProviderAccount,
+ GitlabProviderAccount,
+ JfrogProviderAccount,
+ TtlProviderAccount,
+ TrueFoundryProviderAccount,
+ QuayProviderAccount,
+ SlackProviderAccount,
+ WebhookProviderAccount,
+ PagerDutyProviderAccount,
+]
diff --git a/src/truefoundry_sdk/types/input_output_based_cost_metric_value.py b/src/truefoundry_sdk/types/input_output_based_cost_metric_value.py
new file mode 100644
index 00000000..85a5b1ce
--- /dev/null
+++ b/src/truefoundry_sdk/types/input_output_based_cost_metric_value.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class InputOutputBasedCostMetricValue(UniversalBaseModel):
+ input: float
+ output: float
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/j_frog_integrations.py b/src/truefoundry_sdk/types/j_frog_integrations.py
new file mode 100644
index 00000000..88bda706
--- /dev/null
+++ b/src/truefoundry_sdk/types/j_frog_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .jfrog_artifacts_registry import JfrogArtifactsRegistry
+
+JFrogIntegrations = JfrogArtifactsRegistry
diff --git a/src/truefoundry_sdk/types/jfrog_artifacts_registry.py b/src/truefoundry_sdk/types/jfrog_artifacts_registry.py
new file mode 100644
index 00000000..7f405e26
--- /dev/null
+++ b/src/truefoundry_sdk/types/jfrog_artifacts_registry.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .jfrog_basic_auth import JfrogBasicAuth
+
+
+class JfrogArtifactsRegistry(UniversalBaseModel):
+ """
+ +label=Jfrog Artifacts Registry
+ +icon=jfrog
+ """
+
+ type: typing.Literal["integration/docker-registry/jfrog"] = pydantic.Field(
+ default="integration/docker-registry/jfrog"
+ )
+ """
+ +value=integration/docker-registry/jfrog
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[JfrogBasicAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/jfrog_basic_auth.py b/src/truefoundry_sdk/types/jfrog_basic_auth.py
new file mode 100644
index 00000000..66ececee
--- /dev/null
+++ b/src/truefoundry_sdk/types/jfrog_basic_auth.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class JfrogBasicAuth(UniversalBaseModel):
+ """
+ +label=Jfrog Basic Auth
+ """
+
+ type: typing.Literal["basic-auth"] = pydantic.Field(default="basic-auth")
+ """
+ +value=basic-auth
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=The username for the basic authentication.
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +sort=200
+ +label=Password
+ +usage=The password for the basic authentication.
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/jfrog_provider_account.py b/src/truefoundry_sdk/types/jfrog_provider_account.py
new file mode 100644
index 00000000..7ae1076e
--- /dev/null
+++ b/src/truefoundry_sdk/types/jfrog_provider_account.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .j_frog_integrations import JFrogIntegrations
+from .jfrog_basic_auth import JfrogBasicAuth
+
+
+class JfrogProviderAccount(UniversalBaseModel):
+ """
+ +label=Jfrog
+ +icon=jfrog
+ """
+
+ type: typing.Literal["provider-account/jfrog"] = pydantic.Field(default="provider-account/jfrog")
+ """
+ +value=provider-account/jfrog
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Account Name
+ +usage=The name of the JFrog account.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[JfrogBasicAuth] = None
+ integrations: typing.List[JFrogIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/job.py b/src/truefoundry_sdk/types/job.py
index 86333f4c..03e50811 100644
--- a/src/truefoundry_sdk/types/job.py
+++ b/src/truefoundry_sdk/types/job.py
@@ -54,6 +54,7 @@ class Job(UniversalBaseModel):
params: typing.Optional[typing.List[Param]] = pydantic.Field(default=None)
"""
+label=Params for input
+ +uiType=ParamsInput
+usage=Configure params and pass it to create different job runs
+sort=400
"""
diff --git a/src/truefoundry_sdk/types/latency_based_load_balance_target.py b/src/truefoundry_sdk/types/latency_based_load_balance_target.py
new file mode 100644
index 00000000..864c1f00
--- /dev/null
+++ b/src/truefoundry_sdk/types/latency_based_load_balance_target.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class LatencyBasedLoadBalanceTarget(UniversalBaseModel):
+ target: str
+ override_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/latency_based_load_balancing_rule.py b/src/truefoundry_sdk/types/latency_based_load_balancing_rule.py
new file mode 100644
index 00000000..97670e30
--- /dev/null
+++ b/src/truefoundry_sdk/types/latency_based_load_balancing_rule.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .latency_based_load_balance_target import LatencyBasedLoadBalanceTarget
+from .load_balancing_when import LoadBalancingWhen
+
+
+class LatencyBasedLoadBalancingRule(UniversalBaseModel):
+ id: str
+ when: LoadBalancingWhen
+ load_balance_targets: typing.List[LatencyBasedLoadBalanceTarget]
+ type: typing.Literal["latency-based-routing"] = "latency-based-routing"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/load_balance_target.py b/src/truefoundry_sdk/types/load_balance_target.py
new file mode 100644
index 00000000..8c3d4d49
--- /dev/null
+++ b/src/truefoundry_sdk/types/load_balance_target.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class LoadBalanceTarget(UniversalBaseModel):
+ target: str
+ weight: int
+ override_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/load_balancing_config.py b/src/truefoundry_sdk/types/load_balancing_config.py
new file mode 100644
index 00000000..9615e0c6
--- /dev/null
+++ b/src/truefoundry_sdk/types/load_balancing_config.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .load_balancing_rule import LoadBalancingRule
+from .model_config import ModelConfig
+
+
+class LoadBalancingConfig(UniversalBaseModel):
+ name: str
+ type: typing.Literal["gateway-load-balancing-config"] = "gateway-load-balancing-config"
+ model_configs: typing.Optional[typing.List[ModelConfig]] = None
+ rules: typing.List[LoadBalancingRule]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/load_balancing_rule.py b/src/truefoundry_sdk/types/load_balancing_rule.py
new file mode 100644
index 00000000..9bbe83cc
--- /dev/null
+++ b/src/truefoundry_sdk/types/load_balancing_rule.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .latency_based_load_balancing_rule import LatencyBasedLoadBalancingRule
+from .weight_based_load_balancing_rule import WeightBasedLoadBalancingRule
+
+LoadBalancingRule = typing.Union[WeightBasedLoadBalancingRule, LatencyBasedLoadBalancingRule]
diff --git a/src/truefoundry_sdk/types/load_balancing_when.py b/src/truefoundry_sdk/types/load_balancing_when.py
new file mode 100644
index 00000000..b854e043
--- /dev/null
+++ b/src/truefoundry_sdk/types/load_balancing_when.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class LoadBalancingWhen(UniversalBaseModel):
+ subjects: typing.Optional[typing.List[str]] = None
+ models: typing.List[str]
+ metadata: typing.Optional[typing.Dict[str, str]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mcp_server_auth.py b/src/truefoundry_sdk/types/mcp_server_auth.py
new file mode 100644
index 00000000..6b9f46ca
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_auth.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .mcp_server_header_auth import McpServerHeaderAuth
+from .mcp_server_o_auth2 import McpServerOAuth2
+
+McpServerAuth = typing.Union[McpServerHeaderAuth, McpServerOAuth2]
diff --git a/src/truefoundry_sdk/types/mcp_server_header_auth.py b/src/truefoundry_sdk/types/mcp_server_header_auth.py
new file mode 100644
index 00000000..5f1d65d6
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_header_auth.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class McpServerHeaderAuth(UniversalBaseModel):
+ """
+ +label=Header Auth
+ """
+
+ type: typing.Literal["header"] = pydantic.Field(default="header")
+ """
+ +value=header
+ """
+
+ headers: typing.Dict[str, str]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mcp_server_integration.py b/src/truefoundry_sdk/types/mcp_server_integration.py
new file mode 100644
index 00000000..f4356450
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_integration.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .mcp_server_auth import McpServerAuth
+
+
+class McpServerIntegration(UniversalBaseModel):
+ """
+ +label=MCP Server
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/mcp-server/hosted-mcp-server"] = pydantic.Field(
+ default="integration/mcp-server/hosted-mcp-server"
+ )
+ """
+ +value=integration/mcp-server/hosted-mcp-server
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=The name of the MCP Server.
+ +sort=100
+ """
+
+ description: str = pydantic.Field()
+ """
+ +label=Description
+ +usage=Provide a brief description of the purpose of this MCP Server.
+ +uiType=TextArea
+ +message=1 to 1000 characters long, may contain any character except newlines
+ +sort=200
+ +uiProps={"descriptionInline":true}
+ """
+
+ url: str = pydantic.Field()
+ """
+ +label=URL
+ +usage=The endpoint URL for the MCP Server. The system will first try a connection using streamable-http transport on this URL. If that fails, it will attempt a connection using SSE transport on /sse.
+ +sort=300
+ """
+
+ auth_data: typing.Optional[McpServerAuth] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mcp_server_integrations.py b/src/truefoundry_sdk/types/mcp_server_integrations.py
new file mode 100644
index 00000000..e61b35c4
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .mcp_server_integration import McpServerIntegration
+
+McpServerIntegrations = McpServerIntegration
diff --git a/src/truefoundry_sdk/types/mcp_server_o_auth2.py b/src/truefoundry_sdk/types/mcp_server_o_auth2.py
new file mode 100644
index 00000000..36d46cca
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_o_auth2.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .base_o_auth2login import BaseOAuth2Login
+
+
+class McpServerOAuth2(BaseOAuth2Login):
+ """
+ +label=OAuth2
+ """
+
+ type: typing.Optional[typing.Literal["oauth2"]] = pydantic.Field(default=None)
+ """
+ +value=oauth2
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mcp_server_provider_account.py b/src/truefoundry_sdk/types/mcp_server_provider_account.py
new file mode 100644
index 00000000..cc11c6d5
--- /dev/null
+++ b/src/truefoundry_sdk/types/mcp_server_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .mcp_server_integrations import McpServerIntegrations
+
+
+class McpServerProviderAccount(UniversalBaseModel):
+ """
+ +label=MCP Server Group
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["provider-account/hosted-mcp-server"] = pydantic.Field(
+ default="provider-account/hosted-mcp-server"
+ )
+ """
+ +value=provider-account/hosted-mcp-server
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the MCP Server Group.
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=200
+ +usage=List of users who have access to this MCP Server Group.
+ +uiType=Collaborators
+ """
+
+ integrations: typing.List[McpServerIntegrations] = pydantic.Field()
+ """
+ +label=MCP Servers
+ +usage=List of MCP Servers, which are part of this MCP Server Group.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mistral_ai_integrations.py b/src/truefoundry_sdk/types/mistral_ai_integrations.py
new file mode 100644
index 00000000..6a51934d
--- /dev/null
+++ b/src/truefoundry_sdk/types/mistral_ai_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .mistral_ai_model import MistralAiModel
+
+MistralAiIntegrations = MistralAiModel
diff --git a/src/truefoundry_sdk/types/mistral_ai_key_auth.py b/src/truefoundry_sdk/types/mistral_ai_key_auth.py
new file mode 100644
index 00000000..7e4757e5
--- /dev/null
+++ b/src/truefoundry_sdk/types/mistral_ai_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class MistralAiKeyAuth(UniversalBaseModel):
+ """
+ +label=Mistral AI API Key Auth
+ +icon=mistral-ai
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for Mistral AI authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mistral_ai_model.py b/src/truefoundry_sdk/types/mistral_ai_model.py
new file mode 100644
index 00000000..157457e2
--- /dev/null
+++ b/src/truefoundry_sdk/types/mistral_ai_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class MistralAiModel(UniversalBaseModel):
+ """
+ +label=Mistral AI Model
+ +icon=mistral-ai
+ """
+
+ type: typing.Literal["integration/model/mistral-ai"] = pydantic.Field(default="integration/model/mistral-ai")
+ """
+ +value=integration/model/mistral-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Mistral AI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Mistral AI model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Mistral AI model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/mistral_ai_provider_account.py b/src/truefoundry_sdk/types/mistral_ai_provider_account.py
new file mode 100644
index 00000000..6d3dd514
--- /dev/null
+++ b/src/truefoundry_sdk/types/mistral_ai_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .mistral_ai_integrations import MistralAiIntegrations
+from .mistral_ai_key_auth import MistralAiKeyAuth
+
+
+class MistralAiProviderAccount(UniversalBaseModel):
+ """
+ +label=Mistral AI Provider Account
+ +icon=mistral-ai
+ """
+
+ type: typing.Literal["provider-account/mistral-ai"] = pydantic.Field(default="provider-account/mistral-ai")
+ """
+ +value=provider-account/mistral-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Mistral AI provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: MistralAiKeyAuth
+ integrations: typing.Optional[typing.List[MistralAiIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Mistral AI provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/model_config.py b/src/truefoundry_sdk/types/model_config.py
new file mode 100644
index 00000000..08786b19
--- /dev/null
+++ b/src/truefoundry_sdk/types/model_config.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .failure_tolerance_config import FailureToleranceConfig
+from .usage_limits import UsageLimits
+
+
+class ModelConfig(UniversalBaseModel):
+ model: str
+ usage_limits: typing.Optional[UsageLimits] = None
+ failure_tolerance: typing.Optional[FailureToleranceConfig] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/model_cost_metric.py b/src/truefoundry_sdk/types/model_cost_metric.py
new file mode 100644
index 00000000..18d6deb3
--- /dev/null
+++ b/src/truefoundry_sdk/types/model_cost_metric.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .per_thousand_embedding_tokens_cost_metric import PerThousandEmbeddingTokensCostMetric
+from .per_thousand_tokens_cost_metric import PerThousandTokensCostMetric
+from .public_cost_metric import PublicCostMetric
+
+ModelCostMetric = typing.Union[PerThousandTokensCostMetric, PerThousandEmbeddingTokensCostMetric, PublicCostMetric]
diff --git a/src/truefoundry_sdk/types/model_provider_account.py b/src/truefoundry_sdk/types/model_provider_account.py
new file mode 100644
index 00000000..fdea4144
--- /dev/null
+++ b/src/truefoundry_sdk/types/model_provider_account.py
@@ -0,0 +1,45 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .ai21provider_account import Ai21ProviderAccount
+from .anthropic_provider_account import AnthropicProviderAccount
+from .aws_bedrock_provider_account import AwsBedrockProviderAccount
+from .azure_foundry_provider_account import AzureFoundryProviderAccount
+from .azure_open_ai_provider_account import AzureOpenAiProviderAccount
+from .cohere_provider_account import CohereProviderAccount
+from .databricks_provider_account import DatabricksProviderAccount
+from .deepinfra_provider_account import DeepinfraProviderAccount
+from .google_gemini_provider_account import GoogleGeminiProviderAccount
+from .google_vertex_provider_account import GoogleVertexProviderAccount
+from .groq_provider_account import GroqProviderAccount
+from .mistral_ai_provider_account import MistralAiProviderAccount
+from .nomic_provider_account import NomicProviderAccount
+from .ollama_provider_account import OllamaProviderAccount
+from .openai_provider_account import OpenaiProviderAccount
+from .palm_provider_account import PalmProviderAccount
+from .perplexity_ai_provider_account import PerplexityAiProviderAccount
+from .self_hosted_model_provider_account import SelfHostedModelProviderAccount
+from .together_ai_provider_account import TogetherAiProviderAccount
+
+ModelProviderAccount = typing.Union[
+ AwsBedrockProviderAccount,
+ GoogleVertexProviderAccount,
+ GoogleGeminiProviderAccount,
+ AzureOpenAiProviderAccount,
+ AzureFoundryProviderAccount,
+ CohereProviderAccount,
+ Ai21ProviderAccount,
+ AnthropicProviderAccount,
+ DeepinfraProviderAccount,
+ GroqProviderAccount,
+ MistralAiProviderAccount,
+ PerplexityAiProviderAccount,
+ TogetherAiProviderAccount,
+ NomicProviderAccount,
+ PalmProviderAccount,
+ OllamaProviderAccount,
+ OpenaiProviderAccount,
+ DatabricksProviderAccount,
+ SelfHostedModelProviderAccount,
+]
diff --git a/src/truefoundry_sdk/types/model_type.py b/src/truefoundry_sdk/types/model_type.py
new file mode 100644
index 00000000..03bb42fc
--- /dev/null
+++ b/src/truefoundry_sdk/types/model_type.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class ModelType(str, enum.Enum):
+ """
+ +label=Model Type
+ +uiType=Select
+ """
+
+ CHAT = "chat"
+ COMPLETION = "completion"
+ EMBEDDING = "embedding"
+ REALTIME = "realtime"
+ RERANK = "rerank"
+ AUDIO = "audio"
+ MODERATION = "moderation"
+
+ def visit(
+ self,
+ chat: typing.Callable[[], T_Result],
+ completion: typing.Callable[[], T_Result],
+ embedding: typing.Callable[[], T_Result],
+ realtime: typing.Callable[[], T_Result],
+ rerank: typing.Callable[[], T_Result],
+ audio: typing.Callable[[], T_Result],
+ moderation: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is ModelType.CHAT:
+ return chat()
+ if self is ModelType.COMPLETION:
+ return completion()
+ if self is ModelType.EMBEDDING:
+ return embedding()
+ if self is ModelType.REALTIME:
+ return realtime()
+ if self is ModelType.RERANK:
+ return rerank()
+ if self is ModelType.AUDIO:
+ return audio()
+ if self is ModelType.MODERATION:
+ return moderation()
diff --git a/src/truefoundry_sdk/types/nomic_integrations.py b/src/truefoundry_sdk/types/nomic_integrations.py
new file mode 100644
index 00000000..0bbeb3a4
--- /dev/null
+++ b/src/truefoundry_sdk/types/nomic_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .nomic_model import NomicModel
+
+NomicIntegrations = NomicModel
diff --git a/src/truefoundry_sdk/types/nomic_key_auth.py b/src/truefoundry_sdk/types/nomic_key_auth.py
new file mode 100644
index 00000000..8b8ff5e7
--- /dev/null
+++ b/src/truefoundry_sdk/types/nomic_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class NomicKeyAuth(UniversalBaseModel):
+ """
+ +label=Nomic API Key Auth
+ +icon=nomic
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=The API key for Nomic authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/nomic_model.py b/src/truefoundry_sdk/types/nomic_model.py
new file mode 100644
index 00000000..32c22376
--- /dev/null
+++ b/src/truefoundry_sdk/types/nomic_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class NomicModel(UniversalBaseModel):
+ """
+ +label=Nomic Model
+ +icon=nomic
+ """
+
+ type: typing.Literal["integration/model/nomic"] = pydantic.Field(default="integration/model/nomic")
+ """
+ +value=integration/model/nomic
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Nomic model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Nomic model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Nomic model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/nomic_provider_account.py b/src/truefoundry_sdk/types/nomic_provider_account.py
new file mode 100644
index 00000000..26f27f8d
--- /dev/null
+++ b/src/truefoundry_sdk/types/nomic_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .nomic_integrations import NomicIntegrations
+from .nomic_key_auth import NomicKeyAuth
+
+
+class NomicProviderAccount(UniversalBaseModel):
+ """
+ +label=Nomic Provider Account
+ +icon=nomic
+ """
+
+ type: typing.Literal["provider-account/nomic"] = pydantic.Field(default="provider-account/nomic")
+ """
+ +value=provider-account/nomic
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Nomic provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: NomicKeyAuth
+ integrations: typing.Optional[typing.List[NomicIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Nomic provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/notification_target_for_alert_rule.py b/src/truefoundry_sdk/types/notification_target_for_alert_rule.py
new file mode 100644
index 00000000..08427567
--- /dev/null
+++ b/src/truefoundry_sdk/types/notification_target_for_alert_rule.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .email import Email
+from .pager_duty import PagerDuty
+from .slack_bot import SlackBot
+
+NotificationTargetForAlertRule = typing.Union[Email, SlackBot, PagerDuty]
diff --git a/src/truefoundry_sdk/types/o_auth2login_provider.py b/src/truefoundry_sdk/types/o_auth2login_provider.py
new file mode 100644
index 00000000..943de518
--- /dev/null
+++ b/src/truefoundry_sdk/types/o_auth2login_provider.py
@@ -0,0 +1,22 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2
+from .base_o_auth2login import BaseOAuth2Login
+
+
+class OAuth2LoginProvider(BaseOAuth2Login):
+ type: typing.Optional[typing.Literal["oauth2"]] = pydantic.Field(default=None)
+ """
+ +value=oauth2
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ollama_integrations.py b/src/truefoundry_sdk/types/ollama_integrations.py
new file mode 100644
index 00000000..472120e8
--- /dev/null
+++ b/src/truefoundry_sdk/types/ollama_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .ollama_model import OllamaModel
+
+OllamaIntegrations = OllamaModel
diff --git a/src/truefoundry_sdk/types/ollama_key_auth.py b/src/truefoundry_sdk/types/ollama_key_auth.py
new file mode 100644
index 00000000..4990ddd9
--- /dev/null
+++ b/src/truefoundry_sdk/types/ollama_key_auth.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class OllamaKeyAuth(UniversalBaseModel):
+ """
+ +label=Ollama API Key Auth
+ +icon=ollama
+ """
+
+ custom_host: str = pydantic.Field()
+ """
+ +label=Custom Host
+ +sort=100
+ +usage=The custom host URL for Ollama API
+ +message=Host URL must not be empty
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ollama_model.py b/src/truefoundry_sdk/types/ollama_model.py
new file mode 100644
index 00000000..295bebd3
--- /dev/null
+++ b/src/truefoundry_sdk/types/ollama_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class OllamaModel(UniversalBaseModel):
+ """
+ +label=Ollama Model
+ +icon=ollama
+ """
+
+ type: typing.Literal["integration/model/ollama"] = pydantic.Field(default="integration/model/ollama")
+ """
+ +value=integration/model/ollama
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Ollama model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Ollama model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Ollama model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ollama_provider_account.py b/src/truefoundry_sdk/types/ollama_provider_account.py
new file mode 100644
index 00000000..f2e9d940
--- /dev/null
+++ b/src/truefoundry_sdk/types/ollama_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .ollama_integrations import OllamaIntegrations
+from .ollama_key_auth import OllamaKeyAuth
+
+
+class OllamaProviderAccount(UniversalBaseModel):
+ """
+ +label=Ollama Provider Account
+ +icon=ollama
+ """
+
+ type: typing.Literal["provider-account/ollama"] = pydantic.Field(default="provider-account/ollama")
+ """
+ +value=provider-account/ollama
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Ollama provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: OllamaKeyAuth
+ integrations: typing.List[OllamaIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Ollama provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/open_ai_integrations.py b/src/truefoundry_sdk/types/open_ai_integrations.py
new file mode 100644
index 00000000..9d16e4d6
--- /dev/null
+++ b/src/truefoundry_sdk/types/open_ai_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .open_ai_model import OpenAiModel
+
+OpenAiIntegrations = OpenAiModel
diff --git a/src/truefoundry_sdk/types/open_ai_model.py b/src/truefoundry_sdk/types/open_ai_model.py
new file mode 100644
index 00000000..85f588df
--- /dev/null
+++ b/src/truefoundry_sdk/types/open_ai_model.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class OpenAiModel(UniversalBaseModel):
+ """
+ +label=OpenAI Model
+ +icon=openai
+ """
+
+ type: typing.Literal["integration/model/openai"] = pydantic.Field(default="integration/model/openai")
+ """
+ +value=integration/model/openai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this OpenAI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the OpenAI model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the OpenAI model
+ +uiType=Select
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/openai_api_key_auth.py b/src/truefoundry_sdk/types/openai_api_key_auth.py
new file mode 100644
index 00000000..088d2c22
--- /dev/null
+++ b/src/truefoundry_sdk/types/openai_api_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class OpenaiApiKeyAuth(UniversalBaseModel):
+ """
+ +label=OpenAI API Key Auth
+ +icon=openai
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=Your OpenAI API key for authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/openai_provider_account.py b/src/truefoundry_sdk/types/openai_provider_account.py
new file mode 100644
index 00000000..9c890c6c
--- /dev/null
+++ b/src/truefoundry_sdk/types/openai_provider_account.py
@@ -0,0 +1,63 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .open_ai_integrations import OpenAiIntegrations
+from .openai_api_key_auth import OpenaiApiKeyAuth
+
+
+class OpenaiProviderAccount(UniversalBaseModel):
+ """
+ +label=OpenAI Provider Account
+ +icon=openai
+ """
+
+ type: typing.Literal["provider-account/openai"] = pydantic.Field(default="provider-account/openai")
+ """
+ +value=provider-account/openai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the OpenAI provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: OpenaiApiKeyAuth
+ base_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Base URL
+ +sort=300
+ +usage=Optional custom base URL for OpenAI API
+ +message=Base URL must not be empty
+ """
+
+ integrations: typing.List[OpenAiIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=400
+ +usage=List of integrations that are associated with the OpenAI provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=500
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/pager_duty.py b/src/truefoundry_sdk/types/pager_duty.py
new file mode 100644
index 00000000..a18d5168
--- /dev/null
+++ b/src/truefoundry_sdk/types/pager_duty.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PagerDuty(UniversalBaseModel):
+ type: typing.Literal["pagerduty"] = pydantic.Field(default="pagerduty")
+ """
+ +value=pagerduty
+ """
+
+ notification_channel: str = pydantic.Field()
+ """
+ +label=Notification Channel
+ +usage=Specify the notification channel to send alerts to
+ +uiType=AlertNotificationChannel
+ +uiProps={"integrationType":"notification-channel"}
+ +sort=660
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/pager_duty_integration.py b/src/truefoundry_sdk/types/pager_duty_integration.py
new file mode 100644
index 00000000..dfd8c3fd
--- /dev/null
+++ b/src/truefoundry_sdk/types/pager_duty_integration.py
@@ -0,0 +1,46 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .pager_duty_integration_key_auth import PagerDutyIntegrationKeyAuth
+
+
+class PagerDutyIntegration(UniversalBaseModel):
+ """
+ +label=PagerDuty Integration
+ +icon=https://assets.production.truefoundry.com/pagerduty.png
+ """
+
+ type: typing.Literal["integration/notification-channel/pagerduty"] = pydantic.Field(
+ default="integration/notification-channel/pagerduty"
+ )
+ """
+ +value=integration/notification-channel/pagerduty
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=100
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +uiProps={"disableEdit":false}
+ """
+
+ auth_data: PagerDutyIntegrationKeyAuth
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=10005
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/pager_duty_integration_key_auth.py b/src/truefoundry_sdk/types/pager_duty_integration_key_auth.py
new file mode 100644
index 00000000..55ce9943
--- /dev/null
+++ b/src/truefoundry_sdk/types/pager_duty_integration_key_auth.py
@@ -0,0 +1,42 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PagerDutyIntegrationKeyAuth(UniversalBaseModel):
+ """
+ +label=PagerDuty Credentails
+ """
+
+ type: typing.Literal["pagerduty-integration-auth"] = pydantic.Field(default="pagerduty-integration-auth")
+ """
+ +value=pagerduty-integration-auth
+ """
+
+ integration_key: str = pydantic.Field()
+ """
+ +label=Integration Key
+ +sort=100
+ +usage=The integration key for the PagerDuty integration
+ +uiType=Password
+ """
+
+ integration_url: str = pydantic.Field()
+ """
+ +label=Integration URL
+ +sort=200
+ +usage=The integration URL for the PagerDuty integration
+ +docs=The integration URL for the PagerDuty integration. This is the URL that will be used to send events to PagerDuty. eg. https://events.pagerduty.com/generic/2010-04-15/create_event.json
+ +placeholder=https://events.pagerduty.com/generic/2010-04-15/create_event.json
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/pager_duty_integrations.py b/src/truefoundry_sdk/types/pager_duty_integrations.py
new file mode 100644
index 00000000..b6ff58f0
--- /dev/null
+++ b/src/truefoundry_sdk/types/pager_duty_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .pager_duty_integration import PagerDutyIntegration
+
+PagerDutyIntegrations = PagerDutyIntegration
diff --git a/src/truefoundry_sdk/types/pager_duty_provider_account.py b/src/truefoundry_sdk/types/pager_duty_provider_account.py
new file mode 100644
index 00000000..d0b8078d
--- /dev/null
+++ b/src/truefoundry_sdk/types/pager_duty_provider_account.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .pager_duty_integrations import PagerDutyIntegrations
+
+
+class PagerDutyProviderAccount(UniversalBaseModel):
+ """
+ +label=PagerDuty Provider Account
+ +icon=https://assets.production.truefoundry.com/pagerduty.png
+ """
+
+ type: typing.Literal["provider-account/pagerduty"] = pydantic.Field(default="provider-account/pagerduty")
+ """
+ +value=provider-account/pagerduty
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the PagerDuty provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ integrations: typing.List[PagerDutyIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +sort=500
+ +usage=List of integrations that are associated with the PagerDuty provider account
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/palm_integrations.py b/src/truefoundry_sdk/types/palm_integrations.py
new file mode 100644
index 00000000..78d41c48
--- /dev/null
+++ b/src/truefoundry_sdk/types/palm_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .palm_model import PalmModel
+
+PalmIntegrations = PalmModel
diff --git a/src/truefoundry_sdk/types/palm_key_auth.py b/src/truefoundry_sdk/types/palm_key_auth.py
new file mode 100644
index 00000000..ce634635
--- /dev/null
+++ b/src/truefoundry_sdk/types/palm_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PalmKeyAuth(UniversalBaseModel):
+ """
+ +label=PaLM API Key Auth
+ +icon=palm
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=Your PaLM API key for authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/palm_model.py b/src/truefoundry_sdk/types/palm_model.py
new file mode 100644
index 00000000..343eeb60
--- /dev/null
+++ b/src/truefoundry_sdk/types/palm_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class PalmModel(UniversalBaseModel):
+ """
+ +label=PaLM Model
+ +icon=palm
+ """
+
+ type: typing.Literal["integration/model/palm"] = pydantic.Field(default="integration/model/palm")
+ """
+ +value=integration/model/palm
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this PaLM model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the PaLM model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the PaLM model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/palm_provider_account.py b/src/truefoundry_sdk/types/palm_provider_account.py
new file mode 100644
index 00000000..e01ee88b
--- /dev/null
+++ b/src/truefoundry_sdk/types/palm_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .palm_integrations import PalmIntegrations
+from .palm_key_auth import PalmKeyAuth
+
+
+class PalmProviderAccount(UniversalBaseModel):
+ """
+ +label=PaLM Provider Account
+ +icon=palm
+ """
+
+ type: typing.Literal["provider-account/palm"] = pydantic.Field(default="provider-account/palm")
+ """
+ +value=provider-account/palm
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the PaLM provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: PalmKeyAuth
+ integrations: typing.Optional[typing.List[PalmIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the PaLM provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/per_thousand_embedding_tokens_cost_metric.py b/src/truefoundry_sdk/types/per_thousand_embedding_tokens_cost_metric.py
new file mode 100644
index 00000000..0536eb62
--- /dev/null
+++ b/src/truefoundry_sdk/types/per_thousand_embedding_tokens_cost_metric.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PerThousandEmbeddingTokensCostMetric(UniversalBaseModel):
+ metric: str = pydantic.Field()
+ """
+ +value=per_1000_embedding_tokens
+ """
+
+ value: float
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/per_thousand_tokens_cost_metric.py b/src/truefoundry_sdk/types/per_thousand_tokens_cost_metric.py
new file mode 100644
index 00000000..5f96f861
--- /dev/null
+++ b/src/truefoundry_sdk/types/per_thousand_tokens_cost_metric.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .input_output_based_cost_metric_value import InputOutputBasedCostMetricValue
+
+
+class PerThousandTokensCostMetric(UniversalBaseModel):
+ metric: str = pydantic.Field()
+ """
+ +value=per_1000_tokens
+ """
+
+ value: InputOutputBasedCostMetricValue
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/perplexity_ai_key_auth.py b/src/truefoundry_sdk/types/perplexity_ai_key_auth.py
new file mode 100644
index 00000000..5e402727
--- /dev/null
+++ b/src/truefoundry_sdk/types/perplexity_ai_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PerplexityAiKeyAuth(UniversalBaseModel):
+ """
+ +label=Perplexity AI API Key Auth
+ +icon=perplexity-ai
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=Your Perplexity AI API key for authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/perplexity_ai_model.py b/src/truefoundry_sdk/types/perplexity_ai_model.py
new file mode 100644
index 00000000..30c05abc
--- /dev/null
+++ b/src/truefoundry_sdk/types/perplexity_ai_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class PerplexityAiModel(UniversalBaseModel):
+ """
+ +label=Perplexity AI Model
+ +icon=perplexity-ai
+ """
+
+ type: typing.Literal["integration/model/perplexity-ai"] = pydantic.Field(default="integration/model/perplexity-ai")
+ """
+ +value=integration/model/perplexity-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Perplexity AI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Perplexity AI model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Perplexity AI model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/perplexity_ai_provider_account.py b/src/truefoundry_sdk/types/perplexity_ai_provider_account.py
new file mode 100644
index 00000000..69d225b8
--- /dev/null
+++ b/src/truefoundry_sdk/types/perplexity_ai_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .perplexity_ai_key_auth import PerplexityAiKeyAuth
+from .perplexity_integrations import PerplexityIntegrations
+
+
+class PerplexityAiProviderAccount(UniversalBaseModel):
+ """
+ +label=Perplexity AI Provider Account
+ +icon=perplexity-ai
+ """
+
+ type: typing.Literal["provider-account/perplexity-ai"] = pydantic.Field(default="provider-account/perplexity-ai")
+ """
+ +value=provider-account/perplexity-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Perplexity AI provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: PerplexityAiKeyAuth
+ integrations: typing.Optional[typing.List[PerplexityIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Perplexity AI provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/perplexity_integrations.py b/src/truefoundry_sdk/types/perplexity_integrations.py
new file mode 100644
index 00000000..e1d0bc94
--- /dev/null
+++ b/src/truefoundry_sdk/types/perplexity_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .perplexity_ai_model import PerplexityAiModel
+
+PerplexityIntegrations = PerplexityAiModel
diff --git a/src/truefoundry_sdk/types/policy_actions.py b/src/truefoundry_sdk/types/policy_actions.py
new file mode 100644
index 00000000..80f57ac9
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_actions.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+PolicyActions = typing.Literal["apply"]
diff --git a/src/truefoundry_sdk/types/policy_entity_types.py b/src/truefoundry_sdk/types/policy_entity_types.py
new file mode 100644
index 00000000..fa541140
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_entity_types.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class PolicyEntityTypes(str, enum.Enum):
+ SERVICE = "service"
+ ASYNC_SERVICE = "async-service"
+ JOB = "job"
+ NOTEBOOK = "notebook"
+ SSH_SERVER = "ssh-server"
+ WORKFLOW = "workflow"
+ HELM = "helm"
+
+ def visit(
+ self,
+ service: typing.Callable[[], T_Result],
+ async_service: typing.Callable[[], T_Result],
+ job: typing.Callable[[], T_Result],
+ notebook: typing.Callable[[], T_Result],
+ ssh_server: typing.Callable[[], T_Result],
+ workflow: typing.Callable[[], T_Result],
+ helm: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is PolicyEntityTypes.SERVICE:
+ return service()
+ if self is PolicyEntityTypes.ASYNC_SERVICE:
+ return async_service()
+ if self is PolicyEntityTypes.JOB:
+ return job()
+ if self is PolicyEntityTypes.NOTEBOOK:
+ return notebook()
+ if self is PolicyEntityTypes.SSH_SERVER:
+ return ssh_server()
+ if self is PolicyEntityTypes.WORKFLOW:
+ return workflow()
+ if self is PolicyEntityTypes.HELM:
+ return helm()
diff --git a/src/truefoundry_sdk/types/policy_filters.py b/src/truefoundry_sdk/types/policy_filters.py
new file mode 100644
index 00000000..a292c614
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_filters.py
@@ -0,0 +1,41 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PolicyFilters(UniversalBaseModel):
+ """
+ +label=Filters
+ """
+
+ cluster_names: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Clusters
+ +usage=Cluster names where Policy applies
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ workspace_names: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Workspaces
+ +usage=Workspace names where Policy applies
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ env_names: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Environments
+ +usage=Environment names where Policy applies
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/policy_manifest.py b/src/truefoundry_sdk/types/policy_manifest.py
new file mode 100644
index 00000000..4d20029d
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_manifest.py
@@ -0,0 +1,85 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .policy_actions import PolicyActions
+from .policy_entity_types import PolicyEntityTypes
+from .policy_filters import PolicyFilters
+from .policy_manifest_mode import PolicyManifestMode
+from .policy_manifest_operation import PolicyManifestOperation
+
+
+class PolicyManifest(UniversalBaseModel):
+ type: typing.Literal["policy"] = pydantic.Field(default="policy")
+ """
+ +value=policy
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=Unique identifier of the policy across the organisation
+ +sort=2
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ description: str = pydantic.Field()
+ """
+ +label=Description
+ +usage=Description of the policy that explains what the policy does, its purpose, and how it affects resources. This helps other users understand the policy's behavior and impact.
+ +sort=3
+ ++uiProps={"descriptionInline":true}
+ +message=Description must be between 1 byte and 1024 bytes
+ """
+
+ operation: PolicyManifestOperation = pydantic.Field()
+ """
+ +label=Policy Action
+ +usage=Defines if the policy validates or mutates resources. Validation policies check TrueFoundry manifests to ensure they meet conditions and can block deployments. Mutation policies modify Kubernetes manifests before they're applied to the cluster. See this [documentation](https://docs.truefoundry.com/docs/applying-custom-policies#applying-custom-policies) for more details.
+ +sort=4
+ """
+
+ mode: PolicyManifestMode = pydantic.Field()
+ """
+ +label=Mode
+ +usage=Mode of the policy: `Audit` logs all policy evaluations without blocking deployments. `Enforce` blocks deployments if the policy fails. `Disabled` deactivates the policy.
+ +uiType=MultiSelectPills
+ +sort=6
+ """
+
+ entities: typing.List[PolicyEntityTypes] = pydantic.Field()
+ """
+ +label=Entities
+ +usage=Types of applications this policy applies to
+ +uiType=MultiSelect
+ +sort=8
+ """
+
+ actions: typing.List[PolicyActions] = pydantic.Field()
+ """
+ +label=Actions
+ +usage=Actions this policy applies to
+ +uiType=Hidden
+ +sort=9
+ """
+
+ filters: typing.Optional[PolicyFilters] = None
+ code: str = pydantic.Field()
+ """
+ +label=Policy Code
+ +usage=TypeScript code for Policy logic. To write and test your policy code, please refer to this [repository](https://github.com/truefoundry/tfy-typescript-policy)
+ +sort=13
+ +uiType=CodeEditor
+ +uiProps={"language":"typescript"}
+ +message=Code size must be between 1 byte and 10 KB
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/policy_manifest_mode.py b/src/truefoundry_sdk/types/policy_manifest_mode.py
new file mode 100644
index 00000000..af0df6b8
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_manifest_mode.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class PolicyManifestMode(str, enum.Enum):
+ """
+ +label=Mode
+ +usage=Mode of the policy: `Audit` logs all policy evaluations without blocking deployments. `Enforce` blocks deployments if the policy fails. `Disabled` deactivates the policy.
+ +uiType=MultiSelectPills
+ +sort=6
+ """
+
+ AUDIT = "audit"
+ ENFORCE = "enforce"
+ DISABLED = "disabled"
+
+ def visit(
+ self,
+ audit: typing.Callable[[], T_Result],
+ enforce: typing.Callable[[], T_Result],
+ disabled: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is PolicyManifestMode.AUDIT:
+ return audit()
+ if self is PolicyManifestMode.ENFORCE:
+ return enforce()
+ if self is PolicyManifestMode.DISABLED:
+ return disabled()
diff --git a/src/truefoundry_sdk/types/policy_manifest_operation.py b/src/truefoundry_sdk/types/policy_manifest_operation.py
new file mode 100644
index 00000000..00acab23
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_manifest_operation.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .policy_mutation_operation import PolicyMutationOperation
+from .policy_validation_operation import PolicyValidationOperation
+
+PolicyManifestOperation = typing.Union[PolicyMutationOperation, PolicyValidationOperation]
diff --git a/src/truefoundry_sdk/types/policy_mutation_operation.py b/src/truefoundry_sdk/types/policy_mutation_operation.py
new file mode 100644
index 00000000..4714a6fc
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_mutation_operation.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PolicyMutationOperation(UniversalBaseModel):
+ """
+ +label=Mutate
+ """
+
+ type: typing.Literal["mutate"] = pydantic.Field(default="mutate")
+ """
+ +label=Action Type
+ +usage=Mutates or Validates Resources
+ +value=mutate
+ """
+
+ order: int = pydantic.Field()
+ """
+ +label=Execution Order
+ +usage=Determines the sequence in which mutation policies are executed. Policies with lower order value run first, followed by higher value. For example, a policy with order 10 runs before one with order 20. This is crucial when multiple mutation policies need to run in a specific sequence. The order must be between 1 and 100.
+ +sort=5
+ +message=Order must be a positive integer less than or equal to 100
+ +uiProps={"descriptionInline":true}
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/policy_validation_operation.py b/src/truefoundry_sdk/types/policy_validation_operation.py
new file mode 100644
index 00000000..541336c4
--- /dev/null
+++ b/src/truefoundry_sdk/types/policy_validation_operation.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PolicyValidationOperation(UniversalBaseModel):
+ """
+ +label=Validate
+ """
+
+ type: typing.Literal["validate"] = pydantic.Field(default="validate")
+ """
+ +label=Action Type
+ +usage=Mutates or Validates Resources
+ +value=validate
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/prometheus_alert_rule.py b/src/truefoundry_sdk/types/prometheus_alert_rule.py
new file mode 100644
index 00000000..cabbef63
--- /dev/null
+++ b/src/truefoundry_sdk/types/prometheus_alert_rule.py
@@ -0,0 +1,74 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .alert_severity import AlertSeverity
+
+
+class PrometheusAlertRule(UniversalBaseModel):
+ """
+ +label=Prometheus Alert Rule
+ """
+
+ type: typing.Literal["prometheus-alert-rule"] = pydantic.Field(default="prometheus-alert-rule")
+ """
+ +label=Type
+ +value=prometheus-alert-rule
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +usage=Enter a unique, descriptive name for your Prometheus alert rule. Choose a name that clearly indicates the condition being monitored. Please note that reserved alert names for TrueFoundry managed alerts are not allowed. For checking the list of reserved alert names, please refer to the documentation.
+ +uiProps={"descriptionInline":true}
+ +message=3 to 35 alphanumeric characters long, can contain - in between, cannot start with a number and cannot end with a -
+ +sort=1
+ """
+
+ expression: str = pydantic.Field()
+ """
+ +label=Prometheus Expression
+ +usage=Enter a valid PromQL expression that defines the condition for triggering this alert. The alert will fire when this expression evaluates to true for the duration specified in the duration to trigger alert field.
+ +uiProps={"descriptionInline":true, "language": "promql"}
+ +placeholder=sum(increase(container_cpu_cfs_throttled_periods_total{container="postgresql", namespace="prod-ws"}[5m])) by (container, namespace) / sum(increase(container_cpu_cfs_periods_total[5m])) by (container, namespace) > ( 25 / 100 )
+ +sort=3
+ +uiType=CodeEditor
+ """
+
+ for_: typing_extensions.Annotated[float, FieldMetadata(alias="for")] = pydantic.Field()
+ """
+ +label=Trigger After (seconds)
+ +placeholder=300
+ +usage=The prometheus expression must remain true for this duration (in seconds) before the alert is triggered. If the condition becomes false before this time elapses, the alert will not fire.
+ +sort=4
+ """
+
+ severity: AlertSeverity
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Description
+ +usage=Description of the alert rule which will be displayed in the alert rule list. This can be used to provide more context about the alert rule.
+ +uiProps={"descriptionInline":true}
+ +placeholder=CPU throttled for more than 25% of the time in the last 5 minutes for
+ +sort=2
+ """
+
+ notification_enabled: bool = pydantic.Field(default=True)
+ """
+ +label=Notification Enabled
+ +usage=When enabled, notifications will be sent to all configured target channels when the alert conditions are met.
+ +uiProps={"descriptionInline":true}
+ +sort=7
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/provider_accounts.py b/src/truefoundry_sdk/types/provider_accounts.py
new file mode 100644
index 00000000..efd12a7f
--- /dev/null
+++ b/src/truefoundry_sdk/types/provider_accounts.py
@@ -0,0 +1,9 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .infra_provider_account import InfraProviderAccount
+from .mcp_server_provider_account import McpServerProviderAccount
+from .model_provider_account import ModelProviderAccount
+
+ProviderAccounts = typing.Union[InfraProviderAccount, ModelProviderAccount, McpServerProviderAccount]
diff --git a/src/truefoundry_sdk/types/public_cost_metric.py b/src/truefoundry_sdk/types/public_cost_metric.py
new file mode 100644
index 00000000..8e3aebae
--- /dev/null
+++ b/src/truefoundry_sdk/types/public_cost_metric.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class PublicCostMetric(UniversalBaseModel):
+ metric: str = pydantic.Field()
+ """
+ +value=public_cost
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/quay_artifacts_registry.py b/src/truefoundry_sdk/types/quay_artifacts_registry.py
new file mode 100644
index 00000000..5f5ee44b
--- /dev/null
+++ b/src/truefoundry_sdk/types/quay_artifacts_registry.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .quay_basic_auth import QuayBasicAuth
+
+
+class QuayArtifactsRegistry(UniversalBaseModel):
+ """
+ +label=Quay Artifacts Registry
+ +icon=quay
+ """
+
+ type: typing.Literal["integration/docker-registry/quay"] = pydantic.Field(
+ default="integration/docker-registry/quay"
+ )
+ """
+ +value=integration/docker-registry/quay
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field()
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[QuayBasicAuth] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/quay_basic_auth.py b/src/truefoundry_sdk/types/quay_basic_auth.py
new file mode 100644
index 00000000..61a7ee4c
--- /dev/null
+++ b/src/truefoundry_sdk/types/quay_basic_auth.py
@@ -0,0 +1,40 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class QuayBasicAuth(UniversalBaseModel):
+ """
+ +label=Quay Basic Auth
+ """
+
+ type: typing.Literal["basic-auth"] = pydantic.Field(default="basic-auth")
+ """
+ +value=basic-auth
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=The username for the basic authentication.
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +label=Password
+ +usage=The password for the basic authentication.
+ +sort=200
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/quay_integrations.py b/src/truefoundry_sdk/types/quay_integrations.py
new file mode 100644
index 00000000..f2820c2d
--- /dev/null
+++ b/src/truefoundry_sdk/types/quay_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .quay_artifacts_registry import QuayArtifactsRegistry
+
+QuayIntegrations = QuayArtifactsRegistry
diff --git a/src/truefoundry_sdk/types/quay_provider_account.py b/src/truefoundry_sdk/types/quay_provider_account.py
new file mode 100644
index 00000000..5c586b4b
--- /dev/null
+++ b/src/truefoundry_sdk/types/quay_provider_account.py
@@ -0,0 +1,53 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .quay_basic_auth import QuayBasicAuth
+from .quay_integrations import QuayIntegrations
+
+
+class QuayProviderAccount(UniversalBaseModel):
+ """
+ +label=Quay
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["provider-account/quay"] = pydantic.Field(default="provider-account/quay")
+ """
+ +value=provider-account/quay
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ account_name: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +label=Account Name
+ +usage=The name of the account on Quay.
+ +sort=200
+ """
+
+ auth_data: typing.Optional[QuayBasicAuth] = None
+ integrations: typing.List[QuayIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/rate_limit_config.py b/src/truefoundry_sdk/types/rate_limit_config.py
new file mode 100644
index 00000000..3965c4e6
--- /dev/null
+++ b/src/truefoundry_sdk/types/rate_limit_config.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .rate_limit_rule import RateLimitRule
+
+
+class RateLimitConfig(UniversalBaseModel):
+ name: str
+ type: typing.Literal["gateway-rate-limiting-config"] = "gateway-rate-limiting-config"
+ rules: typing.List[RateLimitRule]
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/rate_limit_rule.py b/src/truefoundry_sdk/types/rate_limit_rule.py
new file mode 100644
index 00000000..0ac9c3f6
--- /dev/null
+++ b/src/truefoundry_sdk/types/rate_limit_rule.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .rate_limit_unit import RateLimitUnit
+from .rate_limit_when import RateLimitWhen
+
+
+class RateLimitRule(UniversalBaseModel):
+ id: str
+ when: RateLimitWhen
+ limit_to: int
+ unit: RateLimitUnit
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/rate_limit_unit.py b/src/truefoundry_sdk/types/rate_limit_unit.py
new file mode 100644
index 00000000..084c7225
--- /dev/null
+++ b/src/truefoundry_sdk/types/rate_limit_unit.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class RateLimitUnit(str, enum.Enum):
+ REQUESTS_PER_DAY = "requests_per_day"
+ TOKENS_PER_MINUTE = "tokens_per_minute"
+ REQUESTS_PER_MINUTE = "requests_per_minute"
+ TOKENS_PER_DAY = "tokens_per_day"
+ REQUESTS_PER_HOUR = "requests_per_hour"
+ TOKENS_PER_HOUR = "tokens_per_hour"
+
+ def visit(
+ self,
+ requests_per_day: typing.Callable[[], T_Result],
+ tokens_per_minute: typing.Callable[[], T_Result],
+ requests_per_minute: typing.Callable[[], T_Result],
+ tokens_per_day: typing.Callable[[], T_Result],
+ requests_per_hour: typing.Callable[[], T_Result],
+ tokens_per_hour: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is RateLimitUnit.REQUESTS_PER_DAY:
+ return requests_per_day()
+ if self is RateLimitUnit.TOKENS_PER_MINUTE:
+ return tokens_per_minute()
+ if self is RateLimitUnit.REQUESTS_PER_MINUTE:
+ return requests_per_minute()
+ if self is RateLimitUnit.TOKENS_PER_DAY:
+ return tokens_per_day()
+ if self is RateLimitUnit.REQUESTS_PER_HOUR:
+ return requests_per_hour()
+ if self is RateLimitUnit.TOKENS_PER_HOUR:
+ return tokens_per_hour()
diff --git a/src/truefoundry_sdk/types/rate_limit_when.py b/src/truefoundry_sdk/types/rate_limit_when.py
new file mode 100644
index 00000000..9484407a
--- /dev/null
+++ b/src/truefoundry_sdk/types/rate_limit_when.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class RateLimitWhen(UniversalBaseModel):
+ subjects: typing.Optional[typing.List[str]] = None
+ models: typing.Optional[typing.List[str]] = None
+ metadata: typing.Optional[typing.Dict[str, str]] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/self_hosted_model.py b/src/truefoundry_sdk/types/self_hosted_model.py
new file mode 100644
index 00000000..76441a18
--- /dev/null
+++ b/src/truefoundry_sdk/types/self_hosted_model.py
@@ -0,0 +1,92 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+from .self_hosted_model_auth_data import SelfHostedModelAuthData
+from .self_hosted_model_model_server import SelfHostedModelModelServer
+
+
+class SelfHostedModel(UniversalBaseModel):
+ """
+ +label=Self Hosted Model Integration
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["integration/model/self-hosted-model"] = pydantic.Field(
+ default="integration/model/self-hosted-model"
+ )
+ """
+ +value=integration/model/self-hosted-model
+ """
+
+ name: str = pydantic.Field()
+ """
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ hosted_model_name: str = pydantic.Field()
+ """
+ +label=Hosted Model Name
+ +sort=2
+ +usage=The name of the hosted model
+ """
+
+ url: str = pydantic.Field()
+ """
+ +sort=3
+ +message=enter valid https/http URL that should not end with trailing slash
+ """
+
+ model_server: SelfHostedModelModelServer = pydantic.Field()
+ """
+ +sort=4
+ +label=Model Server Type
+ +usage=The type of model server being used
+ """
+
+ tfy_application_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ +uiType=Hidden
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ auth_data: typing.Optional[SelfHostedModelAuthData] = pydantic.Field(default=None)
+ """
+ +label=Auth Data
+ +usage=SelfHostedModel authentication data for the integration.
+ +sort=300
+ """
+
+ headers: typing.Optional[typing.Dict[str, str]] = pydantic.Field(default=None)
+ """
+ +label=SelfHostedModel Headers
+ +usage=SelfHostedModel headers for the integration. Forwarded to the provider as is. For example: `{"Authorization": "APIKey "}`
+ +sort=500
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/self_hosted_model_auth_data.py b/src/truefoundry_sdk/types/self_hosted_model_auth_data.py
new file mode 100644
index 00000000..8fcb3086
--- /dev/null
+++ b/src/truefoundry_sdk/types/self_hosted_model_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .custom_basic_auth import CustomBasicAuth
+from .custom_bearer_auth import CustomBearerAuth
+
+SelfHostedModelAuthData = typing.Union[CustomBasicAuth, CustomBearerAuth]
diff --git a/src/truefoundry_sdk/types/self_hosted_model_integrations.py b/src/truefoundry_sdk/types/self_hosted_model_integrations.py
new file mode 100644
index 00000000..7fa8db58
--- /dev/null
+++ b/src/truefoundry_sdk/types/self_hosted_model_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .self_hosted_model import SelfHostedModel
+
+SelfHostedModelIntegrations = SelfHostedModel
diff --git a/src/truefoundry_sdk/types/self_hosted_model_model_server.py b/src/truefoundry_sdk/types/self_hosted_model_model_server.py
new file mode 100644
index 00000000..eef84a03
--- /dev/null
+++ b/src/truefoundry_sdk/types/self_hosted_model_model_server.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class SelfHostedModelModelServer(str, enum.Enum):
+ """
+ +sort=4
+ +label=Model Server Type
+ +usage=The type of model server being used
+ """
+
+ VLLM_OPENAI = "vllm-openai"
+ TEI = "tei"
+ INFINITY = "infinity"
+ NEMO_RETRIEVER = "nemo-retriever"
+
+ def visit(
+ self,
+ vllm_openai: typing.Callable[[], T_Result],
+ tei: typing.Callable[[], T_Result],
+ infinity: typing.Callable[[], T_Result],
+ nemo_retriever: typing.Callable[[], T_Result],
+ ) -> T_Result:
+ if self is SelfHostedModelModelServer.VLLM_OPENAI:
+ return vllm_openai()
+ if self is SelfHostedModelModelServer.TEI:
+ return tei()
+ if self is SelfHostedModelModelServer.INFINITY:
+ return infinity()
+ if self is SelfHostedModelModelServer.NEMO_RETRIEVER:
+ return nemo_retriever()
diff --git a/src/truefoundry_sdk/types/self_hosted_model_provider_account.py b/src/truefoundry_sdk/types/self_hosted_model_provider_account.py
new file mode 100644
index 00000000..208560b9
--- /dev/null
+++ b/src/truefoundry_sdk/types/self_hosted_model_provider_account.py
@@ -0,0 +1,54 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .self_hosted_model_integrations import SelfHostedModelIntegrations
+
+
+class SelfHostedModelProviderAccount(UniversalBaseModel):
+ """
+ +label=Self Hosted
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["provider-account/self-hosted-model"] = pydantic.Field(
+ default="provider-account/self-hosted-model"
+ )
+ """
+ +value=provider-account/self-hosted-model
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ integrations: typing.List[SelfHostedModelIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=200
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/slack_bot_auth.py b/src/truefoundry_sdk/types/slack_bot_auth.py
new file mode 100644
index 00000000..0d73efd9
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_bot_auth.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SlackBotAuth(UniversalBaseModel):
+ type: typing.Literal["slack-bot"] = pydantic.Field(default="slack-bot")
+ """
+ +value=auth/slack-bot
+ """
+
+ bot_token: str = pydantic.Field()
+ """
+ +label=Bot Token
+ +usage=The bot token for the slack bot to send messages to the channels. This bot should have the following permissions: chat:write, chat:write.public
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/slack_bot_integration.py b/src/truefoundry_sdk/types/slack_bot_integration.py
new file mode 100644
index 00000000..a11632a8
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_bot_integration.py
@@ -0,0 +1,47 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .slack_bot_auth import SlackBotAuth
+
+
+class SlackBotIntegration(UniversalBaseModel):
+ """
+ +label=Slack Bot Integration
+ +icon=https://assets.production.truefoundry.com/slack.svg
+ """
+
+ type: typing.Literal["integration/notification-channel/slack-bot"] = pydantic.Field(
+ default="integration/notification-channel/slack-bot"
+ )
+ """
+ +value=integration/notification-channel/slack-bot
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +uiProps={"disableEdit":false}
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: SlackBotAuth
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=10005
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/slack_integrations.py b/src/truefoundry_sdk/types/slack_integrations.py
new file mode 100644
index 00000000..c504ff59
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_integrations.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .slack_bot_integration import SlackBotIntegration
+from .slack_webhook_integration import SlackWebhookIntegration
+
+SlackIntegrations = typing.Union[SlackWebhookIntegration, SlackBotIntegration]
diff --git a/src/truefoundry_sdk/types/slack_provider_account.py b/src/truefoundry_sdk/types/slack_provider_account.py
new file mode 100644
index 00000000..252d2dea
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_provider_account.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .slack_integrations import SlackIntegrations
+
+
+class SlackProviderAccount(UniversalBaseModel):
+ """
+ +label=Slack Provider Account
+ +icon=slack
+ """
+
+ type: typing.Literal["provider-account/slack"] = pydantic.Field(default="provider-account/slack")
+ """
+ +value=provider-account/slack
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":false}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ integrations: typing.List[SlackIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/slack_webhook_auth.py b/src/truefoundry_sdk/types/slack_webhook_auth.py
new file mode 100644
index 00000000..c6a38fd0
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_webhook_auth.py
@@ -0,0 +1,28 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SlackWebhookAuth(UniversalBaseModel):
+ type: typing.Literal["slack-webhook"] = pydantic.Field(default="slack-webhook")
+ """
+ +value=auth/slack-webhook
+ """
+
+ webhook_url: str = pydantic.Field()
+ """
+ +label=Webhook URL
+ +usage=The URL of the slack webhook
+ +sort=100
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/slack_webhook_integration.py b/src/truefoundry_sdk/types/slack_webhook_integration.py
new file mode 100644
index 00000000..59611512
--- /dev/null
+++ b/src/truefoundry_sdk/types/slack_webhook_integration.py
@@ -0,0 +1,47 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .slack_webhook_auth import SlackWebhookAuth
+
+
+class SlackWebhookIntegration(UniversalBaseModel):
+ """
+ +label=Slack Webhook Integration
+ +icon=https://assets.production.truefoundry.com/slack.svg
+ """
+
+ type: typing.Literal["integration/notification-channel/slack-webhook"] = pydantic.Field(
+ default="integration/notification-channel/slack-webhook"
+ )
+ """
+ +value=integration/notification-channel/slack-webhook
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +uiProps={"disableEdit":false}
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ auth_data: SlackWebhookAuth
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=10005
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/smtp_credentials.py b/src/truefoundry_sdk/types/smtp_credentials.py
new file mode 100644
index 00000000..2c4f22e9
--- /dev/null
+++ b/src/truefoundry_sdk/types/smtp_credentials.py
@@ -0,0 +1,62 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class SmtpCredentials(UniversalBaseModel):
+ """
+ +label=SMTP Credentials
+ """
+
+ type: typing.Literal["smtp-credentials"] = pydantic.Field(default="smtp-credentials")
+ """
+ +value=smtp-credentials
+ +sort=250
+ """
+
+ host: str = pydantic.Field()
+ """
+ +label=Host
+ +usage=The SMTP host of the email server.
+ +sort=300
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=The username for the SMTP server.
+ +sort=400
+ """
+
+ password: str = pydantic.Field()
+ """
+ +label=Password
+ +usage=The password for the SMTP server.
+ +sort=500
+ +uiType=Password
+ """
+
+ port: int = pydantic.Field(default=587)
+ """
+ +label=Port
+ +usage=The port of the SMTP server.
+ +sort=600
+ """
+
+ tls: bool = pydantic.Field(default=True)
+ """
+ +label=TLS
+ +usage=Whether to use TLS for the SMTP server.
+ +sort=700
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/together_ai_integrations.py b/src/truefoundry_sdk/types/together_ai_integrations.py
new file mode 100644
index 00000000..7b9f6152
--- /dev/null
+++ b/src/truefoundry_sdk/types/together_ai_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .together_ai_model import TogetherAiModel
+
+TogetherAiIntegrations = TogetherAiModel
diff --git a/src/truefoundry_sdk/types/together_ai_key_auth.py b/src/truefoundry_sdk/types/together_ai_key_auth.py
new file mode 100644
index 00000000..5ad747cf
--- /dev/null
+++ b/src/truefoundry_sdk/types/together_ai_key_auth.py
@@ -0,0 +1,35 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TogetherAiKeyAuth(UniversalBaseModel):
+ """
+ +label=Together AI API Key Auth
+ +icon=together-ai
+ """
+
+ type: typing.Literal["api-key"] = pydantic.Field(default="api-key")
+ """
+ +value=api-key
+ """
+
+ api_key: str = pydantic.Field()
+ """
+ +label=API Key
+ +sort=100
+ +usage=Your Together AI API key for authentication
+ +message=API key must not be empty
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/together_ai_model.py b/src/truefoundry_sdk/types/together_ai_model.py
new file mode 100644
index 00000000..48dfe180
--- /dev/null
+++ b/src/truefoundry_sdk/types/together_ai_model.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class TogetherAiModel(UniversalBaseModel):
+ """
+ +label=Together AI Model
+ +icon=together-ai
+ """
+
+ type: typing.Literal["integration/model/together-ai"] = pydantic.Field(default="integration/model/together-ai")
+ """
+ +value=integration/model/together-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Together AI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The name of the Together AI model to use
+ +message=Model ID must not be empty
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=3
+ +usage=Specify the type of the Together AI model
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=5
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/together_ai_provider_account.py b/src/truefoundry_sdk/types/together_ai_provider_account.py
new file mode 100644
index 00000000..71c977d2
--- /dev/null
+++ b/src/truefoundry_sdk/types/together_ai_provider_account.py
@@ -0,0 +1,55 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .collaborator import Collaborator
+from .together_ai_integrations import TogetherAiIntegrations
+from .together_ai_key_auth import TogetherAiKeyAuth
+
+
+class TogetherAiProviderAccount(UniversalBaseModel):
+ """
+ +label=Together AI Provider Account
+ +icon=together-ai
+ """
+
+ type: typing.Literal["provider-account/together-ai"] = pydantic.Field(default="provider-account/together-ai")
+ """
+ +value=provider-account/together-ai
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Name
+ +sort=100
+ +usage=The name of the Together AI provider account
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ +uiProps={"disableEdit":true}
+ """
+
+ auth_data: TogetherAiKeyAuth
+ integrations: typing.Optional[typing.List[TogetherAiIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +sort=300
+ +usage=List of integrations that are associated with the Together AI provider account
+ +uiType=IntegrationsGroup
+ """
+
+ collaborators: typing.Optional[typing.List[Collaborator]] = pydantic.Field(default=None)
+ """
+ +label=Collaborators
+ +sort=400
+ +usage=List of users who have access to this provider account
+ +uiType=Collaborators
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/true_foundry_apply_request_manifest.py b/src/truefoundry_sdk/types/true_foundry_apply_request_manifest.py
new file mode 100644
index 00000000..76be457a
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_apply_request_manifest.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .agent_manifest import AgentManifest
+from .agent_open_api_tool_manifest import AgentOpenApiToolManifest
+from .alert_config import AlertConfig
+from .application_set import ApplicationSet
+from .artifact_manifest import ArtifactManifest
+from .async_service import AsyncService
+from .chat_prompt_manifest import ChatPromptManifest
+from .cluster_manifest import ClusterManifest
+from .data_directory import DataDirectory
+from .gateway_config import GatewayConfig
+from .helm import Helm
+from .job import Job
+from .ml_repo_manifest import MlRepoManifest
+from .model_manifest import ModelManifest
+from .notebook import Notebook
+from .policy_manifest import PolicyManifest
+from .provider_accounts import ProviderAccounts
+from .r_studio import RStudio
+from .service import Service
+from .spark_job import SparkJob
+from .ssh_server import SshServer
+from .team_manifest import TeamManifest
+from .tracing_project_manifest import TracingProjectManifest
+from .virtual_account_manifest import VirtualAccountManifest
+from .volume import Volume
+from .workflow import Workflow
+from .workspace_manifest import WorkspaceManifest
+
+TrueFoundryApplyRequestManifest = typing.Union[
+ MlRepoManifest,
+ ArtifactManifest,
+ ModelManifest,
+ ChatPromptManifest,
+ AgentOpenApiToolManifest,
+ AgentManifest,
+ DataDirectory,
+ Service,
+ ApplicationSet,
+ ProviderAccounts,
+ ClusterManifest,
+ WorkspaceManifest,
+ Job,
+ Helm,
+ Volume,
+ Notebook,
+ RStudio,
+ Workflow,
+ AsyncService,
+ SshServer,
+ SparkJob,
+ GatewayConfig,
+ TeamManifest,
+ PolicyManifest,
+ AlertConfig,
+ TracingProjectManifest,
+ VirtualAccountManifest,
+]
diff --git a/src/truefoundry_sdk/types/true_foundry_apply_response.py b/src/truefoundry_sdk/types/true_foundry_apply_response.py
new file mode 100644
index 00000000..02c24e4b
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_apply_response.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+from .true_foundry_apply_response_action import TrueFoundryApplyResponseAction
+from .true_foundry_apply_response_existing_manifest import TrueFoundryApplyResponseExistingManifest
+
+
+class TrueFoundryApplyResponse(UniversalBaseModel):
+ existing_manifest: typing_extensions.Annotated[
+ typing.Optional[TrueFoundryApplyResponseExistingManifest], FieldMetadata(alias="existingManifest")
+ ] = pydantic.Field(default=None)
+ """
+ The existing manifest of the resource
+ """
+
+ action: typing.Optional[TrueFoundryApplyResponseAction] = pydantic.Field(default=None)
+ """
+ The action performed: CREATE or UPDATE
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/true_foundry_apply_response_action.py b/src/truefoundry_sdk/types/true_foundry_apply_response_action.py
new file mode 100644
index 00000000..bd6f6003
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_apply_response_action.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import enum
+import typing
+
+T_Result = typing.TypeVar("T_Result")
+
+
+class TrueFoundryApplyResponseAction(str, enum.Enum):
+ """
+ The action performed: CREATE or UPDATE
+ """
+
+ CREATE = "CREATE"
+ UPDATE = "UPDATE"
+
+ def visit(self, create: typing.Callable[[], T_Result], update: typing.Callable[[], T_Result]) -> T_Result:
+ if self is TrueFoundryApplyResponseAction.CREATE:
+ return create()
+ if self is TrueFoundryApplyResponseAction.UPDATE:
+ return update()
diff --git a/src/truefoundry_sdk/types/true_foundry_apply_response_existing_manifest.py b/src/truefoundry_sdk/types/true_foundry_apply_response_existing_manifest.py
new file mode 100644
index 00000000..073fcc81
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_apply_response_existing_manifest.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .agent_manifest import AgentManifest
+from .agent_open_api_tool_manifest import AgentOpenApiToolManifest
+from .alert_config import AlertConfig
+from .application_set import ApplicationSet
+from .artifact_manifest import ArtifactManifest
+from .async_service import AsyncService
+from .chat_prompt_manifest import ChatPromptManifest
+from .cluster_manifest import ClusterManifest
+from .data_directory import DataDirectory
+from .gateway_config import GatewayConfig
+from .helm import Helm
+from .job import Job
+from .ml_repo_manifest import MlRepoManifest
+from .model_manifest import ModelManifest
+from .notebook import Notebook
+from .policy_manifest import PolicyManifest
+from .provider_accounts import ProviderAccounts
+from .r_studio import RStudio
+from .service import Service
+from .spark_job import SparkJob
+from .ssh_server import SshServer
+from .team_manifest import TeamManifest
+from .tracing_project_manifest import TracingProjectManifest
+from .virtual_account_manifest import VirtualAccountManifest
+from .volume import Volume
+from .workflow import Workflow
+from .workspace_manifest import WorkspaceManifest
+
+TrueFoundryApplyResponseExistingManifest = typing.Union[
+ MlRepoManifest,
+ ArtifactManifest,
+ ModelManifest,
+ ChatPromptManifest,
+ AgentOpenApiToolManifest,
+ AgentManifest,
+ DataDirectory,
+ Service,
+ ApplicationSet,
+ ProviderAccounts,
+ ClusterManifest,
+ WorkspaceManifest,
+ Job,
+ Helm,
+ Volume,
+ Notebook,
+ RStudio,
+ Workflow,
+ AsyncService,
+ SshServer,
+ SparkJob,
+ GatewayConfig,
+ TeamManifest,
+ PolicyManifest,
+ AlertConfig,
+ TracingProjectManifest,
+ VirtualAccountManifest,
+]
diff --git a/src/truefoundry_sdk/types/true_foundry_dbssm.py b/src/truefoundry_sdk/types/true_foundry_dbssm.py
new file mode 100644
index 00000000..3bfd2935
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_dbssm.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TrueFoundryDbssm(UniversalBaseModel):
+ """
+ +label=TrueFoundry DBSSM
+ +icon=truefoundry
+ """
+
+ type: typing.Literal["integration/secret-store/truefoundry/db"] = pydantic.Field(
+ default="integration/secret-store/truefoundry/db"
+ )
+ """
+ +value=integration/secret-store/truefoundry/db
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/true_foundry_delete_request_manifest.py b/src/truefoundry_sdk/types/true_foundry_delete_request_manifest.py
new file mode 100644
index 00000000..37d16f9d
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_delete_request_manifest.py
@@ -0,0 +1,61 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .agent_manifest import AgentManifest
+from .agent_open_api_tool_manifest import AgentOpenApiToolManifest
+from .alert_config import AlertConfig
+from .application_set import ApplicationSet
+from .artifact_manifest import ArtifactManifest
+from .async_service import AsyncService
+from .chat_prompt_manifest import ChatPromptManifest
+from .cluster_manifest import ClusterManifest
+from .data_directory import DataDirectory
+from .gateway_config import GatewayConfig
+from .helm import Helm
+from .job import Job
+from .ml_repo_manifest import MlRepoManifest
+from .model_manifest import ModelManifest
+from .notebook import Notebook
+from .policy_manifest import PolicyManifest
+from .provider_accounts import ProviderAccounts
+from .r_studio import RStudio
+from .service import Service
+from .spark_job import SparkJob
+from .ssh_server import SshServer
+from .team_manifest import TeamManifest
+from .tracing_project_manifest import TracingProjectManifest
+from .virtual_account_manifest import VirtualAccountManifest
+from .volume import Volume
+from .workflow import Workflow
+from .workspace_manifest import WorkspaceManifest
+
+TrueFoundryDeleteRequestManifest = typing.Union[
+ MlRepoManifest,
+ ArtifactManifest,
+ ModelManifest,
+ ChatPromptManifest,
+ AgentOpenApiToolManifest,
+ AgentManifest,
+ DataDirectory,
+ Service,
+ ApplicationSet,
+ ProviderAccounts,
+ ClusterManifest,
+ WorkspaceManifest,
+ Job,
+ Helm,
+ Volume,
+ Notebook,
+ RStudio,
+ Workflow,
+ AsyncService,
+ SshServer,
+ SparkJob,
+ GatewayConfig,
+ TeamManifest,
+ PolicyManifest,
+ AlertConfig,
+ TracingProjectManifest,
+ VirtualAccountManifest,
+]
diff --git a/src/truefoundry_sdk/types/true_foundry_integrations.py b/src/truefoundry_sdk/types/true_foundry_integrations.py
new file mode 100644
index 00000000..c1f1afc6
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .true_foundry_dbssm import TrueFoundryDbssm
+
+TrueFoundryIntegrations = TrueFoundryDbssm
diff --git a/src/truefoundry_sdk/types/true_foundry_provider_account.py b/src/truefoundry_sdk/types/true_foundry_provider_account.py
new file mode 100644
index 00000000..7e850d75
--- /dev/null
+++ b/src/truefoundry_sdk/types/true_foundry_provider_account.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .true_foundry_integrations import TrueFoundryIntegrations
+
+
+class TrueFoundryProviderAccount(UniversalBaseModel):
+ """
+ +label=TrueFoundry
+ +icon=truefoundry
+ """
+
+ type: typing.Literal["provider-account/truefoundry"] = pydantic.Field(default="provider-account/truefoundry")
+ """
+ +value=provider-account/truefoundry
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ integrations: typing.Optional[typing.List[TrueFoundryIntegrations]] = pydantic.Field(default=None)
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ttl_integrations.py b/src/truefoundry_sdk/types/ttl_integrations.py
new file mode 100644
index 00000000..03d49afb
--- /dev/null
+++ b/src/truefoundry_sdk/types/ttl_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .ttl_registry import TtlRegistry
+
+TtlIntegrations = TtlRegistry
diff --git a/src/truefoundry_sdk/types/ttl_provider_account.py b/src/truefoundry_sdk/types/ttl_provider_account.py
new file mode 100644
index 00000000..cba15628
--- /dev/null
+++ b/src/truefoundry_sdk/types/ttl_provider_account.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .ttl_integrations import TtlIntegrations
+
+
+class TtlProviderAccount(UniversalBaseModel):
+ """
+ +label=TTL
+ +icon=puzzle-piece
+ """
+
+ type: typing.Literal["provider-account/ttl"] = pydantic.Field(default="provider-account/ttl")
+ """
+ +value=provider-account/ttl
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ integrations: typing.List[TtlIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/ttl_registry.py b/src/truefoundry_sdk/types/ttl_registry.py
new file mode 100644
index 00000000..843169da
--- /dev/null
+++ b/src/truefoundry_sdk/types/ttl_registry.py
@@ -0,0 +1,49 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class TtlRegistry(UniversalBaseModel):
+ """
+ +label=TTL
+ +icon=docker
+ """
+
+ type: typing.Literal["integration/docker-registry/ttl"] = pydantic.Field(default="integration/docker-registry/ttl")
+ """
+ +value=integration/docker-registry/ttl
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ registry_url: str = pydantic.Field(default="https://ttl.sh")
+ """
+ +label=Registry URL
+ +usage=The URL of the registry.
+ +sort=200
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=600
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/usage_limits.py b/src/truefoundry_sdk/types/usage_limits.py
new file mode 100644
index 00000000..47be28e3
--- /dev/null
+++ b/src/truefoundry_sdk/types/usage_limits.py
@@ -0,0 +1,19 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class UsageLimits(UniversalBaseModel):
+ tokens_per_minute: typing.Optional[int] = None
+ requests_per_minute: typing.Optional[int] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/vertex_model.py b/src/truefoundry_sdk/types/vertex_model.py
new file mode 100644
index 00000000..021320e6
--- /dev/null
+++ b/src/truefoundry_sdk/types/vertex_model.py
@@ -0,0 +1,56 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_region import GcpRegion
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class VertexModel(UniversalBaseModel):
+ """
+ +label=Vertex Model
+ +icon=https://assets.production.truefoundry.com/vertex-ai.png
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +sort=2
+ """
+
+ type: typing.Literal["integration/model/gcp/vertex"] = pydantic.Field(default="integration/model/gcp/vertex")
+ """
+ +value=integration/model/gcp/vertex
+ """
+
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +usage=Specify the type of the model
+ +sort=4
+ """
+
+ region: typing.Optional[GcpRegion] = None
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/vertex_model_v2.py b/src/truefoundry_sdk/types/vertex_model_v2.py
new file mode 100644
index 00000000..e4520565
--- /dev/null
+++ b/src/truefoundry_sdk/types/vertex_model_v2.py
@@ -0,0 +1,62 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .gcp_region import GcpRegion
+from .model_cost_metric import ModelCostMetric
+from .model_type import ModelType
+
+
+class VertexModelV2(UniversalBaseModel):
+ """
+ +label=Vertex Model
+ +icon=googleCloud
+ """
+
+ type: typing.Literal["integration/model/vertex"] = pydantic.Field(default="integration/model/vertex")
+ """
+ +value=integration/model/vertex
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +sort=1
+ +usage=Name to identify this Vertex AI model in the UI
+ +message=2 to 62 characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ model_id: str = pydantic.Field()
+ """
+ +label=Model ID
+ +sort=2
+ +usage=The unique identifier for the Vertex AI model
+ +message=Model ID must not be empty
+ """
+
+ region: typing.Optional[GcpRegion] = None
+ model_types: typing.List[ModelType] = pydantic.Field()
+ """
+ +label=Model Types
+ +sort=4
+ +usage=Specify the type of the Vertex AI model (e.g., chat, text, etc.)
+ """
+
+ cost: typing.Optional[ModelCostMetric] = None
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +sort=6
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +uiType=Hidden
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/webhook_basic_auth.py b/src/truefoundry_sdk/types/webhook_basic_auth.py
new file mode 100644
index 00000000..00410529
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_basic_auth.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class WebhookBasicAuth(UniversalBaseModel):
+ type: typing.Literal["webhook-basic"] = pydantic.Field(default="webhook-basic")
+ """
+ +value=auth/webhook-basic
+ """
+
+ username: str = pydantic.Field()
+ """
+ +label=Username
+ +usage=Basic auth username
+ +sort=100
+ """
+
+ password: str = pydantic.Field()
+ """
+ +label=Password
+ +usage=Basic auth password
+ +sort=200
+ +uiType=Password
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/webhook_bearer_auth.py b/src/truefoundry_sdk/types/webhook_bearer_auth.py
new file mode 100644
index 00000000..7de6083e
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_bearer_auth.py
@@ -0,0 +1,36 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class WebhookBearerAuth(UniversalBaseModel):
+ type: typing.Literal["webhook-bearer"] = pydantic.Field(default="webhook-bearer")
+ """
+ +value=auth/webhook-bearer
+ """
+
+ token: str = pydantic.Field()
+ """
+ +label=Token
+ +usage=Bearer token for authentication
+ +sort=100
+ +uiType=Password
+ """
+
+ prefix: str = pydantic.Field(default="Bearer")
+ """
+ +label=Prefix
+ +usage=Prefix for the token
+ +sort=200
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/webhook_integration.py b/src/truefoundry_sdk/types/webhook_integration.py
new file mode 100644
index 00000000..e43671e8
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_integration.py
@@ -0,0 +1,60 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .webhook_integration_auth_data import WebhookIntegrationAuthData
+
+
+class WebhookIntegration(UniversalBaseModel):
+ """
+ +label=Webhook Integration
+ +icon=https://assets.production.truefoundry.com/webhook.svg
+ """
+
+ type: typing.Literal["integration/gateway-request-logger/webhook"] = pydantic.Field(
+ default="integration/gateway-request-logger/webhook"
+ )
+ """
+ +value=integration/gateway-request-logger/webhook
+ """
+
+ name: str = pydantic.Field()
+ """
+ +label=Display Name
+ +uiProps={"disableEdit":true}
+ +usage=The name of the integration that will be displayed in the TrueFoundry UI.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ webhook_url: str = pydantic.Field()
+ """
+ +label=Webhook URL
+ +usage=The URL of the webhook endpoint
+ +sort=200
+ """
+
+ auth_data: typing.Optional[WebhookIntegrationAuthData] = pydantic.Field(default=None)
+ """
+ +label=Authentication
+ +usage=Authentication configuration for the webhook
+ +sort=300
+ """
+
+ authorized_subjects: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ +label=Access Control
+ +usage=List of subjects that are authorized to access this integration. List of user fqn in format :.
+ +sort=10005
+ +uiType=AuthorizedSubjects
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/webhook_integration_auth_data.py b/src/truefoundry_sdk/types/webhook_integration_auth_data.py
new file mode 100644
index 00000000..08eb650e
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_integration_auth_data.py
@@ -0,0 +1,8 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+from .webhook_basic_auth import WebhookBasicAuth
+from .webhook_bearer_auth import WebhookBearerAuth
+
+WebhookIntegrationAuthData = typing.Union[WebhookBasicAuth, WebhookBearerAuth]
diff --git a/src/truefoundry_sdk/types/webhook_integrations.py b/src/truefoundry_sdk/types/webhook_integrations.py
new file mode 100644
index 00000000..23b96f02
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_integrations.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+from .webhook_integration import WebhookIntegration
+
+WebhookIntegrations = WebhookIntegration
diff --git a/src/truefoundry_sdk/types/webhook_provider_account.py b/src/truefoundry_sdk/types/webhook_provider_account.py
new file mode 100644
index 00000000..5b690061
--- /dev/null
+++ b/src/truefoundry_sdk/types/webhook_provider_account.py
@@ -0,0 +1,44 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .webhook_integrations import WebhookIntegrations
+
+
+class WebhookProviderAccount(UniversalBaseModel):
+ """
+ +label=Webhook Provider Account
+ +icon=webhook
+ """
+
+ type: typing.Literal["provider-account/webhook"] = pydantic.Field(default="provider-account/webhook")
+ """
+ +value=provider-account/webhook
+ """
+
+ name: str = pydantic.Field()
+ """
+ +uiProps={"disableEdit":true}
+ +label=Name
+ +usage=The name of the provider account.
+ +sort=100
+ +message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number
+ """
+
+ integrations: typing.List[WebhookIntegrations] = pydantic.Field()
+ """
+ +label=Integrations
+ +usage=List of integrations that are associated with the provider account.
+ +sort=400
+ +uiType=IntegrationsGroup
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/truefoundry_sdk/types/weight_based_load_balancing_rule.py b/src/truefoundry_sdk/types/weight_based_load_balancing_rule.py
new file mode 100644
index 00000000..5ea2d547
--- /dev/null
+++ b/src/truefoundry_sdk/types/weight_based_load_balancing_rule.py
@@ -0,0 +1,23 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .load_balance_target import LoadBalanceTarget
+from .load_balancing_when import LoadBalancingWhen
+
+
+class WeightBasedLoadBalancingRule(UniversalBaseModel):
+ id: str
+ when: LoadBalancingWhen
+ load_balance_targets: typing.List[LoadBalanceTarget]
+ type: typing.Literal["weight-based-routing"] = "weight-based-routing"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ smart_union = True
+ extra = pydantic.Extra.allow