{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TrueFoundry Docs","description":"TrueFoundry documentation — enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways to connect, monitor, and govern agentic AI applications across providers from a unified control plane.","colors":{"primary":"#4f46e5","light":"#4f46e5","dark":"#4f46e5"},"logo":{"light":"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/light.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=6068d83664aeda0239bec2422657dd20","dark":"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/dark.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=c1cb26554a546d84500b40f7057bece8"},"favicon":"https://mintcdn.com/truefoundry/6bbtTt95c1iCcyph/favicon.svg?fit=max\u0026auto=format\u0026n=6bbtTt95c1iCcyph\u0026q=85\u0026s=f55bde34214b38034126d05b08ea16c7","appearance":{"default":"light"},"background":{"decoration":"grid"},"navbar":{"links":[{"href":"https://www.truefoundry.com/book-demo","label":"Book Demo"},{"href":"https://www.truefoundry.com/blog","label":"Blog"}],"primary":{"type":"button","label":"Sign Up","href":"https://www.truefoundry.com/register"}},"footer":{"socials":{"x":"https://twitter.com/truefoundry","linkedin":"https://in.linkedin.com/company/truefoundry"}},"seo":{"metatags":{"og:type":"website","og:site_name":"TrueFoundry Docs","og:image":"https://assets.production.truefoundry.com/logo.svg","og:description":"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.","description":"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane."}},"icons":{"library":"fontawesome"},"styling":{"codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"truefoundry","hasAudioNarration":false,"actualSubdomain":"truefoundry","customDomains":["www.truefoundry.com"],"gitSource":{"type":"github","owner":"truefoundry","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af613c9ff13ba6c1a1981c6","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"AI Gateway","count":246},{"language":"default","tag":"API Reference","count":202},{"language":"default","tag":"Platform","count":196},{"language":"default","tag":"Integrations","count":131},{"language":"default","tag":"LLM Gateway","count":113},{"language":"default","tag":"AI Deployment","count":109},{"language":"default","tag":"Integrate Models","count":50},{"language":"default","tag":"Observability","count":47},{"language":"default","tag":"Guardrails and Security","count":46},{"language":"default","tag":"MCP Servers","count":43}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@truefoundry.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".line-highlight{background:rgb(var(--primary-light)/.7)!important}.tfy-cat-anchor{scroll-margin-top:6rem;margin-block:1.75rem}.line-highlight:before{background:rgb(var(--primary-light)/.7)!important}.line-highlight:after{background:rgb(var(--primary-light)/.7)!important}"}],"page":{"pagePath":"docs/api-reference/applications/get-application","slug":"/docs/api-reference/applications/get-application","pageMetadata":{"title":"Get Application","description":"Get a single application by its ID.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/get-application","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Get a single application by its ID.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Get Application","description":"Get a single application by its ID.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/get-application","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/truefoundry/9e0085f7ed271180/scripts.js"],"openApiReferenceData":{"operation":{"description":"Get a single application by its ID.","operationId":"Application.getApplication","parameters":["4cc5831b-3067-4881-9f12-d465d7ee9805"],"responses":{"200":"21aceebf-c654-403e-b0ed-1b58f2eb580c","403":"50f312c4-ace5-4e3a-aecc-c81e388e729b","404":"fd932cea-a6c9-4c4a-a3eb-d4beb10b8ebc"},"security":["70003c13-b6a3-400a-ad65-f9bece5d9216"],"summary":"Get Application","tags":["Applications","public"],"x-fern-sdk-group-name":["applications"],"x-fern-sdk-method-name":"get","x-tfy-mcp-tool-annotations":{"name":"get_application","requiresFeature":"deployment","annotations":{"readOnlyHint":true}},"method":"get","type":"path","servers":["420b2084-a24a-46fb-8cda-d10944e1e5a2"],"path":"/api/svc/v1/apps/{id}","baseUrlOptions":["https://{controlPlaneURL}"],"title":"Get Application","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"4cc5831b-3067-4881-9f12-d465d7ee9805":{"name":"id","required":true,"in":"path","description":"Unique identifier of the application","schema":{"type":"string","isRequired":true,"description":"Unique identifier of the application","uniqueKey":"","typeLabel":"string"}}},"responses":{"21aceebf-c654-403e-b0ed-1b58f2eb580c":{"description":"Application details.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","title":"Application","description":"Application details","required":["createdBySubject","lifecycleStage","autopilot"],"x-fern-type-name":"Application","properties":{"createdBySubject":{"type":"object","title":"Subject","description":"Subject (user or service account) that created this application","required":["subjectId","subjectType"],"x-fern-type-name":"Subject","properties":{"subjectId":{"type":"string","description":"Subject ID","isRequired":true,"uniqueKey":"data.createdBySubject.subjectId","typeLabel":"string"},"subjectType":{"type":"string","description":"Subject type","enum":["user","team","serviceaccount","virtualaccount","agent-identity","agent","agent-channel-identity","role"],"isRequired":true,"uniqueKey":"data.createdBySubject.subjectType","typeLabel":"enum\u003cstring>"},"subjectSlug":{"oneOf":[{"type":"string","description":"Subject slug","uniqueKey":"data.createdBySubject.subjectSlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject slug","uniqueKey":"data.createdBySubject.subjectSlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectSlug","typeLabel":"string | null"},"subjectDisplayName":{"oneOf":[{"type":"string","description":"Subject display name","uniqueKey":"data.createdBySubject.subjectDisplayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject display name","uniqueKey":"data.createdBySubject.subjectDisplayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectDisplayName","typeLabel":"string | null"},"subjectPatName":{"oneOf":[{"type":"string","description":"Subject PAT name","uniqueKey":"data.createdBySubject.subjectPatName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject PAT name","uniqueKey":"data.createdBySubject.subjectPatName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectPatName","typeLabel":"string | null"},"subjectControllerName":{"oneOf":[{"type":"string","uniqueKey":"data.createdBySubject.subjectControllerName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.createdBySubject.subjectControllerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectControllerName","typeLabel":"string | null"},"subjectExternalIdentitySlug":{"oneOf":[{"type":"string","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.createdBySubject","typeLabel":"Subject · object"},"lifecycleStage":{"type":"string","title":"ApplicationLifecycleStage","description":"Current lifecycle stage of the application","enum":["active","deleting","deletion_failed"],"x-fern-type-name":"ApplicationLifecycleStage","isRequired":true,"uniqueKey":"data.lifecycleStage","typeLabel":"enum\u003cstring>"},"autopilot":{"type":"object","additionalProperties":true,"isRequired":true,"uniqueKey":"data.autopilot","typeLabel":"object"},"id":{"oneOf":[{"type":"string","description":"Unique identifier of the application","uniqueKey":"data.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the application","uniqueKey":"data.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.id","typeLabel":"string | null"},"fqn":{"oneOf":[{"type":"string","description":"FQN of the application","uniqueKey":"data.fqn.oneOf.0","typeLabel":"string"},{"type":"null","description":"FQN of the application","uniqueKey":"data.fqn.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fqn","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Human-readable application name","uniqueKey":"data.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable application name","uniqueKey":"data.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.name","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"ApplicationType","description":"Type of the application","enum":["async-service","service","job","spark-job","helm","notebook","spark-notebook","codeserver","rstudio","ssh-server","volume","application","application-set","intercept","workflow"],"x-fern-type-name":"ApplicationType","uniqueKey":"data.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.type","typeLabel":"enum\u003cstring> | null"},"tenantName":{"oneOf":[{"type":"string","description":"Tenant this application belongs to","uniqueKey":"data.tenantName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Tenant this application belongs to","uniqueKey":"data.tenantName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.tenantName","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","title":"ApplicationMetadata","description":"Application metadata including pause state and sync info","x-fern-type-name":"ApplicationMetadata","properties":{"paused":{"oneOf":[{"type":"boolean","description":"Explicit pause state. true = user has paused the app (all pods removed). false = user has explicitly resumed the app. null/undefined = user has never toggled pause; the app is managed normally, but autoshutdown may have scaled it to zero pods due to inactivity.","uniqueKey":"data.metadata.oneOf.0.paused.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Explicit pause state. true = user has paused the app (all pods removed). false = user has explicitly resumed the app. null/undefined = user has never toggled pause; the app is managed normally, but autoshutdown may have scaled it to zero pods due to inactivity.","uniqueKey":"data.metadata.oneOf.0.paused.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.metadata.oneOf.0.paused","typeLabel":"boolean | null"}},"uniqueKey":"data.metadata.oneOf.0","typeLabel":"ApplicationMetadata · object"},{"type":"null","uniqueKey":"data.metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.metadata","typeLabel":"ApplicationMetadata · object | null"},"workspaceId":{"oneOf":[{"type":"string","description":"Unique identifier of the workspace this application belongs to","uniqueKey":"data.workspaceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the workspace this application belongs to","uniqueKey":"data.workspaceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.workspaceId","typeLabel":"string | null"},"lastVersion":{"oneOf":[{"type":"integer","description":"Version number of the latest deployment","uniqueKey":"data.lastVersion.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Version number of the latest deployment","uniqueKey":"data.lastVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastVersion","typeLabel":"integer | null"},"activeVersion":{"oneOf":[{"type":"integer","description":"Version number of the currently active deployment","uniqueKey":"data.activeVersion.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Version number of the currently active deployment","uniqueKey":"data.activeVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.activeVersion","typeLabel":"integer | null"},"applicationSetId":{"oneOf":[{"type":"string","description":"Unique identifier of the application set this application belongs to, if any","uniqueKey":"data.applicationSetId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the application set this application belongs to, if any","uniqueKey":"data.applicationSetId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationSetId","typeLabel":"string | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time> | null"},"recommendations":{"oneOf":[{"description":"Recommendations for this application","type":"array","items":{"type":"object","properties":{"recommendationData":{"type":"object","additionalProperties":true,"isRequired":true,"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].recommendationData","typeLabel":"object"},"recommendationType":{"type":"string","isRequired":true,"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].recommendationType","typeLabel":"string"},"expiryTimestamp":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].expiryTimestamp","typeLabel":"string\u003cdate-time>"},"id":{"oneOf":[{"type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"clusterId":{"oneOf":[{"type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].clusterId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].clusterId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].clusterId","typeLabel":"string | null"},"applicationId":{"oneOf":[{"type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationId","typeLabel":"string | null"},"deploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].deploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].deploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].deploymentId","typeLabel":"string | null"},"applicationVersion":{"oneOf":[{"type":"integer","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationVersion.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].applicationVersion","typeLabel":"integer | null"},"appliedDeploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].appliedDeploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].appliedDeploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].appliedDeploymentId","typeLabel":"string | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time> | null"}},"required":["recommendationData","recommendationType","expiryTimestamp"],"title":"Recommendation","x-fern-type-name":"Recommendation","uniqueKey":"data.recommendations.oneOf.0.items.[INDEX]","typeLabel":"Recommendation · object"},"uniqueKey":"data.recommendations.oneOf.0","typeLabel":"Recommendation · object[]"},{"description":"Recommendations for this application","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"clusterId":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationId":{"oneOf":[{"type":"string"},{"type":"null"}]},"deploymentId":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationVersion":{"oneOf":[{"type":"integer"},{"type":"null"}]},"recommendationData":{"type":"object","additionalProperties":true},"recommendationType":{"type":"string"},"appliedDeploymentId":{"oneOf":[{"type":"string"},{"type":"null"}]},"expiryTimestamp":{"format":"date-time","type":"string"},"createdAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]},"updatedAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]}},"required":["recommendationData","recommendationType","expiryTimestamp"],"title":"Recommendation","x-fern-type-name":"Recommendation"},"uniqueKey":"data.recommendations.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations","typeLabel":"Recommendation · object[] | null"},"alerts":{"oneOf":[{"description":"Alerts for this application","type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].name","typeLabel":"string"},"timestamps":{"type":"array","items":{"format":"date-time","type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].timestamps.items.[INDEX]","typeLabel":"string\u003cdate-time>"},"isRequired":true,"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].timestamps","typeLabel":"string\u003cdate-time>[]"},"startTime":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].startTime","typeLabel":"string\u003cdate-time>"},"clusterId":{"type":"string","isRequired":true,"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].clusterId","typeLabel":"string"},"fingerprint":{"type":"string","isRequired":true,"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].fingerprint","typeLabel":"string"},"id":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"resolvedTime":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].resolvedTime.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].resolvedTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].resolvedTime","typeLabel":"string\u003cdate-time> | null"},"applicationId":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationId","typeLabel":"string | null"},"tenantName":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].tenantName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].tenantName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].tenantName","typeLabel":"string | null"},"updatedAt":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string | null"},"createdAt":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].createdAt","typeLabel":"string | null"},"applicationDebugInfoId":{"oneOf":[{"type":"string","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationDebugInfoId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationDebugInfoId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts.oneOf.0.items.[INDEX].applicationDebugInfoId","typeLabel":"string | null"}},"required":["name","timestamps","startTime","clusterId","fingerprint"],"title":"Alert","x-fern-type-name":"Alert","uniqueKey":"data.alerts.oneOf.0.items.[INDEX]","typeLabel":"Alert · object"},"uniqueKey":"data.alerts.oneOf.0","typeLabel":"Alert · object[]"},{"description":"Alerts for this application","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"timestamps":{"type":"array","items":{"format":"date-time","type":"string"}},"startTime":{"format":"date-time","type":"string"},"resolvedTime":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]},"applicationId":{"oneOf":[{"type":"string"},{"type":"null"}]},"clusterId":{"type":"string"},"tenantName":{"oneOf":[{"type":"string"},{"type":"null"}]},"fingerprint":{"type":"string"},"updatedAt":{"oneOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationDebugInfoId":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["name","timestamps","startTime","clusterId","fingerprint"],"title":"Alert","x-fern-type-name":"Alert"},"uniqueKey":"data.alerts.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alerts","typeLabel":"Alert · object[] | null"},"alertsSummary":{"oneOf":[{"type":"object","description":"Summary of alerts for this application","additionalProperties":true,"uniqueKey":"data.alertsSummary.oneOf.0","typeLabel":"object"},{"type":"null","description":"Summary of alerts for this application","additionalProperties":true,"uniqueKey":"data.alertsSummary.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.alertsSummary","typeLabel":"object | null"},"applicationDebugInfos":{"oneOf":[{"description":"Debug infos for this application","type":"array","items":{"type":"object","properties":{"applicationId":{"type":"string","isRequired":true,"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].applicationId","typeLabel":"string"},"debugInfo":{"type":"object","additionalProperties":true,"isRequired":true,"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].debugInfo","typeLabel":"object"},"id":{"oneOf":[{"type":"string","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"application":{"oneOf":[{"type":"object","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].application.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].application.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].application","typeLabel":"object | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time> | null"}},"required":["applicationId","debugInfo"],"title":"ApplicationDebugInfo","x-fern-type-name":"ApplicationDebugInfo","uniqueKey":"data.applicationDebugInfos.oneOf.0.items.[INDEX]","typeLabel":"ApplicationDebugInfo · object"},"uniqueKey":"data.applicationDebugInfos.oneOf.0","typeLabel":"ApplicationDebugInfo · object[]"},{"description":"Debug infos for this application","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationId":{"type":"string"},"application":{"oneOf":[{"type":"object"},{"type":"null"}]},"debugInfo":{"type":"object","additionalProperties":true},"createdAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]},"updatedAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]}},"required":["applicationId","debugInfo"],"title":"ApplicationDebugInfo","x-fern-type-name":"ApplicationDebugInfo"},"uniqueKey":"data.applicationDebugInfos.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.applicationDebugInfos","typeLabel":"ApplicationDebugInfo · object[] | null"},"potentialProblems":{"oneOf":[{"description":"Potential problems with the application","type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.potentialProblems.oneOf.0.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","isRequired":true,"uniqueKey":"data.potentialProblems.oneOf.0.items.[INDEX].description","typeLabel":"string"}},"required":["name","description"],"title":"ApplicationProblem","x-fern-type-name":"ApplicationProblem","uniqueKey":"data.potentialProblems.oneOf.0.items.[INDEX]","typeLabel":"ApplicationProblem · object"},"uniqueKey":"data.potentialProblems.oneOf.0","typeLabel":"ApplicationProblem · object[]"},{"description":"Potential problems with the application","type":"null","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name","description"],"title":"ApplicationProblem","x-fern-type-name":"ApplicationProblem"},"uniqueKey":"data.potentialProblems.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.potentialProblems","typeLabel":"ApplicationProblem · object[] | null"},"workspaceFqn":{"oneOf":[{"type":"string","uniqueKey":"data.workspaceFqn.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.workspaceFqn.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.workspaceFqn","typeLabel":"string | null"},"createdBy":{"oneOf":[{"type":"string","uniqueKey":"data.createdBy.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.createdBy.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBy","typeLabel":"string | null"},"deployment":{"oneOf":[{"type":"object","title":"Deployment","required":["manifest","createdBySubject"],"x-fern-type-name":"Deployment","properties":{"manifest":{"oneOf":[{"type":"object","title":"Service","description":"Deployment manifest defining the application configuration.","required":["type","replicas","name","image","ports"],"x-fern-type-name":"Service","properties":{"name":{"description":"Name of the service. This uniquely identifies this service in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.image","typeLabel":"Build · object | Image · object"},"ports":{"description":"Expose the deployment to make it accessible over the internet or keep it private. Implement authentication to restrict access. [Docs](https://docs.truefoundry.com/docs/define-ports-and-domains)","type":"array","items":{"description":"Describes the ports the service should be exposed to.","type":"object","required":["port","protocol","expose"],"properties":{"port":{"description":"Port number to expose.","type":"integer","minimum":1,"maximum":65535,"default":80,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].port","typeLabel":"integer"},"protocol":{"description":"Protocol for the port.","type":"string","enum":["TCP","UDP"],"default":"TCP","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].protocol","typeLabel":"enum\u003cstring>"},"expose":{"description":"Expose the port","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].expose","typeLabel":"boolean"},"app_protocol":{"description":"Application Protocol for the port.\nSelect the application protocol used by your service. For most use cases, this should be `http`(HTTP/1.1).\nIf you are running a gRPC server, select the `grpc` option.\nThis is only applicable if `expose=true`.","type":"string","enum":["http","grpc","tcp"],"default":"http","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].app_protocol","typeLabel":"enum\u003cstring>"},"host":{"description":"Host e.g. ai.example.com, app.truefoundry.com","type":"string","pattern":"^((([a-zA-Z0-9\\-]{1,63}\\.)([a-zA-Z0-9\\-]{1,63}\\.)*([A-Za-z]{1,63}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].host","typeLabel":"string"},"path":{"description":"Path e.g. /v1/api/ml/, /v2/docs/","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].path","typeLabel":"string"},"rewrite_path_to":{"description":"Rewrite the path prefix to a different path.\nIf `path` is `/v1/api` and `rewrite_path_to` is `/api`. The URI in the HTTP request `http://0.0.0.0:8080/v1/api/houses` will be rewritten to `http://0.0.0.0:8080/api/houses` before the request is forwarded your service.\nDefaults to `/`.\nThis is only applicable if `path` is given.","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].rewrite_path_to","typeLabel":"string"},"auth":{"oneOf":[{"type":"object","title":"BasicAuthCreds","description":"Username and password","required":["type","username","password"],"x-fern-type-name":"BasicAuthCreds","properties":{"type":{"description":"+value=basic_auth","type":"string","enum":["basic_auth"],"default":"basic_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"username":{"description":"Username for service auth - Username for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.0.username","typeLabel":"string"},"password":{"description":"Password for service auth - Password for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.0.password","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.0","typeLabel":"BasicAuthCreds · object"},{"type":"object","title":"JwtAuthConfig","description":"Configure JWT-based authentication using JWKS","required":["type","integration_fqn"],"x-fern-type-name":"JwtAuthConfig","properties":{"type":{"description":"+value=jwt_auth","type":"string","enum":["jwt_auth"],"default":"jwt_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"integration_fqn":{"description":"FQN of the JWT Auth integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.integration_fqn","typeLabel":"string"},"enable_login":{"description":"Enable login for the service","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.enable_login","typeLabel":"boolean"},"claims":{"description":"List of key-value pairs of claims to verify in the JWT token","type":"array","items":{"type":"object","required":["key","values"],"properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].key","typeLabel":"string"},"values":{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims","typeLabel":"object[]"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.1","typeLabel":"JwtAuthConfig · object"},{"type":"object","title":"TrueFoundryInteractiveLogin","description":"Login with truefoundry","required":["type"],"x-fern-type-name":"TrueFoundryInteractiveLogin","properties":{"type":{"description":"+value=truefoundry_oauth","type":"string","enum":["truefoundry_oauth"],"default":"truefoundry_oauth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth.oneOf.2","typeLabel":"TrueFoundryInteractiveLogin · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX].auth","typeLabel":"BasicAuthCreds · object | JwtAuthConfig · object | TrueFoundryInteractiveLogin · object"}},"title":"Port","x-fern-type-name":"Port","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports.items.[INDEX]","typeLabel":"Port · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.ports","typeLabel":"Port · object[]"},"type":{"description":"+value=service","type":"string","enum":["service"],"default":"service","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.type","typeLabel":"enum\u003cstring>"},"replicas":{"oneOf":[{"type":"number","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"maximum":500,"minimum":0,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.0","typeLabel":"number"},{"type":"object","title":"ServiceAutoscaling","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"required":["metrics","min_replicas","max_replicas"],"x-fern-type-name":"ServiceAutoscaling","properties":{"min_replicas":{"description":"Minimum number of replicas to keep available","type":"integer","minimum":0,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.min_replicas","typeLabel":"integer"},"max_replicas":{"description":"Maximum number of replicas allowed for the component.","type":"integer","minimum":1,"maximum":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.max_replicas","typeLabel":"integer"},"metrics":{"oneOf":[{"type":"object","title":"CPUUtilizationMetric","description":"Metrics to use for the autoscaler","required":["type","value"],"x-fern-type-name":"CPUUtilizationMetric","properties":{"type":{"description":"+value=cpu_utilization","type":"string","enum":["cpu_utilization"],"default":"cpu_utilization","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.0.type","typeLabel":"enum\u003cstring>"},"value":{"description":"Percentage of cpu request averaged over all replicas which the autoscaler should try to maintain","type":"integer","minimum":1,"maximum":100,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.0.value","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.0","typeLabel":"CPUUtilizationMetric · object"},{"type":"object","title":"RPSMetric","description":"Metrics to use for the autoscaler","required":["type","value"],"x-fern-type-name":"RPSMetric","properties":{"type":{"description":"+value=rps","type":"string","enum":["rps"],"default":"rps","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.1.type","typeLabel":"enum\u003cstring>"},"value":{"description":"Average request per second averaged over all replicas that autoscaler should try to maintain","type":"number","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.1.value","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.1","typeLabel":"RPSMetric · object"},{"type":"object","title":"CronMetric","description":"Metrics to use for the autoscaler","required":["type","start","end","timezone"],"x-fern-type-name":"CronMetric","properties":{"type":{"description":"+value=cron","type":"string","enum":["cron"],"default":"cron","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2.type","typeLabel":"enum\u003cstring>"},"start":{"description":"Cron expression indicating the start of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2.start","typeLabel":"string"},"end":{"description":"Cron expression indicating the end of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2.end","typeLabel":"string"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","default":"UTC","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2.timezone","typeLabel":"string"},"desired_replicas":{"description":"Desired number of replicas during the given interval. Default value is max_replicas.","type":"integer","minimum":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2.desired_replicas","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics.oneOf.2","typeLabel":"CronMetric · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.metrics","typeLabel":"CPUUtilizationMetric · object | RPSMetric · object | CronMetric · object"},"polling_interval":{"description":"This is the interval to check each trigger on.","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1.polling_interval","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas.oneOf.1","typeLabel":"ServiceAutoscaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.replicas","typeLabel":"number | ServiceAutoscaling · object"},"artifacts_download":{"description":"Download and cache models in a volume to enhance loading speeds and reduce costs by avoiding repeated downloads. [Docs](https://docs.truefoundry.com/docs/download-and-cache-models)","type":"object","required":["artifacts"],"properties":{"artifacts":{"description":"List of artifacts to be cached","type":"array","items":{"oneOf":[{"type":"object","title":"TrueFoundryArtifactSource","description":"Input for Artifact from TrueFoundry Artifact Registry","required":["type","artifact_version_fqn","download_path_env_variable"],"x-fern-type-name":"TrueFoundryArtifactSource","properties":{"type":{"description":"+value=truefoundry-artifact","type":"string","enum":["truefoundry-artifact"],"default":"truefoundry-artifact","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"artifact_version_fqn":{"description":"Artifact or Model Version FQN of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.artifact_version_fqn","typeLabel":"string"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0","typeLabel":"TrueFoundryArtifactSource · object"},{"type":"object","title":"HuggingfaceArtifactSource","description":"Input for Artifact from Huggingface Model Hub","required":["type","model_id","revision","ignore_patterns","download_path_env_variable"],"x-fern-type-name":"HuggingfaceArtifactSource","properties":{"type":{"description":"+value=huggingface-hub","type":"string","enum":["huggingface-hub"],"default":"huggingface-hub","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"model_id":{"description":"Model ID of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.model_id","typeLabel":"string"},"revision":{"description":"Revision of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.revision","typeLabel":"string"},"ignore_patterns":{"description":"List of patterns to ignore while downloading the artifact","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns.items.[INDEX]","typeLabel":"string"},"default":["*.h5","*.ot","*.tflite","*.msgpack"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns","typeLabel":"string[]"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1","typeLabel":"HuggingfaceArtifactSource · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts.items.[INDEX]","typeLabel":"TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.artifacts","typeLabel":"(TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object)[]"},"cache_volume":{"description":"Describes the volume that will be used to cache the models","type":"object","required":["storage_class","cache_size"],"properties":{"storage_class":{"description":"Storage class of the Volume where artifacts will be cached","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.cache_volume.storage_class","typeLabel":"string"},"cache_size":{"description":"Size of the Volume (in GB) where artifacts will be cached. Should be greater than twice the size of artifacts getting cached","type":"integer","minimum":1,"maximum":10000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.cache_volume.cache_size","typeLabel":"integer"}},"title":"ArtifactsCacheVolume","x-fern-type-name":"ArtifactsCacheVolume","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download.cache_volume","typeLabel":"ArtifactsCacheVolume · object"}},"title":"ArtifactsDownload","x-fern-type-name":"ArtifactsDownload","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.artifacts_download","typeLabel":"ArtifactsDownload · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.env","typeLabel":"object | null"},"service_account":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to service pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-service)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.kustomize","typeLabel":"Kustomize · object"},"liveness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.liveness_probe","typeLabel":"HealthProbe · object"},"readiness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.readiness_probe","typeLabel":"HealthProbe · object"},"startup_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.startup_probe","typeLabel":"HealthProbe · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.workspace_fqn","typeLabel":"string"},"auto_shutdown":{"type":"object","required":["wait_time"],"properties":{"wait_time":{"description":"The period to wait after the last received request before scaling the replicas to 0. This value should be high enough to allow for the replicas of the service to come up to avoid premature scaling down.","type":"integer","minimum":0,"maximum":604800,"default":900,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.auto_shutdown.wait_time","typeLabel":"integer"}},"title":"Autoshutdown","x-fern-type-name":"Autoshutdown","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.auto_shutdown","typeLabel":"Autoshutdown · object"},"allow_interception":{"description":"Whether to allow intercepts to be applied for this service.\nThis would inject an additional sidecar in each pod of the service. Not recommended on production","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.allow_interception","typeLabel":"boolean"},"rollout_strategy":{"oneOf":[{"type":"object","title":"Rolling","description":"This strategy updates the pods in a rolling fashion such that a subset of the\ntotal pods are replaced with new version at one time.\nA commonly used strategy can be to have maxUnavailablePercentage close to 0 so that there\nis no downtime and keep the maxSurgePercentage to around 25%. If you are anyways running\na large number of pods, the service can often tolerate a few pods going down - so you\nmax maxUnavailablePercentage = 10 and maxSurgePercentage=0. You can read about it more\n[here](https://spot.io/resources/kubernetes-autoscaling/5-kubernetes-deployment-strategies-roll-out-like-the-pros/)","required":["type","max_unavailable_percentage","max_surge_percentage"],"x-fern-type-name":"Rolling","properties":{"type":{"description":"+value=rolling_update","type":"string","enum":["rolling_update"],"default":"rolling_update","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.0.type","typeLabel":"enum\u003cstring>"},"max_unavailable_percentage":{"description":"Percentage of total replicas that can be brought down at one time.\nFor a value of 25 when replicas are set to 12 this would mean minimum (25% of 12) = 3 pods might be unavailable during the deployment.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.0.max_unavailable_percentage","typeLabel":"integer"},"max_surge_percentage":{"description":"Percentage of total replicas of updated image that can be brought up over the total replicas count.\nFor a value of 25 when replicas are set to 12 this would mean (12+(25% of 12) = 15) pods might be running at one time.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.0.max_surge_percentage","typeLabel":"integer"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.0","typeLabel":"Rolling · object"},{"type":"object","title":"Canary","description":"This strategy brings up the new release without bringing the older release down. Traffic is shifted from the older release to the newer release in a staged manner.\nThis can help with verifying the health of the new release without shifting complete traffic.","required":["type","steps"],"x-fern-type-name":"Canary","properties":{"type":{"description":"+value=canary","type":"string","enum":["canary"],"default":"canary","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1.type","typeLabel":"enum\u003cstring>"},"steps":{"description":"These steps would be executed in order to enable shifting of traffic slowly from stable to canary version","type":"array","items":{"type":"object","required":["weight_percentage"],"properties":{"weight_percentage":{"description":"Percentage of total traffic to be shifted to the canary release.\nThe rest will continue to go to the existing deployment","type":"integer","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX].weight_percentage","typeLabel":"integer"},"pause_duration":{"description":"Duration for which to pause the release. The release process will wait for these seconds before proceeding to the next step.\nIf this is not set, the step will pause indefinitely on this step","type":"integer","minimum":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX].pause_duration","typeLabel":"integer"}},"title":"CanaryStep","x-fern-type-name":"CanaryStep","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX]","typeLabel":"CanaryStep · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1.steps","typeLabel":"CanaryStep · object[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.1","typeLabel":"Canary · object"},{"type":"object","title":"BlueGreen","description":"This strategy brings up the new release completely before switching the complete load to the new release.\nThis minimizes the time that two versions are serving traffic at the same time.","required":["type"],"x-fern-type-name":"BlueGreen","properties":{"type":{"description":"+value=blue_green","type":"string","enum":["blue_green"],"default":"blue_green","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.2.type","typeLabel":"enum\u003cstring>"},"enable_auto_promotion":{"description":"Promote the new release to handle the complete traffic. A manual promotion would be needed if this is disabled","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.2.enable_auto_promotion","typeLabel":"boolean"},"auto_promotion_seconds":{"description":"Promote the new release to handle the complete traffic after waiting for these many seconds","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.2.auto_promotion_seconds","typeLabel":"integer"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy.oneOf.2","typeLabel":"BlueGreen · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0.rollout_strategy","typeLabel":"Rolling · object | Canary · object | BlueGreen · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.0","typeLabel":"Service · object"},{"type":"object","title":"AsyncService","description":"Deployment manifest defining the application configuration.","required":["type","replicas","worker_config","name","image","ports"],"x-fern-type-name":"AsyncService","properties":{"name":{"description":"Name of the service. This uniquely identifies this service in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.image","typeLabel":"Build · object | Image · object"},"ports":{"description":"Expose the deployment to make it accessible over the internet or keep it private. Implement authentication to restrict access. [Docs](https://docs.truefoundry.com/docs/define-ports-and-domains)","type":"array","items":{"description":"Describes the ports the service should be exposed to.","type":"object","required":["port","protocol","expose"],"properties":{"port":{"description":"Port number to expose.","type":"integer","minimum":1,"maximum":65535,"default":80,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].port","typeLabel":"integer"},"protocol":{"description":"Protocol for the port.","type":"string","enum":["TCP","UDP"],"default":"TCP","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].protocol","typeLabel":"enum\u003cstring>"},"expose":{"description":"Expose the port","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].expose","typeLabel":"boolean"},"app_protocol":{"description":"Application Protocol for the port.\nSelect the application protocol used by your service. For most use cases, this should be `http`(HTTP/1.1).\nIf you are running a gRPC server, select the `grpc` option.\nThis is only applicable if `expose=true`.","type":"string","enum":["http","grpc","tcp"],"default":"http","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].app_protocol","typeLabel":"enum\u003cstring>"},"host":{"description":"Host e.g. ai.example.com, app.truefoundry.com","type":"string","pattern":"^((([a-zA-Z0-9\\-]{1,63}\\.)([a-zA-Z0-9\\-]{1,63}\\.)*([A-Za-z]{1,63}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].host","typeLabel":"string"},"path":{"description":"Path e.g. /v1/api/ml/, /v2/docs/","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].path","typeLabel":"string"},"rewrite_path_to":{"description":"Rewrite the path prefix to a different path.\nIf `path` is `/v1/api` and `rewrite_path_to` is `/api`. The URI in the HTTP request `http://0.0.0.0:8080/v1/api/houses` will be rewritten to `http://0.0.0.0:8080/api/houses` before the request is forwarded your service.\nDefaults to `/`.\nThis is only applicable if `path` is given.","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].rewrite_path_to","typeLabel":"string"},"auth":{"oneOf":[{"type":"object","title":"BasicAuthCreds","description":"Username and password","required":["type","username","password"],"x-fern-type-name":"BasicAuthCreds","properties":{"type":{"description":"+value=basic_auth","type":"string","enum":["basic_auth"],"default":"basic_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"username":{"description":"Username for service auth - Username for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.0.username","typeLabel":"string"},"password":{"description":"Password for service auth - Password for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.0.password","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.0","typeLabel":"BasicAuthCreds · object"},{"type":"object","title":"JwtAuthConfig","description":"Configure JWT-based authentication using JWKS","required":["type","integration_fqn"],"x-fern-type-name":"JwtAuthConfig","properties":{"type":{"description":"+value=jwt_auth","type":"string","enum":["jwt_auth"],"default":"jwt_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"integration_fqn":{"description":"FQN of the JWT Auth integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.integration_fqn","typeLabel":"string"},"enable_login":{"description":"Enable login for the service","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.enable_login","typeLabel":"boolean"},"claims":{"description":"List of key-value pairs of claims to verify in the JWT token","type":"array","items":{"type":"object","required":["key","values"],"properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].key","typeLabel":"string"},"values":{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims","typeLabel":"object[]"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.1","typeLabel":"JwtAuthConfig · object"},{"type":"object","title":"TrueFoundryInteractiveLogin","description":"Login with truefoundry","required":["type"],"x-fern-type-name":"TrueFoundryInteractiveLogin","properties":{"type":{"description":"+value=truefoundry_oauth","type":"string","enum":["truefoundry_oauth"],"default":"truefoundry_oauth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth.oneOf.2","typeLabel":"TrueFoundryInteractiveLogin · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX].auth","typeLabel":"BasicAuthCreds · object | JwtAuthConfig · object | TrueFoundryInteractiveLogin · object"}},"title":"Port","x-fern-type-name":"Port","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports.items.[INDEX]","typeLabel":"Port · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.ports","typeLabel":"Port · object[]"},"type":{"description":"+value=async-service","type":"string","enum":["async-service"],"default":"async-service","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.type","typeLabel":"enum\u003cstring>"},"replicas":{"oneOf":[{"type":"number","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"maximum":500,"minimum":0,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.0","typeLabel":"number"},{"type":"object","title":"AsyncServiceAutoscaling","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"required":["metrics","min_replicas","max_replicas"],"x-fern-type-name":"AsyncServiceAutoscaling","properties":{"min_replicas":{"description":"Minimum number of replicas to keep available","type":"integer","minimum":0,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.min_replicas","typeLabel":"integer"},"max_replicas":{"description":"Maximum number of replicas allowed for the component.","type":"integer","minimum":1,"maximum":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.max_replicas","typeLabel":"integer"},"metrics":{"oneOf":[{"type":"object","title":"SQSQueueMetricConfig","description":"Metrics to use for the autoscaler","required":["type","queue_length"],"x-fern-type-name":"SQSQueueMetricConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_length":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the queue and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.queue_length","typeLabel":"integer"},"auth":{"oneOf":[{"type":"object","title":"AwsSqsAccessKeyBasedAuth","description":"AWS Access Key Based Auth","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"AwsSqsAccessKeyBasedAuth","properties":{"type":{"description":"+value=access-key-based","type":"string","enum":["access-key-based"],"default":"access-key-based","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID that you want to use for authentication.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS access key secret that you want to use for authentication.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0","typeLabel":"AwsSqsAccessKeyBasedAuth · object"},{"type":"object","title":"AwsSqsAssumedRoleBasedAuth","description":"AWS Assumed Role Based Auth","required":["type","assumed_role_arn"],"x-fern-type-name":"AwsSqsAssumedRoleBasedAuth","properties":{"type":{"description":"+value=assumed-role-based","type":"string","enum":["assumed-role-based"],"default":"assumed-role-based","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume.","type":"string","pattern":"^arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1.assumed_role_arn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1","typeLabel":"AwsSqsAssumedRoleBasedAuth · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth","typeLabel":"AwsSqsAccessKeyBasedAuth · object | AwsSqsAssumedRoleBasedAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.0","typeLabel":"SQSQueueMetricConfig · object"},{"type":"object","title":"NATSMetricConfig","description":"Metrics to use for the autoscaler","required":["type","lag_threshold"],"x-fern-type-name":"NATSMetricConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.1.type","typeLabel":"enum\u003cstring>"},"lag_threshold":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.1.lag_threshold","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.1","typeLabel":"NATSMetricConfig · object"},{"type":"object","title":"KafkaMetricConfig","description":"Metrics to use for the autoscaler","required":["type","lag_threshold"],"x-fern-type-name":"KafkaMetricConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.2.type","typeLabel":"enum\u003cstring>"},"lag_threshold":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.2.lag_threshold","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.2","typeLabel":"KafkaMetricConfig · object"},{"type":"object","title":"CronMetric","description":"Metrics to use for the autoscaler","required":["type","start","end","timezone"],"x-fern-type-name":"CronMetric","properties":{"type":{"description":"+value=cron","type":"string","enum":["cron"],"default":"cron","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3.type","typeLabel":"enum\u003cstring>"},"start":{"description":"Cron expression indicating the start of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3.start","typeLabel":"string"},"end":{"description":"Cron expression indicating the end of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3.end","typeLabel":"string"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","default":"UTC","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3.timezone","typeLabel":"string"},"desired_replicas":{"description":"Desired number of replicas during the given interval. Default value is max_replicas.","type":"integer","minimum":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3.desired_replicas","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.3","typeLabel":"CronMetric · object"},{"type":"object","title":"AMQPMetricConfig","description":"Metrics to use for the autoscaler","required":["type","queue_length"],"x-fern-type-name":"AMQPMetricConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.4.type","typeLabel":"enum\u003cstring>"},"queue_length":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.4.queue_length","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics.oneOf.4","typeLabel":"AMQPMetricConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.metrics","typeLabel":"SQSQueueMetricConfig · object | NATSMetricConfig · object | KafkaMetricConfig · object | CronMetric · object | AMQPMetricConfig · object"},"polling_interval":{"description":"This is the interval to check each trigger on.","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1.polling_interval","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas.oneOf.1","typeLabel":"AsyncServiceAutoscaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.replicas","typeLabel":"number | AsyncServiceAutoscaling · object"},"worker_config":{"type":"object","required":["input_config","num_concurrent_workers"],"properties":{"input_config":{"oneOf":[{"type":"object","title":"SQSInputConfig","description":"Describes the configuration for the input SQS worker","required":["type","queue_url","region_name","visibility_timeout","wait_time_seconds"],"x-fern-type-name":"SQSInputConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_url":{"description":"AWS SQS Queue URL of Subscriber","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.queue_url","typeLabel":"string"},"region_name":{"description":"AWS Region Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.region_name","typeLabel":"string"},"visibility_timeout":{"description":"A period during which Amazon SQS prevents all consumers from receiving and processing the message. If one message takes 5 seconds to process, you can set this number to 7 or any number higher than 5. This will ensure that while the message is being processed, it will not be available to other replicas. For more information, see [here](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)","type":"integer","minimum":1,"maximum":43200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.visibility_timeout","typeLabel":"integer"},"wait_time_seconds":{"description":"Wait timeout for long polling. For more information, see [here](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html)","type":"integer","minimum":1,"maximum":20,"default":19,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.wait_time_seconds","typeLabel":"integer"},"auth":{"type":"object","required":["aws_access_key_id","aws_secret_access_key"],"properties":{"aws_access_key_id":{"description":"AWS Access Key ID","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.auth.aws_access_key_id","typeLabel":"string"},"aws_secret_access_key":{"description":"AWS Secret Access Key for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.auth.aws_secret_access_key","typeLabel":"string"},"aws_session_token":{"description":"AWS Session Token, only required when using temporary credentials","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.auth.aws_session_token","typeLabel":"string"}},"title":"AWSAccessKeyAuth","x-fern-type-name":"AWSAccessKeyAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0.auth","typeLabel":"AWSAccessKeyAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.0","typeLabel":"SQSInputConfig · object"},{"type":"object","title":"NATSInputConfig","description":"Describes the configuration for the input NATS worker","required":["type","nats_url","stream_name","root_subject","consumer_name","wait_time_seconds"],"x-fern-type-name":"NATSInputConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Input NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.nats_url","typeLabel":"string"},"stream_name":{"description":"Name of the NATS stream","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.stream_name","typeLabel":"string"},"root_subject":{"description":"Root subject of input NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.root_subject","typeLabel":"string"},"consumer_name":{"description":"Consumer name of input NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.consumer_name","typeLabel":"string"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"maximum":20,"default":19,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.wait_time_seconds","typeLabel":"integer"},"nats_metrics_url":{"description":"URL for the NATS metrics endpoint. It is compulsory if you want to use NATS autoscaling.","type":"string","pattern":"^(http(s?)://).*$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.nats_metrics_url","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1.auth","typeLabel":"NATSUserPasswordAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.1","typeLabel":"NATSInputConfig · object"},{"type":"object","title":"KafkaInputConfig","description":"Describes the configuration for the input Kafka worker","required":["type","bootstrap_servers","topic_name","consumer_group","tls"],"x-fern-type-name":"KafkaInputConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bootstrap_servers":{"description":"'Kafka Bootstrap servers - Comma separated list of Kafka brokers \"hostname:port\" to connect to for bootstrap'","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.bootstrap_servers","typeLabel":"string"},"topic_name":{"description":"Kafka topic to subscribe to","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.topic_name","typeLabel":"string"},"consumer_group":{"description":"The name of the consumer group to join for dynamic partition assignment","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.consumer_group","typeLabel":"string"},"tls":{"description":"TLS configuration for SASL authentication","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.tls","typeLabel":"boolean"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"maximum":300,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.wait_time_seconds","typeLabel":"integer"},"auth":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Username for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.auth.username","typeLabel":"string"},"password":{"description":"Password for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.auth.password","typeLabel":"string"}},"title":"KafkaSASLAuth","x-fern-type-name":"KafkaSASLAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2.auth","typeLabel":"KafkaSASLAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.2","typeLabel":"KafkaInputConfig · object"},{"type":"object","title":"AMQPInputConfig","description":"Describes the configuration for the input AMQP worker","required":["type","url","queue_name","wait_time_seconds"],"x-fern-type-name":"AMQPInputConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.3.type","typeLabel":"enum\u003cstring>"},"url":{"description":"AMQP Queue URL of Subscriber","type":"string","pattern":"^(amqp|amqps?)://(?:[^:@]+(?::[^:@]+)?@)?([^/?]+)(?:/([^?]+))?/?([^?]+)?(?:\\?(.*))?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.3.url","typeLabel":"string"},"queue_name":{"description":"AMQP Queue Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.3.queue_name","typeLabel":"string"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"default":5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.3.wait_time_seconds","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config.oneOf.3","typeLabel":"AMQPInputConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.input_config","typeLabel":"SQSInputConfig · object | NATSInputConfig · object | KafkaInputConfig · object | AMQPInputConfig · object"},"num_concurrent_workers":{"description":"Number of concurrent workers to spawn for the processor","type":"integer","minimum":1,"maximum":10,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.num_concurrent_workers","typeLabel":"integer"},"output_config":{"oneOf":[{"type":"object","title":"SQSOutputConfig","description":"Describes the configuration for the output SQS worker","required":["type","queue_url","region_name"],"x-fern-type-name":"SQSOutputConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_url":{"description":"AWS SQS Queue URL of Publisher","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.queue_url","typeLabel":"string"},"region_name":{"description":"AWS Region Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.region_name","typeLabel":"string"},"auth":{"type":"object","required":["aws_access_key_id","aws_secret_access_key"],"properties":{"aws_access_key_id":{"description":"AWS Access Key ID","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.auth.aws_access_key_id","typeLabel":"string"},"aws_secret_access_key":{"description":"AWS Secret Access Key for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.auth.aws_secret_access_key","typeLabel":"string"},"aws_session_token":{"description":"AWS Session Token, only required when using temporary credentials","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.auth.aws_session_token","typeLabel":"string"}},"title":"AWSAccessKeyAuth","x-fern-type-name":"AWSAccessKeyAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0.auth","typeLabel":"AWSAccessKeyAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.0","typeLabel":"SQSOutputConfig · object"},{"type":"object","title":"NATSOutputConfig","description":"Describes the configuration for the output NATS worker","required":["type","nats_url","root_subject"],"x-fern-type-name":"NATSOutputConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Output NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.nats_url","typeLabel":"string"},"root_subject":{"description":"Root subject of output NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.root_subject","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1.auth","typeLabel":"NATSUserPasswordAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.1","typeLabel":"NATSOutputConfig · object"},{"type":"object","title":"CoreNATSOutputConfig","description":"Describes the configuration for the output Core NATS worker","required":["type","nats_url","root_subject"],"x-fern-type-name":"CoreNATSOutputConfig","properties":{"type":{"description":"+value=core-nats","type":"string","enum":["core-nats"],"default":"core-nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Output NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.nats_url","typeLabel":"string"},"root_subject":{"description":"Root subject of output NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.root_subject","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2.auth","typeLabel":"NATSUserPasswordAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.2","typeLabel":"CoreNATSOutputConfig · object"},{"type":"object","title":"KafkaOutputConfig","description":"Describes the configuration for the output Kafka worker","required":["type","bootstrap_servers","topic_name","tls"],"x-fern-type-name":"KafkaOutputConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.type","typeLabel":"enum\u003cstring>"},"bootstrap_servers":{"description":"'Kafka Bootstrap servers - Comma separated list of Kafka brokers \"hostname:port\" to connect to for bootstrap'","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.bootstrap_servers","typeLabel":"string"},"topic_name":{"description":"Kafka topic to publish to","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.topic_name","typeLabel":"string"},"tls":{"description":"TLS configuration for SASL authentication","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.tls","typeLabel":"boolean"},"auth":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Username for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.auth.username","typeLabel":"string"},"password":{"description":"Password for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.auth.password","typeLabel":"string"}},"title":"KafkaSASLAuth","x-fern-type-name":"KafkaSASLAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3.auth","typeLabel":"KafkaSASLAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.3","typeLabel":"KafkaOutputConfig · object"},{"type":"object","title":"AMQPOutputConfig","description":"Describes the configuration for the output AMQP worker","required":["type","url","routing_key"],"x-fern-type-name":"AMQPOutputConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.4.type","typeLabel":"enum\u003cstring>"},"url":{"description":"AMQP Queue URL of Publisher","type":"string","pattern":"^(amqp|amqps?)://(?:[^:@]+(?::[^:@]+)?@)?([^/?]+)(?:/([^?]+))?/?([^?]+)?(?:\\?(.*))?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.4.url","typeLabel":"string"},"routing_key":{"description":"AMQP Routing Key to publish to.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.4.routing_key","typeLabel":"string"},"exchange_name":{"description":"AMQP Exchange Name","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.4.exchange_name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config.oneOf.4","typeLabel":"AMQPOutputConfig · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config.output_config","typeLabel":"SQSOutputConfig · object | NATSOutputConfig · object | CoreNATSOutputConfig · object | KafkaOutputConfig · object | AMQPOutputConfig · object"}},"title":"WorkerConfig","x-fern-type-name":"WorkerConfig","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.worker_config","typeLabel":"WorkerConfig · object"},"artifacts_download":{"description":"Download and cache models in a volume to enhance loading speeds and reduce costs by avoiding repeated downloads. [Docs](https://docs.truefoundry.com/docs/download-and-cache-models)","type":"object","required":["artifacts"],"properties":{"artifacts":{"description":"List of artifacts to be cached","type":"array","items":{"oneOf":[{"type":"object","title":"TrueFoundryArtifactSource","description":"Input for Artifact from TrueFoundry Artifact Registry","required":["type","artifact_version_fqn","download_path_env_variable"],"x-fern-type-name":"TrueFoundryArtifactSource","properties":{"type":{"description":"+value=truefoundry-artifact","type":"string","enum":["truefoundry-artifact"],"default":"truefoundry-artifact","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"artifact_version_fqn":{"description":"Artifact or Model Version FQN of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.artifact_version_fqn","typeLabel":"string"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0","typeLabel":"TrueFoundryArtifactSource · object"},{"type":"object","title":"HuggingfaceArtifactSource","description":"Input for Artifact from Huggingface Model Hub","required":["type","model_id","revision","ignore_patterns","download_path_env_variable"],"x-fern-type-name":"HuggingfaceArtifactSource","properties":{"type":{"description":"+value=huggingface-hub","type":"string","enum":["huggingface-hub"],"default":"huggingface-hub","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"model_id":{"description":"Model ID of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.model_id","typeLabel":"string"},"revision":{"description":"Revision of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.revision","typeLabel":"string"},"ignore_patterns":{"description":"List of patterns to ignore while downloading the artifact","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns.items.[INDEX]","typeLabel":"string"},"default":["*.h5","*.ot","*.tflite","*.msgpack"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns","typeLabel":"string[]"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1","typeLabel":"HuggingfaceArtifactSource · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts.items.[INDEX]","typeLabel":"TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.artifacts","typeLabel":"(TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object)[]"},"cache_volume":{"description":"Describes the volume that will be used to cache the models","type":"object","required":["storage_class","cache_size"],"properties":{"storage_class":{"description":"Storage class of the Volume where artifacts will be cached","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.cache_volume.storage_class","typeLabel":"string"},"cache_size":{"description":"Size of the Volume (in GB) where artifacts will be cached. Should be greater than twice the size of artifacts getting cached","type":"integer","minimum":1,"maximum":10000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.cache_volume.cache_size","typeLabel":"integer"}},"title":"ArtifactsCacheVolume","x-fern-type-name":"ArtifactsCacheVolume","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download.cache_volume","typeLabel":"ArtifactsCacheVolume · object"}},"title":"ArtifactsDownload","x-fern-type-name":"ArtifactsDownload","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.artifacts_download","typeLabel":"ArtifactsDownload · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.env","typeLabel":"object | null"},"service_account":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to service pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-service)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.kustomize","typeLabel":"Kustomize · object"},"liveness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.liveness_probe","typeLabel":"HealthProbe · object"},"readiness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.readiness_probe","typeLabel":"HealthProbe · object"},"startup_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.startup_probe","typeLabel":"HealthProbe · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.workspace_fqn","typeLabel":"string"},"rollout_strategy":{"description":"This strategy updates the pods in a rolling fashion such that a subset of the\ntotal pods are replaced with new version at one time.\nA commonly used strategy can be to have maxUnavailablePercentage close to 0 so that there\nis no downtime and keep the maxSurgePercentage to around 25%. If you are anyways running\na large number of pods, the service can often tolerate a few pods going down - so you\nmax maxUnavailablePercentage = 10 and maxSurgePercentage=0. You can read about it more\n[here](https://spot.io/resources/kubernetes-autoscaling/5-kubernetes-deployment-strategies-roll-out-like-the-pros/)","type":"object","required":["type","max_unavailable_percentage","max_surge_percentage"],"properties":{"type":{"description":"+value=rolling_update","type":"string","enum":["rolling_update"],"default":"rolling_update","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.rollout_strategy.type","typeLabel":"enum\u003cstring>"},"max_unavailable_percentage":{"description":"Percentage of total replicas that can be brought down at one time.\nFor a value of 25 when replicas are set to 12 this would mean minimum (25% of 12) = 3 pods might be unavailable during the deployment.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.rollout_strategy.max_unavailable_percentage","typeLabel":"integer"},"max_surge_percentage":{"description":"Percentage of total replicas of updated image that can be brought up over the total replicas count.\nFor a value of 25 when replicas are set to 12 this would mean (12+(25% of 12) = 15) pods might be running at one time.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.rollout_strategy.max_surge_percentage","typeLabel":"integer"}},"title":"Rolling","x-fern-type-name":"Rolling","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.rollout_strategy","typeLabel":"Rolling · object"},"sidecar":{"type":"object","required":["destination_url"],"properties":{"destination_url":{"description":"URL for the processor to invoke","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.sidecar.destination_url","typeLabel":"string"},"request_timeout":{"description":"Timeout for the invoke request in seconds","type":"integer","minimum":1,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.sidecar.request_timeout","typeLabel":"integer"},"sidecar_image":{"description":"Image for the processor sidecar (This field will be deprecated in the future)","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.sidecar.sidecar_image","typeLabel":"string"}},"title":"AsyncProcessorSidecar","x-fern-type-name":"AsyncProcessorSidecar","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1.sidecar","typeLabel":"AsyncProcessorSidecar · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.1","typeLabel":"AsyncService · object"},{"type":"object","title":"Job","description":"Deployment manifest defining the application configuration.","required":["type","name","image","trigger"],"x-fern-type-name":"Job","properties":{"type":{"description":"+value=job","type":"string","enum":["job"],"default":"job","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the job","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.image","typeLabel":"Build · object | Image · object"},"trigger":{"oneOf":[{"type":"object","title":"Manual","description":"Trigger the job manually. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type"],"x-fern-type-name":"Manual","properties":{"type":{"description":"+value=manual","type":"string","enum":["manual"],"default":"manual","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.0.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.0","typeLabel":"Manual · object"},{"type":"object","title":"Schedule","description":"Run the job on a schedule. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type","schedule","concurrency_policy"],"x-fern-type-name":"Schedule","properties":{"type":{"description":"+value=scheduled","type":"string","enum":["scheduled"],"default":"scheduled","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.1.type","typeLabel":"enum\u003cstring>"},"schedule":{"description":"Specify the schedule for this job to be run periodically in cron format.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.1.schedule","typeLabel":"string"},"concurrency_policy":{"description":"Choose whether to allow this job to run while another instance of the job is running, or to replace the currently running instance. Allow\nwill enable multiple instances of this job to run. Forbid will keep the current instance of the job running and stop a new instance from being run.\nReplace will terminate any currently running instance of the job and start a new one.","type":"string","enum":["Forbid","Allow","Replace"],"default":"Forbid","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.1.concurrency_policy","typeLabel":"enum\u003cstring>"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.1.timezone","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger.oneOf.1","typeLabel":"Schedule · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger","typeLabel":"Manual · object | Schedule · object"},"trigger_on_deploy":{"description":"Trigger the job after deploy immediately","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.trigger_on_deploy","typeLabel":"boolean"},"params":{"description":"Configure params and pass it to create different job runs","type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"description":"Name of the param","type":"string","pattern":"^[a-z][a-z0-9\\-_]{0,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Description of param","type":"string","pattern":"^.{1,127}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params.items.[INDEX].description","typeLabel":"string"},"default":{"description":"Default value or placeholder","type":"string","pattern":"^.{0,127}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params.items.[INDEX].default","typeLabel":"string"},"param_type":{"type":"string","enum":["string","ml_repo"],"default":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params.items.[INDEX].param_type","typeLabel":"enum\u003cstring>"}},"title":"Param","x-fern-type-name":"Param","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params.items.[INDEX]","typeLabel":"Param · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.params","typeLabel":"Param · object[]"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.env","typeLabel":"object | null"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.resources","typeLabel":"Resources · object"},"alerts":{"description":"Configure alerts to be sent when the job starts/fails/completes","type":"array","items":{"description":"Describes the configuration for the job alerts","type":"object","properties":{"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].to_emails.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].to_emails","typeLabel":"string[]"},"notification_target":{"oneOf":[{"type":"object","title":"Email","description":"Email","required":["type","notification_channel","to_emails"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=email","type":"string","enum":["email"],"default":"email","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.to_emails.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.to_emails","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0","typeLabel":"Email · object"},{"type":"object","title":"SlackWebhook","description":"Slack Webhook","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-webhook","type":"string","enum":["slack-webhook"],"default":"slack-webhook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1","typeLabel":"SlackWebhook · object"},{"type":"object","title":"SlackBot","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel","channels"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-bot","type":"string","enum":["slack-bot"],"default":"slack-bot","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.notification_channel","typeLabel":"string"},"channels":{"description":"List of channels to send messages to.","type":"array","items":{"type":"string","pattern":"^#?[a-z0-9\\-_]{2,80}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.channels.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.channels","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2","typeLabel":"SlackBot · object"},{"type":"object","title":"PagerDuty","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=pagerduty","type":"string","enum":["pagerduty"],"default":"pagerduty","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3","typeLabel":"PagerDuty · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].notification_target","typeLabel":"Email · object | SlackWebhook · object | SlackBot · object | PagerDuty · object"},"on_start":{"description":"Send an alert when the job starts","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].on_start","typeLabel":"boolean"},"on_completion":{"type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].on_completion","typeLabel":"boolean"},"on_failure":{"description":"Send an alert when the job fails","type":"boolean","default":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX].on_failure","typeLabel":"boolean"}},"title":"JobAlert","x-fern-type-name":"JobAlert","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts.items.[INDEX]","typeLabel":"JobAlert · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.alerts","typeLabel":"JobAlert · object[]"},"retries":{"description":"Specify the maximum number of attempts to retry a job before it is marked as failed.","type":"integer","minimum":0,"maximum":10,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.retries","typeLabel":"integer"},"timeout":{"description":"Job timeout in seconds.","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":432000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.timeout","typeLabel":"integer"},"concurrency_limit":{"description":"Number of runs that can run concurrently","type":"integer","minimum":0,"exclusiveMinimum":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.concurrency_limit","typeLabel":"integer"},"service_account":{"description":"+sort=1000","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to job pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.2","typeLabel":"Job · object"},{"type":"object","title":"Notebook","description":"Deployment manifest defining the application configuration.","required":["type","image","name","home_directory_size"],"x-fern-type-name":"Notebook","properties":{"name":{"description":"Name of the workbench. This uniquely identifies this workbench in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.name","typeLabel":"string"},"home_directory_size":{"description":"Size of the home directory for the workbench (Persistent Storage)","type":"integer","minimum":5,"maximum":64000,"default":20,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.home_directory_size","typeLabel":"integer"},"type":{"description":"+value=notebook","type":"string","enum":["notebook"],"default":"notebook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.type","typeLabel":"enum\u003cstring>"},"image":{"description":"Workbench Image with persistent environment (Python 3.11.6)","type":"object","required":["image_uri"],"properties":{"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.image.image_uri","typeLabel":"string"},"build_script":{"description":"The build script to run when building the image.\nThis will be executed as the last step in the docker build process as the root user (RUN DEBIAN_FRONTEND=noninteractive bash -ex build_script.sh)","type":"string","minLength":1,"maxLength":5120,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.image.build_script","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.image.docker_registry","typeLabel":"string"}},"title":"WorkbenchImage","x-fern-type-name":"WorkbenchImage","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.image","typeLabel":"WorkbenchImage · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.env","typeLabel":"object | null"},"mounts":{"description":"Configure data to be mounted to workbench pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"+sort=10113","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.service_account","typeLabel":"string"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.workspace_fqn","typeLabel":"string"},"cull_timeout":{"description":"Stop the notebook instance after this much time in minutes of inactivity.\nThe notebook instance will be stopped even if the notebook is open in your browser, but nothing is running on the notebook.","type":"integer","minimum":5,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3.cull_timeout","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.3","typeLabel":"Notebook · object"},{"type":"object","title":"Codeserver","description":"Deployment manifest defining the application configuration.","required":["type","image","name","home_directory_size"],"x-fern-type-name":"Codeserver","properties":{"name":{"description":"Name of the workbench. This uniquely identifies this workbench in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.name","typeLabel":"string"},"home_directory_size":{"description":"Size of the home directory for the workbench (Persistent Storage)","type":"integer","minimum":5,"maximum":64000,"default":20,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.home_directory_size","typeLabel":"integer"},"type":{"description":"+value=codeserver","type":"string","enum":["codeserver"],"default":"codeserver","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.type","typeLabel":"enum\u003cstring>"},"image":{"description":"Workbench Image with persistent environment (Python 3.11.6)","type":"object","required":["image_uri"],"properties":{"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.image.image_uri","typeLabel":"string"},"build_script":{"description":"The build script to run when building the image.\nThis will be executed as the last step in the docker build process as the root user (RUN DEBIAN_FRONTEND=noninteractive bash -ex build_script.sh)","type":"string","minLength":1,"maxLength":5120,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.image.build_script","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.image.docker_registry","typeLabel":"string"}},"title":"WorkbenchImage","x-fern-type-name":"WorkbenchImage","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.image","typeLabel":"WorkbenchImage · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.env","typeLabel":"object | null"},"mounts":{"description":"Configure data to be mounted to workbench pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"+sort=10113","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.service_account","typeLabel":"string"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.4","typeLabel":"Codeserver · object"},{"type":"object","title":"SSHServer","description":"Deployment manifest defining the application configuration.","required":["type","image","ssh_public_key","name","home_directory_size"],"x-fern-type-name":"SSHServer","properties":{"name":{"description":"Name of the workbench. This uniquely identifies this workbench in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.name","typeLabel":"string"},"home_directory_size":{"description":"Size of the home directory for the workbench (Persistent Storage)","type":"integer","minimum":5,"maximum":64000,"default":20,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.home_directory_size","typeLabel":"integer"},"type":{"description":"+value=ssh-server","type":"string","enum":["ssh-server"],"default":"ssh-server","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.type","typeLabel":"enum\u003cstring>"},"image":{"description":"Workbench Image with persistent environment (Python 3.11.6)","type":"object","required":["image_uri"],"properties":{"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.image.image_uri","typeLabel":"string"},"build_script":{"description":"The build script to run when building the image.\nThis will be executed as the last step in the docker build process as the root user (RUN DEBIAN_FRONTEND=noninteractive bash -ex build_script.sh)","type":"string","minLength":1,"maxLength":5120,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.image.build_script","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.image.docker_registry","typeLabel":"string"}},"title":"WorkbenchImage","x-fern-type-name":"WorkbenchImage","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.image","typeLabel":"WorkbenchImage · object"},"ssh_public_key":{"description":"Add Your SSH Public Key, this will be used to authenticate you to the SSH Server. \\\nYou can find it using `cat ~/.ssh/id_rsa.pub` in Mac/Linux or `type $home\\.ssh\\id_rsa.pub` in Windows Powershell. \\\nYou can also generate a new SSH key pair using `ssh-keygen -t rsa` in your local terminal. (same for both Mac/Linux and Windows Powershell)","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.ssh_public_key","typeLabel":"string"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.env","typeLabel":"object | null"},"mounts":{"description":"Configure data to be mounted to workbench pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"+sort=10113","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.service_account","typeLabel":"string"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.workspace_fqn","typeLabel":"string"},"cull_timeout":{"description":"Stop the SSH Server instance after this much time in minutes of inactivity. The instance is considered active if there is at least one active SSH connection (a client connected to the SSH server), or if a background job is running using tmux or screen, or if the pod has restarted.","type":"integer","minimum":5,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5.cull_timeout","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.5","typeLabel":"SSHServer · object"},{"type":"object","title":"RStudio","description":"Deployment manifest defining the application configuration.","required":["type","image","name","home_directory_size"],"x-fern-type-name":"RStudio","properties":{"name":{"description":"Name of the workbench. This uniquely identifies this workbench in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.name","typeLabel":"string"},"home_directory_size":{"description":"Size of the home directory for the workbench (Persistent Storage)","type":"integer","minimum":5,"maximum":64000,"default":20,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.home_directory_size","typeLabel":"integer"},"type":{"description":"+value=rstudio","type":"string","enum":["rstudio"],"default":"rstudio","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.type","typeLabel":"enum\u003cstring>"},"image":{"description":"Workbench Image with persistent environment (Python 3.11.6)","type":"object","required":["image_uri"],"properties":{"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.image.image_uri","typeLabel":"string"},"build_script":{"description":"The build script to run when building the image.\nThis will be executed as the last step in the docker build process as the root user (RUN DEBIAN_FRONTEND=noninteractive bash -ex build_script.sh)","type":"string","minLength":1,"maxLength":5120,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.image.build_script","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.image.docker_registry","typeLabel":"string"}},"title":"WorkbenchImage","x-fern-type-name":"WorkbenchImage","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.image","typeLabel":"WorkbenchImage · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/environment-variables-and-secrets-jobs)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.env","typeLabel":"object | null"},"mounts":{"description":"Configure data to be mounted to workbench pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"+sort=10113","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.service_account","typeLabel":"string"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.6","typeLabel":"RStudio · object"},{"type":"object","title":"Helm","description":"Deployment manifest defining the application configuration.","required":["type","name","source"],"x-fern-type-name":"Helm","properties":{"type":{"description":"+value=helm","type":"string","enum":["helm"],"default":"helm","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Helm deployment. This will be set as the release name of the chart you are deploying.","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.name","typeLabel":"string"},"source":{"oneOf":[{"type":"object","title":"HelmRepo","description":"Source helm repository","required":["type","repo_url","chart","version"],"x-fern-type-name":"HelmRepo","properties":{"type":{"description":"+value=helm-repo","type":"string","enum":["helm-repo"],"default":"helm-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"Helm repository URL - Needs to be a valid URL.","type":"string","pattern":"^(((https?|wss):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0.repo_url","typeLabel":"string"},"chart":{"description":"The helm chart name","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._/-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0.chart","typeLabel":"string"},"version":{"description":"Helm chart version","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0.version","typeLabel":"string"},"integration_fqn":{"description":"FQN of the helm repo integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0.integration_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.0","typeLabel":"HelmRepo · object"},{"type":"object","title":"OCIRepo","description":"OCIRepo","required":["type","oci_chart_url","version"],"x-fern-type-name":"OCIRepo","properties":{"type":{"description":"+value=oci-repo","type":"string","enum":["oci-repo"],"default":"oci-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"oci_chart_url":{"description":"OCI chart URL - Need to be a valid URL.","type":"string","pattern":"^(((oci):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.1.oci_chart_url","typeLabel":"string"},"version":{"description":"Helm chart version","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.1.version","typeLabel":"string"},"integration_fqn":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.1.integration_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.1","typeLabel":"OCIRepo · object"},{"type":"object","title":"GitHelmRepo","description":"Source helm repository","required":["type","repo_url","revision","path"],"x-fern-type-name":"GitHelmRepo","properties":{"type":{"description":"+value=git-helm-repo","type":"string","enum":["git-helm-repo"],"default":"git-helm-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"Git repository URL - Needs to be a valid URL.","type":"string","pattern":"^(((https?|wss):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.repo_url","typeLabel":"string"},"revision":{"description":"Branch/Commit SHA/Tag of the git repo.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.revision","typeLabel":"string"},"path":{"description":"Path to the chart.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.path","typeLabel":"string"},"value_files":{"description":"Helm values files for overriding values in the helm chart.\nThe path is relative to the Path directory defined above","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.value_files.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2.value_files","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source.oneOf.2","typeLabel":"GitHelmRepo · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.source","typeLabel":"HelmRepo · object | OCIRepo · object | GitHelmRepo · object"},"labels":{"description":"Add labels to base argo app","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.labels","typeLabel":"object"},"values":{"description":"Values file as block file","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.values","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.kustomize","typeLabel":"Kustomize · object"},"ignoreDifferences":{"type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.ignoreDifferences.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.ignoreDifferences","typeLabel":"object[]"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.7","typeLabel":"Helm · object"},{"type":"object","title":"Volume","description":"Deployment manifest defining the application configuration.","required":["type","name","config"],"x-fern-type-name":"Volume","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Volume. This will be set as the volume name.","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.name","typeLabel":"string"},"config":{"oneOf":[{"type":"object","title":"DynamicVolumeConfig","description":"Create new volume","required":["type","storage_class","size"],"x-fern-type-name":"DynamicVolumeConfig","properties":{"type":{"description":"Volume Type for the volume.","type":"string","enum":["dynamic"],"default":"dynamic","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.0.type","typeLabel":"enum\u003cstring>"},"storage_class":{"description":"Name of the storage class to be used for the volume.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.0.storage_class","typeLabel":"string"},"size":{"description":"Size of volume in Gi","type":"integer","minimum":1,"maximum":64000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.0.size","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.0","typeLabel":"DynamicVolumeConfig · object"},{"type":"object","title":"StaticVolumeConfig","description":"Use existing volume","required":["type","persistent_volume_name"],"x-fern-type-name":"StaticVolumeConfig","properties":{"type":{"description":"Volume Type for the volume.","type":"string","enum":["static"],"default":"static","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.1.type","typeLabel":"enum\u003cstring>"},"persistent_volume_name":{"description":"Persistent Volume Name of the volume to be used.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.1.persistent_volume_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config.oneOf.1","typeLabel":"StaticVolumeConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.config","typeLabel":"DynamicVolumeConfig · object | StaticVolumeConfig · object"},"volume_browser":{"description":"Volume Browser","type":"object","required":["endpoint"],"properties":{"endpoint":{"type":"object","required":["host"],"properties":{"host":{"description":"Host e.g. ai.example.com, app.truefoundry.com","type":"string","pattern":"^((([a-zA-Z0-9\\-]{1,63}\\.)([a-zA-Z0-9\\-]{1,63}\\.)*([A-Za-z]{1,63}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.endpoint.host","typeLabel":"string"},"path":{"description":"Path e.g. /v1/api/ml/, /v2/docs/","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.endpoint.path","typeLabel":"string"}},"title":"Endpoint","x-fern-type-name":"Endpoint","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.endpoint","typeLabel":"Endpoint · object"},"username":{"description":"Username for logging in the volume browser.","type":"string","pattern":"^[a-z][a-z0-9]{1,8}[a-z0-9]$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.username","typeLabel":"string"},"password_secret_fqn":{"description":"TFY Secret containing the password for logging in the volume browser.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.password_secret_fqn","typeLabel":"string"},"service_account":{"description":"Kubernetes Service account name for the volume browser.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser.service_account","typeLabel":"string"}},"title":"VolumeBrowser","x-fern-type-name":"VolumeBrowser","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.volume_browser","typeLabel":"VolumeBrowser · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.8","typeLabel":"Volume · object"},{"type":"object","title":"ApplicationSet","description":"Deployment manifest defining the application configuration.","required":["type","name"],"x-fern-type-name":"ApplicationSet","properties":{"type":{"description":"+value=application-set","type":"string","enum":["application-set"],"default":"application-set","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the application set.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.name","typeLabel":"string"},"components":{"description":"Array of components with their specifications.","type":"array","items":{"oneOf":[{"type":"object","title":"Service","description":"Describes the configuration for the service","required":["type","replicas","name","image","ports"],"x-fern-type-name":"Service","properties":{"name":{"description":"Name of the service. This uniquely identifies this service in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.image","typeLabel":"Build · object | Image · object"},"ports":{"description":"Expose the deployment to make it accessible over the internet or keep it private. Implement authentication to restrict access. [Docs](https://docs.truefoundry.com/docs/define-ports-and-domains)","type":"array","items":{"description":"Describes the ports the service should be exposed to.","type":"object","required":["port","protocol","expose"],"properties":{"port":{"description":"Port number to expose.","type":"integer","minimum":1,"maximum":65535,"default":80,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].port","typeLabel":"integer"},"protocol":{"description":"Protocol for the port.","type":"string","enum":["TCP","UDP"],"default":"TCP","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].protocol","typeLabel":"enum\u003cstring>"},"expose":{"description":"Expose the port","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].expose","typeLabel":"boolean"},"app_protocol":{"description":"Application Protocol for the port.\nSelect the application protocol used by your service. For most use cases, this should be `http`(HTTP/1.1).\nIf you are running a gRPC server, select the `grpc` option.\nThis is only applicable if `expose=true`.","type":"string","enum":["http","grpc","tcp"],"default":"http","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].app_protocol","typeLabel":"enum\u003cstring>"},"host":{"description":"Host e.g. ai.example.com, app.truefoundry.com","type":"string","pattern":"^((([a-zA-Z0-9\\-]{1,63}\\.)([a-zA-Z0-9\\-]{1,63}\\.)*([A-Za-z]{1,63}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].host","typeLabel":"string"},"path":{"description":"Path e.g. /v1/api/ml/, /v2/docs/","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].path","typeLabel":"string"},"rewrite_path_to":{"description":"Rewrite the path prefix to a different path.\nIf `path` is `/v1/api` and `rewrite_path_to` is `/api`. The URI in the HTTP request `http://0.0.0.0:8080/v1/api/houses` will be rewritten to `http://0.0.0.0:8080/api/houses` before the request is forwarded your service.\nDefaults to `/`.\nThis is only applicable if `path` is given.","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].rewrite_path_to","typeLabel":"string"},"auth":{"oneOf":[{"type":"object","title":"BasicAuthCreds","description":"Username and password","required":["type","username","password"],"x-fern-type-name":"BasicAuthCreds","properties":{"type":{"description":"+value=basic_auth","type":"string","enum":["basic_auth"],"default":"basic_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"username":{"description":"Username for service auth - Username for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.0.username","typeLabel":"string"},"password":{"description":"Password for service auth - Password for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.0.password","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.0","typeLabel":"BasicAuthCreds · object"},{"type":"object","title":"JwtAuthConfig","description":"Configure JWT-based authentication using JWKS","required":["type","integration_fqn"],"x-fern-type-name":"JwtAuthConfig","properties":{"type":{"description":"+value=jwt_auth","type":"string","enum":["jwt_auth"],"default":"jwt_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"integration_fqn":{"description":"FQN of the JWT Auth integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.integration_fqn","typeLabel":"string"},"enable_login":{"description":"Enable login for the service","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.enable_login","typeLabel":"boolean"},"claims":{"description":"List of key-value pairs of claims to verify in the JWT token","type":"array","items":{"type":"object","required":["key","values"],"properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].key","typeLabel":"string"},"values":{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.claims","typeLabel":"object[]"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.1","typeLabel":"JwtAuthConfig · object"},{"type":"object","title":"TrueFoundryInteractiveLogin","description":"Login with truefoundry","required":["type"],"x-fern-type-name":"TrueFoundryInteractiveLogin","properties":{"type":{"description":"+value=truefoundry_oauth","type":"string","enum":["truefoundry_oauth"],"default":"truefoundry_oauth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth.oneOf.2","typeLabel":"TrueFoundryInteractiveLogin · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX].auth","typeLabel":"BasicAuthCreds · object | JwtAuthConfig · object | TrueFoundryInteractiveLogin · object"}},"title":"Port","x-fern-type-name":"Port","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports.items.[INDEX]","typeLabel":"Port · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.ports","typeLabel":"Port · object[]"},"type":{"description":"+value=service","type":"string","enum":["service"],"default":"service","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"replicas":{"oneOf":[{"type":"number","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"maximum":500,"minimum":0,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.0","typeLabel":"number"},{"type":"object","title":"ServiceAutoscaling","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"required":["metrics","min_replicas","max_replicas"],"x-fern-type-name":"ServiceAutoscaling","properties":{"min_replicas":{"description":"Minimum number of replicas to keep available","type":"integer","minimum":0,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.min_replicas","typeLabel":"integer"},"max_replicas":{"description":"Maximum number of replicas allowed for the component.","type":"integer","minimum":1,"maximum":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.max_replicas","typeLabel":"integer"},"metrics":{"oneOf":[{"type":"object","title":"CPUUtilizationMetric","description":"Metrics to use for the autoscaler","required":["type","value"],"x-fern-type-name":"CPUUtilizationMetric","properties":{"type":{"description":"+value=cpu_utilization","type":"string","enum":["cpu_utilization"],"default":"cpu_utilization","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.0.type","typeLabel":"enum\u003cstring>"},"value":{"description":"Percentage of cpu request averaged over all replicas which the autoscaler should try to maintain","type":"integer","minimum":1,"maximum":100,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.0.value","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.0","typeLabel":"CPUUtilizationMetric · object"},{"type":"object","title":"RPSMetric","description":"Metrics to use for the autoscaler","required":["type","value"],"x-fern-type-name":"RPSMetric","properties":{"type":{"description":"+value=rps","type":"string","enum":["rps"],"default":"rps","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.1.type","typeLabel":"enum\u003cstring>"},"value":{"description":"Average request per second averaged over all replicas that autoscaler should try to maintain","type":"number","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.1.value","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.1","typeLabel":"RPSMetric · object"},{"type":"object","title":"CronMetric","description":"Metrics to use for the autoscaler","required":["type","start","end","timezone"],"x-fern-type-name":"CronMetric","properties":{"type":{"description":"+value=cron","type":"string","enum":["cron"],"default":"cron","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2.type","typeLabel":"enum\u003cstring>"},"start":{"description":"Cron expression indicating the start of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2.start","typeLabel":"string"},"end":{"description":"Cron expression indicating the end of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2.end","typeLabel":"string"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","default":"UTC","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2.timezone","typeLabel":"string"},"desired_replicas":{"description":"Desired number of replicas during the given interval. Default value is max_replicas.","type":"integer","minimum":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2.desired_replicas","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics.oneOf.2","typeLabel":"CronMetric · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.metrics","typeLabel":"CPUUtilizationMetric · object | RPSMetric · object | CronMetric · object"},"polling_interval":{"description":"This is the interval to check each trigger on.","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1.polling_interval","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas.oneOf.1","typeLabel":"ServiceAutoscaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.replicas","typeLabel":"number | ServiceAutoscaling · object"},"artifacts_download":{"description":"Download and cache models in a volume to enhance loading speeds and reduce costs by avoiding repeated downloads. [Docs](https://docs.truefoundry.com/docs/download-and-cache-models)","type":"object","required":["artifacts"],"properties":{"artifacts":{"description":"List of artifacts to be cached","type":"array","items":{"oneOf":[{"type":"object","title":"TrueFoundryArtifactSource","description":"Input for Artifact from TrueFoundry Artifact Registry","required":["type","artifact_version_fqn","download_path_env_variable"],"x-fern-type-name":"TrueFoundryArtifactSource","properties":{"type":{"description":"+value=truefoundry-artifact","type":"string","enum":["truefoundry-artifact"],"default":"truefoundry-artifact","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"artifact_version_fqn":{"description":"Artifact or Model Version FQN of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.artifact_version_fqn","typeLabel":"string"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.0","typeLabel":"TrueFoundryArtifactSource · object"},{"type":"object","title":"HuggingfaceArtifactSource","description":"Input for Artifact from Huggingface Model Hub","required":["type","model_id","revision","ignore_patterns","download_path_env_variable"],"x-fern-type-name":"HuggingfaceArtifactSource","properties":{"type":{"description":"+value=huggingface-hub","type":"string","enum":["huggingface-hub"],"default":"huggingface-hub","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"model_id":{"description":"Model ID of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.model_id","typeLabel":"string"},"revision":{"description":"Revision of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.revision","typeLabel":"string"},"ignore_patterns":{"description":"List of patterns to ignore while downloading the artifact","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns.items.[INDEX]","typeLabel":"string"},"default":["*.h5","*.ot","*.tflite","*.msgpack"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns","typeLabel":"string[]"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX].oneOf.1","typeLabel":"HuggingfaceArtifactSource · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts.items.[INDEX]","typeLabel":"TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.artifacts","typeLabel":"(TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object)[]"},"cache_volume":{"description":"Describes the volume that will be used to cache the models","type":"object","required":["storage_class","cache_size"],"properties":{"storage_class":{"description":"Storage class of the Volume where artifacts will be cached","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.cache_volume.storage_class","typeLabel":"string"},"cache_size":{"description":"Size of the Volume (in GB) where artifacts will be cached. Should be greater than twice the size of artifacts getting cached","type":"integer","minimum":1,"maximum":10000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.cache_volume.cache_size","typeLabel":"integer"}},"title":"ArtifactsCacheVolume","x-fern-type-name":"ArtifactsCacheVolume","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download.cache_volume","typeLabel":"ArtifactsCacheVolume · object"}},"title":"ArtifactsDownload","x-fern-type-name":"ArtifactsDownload","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.artifacts_download","typeLabel":"ArtifactsDownload · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.env","typeLabel":"object | null"},"service_account":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to service pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-service)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.kustomize","typeLabel":"Kustomize · object"},"liveness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.liveness_probe","typeLabel":"HealthProbe · object"},"readiness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.readiness_probe","typeLabel":"HealthProbe · object"},"startup_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.startup_probe","typeLabel":"HealthProbe · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.workspace_fqn","typeLabel":"string"},"auto_shutdown":{"type":"object","required":["wait_time"],"properties":{"wait_time":{"description":"The period to wait after the last received request before scaling the replicas to 0. This value should be high enough to allow for the replicas of the service to come up to avoid premature scaling down.","type":"integer","minimum":0,"maximum":604800,"default":900,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.auto_shutdown.wait_time","typeLabel":"integer"}},"title":"Autoshutdown","x-fern-type-name":"Autoshutdown","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.auto_shutdown","typeLabel":"Autoshutdown · object"},"allow_interception":{"description":"Whether to allow intercepts to be applied for this service.\nThis would inject an additional sidecar in each pod of the service. Not recommended on production","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.allow_interception","typeLabel":"boolean"},"rollout_strategy":{"oneOf":[{"type":"object","title":"Rolling","description":"This strategy updates the pods in a rolling fashion such that a subset of the\ntotal pods are replaced with new version at one time.\nA commonly used strategy can be to have maxUnavailablePercentage close to 0 so that there\nis no downtime and keep the maxSurgePercentage to around 25%. If you are anyways running\na large number of pods, the service can often tolerate a few pods going down - so you\nmax maxUnavailablePercentage = 10 and maxSurgePercentage=0. You can read about it more\n[here](https://spot.io/resources/kubernetes-autoscaling/5-kubernetes-deployment-strategies-roll-out-like-the-pros/)","required":["type","max_unavailable_percentage","max_surge_percentage"],"x-fern-type-name":"Rolling","properties":{"type":{"description":"+value=rolling_update","type":"string","enum":["rolling_update"],"default":"rolling_update","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.0.type","typeLabel":"enum\u003cstring>"},"max_unavailable_percentage":{"description":"Percentage of total replicas that can be brought down at one time.\nFor a value of 25 when replicas are set to 12 this would mean minimum (25% of 12) = 3 pods might be unavailable during the deployment.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.0.max_unavailable_percentage","typeLabel":"integer"},"max_surge_percentage":{"description":"Percentage of total replicas of updated image that can be brought up over the total replicas count.\nFor a value of 25 when replicas are set to 12 this would mean (12+(25% of 12) = 15) pods might be running at one time.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.0.max_surge_percentage","typeLabel":"integer"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.0","typeLabel":"Rolling · object"},{"type":"object","title":"Canary","description":"This strategy brings up the new release without bringing the older release down. Traffic is shifted from the older release to the newer release in a staged manner.\nThis can help with verifying the health of the new release without shifting complete traffic.","required":["type","steps"],"x-fern-type-name":"Canary","properties":{"type":{"description":"+value=canary","type":"string","enum":["canary"],"default":"canary","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1.type","typeLabel":"enum\u003cstring>"},"steps":{"description":"These steps would be executed in order to enable shifting of traffic slowly from stable to canary version","type":"array","items":{"type":"object","required":["weight_percentage"],"properties":{"weight_percentage":{"description":"Percentage of total traffic to be shifted to the canary release.\nThe rest will continue to go to the existing deployment","type":"integer","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX].weight_percentage","typeLabel":"integer"},"pause_duration":{"description":"Duration for which to pause the release. The release process will wait for these seconds before proceeding to the next step.\nIf this is not set, the step will pause indefinitely on this step","type":"integer","minimum":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX].pause_duration","typeLabel":"integer"}},"title":"CanaryStep","x-fern-type-name":"CanaryStep","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1.steps.items.[INDEX]","typeLabel":"CanaryStep · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1.steps","typeLabel":"CanaryStep · object[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.1","typeLabel":"Canary · object"},{"type":"object","title":"BlueGreen","description":"This strategy brings up the new release completely before switching the complete load to the new release.\nThis minimizes the time that two versions are serving traffic at the same time.","required":["type"],"x-fern-type-name":"BlueGreen","properties":{"type":{"description":"+value=blue_green","type":"string","enum":["blue_green"],"default":"blue_green","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.2.type","typeLabel":"enum\u003cstring>"},"enable_auto_promotion":{"description":"Promote the new release to handle the complete traffic. A manual promotion would be needed if this is disabled","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.2.enable_auto_promotion","typeLabel":"boolean"},"auto_promotion_seconds":{"description":"Promote the new release to handle the complete traffic after waiting for these many seconds","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.2.auto_promotion_seconds","typeLabel":"integer"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy.oneOf.2","typeLabel":"BlueGreen · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0.rollout_strategy","typeLabel":"Rolling · object | Canary · object | BlueGreen · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.0","typeLabel":"Service · object"},{"type":"object","title":"AsyncService","description":"Describes the configuration for the async-service","required":["type","replicas","worker_config","name","image","ports"],"x-fern-type-name":"AsyncService","properties":{"name":{"description":"Name of the service. This uniquely identifies this service in the workspace.\n> Name can only contain alphanumeric characters and '-' and can be atmost 25 characters long","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.image","typeLabel":"Build · object | Image · object"},"ports":{"description":"Expose the deployment to make it accessible over the internet or keep it private. Implement authentication to restrict access. [Docs](https://docs.truefoundry.com/docs/define-ports-and-domains)","type":"array","items":{"description":"Describes the ports the service should be exposed to.","type":"object","required":["port","protocol","expose"],"properties":{"port":{"description":"Port number to expose.","type":"integer","minimum":1,"maximum":65535,"default":80,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].port","typeLabel":"integer"},"protocol":{"description":"Protocol for the port.","type":"string","enum":["TCP","UDP"],"default":"TCP","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].protocol","typeLabel":"enum\u003cstring>"},"expose":{"description":"Expose the port","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].expose","typeLabel":"boolean"},"app_protocol":{"description":"Application Protocol for the port.\nSelect the application protocol used by your service. For most use cases, this should be `http`(HTTP/1.1).\nIf you are running a gRPC server, select the `grpc` option.\nThis is only applicable if `expose=true`.","type":"string","enum":["http","grpc","tcp"],"default":"http","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].app_protocol","typeLabel":"enum\u003cstring>"},"host":{"description":"Host e.g. ai.example.com, app.truefoundry.com","type":"string","pattern":"^((([a-zA-Z0-9\\-]{1,63}\\.)([a-zA-Z0-9\\-]{1,63}\\.)*([A-Za-z]{1,63}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].host","typeLabel":"string"},"path":{"description":"Path e.g. /v1/api/ml/, /v2/docs/","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].path","typeLabel":"string"},"rewrite_path_to":{"description":"Rewrite the path prefix to a different path.\nIf `path` is `/v1/api` and `rewrite_path_to` is `/api`. The URI in the HTTP request `http://0.0.0.0:8080/v1/api/houses` will be rewritten to `http://0.0.0.0:8080/api/houses` before the request is forwarded your service.\nDefaults to `/`.\nThis is only applicable if `path` is given.","type":"string","pattern":"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-_\\.]*[a-zA-Z0-9]))*/$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].rewrite_path_to","typeLabel":"string"},"auth":{"oneOf":[{"type":"object","title":"BasicAuthCreds","description":"Username and password","required":["type","username","password"],"x-fern-type-name":"BasicAuthCreds","properties":{"type":{"description":"+value=basic_auth","type":"string","enum":["basic_auth"],"default":"basic_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"username":{"description":"Username for service auth - Username for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.0.username","typeLabel":"string"},"password":{"description":"Password for service auth - Password for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.0.password","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.0","typeLabel":"BasicAuthCreds · object"},{"type":"object","title":"JwtAuthConfig","description":"Configure JWT-based authentication using JWKS","required":["type","integration_fqn"],"x-fern-type-name":"JwtAuthConfig","properties":{"type":{"description":"+value=jwt_auth","type":"string","enum":["jwt_auth"],"default":"jwt_auth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"integration_fqn":{"description":"FQN of the JWT Auth integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.integration_fqn","typeLabel":"string"},"enable_login":{"description":"Enable login for the service","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.enable_login","typeLabel":"boolean"},"claims":{"description":"List of key-value pairs of claims to verify in the JWT token","type":"array","items":{"type":"object","required":["key","values"],"properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].key","typeLabel":"string"},"values":{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.claims","typeLabel":"object[]"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.1","typeLabel":"JwtAuthConfig · object"},{"type":"object","title":"TrueFoundryInteractiveLogin","description":"Login with truefoundry","required":["type"],"x-fern-type-name":"TrueFoundryInteractiveLogin","properties":{"type":{"description":"+value=truefoundry_oauth","type":"string","enum":["truefoundry_oauth"],"default":"truefoundry_oauth","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bypass_auth_paths":{"description":"List of paths that will bypass auth.\nneeds to start with a forward slash(/) and should not contain wildcards(*)","type":"array","items":{"type":"string","pattern":"^/[^*]*","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.2.bypass_auth_paths","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth.oneOf.2","typeLabel":"TrueFoundryInteractiveLogin · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX].auth","typeLabel":"BasicAuthCreds · object | JwtAuthConfig · object | TrueFoundryInteractiveLogin · object"}},"title":"Port","x-fern-type-name":"Port","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports.items.[INDEX]","typeLabel":"Port · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.ports","typeLabel":"Port · object[]"},"type":{"description":"+value=async-service","type":"string","enum":["async-service"],"default":"async-service","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"replicas":{"oneOf":[{"type":"number","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"maximum":500,"minimum":0,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.0","typeLabel":"number"},{"type":"object","title":"AsyncServiceAutoscaling","description":"Deploy multiple instances of your pods to distribute incoming traffic across them, ensuring effective load balancing.","default":1,"required":["metrics","min_replicas","max_replicas"],"x-fern-type-name":"AsyncServiceAutoscaling","properties":{"min_replicas":{"description":"Minimum number of replicas to keep available","type":"integer","minimum":0,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.min_replicas","typeLabel":"integer"},"max_replicas":{"description":"Maximum number of replicas allowed for the component.","type":"integer","minimum":1,"maximum":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.max_replicas","typeLabel":"integer"},"metrics":{"oneOf":[{"type":"object","title":"SQSQueueMetricConfig","description":"Metrics to use for the autoscaler","required":["type","queue_length"],"x-fern-type-name":"SQSQueueMetricConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_length":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the queue and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.queue_length","typeLabel":"integer"},"auth":{"oneOf":[{"type":"object","title":"AwsSqsAccessKeyBasedAuth","description":"AWS Access Key Based Auth","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"AwsSqsAccessKeyBasedAuth","properties":{"type":{"description":"+value=access-key-based","type":"string","enum":["access-key-based"],"default":"access-key-based","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID that you want to use for authentication.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS access key secret that you want to use for authentication.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.0","typeLabel":"AwsSqsAccessKeyBasedAuth · object"},{"type":"object","title":"AwsSqsAssumedRoleBasedAuth","description":"AWS Assumed Role Based Auth","required":["type","assumed_role_arn"],"x-fern-type-name":"AwsSqsAssumedRoleBasedAuth","properties":{"type":{"description":"+value=assumed-role-based","type":"string","enum":["assumed-role-based"],"default":"assumed-role-based","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume.","type":"string","pattern":"^arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1.assumed_role_arn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth.oneOf.1","typeLabel":"AwsSqsAssumedRoleBasedAuth · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0.auth","typeLabel":"AwsSqsAccessKeyBasedAuth · object | AwsSqsAssumedRoleBasedAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.0","typeLabel":"SQSQueueMetricConfig · object"},{"type":"object","title":"NATSMetricConfig","description":"Metrics to use for the autoscaler","required":["type","lag_threshold"],"x-fern-type-name":"NATSMetricConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.1.type","typeLabel":"enum\u003cstring>"},"lag_threshold":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.1.lag_threshold","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.1","typeLabel":"NATSMetricConfig · object"},{"type":"object","title":"KafkaMetricConfig","description":"Metrics to use for the autoscaler","required":["type","lag_threshold"],"x-fern-type-name":"KafkaMetricConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.2.type","typeLabel":"enum\u003cstring>"},"lag_threshold":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.2.lag_threshold","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.2","typeLabel":"KafkaMetricConfig · object"},{"type":"object","title":"CronMetric","description":"Metrics to use for the autoscaler","required":["type","start","end","timezone"],"x-fern-type-name":"CronMetric","properties":{"type":{"description":"+value=cron","type":"string","enum":["cron"],"default":"cron","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3.type","typeLabel":"enum\u003cstring>"},"start":{"description":"Cron expression indicating the start of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3.start","typeLabel":"string"},"end":{"description":"Cron expression indicating the end of the cron schedule.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3.end","typeLabel":"string"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","default":"UTC","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3.timezone","typeLabel":"string"},"desired_replicas":{"description":"Desired number of replicas during the given interval. Default value is max_replicas.","type":"integer","minimum":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3.desired_replicas","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.3","typeLabel":"CronMetric · object"},{"type":"object","title":"AMQPMetricConfig","description":"Metrics to use for the autoscaler","required":["type","queue_length"],"x-fern-type-name":"AMQPMetricConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.4.type","typeLabel":"enum\u003cstring>"},"queue_length":{"description":"Upper limit of the number of backlog messages the auto-scaler will try to maintain per replica. If you set this number to 10 and have 30 messages in the stream and one replica, the auto-scaler will scale the number of replicas to 3.","type":"integer","minimum":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.4.queue_length","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics.oneOf.4","typeLabel":"AMQPMetricConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.metrics","typeLabel":"SQSQueueMetricConfig · object | NATSMetricConfig · object | KafkaMetricConfig · object | CronMetric · object | AMQPMetricConfig · object"},"polling_interval":{"description":"This is the interval to check each trigger on.","type":"integer","minimum":0,"default":30,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1.polling_interval","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas.oneOf.1","typeLabel":"AsyncServiceAutoscaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.replicas","typeLabel":"number | AsyncServiceAutoscaling · object"},"worker_config":{"type":"object","required":["input_config","num_concurrent_workers"],"properties":{"input_config":{"oneOf":[{"type":"object","title":"SQSInputConfig","description":"Describes the configuration for the input SQS worker","required":["type","queue_url","region_name","visibility_timeout","wait_time_seconds"],"x-fern-type-name":"SQSInputConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_url":{"description":"AWS SQS Queue URL of Subscriber","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.queue_url","typeLabel":"string"},"region_name":{"description":"AWS Region Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.region_name","typeLabel":"string"},"visibility_timeout":{"description":"A period during which Amazon SQS prevents all consumers from receiving and processing the message. If one message takes 5 seconds to process, you can set this number to 7 or any number higher than 5. This will ensure that while the message is being processed, it will not be available to other replicas. For more information, see [here](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)","type":"integer","minimum":1,"maximum":43200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.visibility_timeout","typeLabel":"integer"},"wait_time_seconds":{"description":"Wait timeout for long polling. For more information, see [here](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html)","type":"integer","minimum":1,"maximum":20,"default":19,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.wait_time_seconds","typeLabel":"integer"},"auth":{"type":"object","required":["aws_access_key_id","aws_secret_access_key"],"properties":{"aws_access_key_id":{"description":"AWS Access Key ID","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.auth.aws_access_key_id","typeLabel":"string"},"aws_secret_access_key":{"description":"AWS Secret Access Key for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.auth.aws_secret_access_key","typeLabel":"string"},"aws_session_token":{"description":"AWS Session Token, only required when using temporary credentials","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.auth.aws_session_token","typeLabel":"string"}},"title":"AWSAccessKeyAuth","x-fern-type-name":"AWSAccessKeyAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0.auth","typeLabel":"AWSAccessKeyAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.0","typeLabel":"SQSInputConfig · object"},{"type":"object","title":"NATSInputConfig","description":"Describes the configuration for the input NATS worker","required":["type","nats_url","stream_name","root_subject","consumer_name","wait_time_seconds"],"x-fern-type-name":"NATSInputConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Input NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.nats_url","typeLabel":"string"},"stream_name":{"description":"Name of the NATS stream","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.stream_name","typeLabel":"string"},"root_subject":{"description":"Root subject of input NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.root_subject","typeLabel":"string"},"consumer_name":{"description":"Consumer name of input NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.consumer_name","typeLabel":"string"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"maximum":20,"default":19,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.wait_time_seconds","typeLabel":"integer"},"nats_metrics_url":{"description":"URL for the NATS metrics endpoint. It is compulsory if you want to use NATS autoscaling.","type":"string","pattern":"^(http(s?)://).*$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.nats_metrics_url","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1.auth","typeLabel":"NATSUserPasswordAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.1","typeLabel":"NATSInputConfig · object"},{"type":"object","title":"KafkaInputConfig","description":"Describes the configuration for the input Kafka worker","required":["type","bootstrap_servers","topic_name","consumer_group","tls"],"x-fern-type-name":"KafkaInputConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.type","typeLabel":"enum\u003cstring>"},"bootstrap_servers":{"description":"'Kafka Bootstrap servers - Comma separated list of Kafka brokers \"hostname:port\" to connect to for bootstrap'","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.bootstrap_servers","typeLabel":"string"},"topic_name":{"description":"Kafka topic to subscribe to","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.topic_name","typeLabel":"string"},"consumer_group":{"description":"The name of the consumer group to join for dynamic partition assignment","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.consumer_group","typeLabel":"string"},"tls":{"description":"TLS configuration for SASL authentication","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.tls","typeLabel":"boolean"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"maximum":300,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.wait_time_seconds","typeLabel":"integer"},"auth":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Username for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.auth.username","typeLabel":"string"},"password":{"description":"Password for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.auth.password","typeLabel":"string"}},"title":"KafkaSASLAuth","x-fern-type-name":"KafkaSASLAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2.auth","typeLabel":"KafkaSASLAuth · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.2","typeLabel":"KafkaInputConfig · object"},{"type":"object","title":"AMQPInputConfig","description":"Describes the configuration for the input AMQP worker","required":["type","url","queue_name","wait_time_seconds"],"x-fern-type-name":"AMQPInputConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.3.type","typeLabel":"enum\u003cstring>"},"url":{"description":"AMQP Queue URL of Subscriber","type":"string","pattern":"^(amqp|amqps?)://(?:[^:@]+(?::[^:@]+)?@)?([^/?]+)(?:/([^?]+))?/?([^?]+)?(?:\\?(.*))?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.3.url","typeLabel":"string"},"queue_name":{"description":"AMQP Queue Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.3.queue_name","typeLabel":"string"},"wait_time_seconds":{"description":"Wait timeout for long polling.","type":"integer","minimum":1,"default":5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.3.wait_time_seconds","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config.oneOf.3","typeLabel":"AMQPInputConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.input_config","typeLabel":"SQSInputConfig · object | NATSInputConfig · object | KafkaInputConfig · object | AMQPInputConfig · object"},"num_concurrent_workers":{"description":"Number of concurrent workers to spawn for the processor","type":"integer","minimum":1,"maximum":10,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.num_concurrent_workers","typeLabel":"integer"},"output_config":{"oneOf":[{"type":"object","title":"SQSOutputConfig","description":"Describes the configuration for the output SQS worker","required":["type","queue_url","region_name"],"x-fern-type-name":"SQSOutputConfig","properties":{"type":{"description":"+value=sqs","type":"string","enum":["sqs"],"default":"sqs","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.type","typeLabel":"enum\u003cstring>"},"queue_url":{"description":"AWS SQS Queue URL of Publisher","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.queue_url","typeLabel":"string"},"region_name":{"description":"AWS Region Name","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.region_name","typeLabel":"string"},"auth":{"type":"object","required":["aws_access_key_id","aws_secret_access_key"],"properties":{"aws_access_key_id":{"description":"AWS Access Key ID","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.auth.aws_access_key_id","typeLabel":"string"},"aws_secret_access_key":{"description":"AWS Secret Access Key for the user to authenticate with","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.auth.aws_secret_access_key","typeLabel":"string"},"aws_session_token":{"description":"AWS Session Token, only required when using temporary credentials","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.auth.aws_session_token","typeLabel":"string"}},"title":"AWSAccessKeyAuth","x-fern-type-name":"AWSAccessKeyAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0.auth","typeLabel":"AWSAccessKeyAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.0","typeLabel":"SQSOutputConfig · object"},{"type":"object","title":"NATSOutputConfig","description":"Describes the configuration for the output NATS worker","required":["type","nats_url","root_subject"],"x-fern-type-name":"NATSOutputConfig","properties":{"type":{"description":"+value=nats","type":"string","enum":["nats"],"default":"nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Output NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.nats_url","typeLabel":"string"},"root_subject":{"description":"Root subject of output NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.root_subject","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1.auth","typeLabel":"NATSUserPasswordAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.1","typeLabel":"NATSOutputConfig · object"},{"type":"object","title":"CoreNATSOutputConfig","description":"Describes the configuration for the output Core NATS worker","required":["type","nats_url","root_subject"],"x-fern-type-name":"CoreNATSOutputConfig","properties":{"type":{"description":"+value=core-nats","type":"string","enum":["core-nats"],"default":"core-nats","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.type","typeLabel":"enum\u003cstring>"},"nats_url":{"description":"Output NATS URL","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.nats_url","typeLabel":"string"},"root_subject":{"description":"Root subject of output NATS","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-.]+[a-zA-Z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.root_subject","typeLabel":"string"},"auth":{"description":"NATS User Password Authentication","type":"object","required":["account_name","user","password"],"properties":{"account_name":{"description":"Name of the NATS account","type":"string","default":"$G","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.auth.account_name","typeLabel":"string"},"user":{"description":"User for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.auth.user","typeLabel":"string"},"password":{"description":"Password for NATS authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.auth.password","typeLabel":"string"}},"title":"NATSUserPasswordAuth","x-fern-type-name":"NATSUserPasswordAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2.auth","typeLabel":"NATSUserPasswordAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.2","typeLabel":"CoreNATSOutputConfig · object"},{"type":"object","title":"KafkaOutputConfig","description":"Describes the configuration for the output Kafka worker","required":["type","bootstrap_servers","topic_name","tls"],"x-fern-type-name":"KafkaOutputConfig","properties":{"type":{"description":"+value=kafka","type":"string","enum":["kafka"],"default":"kafka","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.type","typeLabel":"enum\u003cstring>"},"bootstrap_servers":{"description":"'Kafka Bootstrap servers - Comma separated list of Kafka brokers \"hostname:port\" to connect to for bootstrap'","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.bootstrap_servers","typeLabel":"string"},"topic_name":{"description":"Kafka topic to publish to","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.topic_name","typeLabel":"string"},"tls":{"description":"TLS configuration for SASL authentication","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.tls","typeLabel":"boolean"},"auth":{"type":"object","required":["username","password"],"properties":{"username":{"description":"Username for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.auth.username","typeLabel":"string"},"password":{"description":"Password for SASL authentication","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.auth.password","typeLabel":"string"}},"title":"KafkaSASLAuth","x-fern-type-name":"KafkaSASLAuth","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3.auth","typeLabel":"KafkaSASLAuth · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.3","typeLabel":"KafkaOutputConfig · object"},{"type":"object","title":"AMQPOutputConfig","description":"Describes the configuration for the output AMQP worker","required":["type","url","routing_key"],"x-fern-type-name":"AMQPOutputConfig","properties":{"type":{"description":"+value=amqp","type":"string","enum":["amqp"],"default":"amqp","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.4.type","typeLabel":"enum\u003cstring>"},"url":{"description":"AMQP Queue URL of Publisher","type":"string","pattern":"^(amqp|amqps?)://(?:[^:@]+(?::[^:@]+)?@)?([^/?]+)(?:/([^?]+))?/?([^?]+)?(?:\\?(.*))?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.4.url","typeLabel":"string"},"routing_key":{"description":"AMQP Routing Key to publish to.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.4.routing_key","typeLabel":"string"},"exchange_name":{"description":"AMQP Exchange Name","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.4.exchange_name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config.oneOf.4","typeLabel":"AMQPOutputConfig · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config.output_config","typeLabel":"SQSOutputConfig · object | NATSOutputConfig · object | CoreNATSOutputConfig · object | KafkaOutputConfig · object | AMQPOutputConfig · object"}},"title":"WorkerConfig","x-fern-type-name":"WorkerConfig","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.worker_config","typeLabel":"WorkerConfig · object"},"artifacts_download":{"description":"Download and cache models in a volume to enhance loading speeds and reduce costs by avoiding repeated downloads. [Docs](https://docs.truefoundry.com/docs/download-and-cache-models)","type":"object","required":["artifacts"],"properties":{"artifacts":{"description":"List of artifacts to be cached","type":"array","items":{"oneOf":[{"type":"object","title":"TrueFoundryArtifactSource","description":"Input for Artifact from TrueFoundry Artifact Registry","required":["type","artifact_version_fqn","download_path_env_variable"],"x-fern-type-name":"TrueFoundryArtifactSource","properties":{"type":{"description":"+value=truefoundry-artifact","type":"string","enum":["truefoundry-artifact"],"default":"truefoundry-artifact","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"artifact_version_fqn":{"description":"Artifact or Model Version FQN of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.artifact_version_fqn","typeLabel":"string"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.0","typeLabel":"TrueFoundryArtifactSource · object"},{"type":"object","title":"HuggingfaceArtifactSource","description":"Input for Artifact from Huggingface Model Hub","required":["type","model_id","revision","ignore_patterns","download_path_env_variable"],"x-fern-type-name":"HuggingfaceArtifactSource","properties":{"type":{"description":"+value=huggingface-hub","type":"string","enum":["huggingface-hub"],"default":"huggingface-hub","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"model_id":{"description":"Model ID of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.model_id","typeLabel":"string"},"revision":{"description":"Revision of the artifact to be downloaded","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.revision","typeLabel":"string"},"ignore_patterns":{"description":"List of patterns to ignore while downloading the artifact","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns.items.[INDEX]","typeLabel":"string"},"default":["*.h5","*.ot","*.tflite","*.msgpack"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.ignore_patterns","typeLabel":"string[]"},"download_path_env_variable":{"description":"Environment variable which will contain the download path of the artifact","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1.download_path_env_variable","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX].oneOf.1","typeLabel":"HuggingfaceArtifactSource · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts.items.[INDEX]","typeLabel":"TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.artifacts","typeLabel":"(TrueFoundryArtifactSource · object | HuggingfaceArtifactSource · object)[]"},"cache_volume":{"description":"Describes the volume that will be used to cache the models","type":"object","required":["storage_class","cache_size"],"properties":{"storage_class":{"description":"Storage class of the Volume where artifacts will be cached","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.cache_volume.storage_class","typeLabel":"string"},"cache_size":{"description":"Size of the Volume (in GB) where artifacts will be cached. Should be greater than twice the size of artifacts getting cached","type":"integer","minimum":1,"maximum":10000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.cache_volume.cache_size","typeLabel":"integer"}},"title":"ArtifactsCacheVolume","x-fern-type-name":"ArtifactsCacheVolume","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download.cache_volume","typeLabel":"ArtifactsCacheVolume · object"}},"title":"ArtifactsDownload","x-fern-type-name":"ArtifactsDownload","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.artifacts_download","typeLabel":"ArtifactsDownload · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.resources","typeLabel":"Resources · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.env","typeLabel":"object | null"},"service_account":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to service pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-service)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.kustomize","typeLabel":"Kustomize · object"},"liveness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.liveness_probe","typeLabel":"HealthProbe · object"},"readiness_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.readiness_probe","typeLabel":"HealthProbe · object"},"startup_probe":{"description":"Describes the configuration for the Health Probe's\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["config"],"properties":{"config":{"description":"Describes the Instructions for assessing container health by executing an HTTP GET request.\nTo learn more you can go [here](https://docs.truefoundry.com/docs/liveness-readiness-probe)","type":"object","required":["type","path","port"],"properties":{"type":{"description":"Request Type","type":"string","enum":["http"],"default":"http","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config.type","typeLabel":"enum\u003cstring>"},"path":{"description":"Path to the health check endpoint","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config.path","typeLabel":"string"},"port":{"description":"Listening port for the health check endpoint","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config.port","typeLabel":"integer"},"host":{"description":"Host name to connect to, defaults to the pod IP","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config.host","typeLabel":"string"},"scheme":{"description":"Scheme to use for connecting to the host","type":"string","default":"HTTP","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config.scheme","typeLabel":"string"}},"title":"HttpProbe","x-fern-type-name":"HttpProbe","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.config","typeLabel":"HttpProbe · object"},"initial_delay_seconds":{"description":"Time to wait after container has started before checking the endpoint","type":"integer","minimum":0,"maximum":36000,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.initial_delay_seconds","typeLabel":"integer"},"period_seconds":{"description":"How often to check the endpoint","type":"integer","minimum":1,"maximum":36000,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.period_seconds","typeLabel":"integer"},"timeout_seconds":{"description":"Time to wait for a response from the endpoint before considering it down","type":"integer","minimum":1,"maximum":36000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.timeout_seconds","typeLabel":"integer"},"success_threshold":{"description":"Number of successful responses from the endpoint before container is considered healthy","type":"integer","minimum":1,"maximum":5000,"default":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.success_threshold","typeLabel":"integer"},"failure_threshold":{"description":"Number of consecutive failures before the container is considered down","type":"integer","minimum":1,"maximum":5000,"default":3,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe.failure_threshold","typeLabel":"integer"}},"title":"HealthProbe","x-fern-type-name":"HealthProbe","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.startup_probe","typeLabel":"HealthProbe · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.workspace_fqn","typeLabel":"string"},"rollout_strategy":{"description":"This strategy updates the pods in a rolling fashion such that a subset of the\ntotal pods are replaced with new version at one time.\nA commonly used strategy can be to have maxUnavailablePercentage close to 0 so that there\nis no downtime and keep the maxSurgePercentage to around 25%. If you are anyways running\na large number of pods, the service can often tolerate a few pods going down - so you\nmax maxUnavailablePercentage = 10 and maxSurgePercentage=0. You can read about it more\n[here](https://spot.io/resources/kubernetes-autoscaling/5-kubernetes-deployment-strategies-roll-out-like-the-pros/)","type":"object","required":["type","max_unavailable_percentage","max_surge_percentage"],"properties":{"type":{"description":"+value=rolling_update","type":"string","enum":["rolling_update"],"default":"rolling_update","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.rollout_strategy.type","typeLabel":"enum\u003cstring>"},"max_unavailable_percentage":{"description":"Percentage of total replicas that can be brought down at one time.\nFor a value of 25 when replicas are set to 12 this would mean minimum (25% of 12) = 3 pods might be unavailable during the deployment.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.rollout_strategy.max_unavailable_percentage","typeLabel":"integer"},"max_surge_percentage":{"description":"Percentage of total replicas of updated image that can be brought up over the total replicas count.\nFor a value of 25 when replicas are set to 12 this would mean (12+(25% of 12) = 15) pods might be running at one time.\nSetting this to a higher value can help in speeding up the deployment process.","type":"integer","minimum":0,"maximum":100,"default":25,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.rollout_strategy.max_surge_percentage","typeLabel":"integer"}},"title":"Rolling","x-fern-type-name":"Rolling","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.rollout_strategy","typeLabel":"Rolling · object"},"sidecar":{"type":"object","required":["destination_url"],"properties":{"destination_url":{"description":"URL for the processor to invoke","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.sidecar.destination_url","typeLabel":"string"},"request_timeout":{"description":"Timeout for the invoke request in seconds","type":"integer","minimum":1,"default":10,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.sidecar.request_timeout","typeLabel":"integer"},"sidecar_image":{"description":"Image for the processor sidecar (This field will be deprecated in the future)","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.sidecar.sidecar_image","typeLabel":"string"}},"title":"AsyncProcessorSidecar","x-fern-type-name":"AsyncProcessorSidecar","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1.sidecar","typeLabel":"AsyncProcessorSidecar · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.1","typeLabel":"AsyncService · object"},{"type":"object","title":"Job","description":"Describes the configuration for the job","required":["type","name","image","trigger"],"x-fern-type-name":"Job","properties":{"type":{"description":"+value=job","type":"string","enum":["job"],"default":"job","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the job","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"string | string[]"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"string | string[]"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"oneOf":[{"type":"object","title":"Pip","description":"Use pip to install requirements files and packages","required":["type"],"x-fern-type-name":"Pip","properties":{"type":{"description":"+value=pip","type":"string","enum":["pip"],"default":"pip","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.type","typeLabel":"enum\u003cstring>"},"requirements_path":{"description":"Path to `requirements.txt` relative to `Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0.pip_packages","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.0","typeLabel":"Pip · object"},{"type":"object","title":"UV","description":"Use `uv` to setup env.\nYour build context root must contain `pyproject.toml` and `uv.lock`","required":["type"],"x-fern-type-name":"UV","properties":{"type":{"description":"+value=uv","type":"string","enum":["uv"],"default":"uv","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.type","typeLabel":"enum\u003cstring>"},"uv_version":{"description":"UV version to use","type":"string","default":"latest","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.uv_version","typeLabel":"string"},"sync_options":{"description":"Sync options to pass to uv command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1.sync_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.1","typeLabel":"UV · object"},{"type":"object","title":"Poetry","description":"Use `poetry` to setup env.\nYour build context root must contain `pyproject.toml` and `poetry.lock`","required":["type"],"x-fern-type-name":"Poetry","properties":{"type":{"description":"+value=poetry","type":"string","enum":["poetry"],"default":"poetry","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.type","typeLabel":"enum\u003cstring>"},"poetry_version":{"oneOf":[{"type":"string","description":"Poetry version to use","default":"latest","enum":["latest"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Poetry version to use","default":"latest","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version.oneOf.1","typeLabel":"string"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.poetry_version","typeLabel":"enum\u003cstring> | string"},"install_options":{"description":"install options to pass to poetry command","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2.install_options","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies.oneOf.2","typeLabel":"Poetry · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"Pip · object | UV · object | Poetry · object"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.image","typeLabel":"Build · object | Image · object"},"trigger":{"oneOf":[{"type":"object","title":"Manual","description":"Trigger the job manually. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type"],"x-fern-type-name":"Manual","properties":{"type":{"description":"+value=manual","type":"string","enum":["manual"],"default":"manual","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.0.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.0","typeLabel":"Manual · object"},{"type":"object","title":"Schedule","description":"Run the job on a schedule. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type","schedule","concurrency_policy"],"x-fern-type-name":"Schedule","properties":{"type":{"description":"+value=scheduled","type":"string","enum":["scheduled"],"default":"scheduled","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.1.type","typeLabel":"enum\u003cstring>"},"schedule":{"description":"Specify the schedule for this job to be run periodically in cron format.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.1.schedule","typeLabel":"string"},"concurrency_policy":{"description":"Choose whether to allow this job to run while another instance of the job is running, or to replace the currently running instance. Allow\nwill enable multiple instances of this job to run. Forbid will keep the current instance of the job running and stop a new instance from being run.\nReplace will terminate any currently running instance of the job and start a new one.","type":"string","enum":["Forbid","Allow","Replace"],"default":"Forbid","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.1.concurrency_policy","typeLabel":"enum\u003cstring>"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.1.timezone","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger.oneOf.1","typeLabel":"Schedule · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger","typeLabel":"Manual · object | Schedule · object"},"trigger_on_deploy":{"description":"Trigger the job after deploy immediately","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.trigger_on_deploy","typeLabel":"boolean"},"params":{"description":"Configure params and pass it to create different job runs","type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"description":"Name of the param","type":"string","pattern":"^[a-z][a-z0-9\\-_]{0,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Description of param","type":"string","pattern":"^.{1,127}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params.items.[INDEX].description","typeLabel":"string"},"default":{"description":"Default value or placeholder","type":"string","pattern":"^.{0,127}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params.items.[INDEX].default","typeLabel":"string"},"param_type":{"type":"string","enum":["string","ml_repo"],"default":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params.items.[INDEX].param_type","typeLabel":"enum\u003cstring>"}},"title":"Param","x-fern-type-name":"Param","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params.items.[INDEX]","typeLabel":"Param · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.params","typeLabel":"Param · object[]"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.env","typeLabel":"object | null"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.resources","typeLabel":"Resources · object"},"alerts":{"description":"Configure alerts to be sent when the job starts/fails/completes","type":"array","items":{"description":"Describes the configuration for the job alerts","type":"object","properties":{"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].to_emails.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].to_emails","typeLabel":"string[]"},"notification_target":{"oneOf":[{"type":"object","title":"Email","description":"Email","required":["type","notification_channel","to_emails"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=email","type":"string","enum":["email"],"default":"email","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.to_emails.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0.to_emails","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.0","typeLabel":"Email · object"},{"type":"object","title":"SlackWebhook","description":"Slack Webhook","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-webhook","type":"string","enum":["slack-webhook"],"default":"slack-webhook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.1","typeLabel":"SlackWebhook · object"},{"type":"object","title":"SlackBot","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel","channels"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-bot","type":"string","enum":["slack-bot"],"default":"slack-bot","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.notification_channel","typeLabel":"string"},"channels":{"description":"List of channels to send messages to.","type":"array","items":{"type":"string","pattern":"^#?[a-z0-9\\-_]{2,80}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.channels.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2.channels","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.2","typeLabel":"SlackBot · object"},{"type":"object","title":"PagerDuty","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=pagerduty","type":"string","enum":["pagerduty"],"default":"pagerduty","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target.oneOf.3","typeLabel":"PagerDuty · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].notification_target","typeLabel":"Email · object | SlackWebhook · object | SlackBot · object | PagerDuty · object"},"on_start":{"description":"Send an alert when the job starts","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].on_start","typeLabel":"boolean"},"on_completion":{"type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].on_completion","typeLabel":"boolean"},"on_failure":{"description":"Send an alert when the job fails","type":"boolean","default":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX].on_failure","typeLabel":"boolean"}},"title":"JobAlert","x-fern-type-name":"JobAlert","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts.items.[INDEX]","typeLabel":"JobAlert · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.alerts","typeLabel":"JobAlert · object[]"},"retries":{"description":"Specify the maximum number of attempts to retry a job before it is marked as failed.","type":"integer","minimum":0,"maximum":10,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.retries","typeLabel":"integer"},"timeout":{"description":"Job timeout in seconds.","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":432000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.timeout","typeLabel":"integer"},"concurrency_limit":{"description":"Number of runs that can run concurrently","type":"integer","minimum":0,"exclusiveMinimum":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.concurrency_limit","typeLabel":"integer"},"service_account":{"description":"+sort=1000","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.service_account","typeLabel":"string"},"mounts":{"description":"Configure data to be mounted to job pod(s) as a string, secret or volume. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"labels":{"description":"Labels","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.labels","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.kustomize","typeLabel":"Kustomize · object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2.workspace_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.2","typeLabel":"Job · object"},{"type":"object","title":"Helm","required":["type","name","source"],"x-fern-type-name":"Helm","properties":{"type":{"description":"+value=helm","type":"string","enum":["helm"],"default":"helm","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Helm deployment. This will be set as the release name of the chart you are deploying.","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.name","typeLabel":"string"},"source":{"oneOf":[{"type":"object","title":"HelmRepo","description":"Source helm repository","required":["type","repo_url","chart","version"],"x-fern-type-name":"HelmRepo","properties":{"type":{"description":"+value=helm-repo","type":"string","enum":["helm-repo"],"default":"helm-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"Helm repository URL - Needs to be a valid URL.","type":"string","pattern":"^(((https?|wss):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0.repo_url","typeLabel":"string"},"chart":{"description":"The helm chart name","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._/-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0.chart","typeLabel":"string"},"version":{"description":"Helm chart version","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0.version","typeLabel":"string"},"integration_fqn":{"description":"FQN of the helm repo integration. If you can't find your integration here,\nadd it through the [Integrations](/integrations) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0.integration_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.0","typeLabel":"HelmRepo · object"},{"type":"object","title":"OCIRepo","description":"OCIRepo","required":["type","oci_chart_url","version"],"x-fern-type-name":"OCIRepo","properties":{"type":{"description":"+value=oci-repo","type":"string","enum":["oci-repo"],"default":"oci-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"oci_chart_url":{"description":"OCI chart URL - Need to be a valid URL.","type":"string","pattern":"^(((oci):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.1.oci_chart_url","typeLabel":"string"},"version":{"description":"Helm chart version","type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.1.version","typeLabel":"string"},"integration_fqn":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.1.integration_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.1","typeLabel":"OCIRepo · object"},{"type":"object","title":"GitHelmRepo","description":"Source helm repository","required":["type","repo_url","revision","path"],"x-fern-type-name":"GitHelmRepo","properties":{"type":{"description":"+value=git-helm-repo","type":"string","enum":["git-helm-repo"],"default":"git-helm-repo","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"Git repository URL - Needs to be a valid URL.","type":"string","pattern":"^(((https?|wss):\\/\\/)?(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}(?:[-a-zA-Z0-9()@:%_\\+.~#?\u0026\\/=]*))$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.repo_url","typeLabel":"string"},"revision":{"description":"Branch/Commit SHA/Tag of the git repo.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.revision","typeLabel":"string"},"path":{"description":"Path to the chart.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.path","typeLabel":"string"},"value_files":{"description":"Helm values files for overriding values in the helm chart.\nThe path is relative to the Path directory defined above","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.value_files.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2.value_files","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source.oneOf.2","typeLabel":"GitHelmRepo · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.source","typeLabel":"HelmRepo · object | OCIRepo · object | GitHelmRepo · object"},"labels":{"description":"Add labels to base argo app","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.labels","typeLabel":"object"},"values":{"description":"Values file as block file","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.values","typeLabel":"object"},"kustomize":{"type":"object","properties":{"patch":{"description":"Content of kustomization.yaml to perform kustomize operation. Please do not include the `resources` section. It is filled in automatically","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.kustomize.patch","typeLabel":"object"},"additions":{"description":"Additional kubernetes manifests to be included in the application","type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.kustomize.additions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.kustomize.additions","typeLabel":"object[]"}},"title":"Kustomize","x-fern-type-name":"Kustomize","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.kustomize","typeLabel":"Kustomize · object"},"ignoreDifferences":{"type":"array","items":{"type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.ignoreDifferences.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.ignoreDifferences","typeLabel":"object[]"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3.workspace_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX].oneOf.3","typeLabel":"Helm · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components.items.[INDEX]","typeLabel":"Service · object | AsyncService · object | Job · object | Helm · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.components","typeLabel":"(Service · object | AsyncService · object | Job · object | Helm · object)[]"},"template":{"description":"Template to be used for the application set.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.template","typeLabel":"string"},"values":{"description":"Values to be used to render components for the application set.","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.values","typeLabel":"object"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.workspace_fqn","typeLabel":"string"},"convert_template_manifest":{"description":"Flag to indicate if the template manifest should be converted to TrueFoundry manifest","type":"boolean","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9.convert_template_manifest","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.9","typeLabel":"ApplicationSet · object"},{"type":"object","title":"Workflow","description":"Deployment manifest defining the application configuration.","required":["type","name","source","workflow_file_path"],"x-fern-type-name":"Workflow","properties":{"type":{"description":"+value=workflow","type":"string","enum":["workflow"],"default":"workflow","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the workflow","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.name","typeLabel":"string"},"source":{"oneOf":[{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.0.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.0.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.0","typeLabel":"LocalSource · object"},{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.1.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source.oneOf.1","typeLabel":"RemoteSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.source","typeLabel":"LocalSource · object | RemoteSource · object"},"workflow_file_path":{"description":"Path to the workflow file relative to the project root path","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.workflow_file_path","typeLabel":"string"},"flyte_entities":{"description":"Flyte Entities","type":"array","items":{"oneOf":[{"type":"object","title":"FlyteTask","required":["template"],"x-fern-type-name":"FlyteTask","properties":{"template":{"oneOf":[{"type":"object","title":"TruefoundryFlyteTaskTemplate","required":["id","custom"],"x-fern-type-name":"FlyteTaskTemplate","properties":{"id":{"type":"object","required":["resourceType","name"],"properties":{"resourceType":{"type":"string","enum":["TASK"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.id.resourceType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.id.name","typeLabel":"string"}},"title":"FlyteTaskID","x-fern-type-name":"FlyteTaskID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.id","typeLabel":"FlyteTaskID · object"},"custom":{"type":"object","required":["truefoundry"],"properties":{"truefoundry":{"oneOf":[{"type":"object","title":"PythonTaskConfig","description":"Describes the configuration for the python function task","required":["type","image"],"x-fern-type-name":"PythonTaskConfig","properties":{"type":{"description":"+value=python-task-config","type":"string","enum":["python-task-config"],"default":"python-task-config","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.type","typeLabel":"enum\u003cstring>"},"image":{"oneOf":[{"type":"object","title":"TaskPythonBuild","description":"Describes the configuration for the python build for a task","required":["type"],"x-fern-type-name":"TaskPythonBuild","properties":{"type":{"description":"+uiType=Hidden\n+value=task-python-build","type":"string","enum":["task-python-build"],"default":"task-python-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.docker_registry","typeLabel":"string"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.pip_packages","typeLabel":"string[]"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.0","typeLabel":"TaskPythonBuild · object"},{"type":"object","title":"TaskDockerFileBuild","description":"Describes the configuration for the docker build for a task","required":["type","dockerfile_path"],"x-fern-type-name":"TaskDockerFileBuild","properties":{"type":{"description":"+uiType=Hidden\n+value=dockerfile","type":"string","enum":["task-dockerfile-build"],"default":"task-dockerfile-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.dockerfile_path","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.docker_registry","typeLabel":"string"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image.oneOf.1","typeLabel":"TaskDockerFileBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.image","typeLabel":"TaskPythonBuild · object | TaskDockerFileBuild · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.env","typeLabel":"object | null"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.resources","typeLabel":"Resources · object"},"mounts":{"description":"Configure data to be mounted to Workflow pod(s) as a volume.","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"Service Account","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0.service_account","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.0","typeLabel":"PythonTaskConfig · object"},{"type":"object","title":"ContainerTaskConfig","description":"+discriminator=type","required":["type","image"],"x-fern-type-name":"ContainerTaskConfig","properties":{"type":{"description":"+value=container-task-config","type":"string","enum":["container-task-config"],"default":"container-task-config","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image":{"oneOf":[{"type":"object","title":"Build","description":"Describes how we build our code into a Docker image.","required":["type","build_source","build_spec"],"x-fern-type-name":"Build","properties":{"type":{"description":"+value=build","type":"string","enum":["build"],"default":"build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.0.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.0","typeLabel":"RemoteSource · object"},{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.1.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.1.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.1.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.1","typeLabel":"GitSource · object"},{"type":"object","title":"LocalSource","description":"Describes that we are using code stored in a local developement environment to build our image","required":["type","project_root_path","local_build"],"x-fern-type-name":"LocalSource","properties":{"type":{"description":"+value=local","type":"string","enum":["local"],"default":"local","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"project_root_path":{"description":"Local project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.2.project_root_path","typeLabel":"string"},"local_build":{"description":"run docker build locally","type":"boolean","default":false,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.2.local_build","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source.oneOf.2","typeLabel":"LocalSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_source","typeLabel":"RemoteSource · object | GitSource · object | LocalSource · object"},"build_spec":{"oneOf":[{"type":"object","title":"DockerFileBuild","description":"Describes that we are using a dockerfile to build our image","required":["type","dockerfile_path","build_context_path"],"x-fern-type-name":"DockerFileBuild","properties":{"type":{"description":"+value=dockerfile","type":"string","enum":["dockerfile"],"default":"dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.dockerfile_path","typeLabel":"string"},"build_context_path":{"description":"Build context path for the Dockerfile relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_context_path","typeLabel":"string"},"command":{"type":"any","description":"Override the command to run when the container starts\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.command","typeLabel":"any"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.0","typeLabel":"DockerFileBuild · object"},{"type":"object","title":"PythonBuild","description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","required":["type","build_context_path","command"],"x-fern-type-name":"PythonBuild","properties":{"type":{"description":"+value=tfy-python-buildpack","type":"string","enum":["tfy-python-buildpack"],"default":"tfy-python-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.build_context_path","typeLabel":"string"},"command":{"type":"any","description":"Command to run when the container starts.\nCommand will be set as the Entrypoint of the generated image.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.command","typeLabel":"any"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.pip_packages","typeLabel":"string[]"},"python_dependencies":{"type":"any","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.python_dependencies","typeLabel":"any"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec.oneOf.1","typeLabel":"PythonBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.build_spec","typeLabel":"DockerFileBuild · object | PythonBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.0","typeLabel":"Build · object"},{"type":"object","title":"Image","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","image_uri"],"x-fern-type-name":"Image","properties":{"type":{"description":"+value=image","type":"string","enum":["image"],"default":"image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.docker_registry","typeLabel":"string"},"command":{"oneOf":[{"type":"string","description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.command.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.command.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Override the command to run when container starts.\nWhen deploying a Job, the command can be templatized by defining `params` and referencing them in command\nE.g. `python main.py --learning_rate {{learning_rate}}`","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.command.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1.command","typeLabel":"string | string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image.oneOf.1","typeLabel":"Image · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.image","typeLabel":"Build · object | Image · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.env","typeLabel":"object | null"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.resources","typeLabel":"Resources · object"},"mounts":{"description":"Configure data to be mounted to Workflow pod(s) as a volume.","type":"array","items":{"oneOf":[{"type":"object","title":"SecretMount","required":["type","mount_path","secret_fqn"],"x-fern-type-name":"SecretMount","properties":{"type":{"description":"+value=secret","type":"string","enum":["secret"],"default":"secret","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.0.mount_path","typeLabel":"string"},"secret_fqn":{"description":"The TrueFoundry secret whose value will be the file content.","type":"string","pattern":"^tfy-secret:\\/\\/.+:.+:.+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.0.secret_fqn","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.0","typeLabel":"SecretMount · object"},{"type":"object","title":"StringDataMount","required":["type","mount_path","data"],"x-fern-type-name":"StringDataMount","properties":{"type":{"description":"+value=string","type":"string","enum":["string"],"default":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the file will be created.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.1.mount_path","typeLabel":"string"},"data":{"description":"The file content.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.1.data","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.1","typeLabel":"StringDataMount · object"},{"type":"object","title":"VolumeMount","required":["type","mount_path","volume_fqn"],"x-fern-type-name":"VolumeMount","properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.2.mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.2.volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.2.sub_path","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX].oneOf.2","typeLabel":"VolumeMount · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts.items.[INDEX]","typeLabel":"SecretMount · object | StringDataMount · object | VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.mounts","typeLabel":"(SecretMount · object | StringDataMount · object | VolumeMount · object)[]"},"service_account":{"description":"Service Account","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1.service_account","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.1","typeLabel":"ContainerTaskConfig · object"},{"type":"object","title":"PySparkTaskConfig","description":"+discriminator=type","required":["type","image","driver_config","executor_config"],"x-fern-type-name":"PySparkTaskConfig","properties":{"type":{"description":"+value=pyspark-task-config","type":"string","enum":["pyspark-task-config"],"default":"pyspark-task-config","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.type","typeLabel":"enum\u003cstring>"},"image":{"oneOf":[{"type":"object","title":"TaskPySparkBuild","description":"Describes the configuration for the PySpark build for a task","required":["type","spark_version"],"x-fern-type-name":"TaskPySparkBuild","properties":{"type":{"description":"+uiType=Hidden\n+value=task-pyspark-build","type":"string","enum":["task-pyspark-build"],"default":"task-pyspark-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"spark_version":{"description":"Spark version should match the spark version installed in the image.","type":"string","default":"3.5.2","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.spark_version","typeLabel":"string"},"container_image":{"description":"Custom container image URI. If provided, this image is used instead of the\ndefault Spark base image (public.ecr.aws/bitnami/spark). The image must be\nDebian-based and have Python and Spark pre-installed.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.container_image","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.docker_registry","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.pip_packages","typeLabel":"string[]"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0.apt_packages","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.0","typeLabel":"TaskPySparkBuild · object"},{"type":"object","title":"TaskSparkImage","description":"Describes a pre-built Spark image for a task. Use this when your image already contains\nall workflow code, dependencies (including truefoundry[workflow,spark]), and required JARs.\nThis skips the Docker build phase entirely.","required":["type","spark_version","container_image"],"x-fern-type-name":"TaskSparkImage","properties":{"type":{"description":"+uiType=Hidden\n+value=task-spark-image","type":"string","enum":["task-spark-image"],"default":"task-spark-image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"spark_version":{"description":"Spark version should match the spark version installed in the image.","type":"string","default":"3.5.2","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.1.spark_version","typeLabel":"string"},"container_image":{"description":"The container image URI of the pre-built Spark image. The image must contain:\n1. All workflow source code at /app (or appropriate PYTHONPATH)\n2. truefoundry[workflow,spark] package installed\n3. PySpark matching the spark_version\n4. Hadoop AWS/GCS/Azure JARs if using cloud storage","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.1.container_image","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.1.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image.oneOf.1","typeLabel":"TaskSparkImage · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.image","typeLabel":"TaskPySparkBuild · object | TaskSparkImage · object"},"driver_config":{"description":"Driver Config","type":"object","properties":{"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config.resources","typeLabel":"Resources · object"}},"title":"SparkDriverConfig","x-fern-type-name":"SparkDriverConfig","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.driver_config","typeLabel":"SparkDriverConfig · object"},"executor_config":{"description":"Executor Config","type":"object","required":["instances"],"properties":{"instances":{"oneOf":[{"type":"object","title":"SparkExecutorFixedInstances","description":"Fixed Instances","default":{"type":"fixed","count":1},"required":["type","count"],"x-fern-type-name":"SparkExecutorFixedInstances","properties":{"type":{"description":"+value=fixed","type":"string","enum":["fixed"],"default":"fixed","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Number of instances to start","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.0.count","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.0","typeLabel":"SparkExecutorFixedInstances · object"},{"type":"object","title":"SparkExecutorDynamicScaling","description":"Dynamic Scaling","default":{"type":"fixed","count":1},"required":["type","min","max"],"x-fern-type-name":"SparkExecutorDynamicScaling","properties":{"type":{"description":"+value=dynamic","type":"string","enum":["dynamic"],"default":"dynamic","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.1.type","typeLabel":"enum\u003cstring>"},"min":{"description":"Minimum number of instances to start / scale down to","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.1.min","typeLabel":"integer"},"max":{"description":"Maximum number of instances to scale up to","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.1.max","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances.oneOf.1","typeLabel":"SparkExecutorDynamicScaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.instances","typeLabel":"SparkExecutorFixedInstances · object | SparkExecutorDynamicScaling · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config.resources","typeLabel":"Resources · object"}},"title":"SparkExecutorConfig","x-fern-type-name":"SparkExecutorConfig","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.executor_config","typeLabel":"SparkExecutorConfig · object"},"spark_conf":{"oneOf":[{"description":"Extra configuration properties to be passed to the spark job. [Docs](https://spark.apache.org/docs/latest/configuration.html)","type":"object","default":null,"additionalProperties":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.spark_conf.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.spark_conf.oneOf.0","typeLabel":"object"},{"description":"Extra configuration properties to be passed to the spark job. [Docs](https://spark.apache.org/docs/latest/configuration.html)","type":"null","default":null,"additionalProperties":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.spark_conf.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.spark_conf.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.spark_conf","typeLabel":"object | null"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.env","typeLabel":"object | null"},"mounts":{"description":"Configure data to be mounted to Workflow pod(s) as a volume.","type":"array","items":{"type":"object","required":["type","mount_path","volume_fqn"],"properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts.items.[INDEX].mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts.items.[INDEX].volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts.items.[INDEX].sub_path","typeLabel":"string"}},"title":"VolumeMount","x-fern-type-name":"VolumeMount","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts.items.[INDEX]","typeLabel":"VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.mounts","typeLabel":"VolumeMount · object[]"},"service_account":{"description":"Service Account","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2.service_account","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.2","typeLabel":"PySparkTaskConfig · object"},{"type":"object","title":"DatabricksJobTaskConfig","description":"Task that triggers a Databricks job via API and polls until completion. Uses image and optional resources; no env or mounts. Execution is handled by the CLI (trigger + poll).","required":["type","image","workspace_host","job_id"],"x-fern-type-name":"DatabricksJobTaskConfig","properties":{"type":{"description":"+value=databricks-job-task-config","type":"string","enum":["databricks-job-task-config"],"default":"databricks-job-task-config","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.type","typeLabel":"enum\u003cstring>"},"image":{"oneOf":[{"type":"object","title":"TaskPythonBuild","description":"Describes the configuration for the python build for a task","required":["type"],"x-fern-type-name":"TaskPythonBuild","properties":{"type":{"description":"+uiType=Hidden\n+value=task-python-build","type":"string","enum":["task-python-build"],"default":"task-python-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.docker_registry","typeLabel":"string"},"python_version":{"description":"Python version to run your application. Should be one of the tags listed on [Official Python Docker Page](https://hub.docker.com/_/python)","type":"string","pattern":"^\\d+(\\.\\d+){1,2}([\\-\\.a-z0-9]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.python_version","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.requirements_path","typeLabel":"string"},"pip_packages":{"description":"Define pip package requirements.\nIn Python/YAML E.g. [\"fastapi>=0.90,\u003c1.0\", \"uvicorn\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.pip_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.pip_packages","typeLabel":"string[]"},"apt_packages":{"description":"Debian packages to install via `apt get`.\nIn Python/YAML E.g. [\"git\", \"ffmpeg\", \"htop\"]","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.apt_packages.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.apt_packages","typeLabel":"string[]"},"cuda_version":{"description":"Version of CUDA Toolkit and CUDNN to install in the image\nThese combinations are based off of publically available docker images on docker hub\nYou can also specify a valid tag of the form {cuda_version_number}-cudnn{cudnn_version_number}-{runtime|devel}-ubuntu{ubuntu_version}\nRefer https://hub.docker.com/r/nvidia/cuda/tags for valid set of values\nNote: We use deadsnakes ubuntu ppa to add Python that currently supports only Ubuntu 18.04, 20.04 and 22.04","type":"string","pattern":"^((\\d+\\.\\d+(\\.\\d+)?-cudnn(\\d+)?-(runtime|devel)-ubuntu\\d+\\.\\d+)|11\\.0-cudnn8|11\\.1-cudnn8|11\\.2-cudnn8|11\\.3-cudnn8|11\\.4-cudnn8|11\\.5-cudnn8|11\\.6-cudnn8|11\\.7-cudnn8|11\\.8-cudnn8|12\\.0-cudnn8|12\\.1-cudnn8|12\\.2-cudnn8|12\\.3-cudnn9|12\\.4-cudnn9|12\\.5-cudnn9|12\\.6-cudnn9|12\\.8-cudnn9|12\\.9-cudnn9)$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0.cuda_version","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.0","typeLabel":"TaskPythonBuild · object"},{"type":"object","title":"TaskDockerFileBuild","description":"Describes the configuration for the docker build for a task","required":["type","dockerfile_path"],"x-fern-type-name":"TaskDockerFileBuild","properties":{"type":{"description":"+uiType=Hidden\n+value=dockerfile","type":"string","enum":["task-dockerfile-build"],"default":"task-dockerfile-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"description":"The file path of the Dockerfile relative to project root path.","type":"string","default":"./Dockerfile","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.dockerfile_path","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.docker_registry","typeLabel":"string"},"build_args":{"description":"Build arguments to pass to docker build","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_args.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_args","typeLabel":"object"},"build_secrets":{"description":"Build secrets you can use in run statements inside dockerfile like RUN --mount=type=secret,id=pip_index_url ... you can learn more about build secrets here https://www.truefoundry.com/docs/docker-build-secrets","type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"description":"The ID of the build secret.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"description":"The value of the build secret.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_secrets.items.[INDEX].value","typeLabel":"string"},"env":{"description":"The name of the environment variable to inject the secret into.","type":"string","pattern":"^[_a-zA-Z0-9][_a-zA-Z0-9]{1,31}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_secrets.items.[INDEX].env","typeLabel":"string"}},"title":"BuildSecret","x-fern-type-name":"BuildSecret","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_secrets.items.[INDEX]","typeLabel":"BuildSecret · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1.build_secrets","typeLabel":"BuildSecret · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image.oneOf.1","typeLabel":"TaskDockerFileBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.image","typeLabel":"TaskPythonBuild · object | TaskDockerFileBuild · object"},"workspace_host":{"description":"Databricks workspace URL, e.g. https://\u003cworkspace>.cloud.databricks.com","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.workspace_host","typeLabel":"string"},"job_id":{"description":"The Databricks job ID to run (from Databricks workspace Jobs).","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_id","typeLabel":"string"},"service_account":{"description":"Service Account","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.service_account","typeLabel":"string"},"job_parameters":{"oneOf":[{"description":"Optional parameters to pass to the job run (e.g. notebook params, jar params).","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_parameters.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_parameters.oneOf.0","typeLabel":"object"},{"description":"Optional parameters to pass to the job run (e.g. notebook params, jar params).","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_parameters.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_parameters.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.job_parameters","typeLabel":"object | null"},"timeout_seconds":{"oneOf":[{"description":"Maximum seconds to wait for the job run to complete. Used by CLI when polling.","type":"number","default":null,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.timeout_seconds.oneOf.0","typeLabel":"number"},{"description":"Maximum seconds to wait for the job run to complete. Used by CLI when polling.","type":"null","default":null,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.timeout_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.timeout_seconds","typeLabel":"number | null"},"skip_wait_for_completion":{"description":"If false, the task waits for the Databricks job run to complete (trigger and poll). If true, only triggers the job and returns. Default false.","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.skip_wait_for_completion","typeLabel":"boolean"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.env.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the task either as plain text or secrets. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"additionalProperties":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.env.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.env","typeLabel":"object | null"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3.resources","typeLabel":"Resources · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.3","typeLabel":"DatabricksJobTaskConfig · object"},{"type":"object","title":"SnowflakeTaskConfig","description":"+discriminator=type","required":["type","user","account","database","schema_name","warehouse"],"x-fern-type-name":"SnowflakeTaskConfig","properties":{"type":{"description":"+value=snowflake-task-config","type":"string","enum":["snowflake-task-config"],"default":"snowflake-task-config","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.type","typeLabel":"enum\u003cstring>"},"user":{"description":"Configuration required to connect and execute tasks in Snowflake.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.user","typeLabel":"string"},"account":{"description":"Snowflake account identifier (e.g., \u003corg>-\u003caccount>).","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.account","typeLabel":"string"},"database":{"description":"Target Snowflake database where the task will run.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.database","typeLabel":"string"},"schema_name":{"description":"Target schema within the Snowflake database.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.schema_name","typeLabel":"string"},"warehouse":{"description":"Compute warehouse to be used for executing the task.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4.warehouse","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry.oneOf.4","typeLabel":"SnowflakeTaskConfig · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom.truefoundry","typeLabel":"PythonTaskConfig · object | ContainerTaskConfig · object | PySparkTaskConfig · object | DatabricksJobTaskConfig · object | SnowflakeTaskConfig · object"}},"title":"FlyteTaskCustom","x-fern-type-name":"FlyteTaskCustom","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0.custom","typeLabel":"FlyteTaskCustom · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.0","typeLabel":"TruefoundryFlyteTaskTemplate · object"},{"type":"object","title":"NativeSnowflakeFlyteTaskTemplate","required":["id","type","config","sql"],"x-fern-type-name":"FlyteTaskTemplate","properties":{"id":{"type":"object","required":["resourceType","name"],"properties":{"resourceType":{"type":"string","enum":["TASK"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.id.resourceType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.id.name","typeLabel":"string"}},"title":"FlyteTaskID","x-fern-type-name":"FlyteTaskID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.id","typeLabel":"FlyteTaskID · object"},"type":{"type":"string","enum":["snowflake"],"default":"snowflake","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.type","typeLabel":"enum\u003cstring>"},"config":{"type":"object","required":["account","schema","user","warehouse","database"],"properties":{"account":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config.account","typeLabel":"string"},"schema":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config.schema","typeLabel":"string"},"user":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config.user","typeLabel":"string"},"warehouse":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config.warehouse","typeLabel":"string"},"database":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config.database","typeLabel":"string"}},"title":"SnowflakeConfig","x-fern-type-name":"SnowflakeConfig","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.config","typeLabel":"SnowflakeConfig · object"},"sql":{"type":"object","required":["statement"],"properties":{"statement":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.sql.statement","typeLabel":"string"}},"title":"SnowflakeSql","x-fern-type-name":"SnowflakeSql","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1.sql","typeLabel":"SnowflakeSql · object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template.oneOf.1","typeLabel":"NativeSnowflakeFlyteTaskTemplate · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.template","typeLabel":"TruefoundryFlyteTaskTemplate · object | NativeSnowflakeFlyteTaskTemplate · object"},"description":{"oneOf":[{}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0.description","typeLabel":"any"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.0","typeLabel":"FlyteTask · object"},{"type":"object","title":"FlyteWorkflow","required":["template"],"x-fern-type-name":"FlyteWorkflow","properties":{"template":{"type":"object","required":["id"],"properties":{"id":{"type":"object","required":["resourceType","name"],"properties":{"resourceType":{"type":"string","enum":["WORKFLOW"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1.template.id.resourceType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1.template.id.name","typeLabel":"string"}},"title":"FlyteWorkflowID","x-fern-type-name":"FlyteWorkflowID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1.template.id","typeLabel":"FlyteWorkflowID · object"}},"title":"FlyteWorkflowTemplate","x-fern-type-name":"FlyteWorkflowTemplate","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1.template","typeLabel":"FlyteWorkflowTemplate · object"},"description":{"oneOf":[{}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1.description","typeLabel":"any"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.1","typeLabel":"FlyteWorkflow · object"},{"type":"object","title":"FlyteLaunchPlan","required":["id","spec","closure"],"x-fern-type-name":"FlyteLaunchPlan","properties":{"id":{"type":"object","required":["resourceType","name"],"properties":{"resourceType":{"type":"string","enum":["LAUNCH_PLAN"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.id.resourceType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.id.name","typeLabel":"string"}},"title":"FlyteLaunchPlanID","x-fern-type-name":"FlyteLaunchPlanID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.id","typeLabel":"FlyteLaunchPlanID · object"},"spec":{"type":"object","required":["workflowId"],"properties":{"workflowId":{"type":"object","required":["resourceType","name"],"properties":{"resourceType":{"type":"string","enum":["WORKFLOW"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.spec.workflowId.resourceType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.spec.workflowId.name","typeLabel":"string"}},"title":"FlyteWorkflowID","x-fern-type-name":"FlyteWorkflowID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.spec.workflowId","typeLabel":"FlyteWorkflowID · object"}},"title":"FlyteLaunchPlanSpec","x-fern-type-name":"FlyteLaunchPlanSpec","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.spec","typeLabel":"FlyteLaunchPlanSpec · object"},"closure":{"oneOf":[{"isRequired":true}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2.closure","typeLabel":"any"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX].oneOf.2","typeLabel":"FlyteLaunchPlan · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities.items.[INDEX]","typeLabel":"FlyteTask · object | FlyteWorkflow · object | FlyteLaunchPlan · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.flyte_entities","typeLabel":"(FlyteTask · object | FlyteWorkflow · object | FlyteLaunchPlan · object)[]"},"alerts":{"description":"Alerts","type":"array","items":{"description":"Describes the configuration for the workflow alerts","type":"object","properties":{"notification_target":{"oneOf":[{"type":"object","title":"Email","description":"Email","required":["type","notification_channel","to_emails"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=email","type":"string","enum":["email"],"default":"email","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.0.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.0.notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.0.to_emails.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.0.to_emails","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.0","typeLabel":"Email · object"},{"type":"object","title":"SlackWebhook","description":"Slack Webhook","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-webhook","type":"string","enum":["slack-webhook"],"default":"slack-webhook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.1.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.1.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.1","typeLabel":"SlackWebhook · object"},{"type":"object","title":"SlackBot","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel","channels"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-bot","type":"string","enum":["slack-bot"],"default":"slack-bot","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.2.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.2.notification_channel","typeLabel":"string"},"channels":{"description":"List of channels to send messages to.","type":"array","items":{"type":"string","pattern":"^#?[a-z0-9\\-_]{2,80}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.2.channels.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.2.channels","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.2","typeLabel":"SlackBot · object"},{"type":"object","title":"PagerDuty","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=pagerduty","type":"string","enum":["pagerduty"],"default":"pagerduty","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.3.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.3.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target.oneOf.3","typeLabel":"PagerDuty · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].notification_target","typeLabel":"Email · object | SlackWebhook · object | SlackBot · object | PagerDuty · object"},"on_completion":{"description":"Send an alert when the job completes","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].on_completion","typeLabel":"boolean"},"on_failure":{"description":"Send an alert when the job fails","type":"boolean","default":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX].on_failure","typeLabel":"boolean"}},"title":"WorkflowAlert","x-fern-type-name":"WorkflowAlert","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts.items.[INDEX]","typeLabel":"WorkflowAlert · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10.alerts","typeLabel":"WorkflowAlert · object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.10","typeLabel":"Workflow · object"},{"type":"object","title":"SparkJob","description":"Deployment manifest defining the application configuration.","required":["type","name","image","entrypoint","driver_config","executor_config"],"x-fern-type-name":"SparkJob","properties":{"type":{"description":"+value=spark-job\n+sort=1","type":"string","enum":["spark-job"],"default":"spark-job","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the job","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.name","typeLabel":"string"},"image":{"oneOf":[{"type":"object","title":"SparkImage","description":"Describes that we are using a pre-built image stored in a Docker Image registry","required":["type","spark_version","image_uri"],"x-fern-type-name":"SparkImage","properties":{"type":{"description":"+value=spark-image","type":"string","enum":["spark-image"],"default":"spark-image","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.0.type","typeLabel":"enum\u003cstring>"},"spark_version":{"description":"Spark version should match the spark version installed in the image.","type":"string","default":"3.5.2","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.0.spark_version","typeLabel":"string"},"image_uri":{"description":"The image URI. Specify the name of the image and the tag.\nIf the image is in Dockerhub, you can skip registry-url (for e.g. `tensorflow/tensorflow`).\nYou can use an image from a private registry using Advanced fields","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.0.image_uri","typeLabel":"string"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.0.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.0","typeLabel":"SparkImage · object"},{"type":"object","title":"SparkImageBuild","description":"Describes that we are building a new image based on the spec","required":["type","build_source","build_spec"],"x-fern-type-name":"SparkImageBuild","properties":{"type":{"description":"+value=spark-image-build","type":"string","enum":["spark-image-build"],"default":"spark-image-build","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.type","typeLabel":"enum\u003cstring>"},"build_source":{"oneOf":[{"type":"object","title":"GitSource","description":"Describes that we are using code stored in a git repository to build our image","required":["type","repo_url","ref"],"x-fern-type-name":"GitSource","properties":{"type":{"description":"+value=git","type":"string","enum":["git"],"default":"git","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"repo_url":{"description":"The repository URL.","type":"string","pattern":"^(https?://)\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.0.repo_url","typeLabel":"string"},"ref":{"description":"The commit SHA.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.0.ref","typeLabel":"string"},"branch_name":{"description":"Selecting branch will select latest commit SHA of the branch.","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.0.branch_name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.0","typeLabel":"GitSource · object"},{"type":"object","title":"RemoteSource","description":"Describes that we are using code stored in a remote repository to build our image","required":["type","remote_uri"],"x-fern-type-name":"RemoteSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"remote_uri":{"description":"Remote repository URI","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.1.remote_uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source.oneOf.1","typeLabel":"RemoteSource · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_source","typeLabel":"GitSource · object | RemoteSource · object"},"build_spec":{"description":"Describes that we are using python to build a container image with a specific python version and pip packages installed.","type":"object","required":["type","spark_version","build_context_path"],"properties":{"type":{"description":"+value=tfy-spark-buildpack","type":"string","enum":["tfy-spark-buildpack"],"default":"tfy-spark-buildpack","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_spec.type","typeLabel":"enum\u003cstring>"},"spark_version":{"description":"Spark version should match the spark version installed in the image.","type":"string","default":"3.5.2","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_spec.spark_version","typeLabel":"string"},"build_context_path":{"description":"Build path relative to project root path.","type":"string","default":"./","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_spec.build_context_path","typeLabel":"string"},"requirements_path":{"description":"Path to `requirements.txt` relative to\n`Path to build context`","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_spec.requirements_path","typeLabel":"string"}},"title":"SparkBuild","x-fern-type-name":"SparkBuild","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.build_spec","typeLabel":"SparkBuild · object"},"docker_registry":{"description":"FQN of the container registry. If you can't find your registry here,\nadd it through the [Integrations](/integrations?tab=docker-registry) page","type":"string","pattern":"^\\S+$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1.docker_registry","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image.oneOf.1","typeLabel":"SparkImageBuild · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.image","typeLabel":"SparkImage · object | SparkImageBuild · object"},"entrypoint":{"oneOf":[{"type":"object","title":"SparkJobPythonEntrypoint","description":"python","required":["type","main_application_file"],"x-fern-type-name":"SparkJobPythonEntrypoint","properties":{"type":{"description":"+value=python","type":"string","enum":["python"],"default":"python","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.0.type","typeLabel":"enum\u003cstring>"},"main_application_file":{"description":"The main application file to be executed by the spark job. Relative path in case of git repository.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.0.main_application_file","typeLabel":"string"},"arguments":{"description":"Arguments to be passed to the main application file.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.0.arguments","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.0","typeLabel":"SparkJobPythonEntrypoint · object"},{"type":"object","title":"SparkJobScalaEntrypoint","description":"scala","required":["type","main_application_file","main_class"],"x-fern-type-name":"SparkJobScalaEntrypoint","properties":{"type":{"description":"+value=scala","type":"string","enum":["scala"],"default":"scala","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.1.type","typeLabel":"enum\u003cstring>"},"main_application_file":{"description":"The main application file to be executed by the spark job.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.1.main_application_file","typeLabel":"string"},"main_class":{"description":"The main class to be executed by the spark job.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.1.main_class","typeLabel":"string"},"arguments":{"description":"Arguments to be passed to the main application file.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.1.arguments","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.1","typeLabel":"SparkJobScalaEntrypoint · object"},{"type":"object","title":"SparkJobJavaEntrypoint","description":"java","required":["type","main_application_file","main_class"],"x-fern-type-name":"SparkJobJavaEntrypoint","properties":{"type":{"description":"+value=java","type":"string","enum":["java"],"default":"java","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.2.type","typeLabel":"enum\u003cstring>"},"main_application_file":{"description":"The main application file to be executed by the spark job.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.2.main_application_file","typeLabel":"string"},"main_class":{"description":"The main class to be executed by the spark job.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.2.main_class","typeLabel":"string"},"arguments":{"description":"Arguments to be passed to the main application file.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.2.arguments","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.2","typeLabel":"SparkJobJavaEntrypoint · object"},{"type":"object","title":"SparkJobPythonNotebookEntrypoint","description":"python notebook","required":["type","main_application_file"],"x-fern-type-name":"SparkJobPythonNotebookEntrypoint","properties":{"type":{"description":"+value=python-notebook","type":"string","enum":["python-notebook"],"default":"python-notebook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.3.type","typeLabel":"enum\u003cstring>"},"main_application_file":{"description":"The main application file to be executed by the spark job. Relative path in case of git repository.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.3.main_application_file","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.3","typeLabel":"SparkJobPythonNotebookEntrypoint · object"},{"type":"object","title":"SparkJobScalaNotebookEntrypoint","description":"scala notebook","required":["type","main_application_file"],"x-fern-type-name":"SparkJobScalaNotebookEntrypoint","properties":{"type":{"description":"+value=scala-notebook","type":"string","enum":["scala-notebook"],"default":"scala-notebook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.4.type","typeLabel":"enum\u003cstring>"},"main_application_file":{"description":"The main application file to be executed by the spark job. Relative path in case of git repository.","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.4.main_application_file","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint.oneOf.4","typeLabel":"SparkJobScalaNotebookEntrypoint · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.entrypoint","typeLabel":"SparkJobPythonEntrypoint · object | SparkJobScalaEntrypoint · object | SparkJobJavaEntrypoint · object | SparkJobPythonNotebookEntrypoint · object | SparkJobScalaNotebookEntrypoint · object"},"driver_config":{"type":"object","title":"SparkJobDriverConfig","description":"Driver Config","x-fern-type-name":"SparkJobDriverConfig","properties":{"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.resources","typeLabel":"Resources · object"},"kustomize":{"description":"Patch driver pod spec fields like tolerations, nodeSelector, affinity, etc.","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config.kustomize","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.driver_config","typeLabel":"SparkJobDriverConfig · object"},"executor_config":{"type":"object","title":"SparkJobExecutorConfig","description":"Executor Config","required":["instances"],"x-fern-type-name":"SparkJobExecutorConfig","properties":{"instances":{"oneOf":[{"type":"object","title":"SparkExecutorFixedInstances","description":"Fixed Instances","default":{"type":"fixed","count":1},"required":["type","count"],"x-fern-type-name":"SparkExecutorFixedInstances","properties":{"type":{"description":"+value=fixed","type":"string","enum":["fixed"],"default":"fixed","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Number of instances to start","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.0.count","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.0","typeLabel":"SparkExecutorFixedInstances · object"},{"type":"object","title":"SparkExecutorDynamicScaling","description":"Dynamic Scaling","default":{"type":"fixed","count":1},"required":["type","min","max"],"x-fern-type-name":"SparkExecutorDynamicScaling","properties":{"type":{"description":"+value=dynamic","type":"string","enum":["dynamic"],"default":"dynamic","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.1.type","typeLabel":"enum\u003cstring>"},"min":{"description":"Minimum number of instances to start / scale down to","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.1.min","typeLabel":"integer"},"max":{"description":"Maximum number of instances to scale up to","type":"integer","minimum":0,"maximum":500,"default":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.1.max","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances.oneOf.1","typeLabel":"SparkExecutorDynamicScaling · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.instances","typeLabel":"SparkExecutorFixedInstances · object | SparkExecutorDynamicScaling · object"},"resources":{"description":"Configure resource allocations, specify node constraints and capacity types to improve performance and reduce expenses. [Docs](https://www.truefoundry.com/docs/resources-cpu-memory-storage)","type":"object","required":["cpu_request","cpu_limit","memory_request","memory_limit","ephemeral_storage_request","ephemeral_storage_limit"],"properties":{"cpu_request":{"description":"Requested CPU which determines the minimum cost incurred. The CPU usage can exceed the requested\namount, but not the value specified in the limit. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5` or `0.05`","type":"number","minimum":0.001,"maximum":384,"default":0.2,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.cpu_request","typeLabel":"number"},"cpu_limit":{"description":"CPU limit beyond which the usage cannot be exceeded. 1 CPU means 1 CPU core. Fractional CPU can be requested\nlike `0.5`. CPU limit should be >= cpu request.","type":"number","minimum":0.001,"maximum":384,"default":0.5,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.cpu_limit","typeLabel":"number"},"memory_request":{"description":"Requested memory which determines the minimum cost incurred. The unit of memory is in megabytes(MB).\nSo 1 means 1 MB and 2000 means 2GB.","type":"integer","minimum":1,"maximum":4000000,"default":200,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.memory_request","typeLabel":"integer"},"memory_limit":{"description":"Memory limit after which the application will be killed with an OOM error. The unit of memory is\nin megabytes(MB). So 1 means 1 MB and 2000 means 2GB. MemoryLimit should be greater than memory request.","type":"integer","minimum":1,"maximum":4000000,"default":500,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.memory_limit","typeLabel":"integer"},"ephemeral_storage_request":{"description":"Requested disk storage. The unit of memory is in megabytes(MB).\nThis is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":1000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.ephemeral_storage_request","typeLabel":"integer"},"ephemeral_storage_limit":{"description":"Disk storage limit. The unit of memory is in megabytes(MB). Exceeding this limit will result in eviction.\nIt should be greater than the request. This is ephemeral storage and will be wiped out on pod restarts or eviction","type":"integer","minimum":1,"maximum":2000000,"default":2000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.ephemeral_storage_limit","typeLabel":"integer"},"shared_memory_size":{"description":"Define the shared memory requirements for your workload. Machine learning libraries like Pytorch can use Shared Memory\nfor inter-process communication. If you use this, we will mount a `tmpfs` backed volume at the `/dev/shm` directory.\nAny usage will also count against the workload's memory limit (`resources.memory_limit`) along with your workload's memory usage.\nIf the overall usage goes above `resources.memory_limit` the user process may get killed.\nShared Memory Size cannot be more than the defined Memory Limit for the workload.","type":"integer","minimum":64,"maximum":4000000,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.shared_memory_size","typeLabel":"integer"},"node":{"oneOf":[{"type":"object","title":"NodeSelector","description":"Constraints to select a Node - Specific GPU / Instance Families, On-Demand/Spot.","required":["type"],"x-fern-type-name":"NodeSelector","properties":{"type":{"description":"+value=node_selector","type":"string","enum":["node_selector"],"default":"node_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.0.type","typeLabel":"enum\u003cstring>"},"instance_families":{"description":"Instance family of the underlying machine to use. Multiple instance families can be supplied.\nThe workload is guaranteed to be scheduled on one of them.","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.0.instance_families.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.0.instance_families","typeLabel":"string[]"},"capacity_type":{"description":"Configure what type of nodes to run the app. By default no placement logic is applied.\n\"spot_fallback_on_demand\" will try to place the application on spot nodes but will fallback to on-demand when spot nodes are not available.\n\"spot\" will strictly place the application on spot nodes.\n\"on_demand\" will strictly place the application on on-demand nodes.","type":"string","enum":["spot_fallback_on_demand","spot","on_demand"],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.0.capacity_type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.0","typeLabel":"NodeSelector · object"},{"type":"object","title":"NodepoolSelector","description":"Specify one or more nodepools to run your application on.","required":["type"],"x-fern-type-name":"NodepoolSelector","properties":{"type":{"description":"+value=nodepool_selector","type":"string","enum":["nodepool_selector"],"default":"nodepool_selector","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.1.type","typeLabel":"enum\u003cstring>"},"nodepools":{"description":"Nodepools where you want to run your workload. Multiple nodepools can be selected.\n The workload is guaranteed to be scheduled on one of the nodepool","type":"array","items":{"type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.1.nodepools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.1.nodepools","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node.oneOf.1","typeLabel":"NodepoolSelector · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.node","typeLabel":"NodeSelector · object | NodepoolSelector · object"},"devices":{"description":"Define custom device or accelerator requirements for your workload. We currently support NVIDIA GPUs, AWS Inferentia Accelerators, Single Host TPU Slices.","type":"array","items":{"oneOf":[{"type":"object","title":"NvidiaGPU","required":["type","count"],"x-fern-type-name":"NvidiaGPU","properties":{"type":{"description":"+value=nvidia_gpu","type":"string","enum":["nvidia_gpu"],"default":"nvidia_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of GPUs to provide to the application\nNote the exact count and max count available for a given GPU type depends on cloud provider and cluster type.","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.0.count","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.0","typeLabel":"NvidiaGPU · object"},{"type":"object","title":"AWSInferentia","required":["type","count"],"x-fern-type-name":"AWSInferentia","properties":{"type":{"description":"+value=aws_inferentia","type":"string","enum":["aws_inferentia"],"default":"aws_inferentia","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"count":{"description":"Count of Inferentia accelerator chips to provide to the application","type":"integer","minimum":1,"maximum":16,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.1.count","typeLabel":"integer"},"name":{"description":"Name of the AWS Inferentia Accccelerator. One of [INF1, INF2].\nThis field is required for Node Selector and can be ignored in Nodepool Selector.","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.1.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.1","typeLabel":"AWSInferentia · object"},{"type":"object","title":"NvidiaMIGGPU","required":["type","profile"],"x-fern-type-name":"NvidiaMIGGPU","properties":{"type":{"description":"+value=nvidia_mig_gpu","type":"string","enum":["nvidia_mig_gpu"],"default":"nvidia_mig_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"profile":{"description":"Name of the MIG profile to use. One of the following based on gpu type\nPlease refer to https://docs.nvidia.com/datacenter/tesla/mig-user-guide/#supported-mig-profiles for more details\nA30 - [1g.6gb, 2g.12gb, 4g.24gb]\nA100 40 GB - [1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, 7g.40gb]\nA100 80 GB / H100 80 GB - [1g.10gb, 1g.20gb, 2g.20gb, 3g.40gb, 4g.40gb, 7g.80gb]\nH100 94 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.47gb, 4g.47gb, 7g.94gb]\nH100 96 GB - [1g.12gb, 1g.24gb, 2g.24gb, 3g.48gb, 4g.48gb, 7g.96gb]\nH200 141 GB - [1g.18gb, 1g.35gb, 2g.35gb, 3g.71gb, 4g.71gb, 7g.141gb]\nB200 180 GB - [1g.23gb, 1g.45gb, 2g.45gb, 3g.90gb, 4g.90gb, 7g.180gb]\nRTX PRO 6000 96 GB - [1g.24gb, 2g.48gb, 4g.96gb]\nRTX PRO 4500 32 GB - [1g.16gb, 2g.32gb]","type":"string","enum":["1g.6gb","2g.12gb","1g.5gb","1g.10gb","2g.10gb","3g.20gb","4g.20gb","1g.20gb","2g.20gb","3g.40gb","4g.40gb","1g.12gb","1g.24gb","2g.24gb","3g.47gb","4g.47gb","3g.48gb","4g.48gb","2g.48gb","4g.96gb","1g.16gb","2g.32gb","1g.18gb","1g.35gb","2g.35gb","3g.71gb","4g.71gb","1g.23gb","1g.45gb","2g.45gb","3g.90gb","4g.90gb","4g.24gb","7g.40gb","7g.80gb","7g.94gb","7g.96gb","7g.141gb","7g.180gb"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.2.profile","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.2.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.2","typeLabel":"NvidiaMIGGPU · object"},{"type":"object","title":"NvidiaTimeslicingGPU","required":["type","gpu_memory"],"x-fern-type-name":"NvidiaTimeslicingGPU","properties":{"type":{"description":"+value=nvidia_timeslicing_gpu","type":"string","enum":["nvidia_timeslicing_gpu"],"default":"nvidia_timeslicing_gpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"gpu_memory":{"description":"Amount of GPU memory (in MB) to allocate. Please note, this limit is not being enforced today but will be in future. Applications are expected to operate in co-opertative mode","type":"integer","minimum":1,"maximum":400000,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.3.gpu_memory","typeLabel":"integer"},"name":{"description":"Name of the Nvidia GPU. One of [P4, P100, V100, T4, A10G, A100_40GB, A100_80GB]\nThis field is required for Node Selector and can be ignored in Nodepool Selector.\nOne instance of the card contains the following amount of memory -\nP4: 8 GB, P100: 16 GB, V100: 16 GB, T4: 16 GB, A10G: 24 GB, A100_40GB: 40GB, A100_80GB: 80 GB","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.3.name","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.3","typeLabel":"NvidiaTimeslicingGPU · object"},{"type":"object","title":"GcpTPU","required":["type","name","topology"],"x-fern-type-name":"GcpTPU","properties":{"type":{"description":"+value=gcp_tpu","type":"string","enum":["gcp_tpu"],"default":"gcp_tpu","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the TPU Type. One of\n - `tpu-v4-podslice` (TPU v4, ct4p)\n - `tpu-v5-lite-device` (TPU v5e, ct5l)\n - `tpu-v5-lite-podslice` (TPU v5e, ct5lp)\n - `tpu-v5p-slice` (TPU v5p, ct5p)","type":"string","pattern":"^tpu-[a-z\\d\\-]+$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.4.name","typeLabel":"string"},"topology":{"description":"Topology of the TPU slices. Currently only single-host topology is supported.\n Please refer to [TPUs on GKE docs](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus#plan-tpu-configuration)\n Allowed Values:\n - `2x2x1` for `tpu-v4-podslice`\n - One of `1x1`, `2x2`, `2x4` for `tpu-v5-lite-device` and `tpu-v5-lite-podslice`\n - `2x2x1` for `tpu-v5p-slice`","type":"string","pattern":"^\\d+x\\d+(x\\d+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.4.topology","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX].oneOf.4","typeLabel":"GcpTPU · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices.items.[INDEX]","typeLabel":"NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources.devices","typeLabel":"(NvidiaGPU · object | AWSInferentia · object | NvidiaMIGGPU · object | NvidiaTimeslicingGPU · object | GcpTPU · object)[]"}},"title":"Resources","x-fern-type-name":"Resources","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.resources","typeLabel":"Resources · object"},"kustomize":{"description":"Patch executor pod spec fields like tolerations, nodeSelector, affinity, etc.","type":"object","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config.kustomize","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.executor_config","typeLabel":"SparkJobExecutorConfig · object"},"trigger":{"oneOf":[{"type":"object","title":"Manual","description":"Trigger the job manually. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type"],"x-fern-type-name":"Manual","properties":{"type":{"description":"+value=manual","type":"string","enum":["manual"],"default":"manual","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.0.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.0","typeLabel":"Manual · object"},{"type":"object","title":"Schedule","description":"Run the job on a schedule. [Docs](https://docs.truefoundry.com/docs/deploy-a-cron-job)","default":{"type":"manual"},"required":["type","schedule","concurrency_policy"],"x-fern-type-name":"Schedule","properties":{"type":{"description":"+value=scheduled","type":"string","enum":["scheduled"],"default":"scheduled","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.1.type","typeLabel":"enum\u003cstring>"},"schedule":{"description":"Specify the schedule for this job to be run periodically in cron format.\n```\n* * * * *\n| | | | |\n| | | | |___ day of week (0-6) (Sunday is 0)\n| | | |_____ month (1-12)\n| | |_______ day of month (1-31)\n| |_________ hour (0-23)\n|___________ minute (0-59)\n```","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.1.schedule","typeLabel":"string"},"concurrency_policy":{"description":"Choose whether to allow this job to run while another instance of the job is running, or to replace the currently running instance. Allow\nwill enable multiple instances of this job to run. Forbid will keep the current instance of the job running and stop a new instance from being run.\nReplace will terminate any currently running instance of the job and start a new one.","type":"string","enum":["Forbid","Allow","Replace"],"default":"Forbid","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.1.concurrency_policy","typeLabel":"enum\u003cstring>"},"timezone":{"description":"Timezone against which the cron schedule will be calculated, e.g. \"Asia/Tokyo\". Default is machine's local time.\nhttps://docs.truefoundry.com/docs/list-of-supported-timezones","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.1.timezone","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger.oneOf.1","typeLabel":"Schedule · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.trigger","typeLabel":"Manual · object | Schedule · object"},"env":{"oneOf":[{"description":"Configure environment variables to be injected in the service either as plain text. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"object","default":null,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.env.oneOf.0","typeLabel":"object"},{"description":"Configure environment variables to be injected in the service either as plain text. [Docs](https://docs.truefoundry.com/docs/env-variables)","type":"null","default":null,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.env.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.env","typeLabel":"object | null"},"spark_conf":{"oneOf":[{"description":"Extra configuration properties to be passed to the spark job. [Docs](https://spark.apache.org/docs/latest/configuration.html)","type":"object","default":null,"additionalProperties":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.spark_conf.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.spark_conf.oneOf.0","typeLabel":"object"},{"description":"Extra configuration properties to be passed to the spark job. [Docs](https://spark.apache.org/docs/latest/configuration.html)","type":"null","default":null,"additionalProperties":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.spark_conf.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.spark_conf.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.spark_conf","typeLabel":"object | null"},"mounts":{"description":"Configure volumes to be mounted to driver and executors. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)","type":"array","items":{"type":"object","required":["type","mount_path","volume_fqn"],"properties":{"type":{"description":"+value=volume","type":"string","enum":["volume"],"default":"volume","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"mount_path":{"description":"Absolute file path where the volume will be mounted.","type":"string","pattern":"^\\/(?:[^/\\n]+\\/*)*[^/\\n]+(\\.[^/\\n]+)?$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts.items.[INDEX].mount_path","typeLabel":"string"},"volume_fqn":{"description":"The TrueFoundry volume or namespace-scoped Kubernetes PVC that needs to be mounted.","type":"string","pattern":"^(tfy-volume:\\/\\/.+:.+:.+|tfy-k8s-volume:\\/\\/.+)$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts.items.[INDEX].volume_fqn","typeLabel":"string"},"sub_path":{"description":"Sub path within the volume to mount. Defaults to root of the volume.","type":"string","pattern":"^(?:[^/\\n]+/*)*[^/\\n]+(\\.[^/\\n]+)?$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts.items.[INDEX].sub_path","typeLabel":"string"}},"title":"VolumeMount","x-fern-type-name":"VolumeMount","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts.items.[INDEX]","typeLabel":"VolumeMount · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.mounts","typeLabel":"VolumeMount · object[]"},"retries":{"description":"Specify the maximum number of attempts to retry a job before it is marked as failed.","type":"integer","minimum":0,"maximum":10,"default":0,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.retries","typeLabel":"integer"},"service_account":{"description":"Service Account","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.service_account","typeLabel":"string"},"alerts":{"description":"Configure alerts to be sent when the spark job starts/fails/completes","type":"array","items":{"description":"Describes the configuration for the job alerts","type":"object","properties":{"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].to_emails.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].to_emails","typeLabel":"string[]"},"notification_target":{"oneOf":[{"type":"object","title":"Email","description":"Email","required":["type","notification_channel","to_emails"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=email","type":"string","enum":["email"],"default":"email","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.0.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.0.notification_channel","typeLabel":"string"},"to_emails":{"description":"List of recipients' email addresses if the notification channel is Email.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.0.to_emails.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.0.to_emails","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.0","typeLabel":"Email · object"},{"type":"object","title":"SlackWebhook","description":"Slack Webhook","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-webhook","type":"string","enum":["slack-webhook"],"default":"slack-webhook","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.1.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.1.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.1","typeLabel":"SlackWebhook · object"},{"type":"object","title":"SlackBot","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel","channels"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=slack-bot","type":"string","enum":["slack-bot"],"default":"slack-bot","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.2.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.2.notification_channel","typeLabel":"string"},"channels":{"description":"List of channels to send messages to.","type":"array","items":{"type":"string","pattern":"^#?[a-z0-9\\-_]{2,80}$","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.2.channels.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.2.channels","typeLabel":"string[]"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.2","typeLabel":"SlackBot · object"},{"type":"object","title":"PagerDuty","description":"Service, job, workflow, and cluster deployment alerts. Teams is not supported on these alerts.\n+discriminator=type","required":["type","notification_channel"],"x-fern-type-name":"NotificationTargetForAlertRule","properties":{"type":{"description":"+value=pagerduty","type":"string","enum":["pagerduty"],"default":"pagerduty","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.3.type","typeLabel":"enum\u003cstring>"},"notification_channel":{"description":"Specify the notification channel to send alerts to","type":"string","minLength":1,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.3.notification_channel","typeLabel":"string"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target.oneOf.3","typeLabel":"PagerDuty · object"}],"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].notification_target","typeLabel":"Email · object | SlackWebhook · object | SlackBot · object | PagerDuty · object"},"on_start":{"description":"Send an alert when the job starts","type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].on_start","typeLabel":"boolean"},"on_completion":{"type":"boolean","default":false,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].on_completion","typeLabel":"boolean"},"on_failure":{"description":"Send an alert when the job fails","type":"boolean","default":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX].on_failure","typeLabel":"boolean"}},"title":"JobAlert","x-fern-type-name":"JobAlert","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts.items.[INDEX]","typeLabel":"JobAlert · object"},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.alerts","typeLabel":"JobAlert · object[]"},"workspace_fqn":{"description":"Fully qualified name of the workspace","type":"string","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11.workspace_fqn","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.11","typeLabel":"SparkJob · object"},{"type":"object","title":"Intercept","description":"Deployment manifest defining the application configuration.","required":["type","name","rules"],"x-fern-type-name":"Intercept","properties":{"type":{"description":"+value=intercept","type":"string","enum":["intercept"],"default":"intercept","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Name of the service this intercept is for","type":"string","pattern":"^[a-z](?:[a-z0-9]|-(?!-)){1,30}[a-z0-9]$","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.name","typeLabel":"string"},"rules":{"type":"array","items":{"type":"object","required":["port","action"],"properties":{"port":{"description":"Port of service to be intercepted","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].port","typeLabel":"integer"},"action":{"oneOf":[{"type":"object","title":"ForwardAction","description":"Action to take on succesful match","required":["type","service_uri","port"],"x-fern-type-name":"ForwardAction","properties":{"type":{"description":"+value=forward","type":"string","enum":["forward"],"default":"forward","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.0.type","typeLabel":"enum\u003cstring>"},"service_uri":{"description":"Service uri to redirect to. This is the kubernetes fully qualified domain name that the target service can be reached on\nEg - For a service called `sample-service` in workspace `ws` this would be `sample-service.ws.svc.cluster.local","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.0.service_uri","typeLabel":"string"},"port":{"description":"Port to redirect the service traffic to","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.0.port","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.0","typeLabel":"ForwardAction · object"},{"type":"object","title":"MirrorAction","description":"Action to take on succesful match","required":["type","service_uri","port","percentage"],"x-fern-type-name":"MirrorAction","properties":{"type":{"description":"+value=mirror","type":"string","enum":["mirror"],"default":"mirror","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.1.type","typeLabel":"enum\u003cstring>"},"service_uri":{"description":"Service uri to mirror to. This is the kubernetes fully qualified domain name that the target service can be reached on\nEg - For a service called `sample-service` in workspace `ws` this would be `sample-service.ws.svc.cluster.local","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.1.service_uri","typeLabel":"string"},"port":{"description":"Port to redirect the service traffic to","type":"integer","minimum":0,"maximum":65535,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.1.port","typeLabel":"integer"},"percentage":{"description":"Percentage of requests to mirror","type":"integer","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.1.percentage","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action.oneOf.1","typeLabel":"MirrorAction · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].action","typeLabel":"ForwardAction · object | MirrorAction · object"},"match":{"type":"object","required":["type","name","exact_match"],"properties":{"type":{"description":"+value=header","type":"string","enum":["header"],"default":"header","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].match.type","typeLabel":"enum\u003cstring>"},"name":{"description":"Header name to match on","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].match.name","typeLabel":"string"},"exact_match":{"description":"Header value to match on","type":"string","default":"","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].match.exact_match","typeLabel":"string"}},"title":"HeaderMatch","x-fern-type-name":"HeaderMatch","uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX].match","typeLabel":"HeaderMatch · object"}},"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12.rules","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest.oneOf.12","typeLabel":"Intercept · object"}],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.manifest","typeLabel":"Service · object | AsyncService · object | Job · object | Notebook · object | Codeserver · object | SSHServer · object | RStudio · object | Helm · object | Volume · object | ApplicationSet · object | Workflow · object | SparkJob · object | Intercept · object"},"createdBySubject":{"type":"object","title":"Subject","description":"Subject (user or service account) that created this deployment","required":["subjectId","subjectType"],"x-fern-type-name":"Subject","properties":{"subjectId":{"type":"string","description":"Subject ID","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectId","typeLabel":"string"},"subjectType":{"type":"string","description":"Subject type","enum":["user","team","serviceaccount","virtualaccount","agent-identity","agent","agent-channel-identity","role"],"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectType","typeLabel":"enum\u003cstring>"},"subjectSlug":{"oneOf":[{"type":"string","description":"Subject slug","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectSlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject slug","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectSlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectSlug","typeLabel":"string | null"},"subjectDisplayName":{"oneOf":[{"type":"string","description":"Subject display name","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectDisplayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject display name","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectDisplayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectDisplayName","typeLabel":"string | null"},"subjectPatName":{"oneOf":[{"type":"string","description":"Subject PAT name","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectPatName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject PAT name","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectPatName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectPatName","typeLabel":"string | null"},"subjectControllerName":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectControllerName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectControllerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectControllerName","typeLabel":"string | null"},"subjectExternalIdentitySlug":{"oneOf":[{"type":"string","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectExternalIdentitySlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectExternalIdentitySlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBySubject.subjectExternalIdentitySlug","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.createdBySubject","typeLabel":"Subject · object"},"id":{"oneOf":[{"type":"string","description":"Unique identifier of the deployment","uniqueKey":"data.deployment.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the deployment","uniqueKey":"data.deployment.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.id","typeLabel":"string | null"},"version":{"oneOf":[{"type":"number","description":"Incremental version number within the application","uniqueKey":"data.deployment.oneOf.0.version.oneOf.0","typeLabel":"number"},{"type":"null","description":"Incremental version number within the application","uniqueKey":"data.deployment.oneOf.0.version.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.version","typeLabel":"number | null"},"fqn":{"oneOf":[{"type":"string","description":"FQN of the deployment","uniqueKey":"data.deployment.oneOf.0.fqn.oneOf.0","typeLabel":"string"},{"type":"null","description":"FQN of the deployment","uniqueKey":"data.deployment.oneOf.0.fqn.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.fqn","typeLabel":"string | null"},"applicationId":{"oneOf":[{"type":"string","description":"Unique identifier of the application this deployment belongs to","uniqueKey":"data.deployment.oneOf.0.applicationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the application this deployment belongs to","uniqueKey":"data.deployment.oneOf.0.applicationId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.applicationId","typeLabel":"string | null"},"application":{"oneOf":[{"type":"object","title":"ApplicationSummary","description":"Summary of the parent application (included when requested)","required":["lifecycleStage"],"x-fern-type-name":"ApplicationSummary","properties":{"lifecycleStage":{"type":"string","title":"ApplicationLifecycleStage","description":"Current lifecycle stage of the application","enum":["active","deleting","deletion_failed"],"x-fern-type-name":"ApplicationLifecycleStage","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.lifecycleStage","typeLabel":"enum\u003cstring>"},"id":{"oneOf":[{"type":"string","description":"Unique identifier of the application","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the application","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.id","typeLabel":"string | null"},"fqn":{"oneOf":[{"type":"string","description":"FQN of the application","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.fqn.oneOf.0","typeLabel":"string"},{"type":"null","description":"FQN of the application","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.fqn.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.fqn","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Human-readable application name","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable application name","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.name","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","title":"ApplicationType","description":"Type of the application","enum":["async-service","service","job","spark-job","helm","notebook","spark-notebook","codeserver","rstudio","ssh-server","volume","application","application-set","intercept","workflow"],"x-fern-type-name":"ApplicationType","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.type","typeLabel":"enum\u003cstring> | null"},"metadata":{"oneOf":[{"type":"object","title":"ApplicationMetadata","description":"Application metadata including pause state and sync info","x-fern-type-name":"ApplicationMetadata","properties":{"paused":{"oneOf":[{"type":"boolean","description":"Explicit pause state. true = user has paused the app (all pods removed). false = user has explicitly resumed the app. null/undefined = user has never toggled pause; the app is managed normally, but autoshutdown may have scaled it to zero pods due to inactivity.","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata.oneOf.0.paused.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Explicit pause state. true = user has paused the app (all pods removed). false = user has explicitly resumed the app. null/undefined = user has never toggled pause; the app is managed normally, but autoshutdown may have scaled it to zero pods due to inactivity.","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata.oneOf.0.paused.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata.oneOf.0.paused","typeLabel":"boolean | null"}},"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata.oneOf.0","typeLabel":"ApplicationMetadata · object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.metadata","typeLabel":"ApplicationMetadata · object | null"},"workspaceId":{"oneOf":[{"type":"string","description":"Unique identifier of the workspace this application belongs to","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.workspaceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the workspace this application belongs to","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.workspaceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.workspaceId","typeLabel":"string | null"},"activeVersion":{"oneOf":[{"type":"integer","description":"Version number of the currently active deployment","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.activeVersion.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Version number of the currently active deployment","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.activeVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.activeVersion","typeLabel":"integer | null"},"applicationSetId":{"oneOf":[{"type":"string","description":"Unique identifier of the application set this application belongs to, if any","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.applicationSetId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the application set this application belongs to, if any","uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.applicationSetId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0.applicationSetId","typeLabel":"string | null"}},"uniqueKey":"data.deployment.oneOf.0.application.oneOf.0","typeLabel":"ApplicationSummary · object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.application.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.application","typeLabel":"ApplicationSummary · object | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the deployment was created","uniqueKey":"data.deployment.oneOf.0.createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"Timestamp when the deployment was created","uniqueKey":"data.deployment.oneOf.0.createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the deployment was last updated","uniqueKey":"data.deployment.oneOf.0.updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"Timestamp when the deployment was last updated","uniqueKey":"data.deployment.oneOf.0.updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.updatedAt","typeLabel":"string\u003cdate-time> | null"},"deploymentBuilds":{"oneOf":[{"description":"Builds associated with this deployment, one per component built from source","type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the deployment build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","description":"System-generated unique identifier for the deployment build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"deploymentId":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the deployment this build belongs to.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].deploymentId.oneOf.0","typeLabel":"string"},{"type":"null","description":"System-generated unique identifier for the deployment this build belongs to.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].deploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].deploymentId","typeLabel":"string | null"},"componentName":{"oneOf":[{"type":"string","description":"Human-readable name of the application component this build produces an image for.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].componentName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable name of the application component this build produces an image for.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].componentName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].componentName","typeLabel":"string | null"},"build":{"oneOf":[{"type":"object","title":"BuildInfo","description":"Underlying build record.","required":["name","status"],"x-fern-type-name":"BuildInfo","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].build.oneOf.0.name","typeLabel":"string"},"status":{"type":"number","enum":[20,30,40],"description":"\n Status of the build:\n STARTED = 20,\n SUCCEEDED = 30,\n FAILED = 40\n ","example":20,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].build.oneOf.0.status","typeLabel":"enum\u003cnumber>"}},"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].build.oneOf.0","typeLabel":"BuildInfo · object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].build.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].build","typeLabel":"BuildInfo · object | null"},"buildId":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].buildId.oneOf.0","typeLabel":"string"},{"type":"null","description":"System-generated unique identifier for the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].buildId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].buildId","typeLabel":"string | null"},"imageUri":{"oneOf":[{"type":"string","description":"Fully-qualified URI of the image produced by this build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].imageUri.oneOf.0","typeLabel":"string"},{"type":"null","description":"Fully-qualified URI of the image produced by this build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].imageUri.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].imageUri","typeLabel":"string | null"},"name":{"oneOf":[{"type":"string","description":"Human-readable name of the build, accepted as the `pipelineRunName` by the build logs API.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable name of the build, accepted as the `pipelineRunName` by the build logs API.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"status":{"oneOf":[{"type":"string","enum":["STARTED","SUCCEEDED","FAILED"],"description":"Current status of the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["STARTED","SUCCEEDED","FAILED"],"description":"Current status of the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].status.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].status","typeLabel":"enum\u003cstring> | null"},"getLogsUrl":{"oneOf":[{"type":"string","description":"URL for fetching this build’s logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].getLogsUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL for fetching this build’s logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].getLogsUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].getLogsUrl","typeLabel":"string | null"},"tailLogsUrl":{"oneOf":[{"type":"string","description":"JSON-encoded connection details for streaming this build’s logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].tailLogsUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON-encoded connection details for streaming this build’s logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].tailLogsUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].tailLogsUrl","typeLabel":"string | null"},"logsStartTs":{"oneOf":[{"type":"string","description":"Timestamp the build started, in nanoseconds. Pass as `startTs` when fetching build logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].logsStartTs.oneOf.0","typeLabel":"string"},{"type":"null","description":"Timestamp the build started, in nanoseconds. Pass as `startTs` when fetching build logs.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].logsStartTs.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].logsStartTs","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","description":"Additional metadata recorded against the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].metadata.oneOf.0","typeLabel":"object"},{"type":"null","description":"Additional metadata recorded against the build.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].metadata","typeLabel":"object | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the build was created.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"Timestamp when the build was created.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the build was last updated.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"Timestamp when the build was last updated.","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time> | null"}},"title":"DeploymentBuild","x-fern-type-name":"DeploymentBuild","uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0.items.[INDEX]","typeLabel":"DeploymentBuild · object"},"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.0","typeLabel":"DeploymentBuild · object[]"},{"description":"Builds associated with this deployment, one per component built from source","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the deployment build."},{"type":"null","description":"System-generated unique identifier for the deployment build."}]},"deploymentId":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the deployment this build belongs to."},{"type":"null","description":"System-generated unique identifier for the deployment this build belongs to."}]},"componentName":{"oneOf":[{"type":"string","description":"Human-readable name of the application component this build produces an image for."},{"type":"null","description":"Human-readable name of the application component this build produces an image for."}]},"build":{"oneOf":[{"type":"object","title":"BuildInfo","description":"Underlying build record.","required":["name","status"],"x-fern-type-name":"BuildInfo","properties":{"name":{"type":"string"},"status":{"type":"number","enum":[20,30,40],"description":"\n Status of the build:\n STARTED = 20,\n SUCCEEDED = 30,\n FAILED = 40\n ","example":20}}},{"type":"null"}]},"buildId":{"oneOf":[{"type":"string","description":"System-generated unique identifier for the build."},{"type":"null","description":"System-generated unique identifier for the build."}]},"imageUri":{"oneOf":[{"type":"string","description":"Fully-qualified URI of the image produced by this build."},{"type":"null","description":"Fully-qualified URI of the image produced by this build."}]},"name":{"oneOf":[{"type":"string","description":"Human-readable name of the build, accepted as the `pipelineRunName` by the build logs API."},{"type":"null","description":"Human-readable name of the build, accepted as the `pipelineRunName` by the build logs API."}]},"status":{"oneOf":[{"type":"string","enum":["STARTED","SUCCEEDED","FAILED"],"description":"Current status of the build."},{"type":"null","enum":["STARTED","SUCCEEDED","FAILED"],"description":"Current status of the build."}]},"getLogsUrl":{"oneOf":[{"type":"string","description":"URL for fetching this build’s logs."},{"type":"null","description":"URL for fetching this build’s logs."}]},"tailLogsUrl":{"oneOf":[{"type":"string","description":"JSON-encoded connection details for streaming this build’s logs."},{"type":"null","description":"JSON-encoded connection details for streaming this build’s logs."}]},"logsStartTs":{"oneOf":[{"type":"string","description":"Timestamp the build started, in nanoseconds. Pass as `startTs` when fetching build logs."},{"type":"null","description":"Timestamp the build started, in nanoseconds. Pass as `startTs` when fetching build logs."}]},"metadata":{"oneOf":[{"type":"object","description":"Additional metadata recorded against the build."},{"type":"null","description":"Additional metadata recorded against the build."}]},"createdAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the build was created."},{"format":"date-time","type":"null","description":"Timestamp when the build was created."}]},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","description":"Timestamp when the build was last updated."},{"format":"date-time","type":"null","description":"Timestamp when the build was last updated."}]}},"title":"DeploymentBuild","x-fern-type-name":"DeploymentBuild"},"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentBuilds","typeLabel":"DeploymentBuild · object[] | null"},"deploymentStatuses":{"oneOf":[{"description":"Full history of deployment status transitions","type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"deploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].deploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].deploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].deploymentId","typeLabel":"string | null"},"status":{"oneOf":[{"type":"string","title":"DeploymentStatusValue","enum":["INITIALIZED","BUILD_SUCCESS","BUILD_FAILED","DEPLOY_FAILED","DEPLOY_FAILED_WITH_RETRY","DEPLOY_SUCCESS","ROLLOUT_STARTED","SET_TRAFFIC","PAUSED","FAILED","CANCELLED","REDEPLOY_STARTED","BUILDING"],"x-fern-type-name":"DeploymentStatusValue","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].status.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].status","typeLabel":"enum\u003cstring> | null"},"state":{"oneOf":[{"type":"object","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].state.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].state.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].state","typeLabel":"object | null"},"transition":{"oneOf":[{"type":"string","title":"DeploymentTransition","enum":["BUILDING","DEPLOYING","REUSING_EXISTING_BUILD","COMPONENTS_DEPLOYING","WAITING",""],"x-fern-type-name":"DeploymentTransition","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].transition.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].transition.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].transition","typeLabel":"enum\u003cstring> | null"},"message":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].message","typeLabel":"string | null"},"retryCount":{"oneOf":[{"type":"number","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].retryCount.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].retryCount","typeLabel":"number | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time> | null"}},"title":"DeploymentStatus","x-fern-type-name":"DeploymentStatus","uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0.items.[INDEX]","typeLabel":"DeploymentStatus · object"},"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.0","typeLabel":"DeploymentStatus · object[]"},{"description":"Full history of deployment status transitions","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"deploymentId":{"oneOf":[{"type":"string"},{"type":"null"}]},"status":{"oneOf":[{"type":"string","title":"DeploymentStatusValue","enum":["INITIALIZED","BUILD_SUCCESS","BUILD_FAILED","DEPLOY_FAILED","DEPLOY_FAILED_WITH_RETRY","DEPLOY_SUCCESS","ROLLOUT_STARTED","SET_TRAFFIC","PAUSED","FAILED","CANCELLED","REDEPLOY_STARTED","BUILDING"],"x-fern-type-name":"DeploymentStatusValue"},{"type":"null"}]},"state":{"oneOf":[{"type":"object"},{"type":"null"}]},"transition":{"oneOf":[{"type":"string","title":"DeploymentTransition","enum":["BUILDING","DEPLOYING","REUSING_EXISTING_BUILD","COMPONENTS_DEPLOYING","WAITING",""],"x-fern-type-name":"DeploymentTransition"},{"type":"null"}]},"message":{"oneOf":[{"type":"string"},{"type":"null"}]},"retryCount":{"oneOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]},"updatedAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]}},"title":"DeploymentStatus","x-fern-type-name":"DeploymentStatus"},"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.deploymentStatuses","typeLabel":"DeploymentStatus · object[] | null"},"currentStatusId":{"oneOf":[{"type":"string","description":"Unique identifier of the current deployment status record","uniqueKey":"data.deployment.oneOf.0.currentStatusId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Unique identifier of the current deployment status record","uniqueKey":"data.deployment.oneOf.0.currentStatusId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatusId","typeLabel":"string | null"},"currentStatus":{"oneOf":[{"type":"object","title":"DeploymentStatus","description":"Current deployment status object.","x-fern-type-name":"DeploymentStatus","properties":{"id":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.id","typeLabel":"string | null"},"deploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.deploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.deploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.deploymentId","typeLabel":"string | null"},"status":{"oneOf":[{"type":"string","title":"DeploymentStatusValue","enum":["INITIALIZED","BUILD_SUCCESS","BUILD_FAILED","DEPLOY_FAILED","DEPLOY_FAILED_WITH_RETRY","DEPLOY_SUCCESS","ROLLOUT_STARTED","SET_TRAFFIC","PAUSED","FAILED","CANCELLED","REDEPLOY_STARTED","BUILDING"],"x-fern-type-name":"DeploymentStatusValue","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.status.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.status","typeLabel":"enum\u003cstring> | null"},"state":{"oneOf":[{"type":"object","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.state.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.state","typeLabel":"object | null"},"transition":{"oneOf":[{"type":"string","title":"DeploymentTransition","enum":["BUILDING","DEPLOYING","REUSING_EXISTING_BUILD","COMPONENTS_DEPLOYING","WAITING",""],"x-fern-type-name":"DeploymentTransition","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.transition.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.transition.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.transition","typeLabel":"enum\u003cstring> | null"},"message":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.message.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.message.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.message","typeLabel":"string | null"},"retryCount":{"oneOf":[{"type":"number","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.retryCount.oneOf.0","typeLabel":"number"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.retryCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.retryCount","typeLabel":"number | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0.updatedAt","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.0","typeLabel":"DeploymentStatus · object"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.currentStatus.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.currentStatus","typeLabel":"DeploymentStatus · object | null"},"appliedRecommendations":{"oneOf":[{"description":"Applied recommendations for this deployment","type":"array","items":{"type":"object","properties":{"recommendationData":{"type":"object","additionalProperties":true,"isRequired":true,"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].recommendationData","typeLabel":"object"},"recommendationType":{"type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].recommendationType","typeLabel":"string"},"expiryTimestamp":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].expiryTimestamp","typeLabel":"string\u003cdate-time>"},"id":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].id","typeLabel":"string | null"},"clusterId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].clusterId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].clusterId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].clusterId","typeLabel":"string | null"},"applicationId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationId","typeLabel":"string | null"},"deploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].deploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].deploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].deploymentId","typeLabel":"string | null"},"applicationVersion":{"oneOf":[{"type":"integer","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationVersion.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationVersion.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].applicationVersion","typeLabel":"integer | null"},"appliedDeploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].appliedDeploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].appliedDeploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].appliedDeploymentId","typeLabel":"string | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time> | null"}},"required":["recommendationData","recommendationType","expiryTimestamp"],"title":"Recommendation","x-fern-type-name":"Recommendation","uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0.items.[INDEX]","typeLabel":"Recommendation · object"},"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.0","typeLabel":"Recommendation · object[]"},{"description":"Applied recommendations for this deployment","type":"null","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"clusterId":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationId":{"oneOf":[{"type":"string"},{"type":"null"}]},"deploymentId":{"oneOf":[{"type":"string"},{"type":"null"}]},"applicationVersion":{"oneOf":[{"type":"integer"},{"type":"null"}]},"recommendationData":{"type":"object","additionalProperties":true},"recommendationType":{"type":"string"},"appliedDeploymentId":{"oneOf":[{"type":"string"},{"type":"null"}]},"expiryTimestamp":{"format":"date-time","type":"string"},"createdAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]},"updatedAt":{"oneOf":[{"format":"date-time","type":"string"},{"format":"date-time","type":"null"}]}},"required":["recommendationData","recommendationType","expiryTimestamp"],"title":"Recommendation","x-fern-type-name":"Recommendation"},"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.appliedRecommendations","typeLabel":"Recommendation · object[] | null"},"createdBy":{"oneOf":[{"type":"string","description":"Slug of the subject that created this deployment","uniqueKey":"data.deployment.oneOf.0.createdBy.oneOf.0","typeLabel":"string"},{"type":"null","description":"Slug of the subject that created this deployment","uniqueKey":"data.deployment.oneOf.0.createdBy.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment.oneOf.0.createdBy","typeLabel":"string | null"}},"uniqueKey":"data.deployment.oneOf.0","typeLabel":"Deployment · object"},{"type":"null","uniqueKey":"data.deployment.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.deployment","typeLabel":"Deployment · object | null"},"activeDeploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.activeDeploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.activeDeploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.activeDeploymentId","typeLabel":"string | null"},"lastDeploymentId":{"oneOf":[{"type":"string","uniqueKey":"data.lastDeploymentId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.lastDeploymentId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.lastDeploymentId","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data","typeLabel":"Application · object"}},"required":["data"],"title":"GetApplicationResponse","x-fern-type-name":"GetApplicationResponse","uniqueKey":"","typeLabel":"GetApplicationResponse · object"},"examples":{"Example":{"title":"Example","value":{"data":{"createdBySubject":{"subjectId":"\u003cstring>","subjectType":"user","subjectSlug":"\u003cstring>","subjectDisplayName":"\u003cstring>","subjectPatName":"\u003cstring>","subjectControllerName":"\u003cstring>","subjectExternalIdentitySlug":"\u003cstring>"},"lifecycleStage":"active","autopilot":{},"id":"\u003cstring>","fqn":"\u003cstring>","name":"\u003cstring>","type":"async-service","tenantName":"\u003cstring>","metadata":{"paused":true},"workspaceId":"\u003cstring>","lastVersion":123,"activeVersion":123,"applicationSetId":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","recommendations":[{"recommendationData":{},"recommendationType":"\u003cstring>","expiryTimestamp":"2023-11-07T05:31:56Z","id":"\u003cstring>","clusterId":"\u003cstring>","applicationId":"\u003cstring>","deploymentId":"\u003cstring>","applicationVersion":123,"appliedDeploymentId":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"}],"alerts":[{"name":"\u003cstring>","timestamps":["2023-11-07T05:31:56Z"],"startTime":"2023-11-07T05:31:56Z","clusterId":"\u003cstring>","fingerprint":"\u003cstring>","id":"\u003cstring>","resolvedTime":"2023-11-07T05:31:56Z","applicationId":"\u003cstring>","tenantName":"\u003cstring>","updatedAt":"\u003cstring>","createdAt":"\u003cstring>","applicationDebugInfoId":"\u003cstring>"}],"alertsSummary":{},"applicationDebugInfos":[{"applicationId":"\u003cstring>","debugInfo":{},"id":"\u003cstring>","application":{},"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"}],"potentialProblems":[{"name":"\u003cstring>","description":"\u003cstring>"}],"workspaceFqn":"\u003cstring>","createdBy":"\u003cstring>","deployment":{"manifest":{"name":"\u003cstring>","image":{"type":"build","build_source":{"type":"remote","remote_uri":"\u003cstring>"},"build_spec":{"type":"dockerfile","dockerfile_path":"./Dockerfile","build_context_path":"./","command":"\u003cstring>","build_args":{},"build_secrets":[{"id":"\u003cstring>","value":"\u003cstring>","env":"\u003cstring>"}]},"docker_registry":"\u003cstring>"},"ports":[{"port":80,"protocol":"TCP","expose":true,"app_protocol":"http","host":"\u003cstring>","path":"\u003cstring>","rewrite_path_to":"\u003cstring>","auth":{"type":"basic_auth","username":"\u003cstring>","password":"\u003cstring>"}}],"type":"service","replicas":1,"artifacts_download":{"artifacts":[{"type":"truefoundry-artifact","artifact_version_fqn":"\u003cstring>","download_path_env_variable":"\u003cstring>"}],"cache_volume":{"storage_class":"\u003cstring>","cache_size":200}},"resources":{"cpu_request":0.2,"cpu_limit":0.5,"memory_request":200,"memory_limit":500,"ephemeral_storage_request":1000,"ephemeral_storage_limit":2000,"shared_memory_size":2000032,"node":{"type":"node_selector","instance_families":["\u003cstring>"],"capacity_type":"spot_fallback_on_demand"},"devices":[{"type":"nvidia_gpu","count":8,"name":"\u003cstring>"}]},"env":null,"service_account":"\u003cstring>","mounts":[{"type":"secret","mount_path":"\u003cstring>","secret_fqn":"\u003cstring>"}],"labels":{},"kustomize":{"patch":{},"additions":[{}]},"liveness_probe":{"config":{"type":"http","path":"\u003cstring>","port":32767,"host":"\u003cstring>","scheme":"HTTP"},"initial_delay_seconds":0,"period_seconds":10,"timeout_seconds":1,"success_threshold":1,"failure_threshold":3},"readiness_probe":{"config":{"type":"http","path":"\u003cstring>","port":32767,"host":"\u003cstring>","scheme":"HTTP"},"initial_delay_seconds":0,"period_seconds":10,"timeout_seconds":1,"success_threshold":1,"failure_threshold":3},"startup_probe":{"config":{"type":"http","path":"\u003cstring>","port":32767,"host":"\u003cstring>","scheme":"HTTP"},"initial_delay_seconds":0,"period_seconds":10,"timeout_seconds":1,"success_threshold":1,"failure_threshold":3},"workspace_fqn":"\u003cstring>","auto_shutdown":{"wait_time":900},"allow_interception":false,"rollout_strategy":{"type":"rolling_update","max_unavailable_percentage":25,"max_surge_percentage":25}},"createdBySubject":{"subjectId":"\u003cstring>","subjectType":"user","subjectSlug":"\u003cstring>","subjectDisplayName":"\u003cstring>","subjectPatName":"\u003cstring>","subjectControllerName":"\u003cstring>","subjectExternalIdentitySlug":"\u003cstring>"},"id":"\u003cstring>","version":123,"fqn":"\u003cstring>","applicationId":"\u003cstring>","application":{"lifecycleStage":"active","id":"\u003cstring>","fqn":"\u003cstring>","name":"\u003cstring>","type":"async-service","metadata":{"paused":true},"workspaceId":"\u003cstring>","activeVersion":123,"applicationSetId":"\u003cstring>"},"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","deploymentBuilds":[{"id":"\u003cstring>","deploymentId":"\u003cstring>","componentName":"\u003cstring>","build":{"name":"\u003cstring>","status":20},"buildId":"\u003cstring>","imageUri":"\u003cstring>","name":"\u003cstring>","status":"STARTED","getLogsUrl":"\u003cstring>","tailLogsUrl":"\u003cstring>","logsStartTs":"\u003cstring>","metadata":{},"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"}],"deploymentStatuses":[{"id":"\u003cstring>","deploymentId":"\u003cstring>","status":"INITIALIZED","state":{},"transition":"BUILDING","message":"\u003cstring>","retryCount":123,"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"}],"currentStatusId":"\u003cstring>","currentStatus":{"id":"\u003cstring>","deploymentId":"\u003cstring>","status":"INITIALIZED","state":{},"transition":"BUILDING","message":"\u003cstring>","retryCount":123,"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"},"appliedRecommendations":[{"recommendationData":{},"recommendationType":"\u003cstring>","expiryTimestamp":"2023-11-07T05:31:56Z","id":"\u003cstring>","clusterId":"\u003cstring>","applicationId":"\u003cstring>","deploymentId":"\u003cstring>","applicationVersion":123,"appliedDeploymentId":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"}],"createdBy":"\u003cstring>"},"activeDeploymentId":"\u003cstring>","lastDeploymentId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"50f312c4-ace5-4e3a-aecc-c81e388e729b":{"description":"Caller lacks read permission on the application workspace.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","description":"HTTP Status Code","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","description":"Error Message","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"oneOf":[{"type":"integer","description":"Error code","uniqueKey":"code.oneOf.0","typeLabel":"integer"},{"type":"string","description":"Error code","uniqueKey":"code.oneOf.1","typeLabel":"string"},{"type":"null","uniqueKey":"code.oneOf.2","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"integer | string | null"},"details":{"oneOf":[{"type":"array","description":"Error details","items":{"type":"object","uniqueKey":"details.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"details.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Error details","items":{"type":"object"},"uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"object[] | null"}},"required":["statusCode","message"],"title":"HttpError","x-fern-type-name":"HttpError","uniqueKey":"","typeLabel":"HttpError · object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","code":123,"details":[{}]}}},"exampleType":"generated"}},"exampleType":"generated"},"fd932cea-a6c9-4c4a-a3eb-d4beb10b8ebc":{"description":"No application found for the given ID.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","description":"HTTP Status Code","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","description":"Error Message","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"oneOf":[{"type":"integer","description":"Error code","uniqueKey":"code.oneOf.0","typeLabel":"integer"},{"type":"string","description":"Error code","uniqueKey":"code.oneOf.1","typeLabel":"string"},{"type":"null","uniqueKey":"code.oneOf.2","typeLabel":"null"}],"uniqueKey":"code","typeLabel":"integer | string | null"},"details":{"oneOf":[{"type":"array","description":"Error details","items":{"type":"object","uniqueKey":"details.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"details.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Error details","items":{"type":"object"},"uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"object[] | null"}},"required":["statusCode","message"],"title":"HttpError","x-fern-type-name":"HttpError","uniqueKey":"","typeLabel":"HttpError · object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"message":"\u003cstring>","code":123,"details":[{}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"70003c13-b6a3-400a-ad65-f9bece5d9216":{"jwt":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"jwt"}}},"servers":{"420b2084-a24a-46fb-8cda-d10944e1e5a2":{"url":"https://{controlPlaneURL}","variables":{"controlPlaneURL":{"default":"app.truefoundry.com","description":"Control Plane URL"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"jwt"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"jwt","name":"Authorization"}],"title":"jwt"}]},"originalFileLocation":"openapi.json"},"subdomain":"truefoundry","siteName":"TrueFoundry Docs","title":"Get Application - TrueFoundry Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T11:57:44.712Z","originalFileLocation":"docs/api-reference/applications/get-application.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Get a single application by its ID.\">\u003cmeta data-mint-head name=\"application-name\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get Application - TrueFoundry Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.truefoundry.com/docs/api-reference/applications/get-application\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://assets.production.truefoundry.com/logo.svg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get Application - TrueFoundry Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://assets.production.truefoundry.com/logo.svg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.truefoundry.com/docs/api-reference/applications/get-application\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/applications/get-application.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.truefoundry.com/#organization\",\"name\":\"TrueFoundry Docs\",\"url\":\"https://www.truefoundry.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/light.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=6068d83664aeda0239bec2422657dd20\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.truefoundry.com#website\",\"name\":\"TrueFoundry Docs\",\"url\":\"https://www.truefoundry.com\",\"publisher\":{\"@id\":\"https://www.truefoundry.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application#webpage\",\"url\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application\",\"name\":\"Get Application\",\"description\":\"Get a single application by its ID.\",\"dateModified\":\"2026-11-02T11:57:44.712Z\",\"isPartOf\":{\"@id\":\"https://www.truefoundry.com#website\"},\"breadcrumb\":{\"@id\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Applications\",\"item\":\"https://www.truefoundry.com/docs/api-reference/applications/list-applications\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get Application\",\"item\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application#apireference\",\"headline\":\"Get Application\",\"name\":\"Get Application\",\"description\":\"Get a single application by its ID.\",\"url\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application\",\"mainEntityOfPage\":{\"@id\":\"https://www.truefoundry.com/docs/api-reference/applications/get-application#webpage\"},\"image\":\"https://assets.production.truefoundry.com/logo.svg\",\"dateModified\":\"2026-11-02T11:57:44.712Z\",\"publisher\":{\"@id\":\"https://www.truefoundry.com/#organization\"},\"isPartOf\":{\"@id\":\"https://www.truefoundry.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TrueFoundry Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"TrueFoundry Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/api-reference/applications/get-application.md","siteName":"TrueFoundry Docs","nav":{"global":null,"tabs":[{"tab":"AI Gateway","pages":[{"title":"AI Gateway","href":"/docs/ai-gateway/intro-to-llm-gateway"}]},{"tab":"Agent Platform","pages":[{"title":"Agent Platform","href":"/docs/agent-platform/agent-harness/overview"}]},{"tab":"Platform","pages":[{"title":"Platform","href":"/docs/platform/overview"}]},{"tab":"AI Deployment","pages":[{"title":"AI Deployment","href":"/docs/ai-deployment-overview"}]},{"tab":"API Reference","groups":[{"group":"TrueFoundry SDK","pages":[{"title":"TrueFoundry Python SDK","href":"/docs/truefoundry_sdk"},{"title":"TrueFoundry ML Client","href":"/docs/truefoundry-ml-reference/index"}]},{"group":"TrueFoundry CLI","pages":[{"title":"Using tfy apply","href":"/docs/using-tfy-apply"},{"title":"Using tfy delete","href":"/docs/using-tfy-delete"}]},{"group":"Extras","pages":[{"title":"Add and List Models","href":"/docs/apply-api-create-models"},{"title":"Secret Management API","href":"/docs/apply-api-secret-management"}]},{"group":"Agent","pages":[{"title":"List Agents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents","href":"/docs/api-reference/agent/list-agents"},{"title":"Create or Update Agent","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agents","href":"/docs/api-reference/agent/create-or-update-agent"},{"title":"Get Agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents/{id}","href":"/docs/api-reference/agent/get-agent"},{"title":"Delete Agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agents/{id}","href":"/docs/api-reference/agent/delete-agent"},{"title":"Get Agent Token","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents/{id}/token","href":"/docs/api-reference/agent/get-agent-token"},{"title":"Create Agent Token","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/agents/{id}/token","href":"/docs/api-reference/agent/create-agent-token"},{"title":"Update Agent State","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agents/{id}/state","href":"/docs/api-reference/agent/update-agent-state"},{"title":"List Agent Versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-versions","href":"/docs/api-reference/agent/list-agent-versions"}]},{"group":"Agent Skills","pages":[{"title":"Get agent skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skills/{agent_skill_id}","href":"/docs/api-reference/agent-skills/get-agent-skill"},{"title":"Delete agent skill","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agent-skills/{agent_skill_id}","href":"/docs/api-reference/agent-skills/delete-agent-skill"},{"title":"List agent skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skills","href":"/docs/api-reference/agent-skills/list-agent-skills"},{"title":"List agent skill versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skill-versions","href":"/docs/api-reference/agent-skills/list-agent-skill-versions"},{"title":"Create or update agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agent-skill-versions","href":"/docs/api-reference/agent-skills/create-or-update-agent-skill-version"},{"title":"Get agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skill-versions/{agent_skill_version_id}","href":"/docs/api-reference/agent-skills/get-agent-skill-version"},{"title":"Delete agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agent-skill-versions/{agent_skill_version_id}","href":"/docs/api-reference/agent-skills/delete-agent-skill-version"}]},{"group":"Applications","pages":[{"title":"List Applications","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps","href":"/docs/api-reference/applications/list-applications"},{"title":"Create or Update Application Deployment","description":"Deploy an application from a manifest. Create the application if it does not exist, otherwise create a new deployment version. Return the resulting deployment.","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/apps","href":"/docs/api-reference/applications/create-or-update-application-deployment"},{"title":"Get Application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/get-application"},{"title":"Delete Application","description":"Permanently delete an application. This action cannot be undone.","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/delete-application"},{"title":"List Application Deployments","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}/deployments","href":"/docs/api-reference/applications/list-application-deployments"},{"title":"Redeploy Application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/apps/{id}/deployments/{deploymentId}/redeploy","href":"/docs/api-reference/applications/redeploy-application"},{"title":"Get Deployment","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}/deployments/{deploymentId}","href":"/docs/api-reference/applications/get-deployment"},{"title":"Pause Application","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/apps/{id}/scale-to-zero","href":"/docs/api-reference/applications/pause-application"},{"title":"Resume Application","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/apps/{id}/scale-to-original","href":"/docs/api-reference/applications/resume-application"},{"title":"Cancel Deployment","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/apps/{id}/deployments/{deploymentId}/cancel","href":"/docs/api-reference/applications/cancel-deployment"},{"title":"Get Application Resources","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/x/apps/{id}/resources","href":"/docs/api-reference/applications/get-application-resources"},{"title":"Get Application State","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/x/apps/{id}/state","href":"/docs/api-reference/applications/get-application-state"}]},{"group":"Metrics","pages":[{"title":"Create Grafana dashboard for an application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/metrics/grafana/{workspaceId}","href":"/docs/api-reference/metrics/create-grafana-dashboard-for-an-application"},{"title":"Get Grafana dashboard JSON for an application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/grafana/dashboard-json/{workspaceId}","href":"/docs/api-reference/metrics/get-grafana-dashboard-json-for-an-application"},{"title":"List metric charts for an application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/{workspaceId}/charts","href":"/docs/api-reference/metrics/list-metric-charts-for-an-application"},{"title":"Get metric data for an application chart","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/{workspaceId}/charts/{chart}","href":"/docs/api-reference/metrics/get-metric-data-for-an-application-chart"},{"title":"List metric charts for a cluster","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/cluster/{id}/charts","href":"/docs/api-reference/metrics/list-metric-charts-for-a-cluster"},{"title":"Get metric data for a cluster chart","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/cluster/{id}/charts/{chart}","href":"/docs/api-reference/metrics/get-metric-data-for-a-cluster-chart"}]},{"group":"Apply","pages":[{"title":"Create or update a resource from a manifest","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/apply","href":"/docs/api-reference/apply/create-or-update-a-resource-from-a-manifest"},{"title":"Delete a resource identified by a manifest","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/delete","href":"/docs/api-reference/apply/delete-a-resource-identified-by-a-manifest"},{"title":"Resolve the dependency tree for a set of manifests","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/dependency-tree","href":"/docs/api-reference/apply/resolve-the-dependency-tree-for-a-set-of-manifests"}]},{"group":"Artifacts","pages":[{"title":"Get artifact","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifacts/{id}","href":"/docs/api-reference/artifacts/get-artifact"},{"title":"Delete artifact","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/artifacts/{id}","href":"/docs/api-reference/artifacts/delete-artifact"},{"title":"List artifacts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifacts","href":"/docs/api-reference/artifacts/list-artifacts"},{"title":"List artifact versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/list-artifact-versions"},{"title":"Create or update artifact version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/create-or-update-artifact-version"},{"title":"Delete artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/delete-artifact-version"},{"title":"Apply tags to artifact version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/artifact-versions/tags","href":"/docs/api-reference/artifacts/apply-tags-to-artifact-version"},{"title":"Get signed URLs for artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/signed-urls","href":"/docs/api-reference/artifacts/get-signed-urls-for-artifact-version"},{"title":"Create multipart upload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/signed-urls/multipart","href":"/docs/api-reference/artifacts/create-multipart-upload"},{"title":"List files in artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/files","href":"/docs/api-reference/artifacts/list-files-in-artifact-version"},{"title":"Stage artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/stage","href":"/docs/api-reference/artifacts/stage-artifact-version"},{"title":"Mark stage failure","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/mark-stage-failure","href":"/docs/api-reference/artifacts/mark-stage-failure"},{"title":"Get artifact version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifact-versions/{id}","href":"/docs/api-reference/artifacts/get-artifact-version"},{"title":"Delete artifact version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/artifact-versions/{id}","href":"/docs/api-reference/artifacts/delete-artifact-version-1"}]},{"group":"Audit Logs","pages":[{"title":"Get Audit Logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs","href":"/docs/api-reference/audit-logs/get-audit-logs"},{"title":"Get Audit Log Actions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs/actions","href":"/docs/api-reference/audit-logs/get-audit-log-actions"},{"title":"Get Resource Audit Logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs/resources","href":"/docs/api-reference/audit-logs/get-resource-audit-logs"}]},{"group":"Clusters","pages":[{"title":"List clusters","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters","href":"/docs/api-reference/clusters/list-clusters"},{"title":"Create or update a cluster","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/clusters","href":"/docs/api-reference/clusters/create-or-update-a-cluster"},{"title":"Get a cluster","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}","href":"/docs/api-reference/clusters/get-a-cluster"},{"title":"Delete a cluster","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/clusters/{id}","href":"/docs/api-reference/clusters/delete-a-cluster"},{"title":"List cluster addons","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}/get-addons","href":"/docs/api-reference/clusters/list-cluster-addons"},{"title":"Get cluster connection status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}/is-connected","href":"/docs/api-reference/clusters/get-cluster-connection-status"}]},{"group":"Jobs","pages":[{"title":"List Job Runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/jobs/{jobId}/runs","href":"/docs/api-reference/jobs/list-job-runs"},{"title":"Get Job Run","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/jobs/{jobId}/runs/{jobRunName}","href":"/docs/api-reference/jobs/get-job-run"},{"title":"Delete Job Run","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/jobs/{jobId}/runs/{jobRunName}","href":"/docs/api-reference/jobs/delete-job-run"},{"title":"Trigger Job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/jobs/trigger","href":"/docs/api-reference/jobs/trigger-job"},{"title":"Terminate Job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/jobs/terminate","href":"/docs/api-reference/jobs/terminate-job"}]},{"group":"LLM Gateway Budgets","pages":[{"title":"List gateway budgets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets","href":"/docs/api-reference/llm-gateway-budgets/list-gateway-budgets"},{"title":"Create or update a gateway budget","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/llm-gateway/budgets","href":"/docs/api-reference/llm-gateway-budgets/create-or-update-a-gateway-budget"},{"title":"Get my budget usage","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/my-usage","href":"/docs/api-reference/llm-gateway-budgets/get-my-budget-usage"},{"title":"Simulate gateway budgets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/llm-gateway/budgets/simulate","href":"/docs/api-reference/llm-gateway-budgets/simulate-gateway-budgets"},{"title":"Get a gateway budget by id","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/{id}","href":"/docs/api-reference/llm-gateway-budgets/get-a-gateway-budget-by-id"},{"title":"Delete a gateway budget by id","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/llm-gateway/budgets/{id}","href":"/docs/api-reference/llm-gateway-budgets/delete-a-gateway-budget-by-id"},{"title":"Get a gateway budget leaderboard","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/{id}/leaderboard","href":"/docs/api-reference/llm-gateway-budgets/get-a-gateway-budget-leaderboard"}]},{"group":"Logs","pages":[{"title":"Get application logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/logs","href":"/docs/api-reference/logs/get-application-logs"},{"title":"Download workspace logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/logs/{workspaceId}/download","href":"/docs/api-reference/logs/download-workspace-logs"}]},{"group":"MCP Registry","pages":[{"title":"List MCP registry servers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers","href":"/docs/api-reference/mcp-registry/list-mcp-registry-servers"},{"title":"List MCP registry server versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers/{mcpRegistryServerName}/versions","href":"/docs/api-reference/mcp-registry/list-mcp-registry-server-versions"},{"title":"Get an MCP registry server version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers/{mcpRegistryServerName}/versions/{version}","href":"/docs/api-reference/mcp-registry/get-an-mcp-registry-server-version"}]},{"group":"MCP Servers V2","pages":[{"title":"List MCP servers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/list-mcp-servers"},{"title":"Create or update an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server"},{"title":"Bulk create TrueFoundry-managed MCP servers","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/mcp/bulk","href":"/docs/api-reference/mcp-servers-v2/bulk-create-truefoundry-managed-mcp-servers"},{"title":"Get an MCP server by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}","href":"/docs/api-reference/mcp-servers-v2/get-an-mcp-server-by-id"},{"title":"Delete an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}","href":"/docs/api-reference/mcp-servers-v2/delete-an-mcp-server"},{"title":"Get MCP server code snippets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/code-snippets","href":"/docs/api-reference/mcp-servers-v2/get-mcp-server-code-snippets"},{"title":"List MCP user auth overrides","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/list-mcp-user-auth-overrides"},{"title":"Set a per-subject auth override","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/set-a-per-subject-auth-override"},{"title":"Disconnect a subject from an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/disconnect-a-subject-from-an-mcp-server"},{"title":"Get the consent URL for per-user MCP server authorization","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/authorize","href":"/docs/api-reference/mcp-servers-v2/get-the-consent-url-for-per-user-mcp-server-authorization"},{"title":"Get MCP server auth status for a subject","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth/status","href":"/docs/api-reference/mcp-servers-v2/get-mcp-server-auth-status-for-a-subject"},{"title":"Get auth override parameters for an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth-override/uischema","href":"/docs/api-reference/mcp-servers-v2/get-auth-override-parameters-for-an-mcp-server"},{"title":"Revoke all auth tokens on an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}/auth/tokens","href":"/docs/api-reference/mcp-servers-v2/revoke-all-auth-tokens-on-an-mcp-server"}]},{"group":"MLRepos","pages":[{"title":"Get ML Repo","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/ml-repos/{id}","href":"/docs/api-reference/mlrepos/get-ml-repo"},{"title":"Delete ML Repo","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/ml-repos/{id}","href":"/docs/api-reference/mlrepos/delete-ml-repo"},{"title":"List ML Repos","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/ml-repos","href":"/docs/api-reference/mlrepos/list-ml-repos"},{"title":"Create or Update MLRepo","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/ml-repos","href":"/docs/api-reference/mlrepos/create-or-update-mlrepo"}]},{"group":"Models","pages":[{"title":"Get model","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/models/{id}","href":"/docs/api-reference/models/get-model"},{"title":"Delete model","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/models/{id}","href":"/docs/api-reference/models/delete-model"},{"title":"List models","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/models","href":"/docs/api-reference/models/list-models"},{"title":"List model versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/model-versions","href":"/docs/api-reference/models/list-model-versions"},{"title":"Create or update model version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/model-versions","href":"/docs/api-reference/models/create-or-update-model-version"},{"title":"Delete model version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/model-versions","href":"/docs/api-reference/models/delete-model-version"},{"title":"Apply tags to model version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/model-versions/tags","href":"/docs/api-reference/models/apply-tags-to-model-version"},{"title":"Get model version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/model-versions/{id}","href":"/docs/api-reference/models/get-model-version"},{"title":"Delete model version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/model-versions/{id}","href":"/docs/api-reference/models/delete-model-version-1"}]},{"group":"Personal Access Tokens","pages":[{"title":"List personal access tokens","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens","href":"/docs/api-reference/personal-access-tokens/list-personal-access-tokens"},{"title":"Create a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/personal-access-tokens","href":"/docs/api-reference/personal-access-tokens/create-a-personal-access-token"},{"title":"Check personal access token exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens/exists","href":"/docs/api-reference/personal-access-tokens/check-personal-access-token-exists"},{"title":"Create a personal access token for another user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/personal-access-tokens/for-user","href":"/docs/api-reference/personal-access-tokens/create-a-personal-access-token-for-another-user"},{"title":"Revoke all personal access tokens for a user","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/personal-access-tokens/revoke/all","href":"/docs/api-reference/personal-access-tokens/revoke-all-personal-access-tokens-for-a-user"},{"title":"Delete a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/personal-access-tokens/{id}","href":"/docs/api-reference/personal-access-tokens/delete-a-personal-access-token"},{"title":"Get token for a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens/{name}/token","href":"/docs/api-reference/personal-access-tokens/get-token-for-a-personal-access-token"}]},{"group":"Prompts","pages":[{"title":"Get prompt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompts/{id}","href":"/docs/api-reference/prompts/get-prompt"},{"title":"Delete prompt","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/prompts/{id}","href":"/docs/api-reference/prompts/delete-prompt"},{"title":"List prompts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompts","href":"/docs/api-reference/prompts/list-prompts"},{"title":"List prompt versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/list-prompt-versions"},{"title":"Create or update prompt version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/create-or-update-prompt-version"},{"title":"Delete prompt version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/delete-prompt-version"},{"title":"Apply tags to prompt version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/prompt-versions/tags","href":"/docs/api-reference/prompts/apply-tags-to-prompt-version"},{"title":"Get prompt version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompt-versions/{id}","href":"/docs/api-reference/prompts/get-prompt-version"},{"title":"Delete prompt version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/prompt-versions/{id}","href":"/docs/api-reference/prompts/delete-prompt-version-1"}]},{"group":"Provider Integrations","pages":[{"title":"Summarize model integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-integrations/summary","href":"/docs/api-reference/provider-integrations/summarize-model-integrations"},{"title":"List provider integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-integrations","href":"/docs/api-reference/provider-integrations/list-provider-integrations"}]},{"group":"SCIM v2","pages":[{"title":"List Resource Types","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/ResourceTypes","href":"/docs/api-reference/scim-v2/list-resource-types"},{"title":"List Schemas","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Schemas","href":"/docs/api-reference/scim-v2/list-schemas"},{"title":"Get Schema","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Schemas/{id}","href":"/docs/api-reference/scim-v2/get-schema"},{"title":"Get Service Provider Configuration","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/ServiceProviderConfig","href":"/docs/api-reference/scim-v2/get-service-provider-configuration"},{"title":"List Users","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users","href":"/docs/api-reference/scim-v2/list-users"},{"title":"Create User","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users","href":"/docs/api-reference/scim-v2/create-user"},{"title":"Get User","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/get-user"},{"title":"Update User","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/update-user"},{"title":"Delete User","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/delete-user"},{"title":"Update User","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/update-user-1"},{"title":"List Groups","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups","href":"/docs/api-reference/scim-v2/list-groups"},{"title":"Create Group","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups","href":"/docs/api-reference/scim-v2/create-group"},{"title":"Get Group","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/get-group"},{"title":"Update Group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/update-group"},{"title":"Delete Group","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/delete-group"},{"title":"Patch Group","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/patch-group"}]},{"group":"Secret Groups","pages":[{"title":"List secret groups","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/list-secret-groups"},{"title":"Create or update a secret group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/create-or-update-a-secret-group"},{"title":"Create a secret group","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/create-a-secret-group"},{"title":"Get a secret group","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/get-a-secret-group"},{"title":"Update secrets in a secret group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/update-secrets-in-a-secret-group"},{"title":"Delete a secret group","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/delete-a-secret-group"}]},{"group":"Secrets","pages":[{"title":"List secrets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secrets","href":"/docs/api-reference/secrets/list-secrets"},{"title":"List associated active deployments for multiple secrets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secrets/deployments","href":"/docs/api-reference/secrets/list-associated-active-deployments-for-multiple-secrets"},{"title":"Get a secret","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secrets/{id}","href":"/docs/api-reference/secrets/get-a-secret"},{"title":"Delete a secret","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/secrets/{id}","href":"/docs/api-reference/secrets/delete-a-secret"},{"title":"List active deployments for a secret","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secrets/{id}/deployments","href":"/docs/api-reference/secrets/list-active-deployments-for-a-secret"}]},{"group":"Teams","pages":[{"title":"List teams","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/user","href":"/docs/api-reference/teams/list-teams"},{"title":"Create or update a team","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams","href":"/docs/api-reference/teams/create-or-update-a-team"},{"title":"List team members","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/list-team-members"},{"title":"Add team members","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/add-team-members"},{"title":"Remove team members","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/remove-team-members"},{"title":"List team managers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/list-team-managers"},{"title":"Add team managers","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/add-team-managers"},{"title":"Remove team managers","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/remove-team-managers"},{"title":"Generate team manifest for YAML","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/generate-manifest","href":"/docs/api-reference/teams/generate-team-manifest-for-yaml"},{"title":"Get a team","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}","href":"/docs/api-reference/teams/get-a-team"},{"title":"Delete a team","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}","href":"/docs/api-reference/teams/delete-a-team"},{"title":"Get team permissions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/permissions","href":"/docs/api-reference/teams/get-team-permissions"}]},{"group":"Traces","pages":[{"title":"Get filtered spans data with detailed attributes","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/spans/query","href":"/docs/api-reference/traces/get-filtered-spans-data-with-detailed-attributes"}]},{"group":"Users","pages":[{"title":"List users","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/users","href":"/docs/api-reference/users/list-users"},{"title":"Register a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/register","href":"/docs/api-reference/users/register-a-user"},{"title":"Get a user","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/users/{id}","href":"/docs/api-reference/users/get-a-user"},{"title":"Delete a user","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/users/{id}","href":"/docs/api-reference/users/delete-a-user"},{"title":"Invite a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/invite","href":"/docs/api-reference/users/invite-a-user"},{"title":"Resend a user invite","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/x/users/invite/resend","href":"/docs/api-reference/users/resend-a-user-invite"},{"title":"Deactivate a user","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/users/deactivate","href":"/docs/api-reference/users/deactivate-a-user"},{"title":"Revoke all sessions of a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/revoke-sessions","href":"/docs/api-reference/users/revoke-all-sessions-of-a-user"},{"title":"Activate a user","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/users/activate","href":"/docs/api-reference/users/activate-a-user"},{"title":"Send a password reset email","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/x/users/forgot-password","href":"/docs/api-reference/users/send-a-password-reset-email"},{"title":"Change password","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/change-password","href":"/docs/api-reference/users/change-password"},{"title":"Check user registration","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/is-registered","href":"/docs/api-reference/users/check-user-registration"}]},{"group":"Virtual Accounts","pages":[{"title":"List virtual accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts","href":"/docs/api-reference/virtual-accounts/list-virtual-accounts"},{"title":"Create or update a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/virtual-accounts","href":"/docs/api-reference/virtual-accounts/create-or-update-a-virtual-account"},{"title":"Check virtual account exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/exists","href":"/docs/api-reference/virtual-accounts/check-virtual-account-exists"},{"title":"Get a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/{id}","href":"/docs/api-reference/virtual-accounts/get-a-virtual-account"},{"title":"Delete a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/virtual-accounts/{id}","href":"/docs/api-reference/virtual-accounts/delete-a-virtual-account"},{"title":"Get token for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/{id}/token","href":"/docs/api-reference/virtual-accounts/get-token-for-a-virtual-account"},{"title":"Sync token to secret store","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/virtual-accounts/{id}/sync-to-secret-store","href":"/docs/api-reference/virtual-accounts/sync-token-to-secret-store"},{"title":"Regenerate token for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/virtual-accounts/{id}/regenerate-token","href":"/docs/api-reference/virtual-accounts/regenerate-token-for-a-virtual-account"},{"title":"Delete a JWT for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/virtual-accounts/{id}/jwt/{jwtId}","href":"/docs/api-reference/virtual-accounts/delete-a-jwt-for-a-virtual-account"}]},{"group":"Role Bindings","pages":[{"title":"List role bindings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings","href":"/docs/api-reference/role-bindings/list-role-bindings"},{"title":"Create or update a role binding","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/role-bindings","href":"/docs/api-reference/role-bindings/create-or-update-a-role-binding"},{"title":"Generate role-binding manifests for a resource or subject","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/generate-manifest","href":"/docs/api-reference/role-bindings/generate-role-binding-manifests-for-a-resource-or-subject"},{"title":"Check role binding exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/exists","href":"/docs/api-reference/role-bindings/check-role-binding-exists"},{"title":"Get a role binding by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/{id}","href":"/docs/api-reference/role-bindings/get-a-role-binding-by-id"},{"title":"Delete a role binding by ID","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/role-bindings/{id}","href":"/docs/api-reference/role-bindings/delete-a-role-binding-by-id"}]},{"group":"Workspaces","pages":[{"title":"List workspaces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces","href":"/docs/api-reference/workspaces/list-workspaces"},{"title":"Create or update a workspace","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/workspaces","href":"/docs/api-reference/workspaces/create-or-update-a-workspace"},{"title":"Search workspaces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces/search","href":"/docs/api-reference/workspaces/search-workspaces"},{"title":"Get a workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces/{id}","href":"/docs/api-reference/workspaces/get-a-workspace"},{"title":"Delete a workspace","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/workspaces/{id}","href":"/docs/api-reference/workspaces/delete-a-workspace"}]},{"group":"Provider Accounts","pages":[{"title":"List provider accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-accounts","href":"/docs/api-reference/provider-accounts/list-provider-accounts"},{"title":"Create or update a provider account","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/provider-accounts","href":"/docs/api-reference/provider-accounts/create-or-update-a-provider-account"},{"title":"Get a provider account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-accounts/{id}","href":"/docs/api-reference/provider-accounts/get-a-provider-account"},{"title":"Delete a provider account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/provider-accounts/{id}","href":"/docs/api-reference/provider-accounts/delete-a-provider-account"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/docs/ai-gateway/ecosystem"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/docs/changelog"}]}]},"basePath":"","title":"Get Application - TrueFoundry Docs","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DDP9JXtj.js","utils-8yQyvEtx.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CBCFR8Sn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-rQaXkUHa.js","snippetPresets-J5KpBTgV.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BVxVH4Cj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BxdQ2vIi.js","shallow-BjV2tFiD.js","getApiPlaygroundDisplay-C_55tL4O.js","CodeSnippet-C0JpiCOC.js","CodeSnippets-w9Ps7djG.js","Page-DTNSD-0M.js","getPastedJson-BDfB-H8d.js","icon-g-kUkkO9.js","MethodPill-v4l6fq0h.js","DuplicateIcon-CvLo-CfU.js","createIcon-165clrrV.js","DynamicMarkdown-D3RQ-fEj.js","SectionHeading-vvo-3yLf.js","axios-vUo_bRtp.js","Markdown-CMT1uFWQ.js","clsx-C8f2yC9R.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CI2D8R2Y.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-k78Wrw_e.js"]}