truefoundry 0.5.4__py3-none-any.whl → 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of truefoundry might be problematic. Click here for more details.

@@ -9,6 +9,10 @@ from truefoundry.deploy.auto_gen.models import (
9
9
  Kustomize,
10
10
  ParamType,
11
11
  Protocol,
12
+ SparkDriverConfig,
13
+ SparkExecutorConfig,
14
+ SparkExecutorDynamicScaling,
15
+ SparkExecutorFixedInstances,
12
16
  WorkbenchImage,
13
17
  )
14
18
  from truefoundry.deploy.lib.dao.application import (
@@ -36,11 +40,12 @@ from truefoundry.deploy.v2.lib.deployable_patched_models import (
36
40
  Application,
37
41
  ApplicationSet,
38
42
  AsyncService,
39
- Codeserver,
40
43
  Helm,
41
44
  Job,
42
45
  Notebook,
46
+ RStudio,
43
47
  Service,
48
+ SparkJob,
44
49
  SSHServer,
45
50
  Volume,
46
51
  Workflow,
@@ -110,7 +115,9 @@ from truefoundry.deploy.v2.lib.patched_models import (
110
115
  StaticVolumeConfig,
111
116
  StringDataMount,
112
117
  TPUType,
113
- TruefoundryArtifactSource,
118
+ TrueFoundryArtifactSource,
119
+ TruefoundryArtifactSource, # deprecated, kept for backwards compatibility
120
+ TrueFoundryInteractiveLogin,
114
121
  VolumeBrowser,
115
122
  VolumeMount,
116
123
  WorkerConfig,
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: application.json
3
- # timestamp: 2024-12-16T11:59:07+00:00
3
+ # timestamp: 2025-01-20T07:24:00+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -659,6 +659,10 @@ class Profile(str, Enum):
659
659
 
660
660
  class NvidiaMIGGPU(BaseModel):
661
661
  type: Literal["nvidia_mig_gpu"] = Field(..., description="+value=nvidia_mig_gpu")
662
+ name: Optional[str] = Field(
663
+ None,
664
+ description="+label=GPU Name\n+usage=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",
665
+ )
662
666
  profile: Profile = Field(
663
667
  ...,
664
668
  description="+label=MIG Profile\n+usage=Name of the MIG profile to use. One of [1g.5gb, 2g.10gb, 3g.20gb, 1g.10gb, 2g.20gb, 3g.40gb]",
@@ -669,6 +673,10 @@ class NvidiaTimeslicingGPU(BaseModel):
669
673
  type: Literal["nvidia_timeslicing_gpu"] = Field(
670
674
  ..., description="+value=nvidia_timeslicing_gpu"
671
675
  )
676
+ name: Optional[str] = Field(
677
+ None,
678
+ description="+label=GPU Name\n+usage=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",
679
+ )
672
680
  gpu_memory: conint(ge=1, le=200000) = Field(
673
681
  ...,
674
682
  description="+label=GPU Memory (MB)\n+usage=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",
@@ -735,45 +743,6 @@ class AppProtocol(str, Enum):
735
743
  tcp = "tcp"
736
744
 
737
745
 
738
- class Port(BaseModel):
739
- """
740
- +docs=Describes the ports the service should be exposed to.
741
- """
742
-
743
- port: conint(ge=1, le=65535) = Field(
744
- 80, description="+usage=Port number to expose."
745
- )
746
- protocol: Protocol = Field("TCP", description="+usage=Protocol for the port.")
747
- expose: bool = Field(True, description="+usage=Expose the port")
748
- app_protocol: AppProtocol = Field(
749
- "http",
750
- description="+label=Application Protocol\n+usage=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`.",
751
- )
752
- host: Optional[
753
- constr(
754
- regex=r"^((([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]?)))$"
755
- )
756
- ] = Field(
757
- None,
758
- description="+usage=Host e.g. ai.example.com, app.truefoundry.com\n+message=Upto 253 characters, each part of host should be at most 63 characters long, can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts must be separated by periods (.)",
759
- )
760
- path: Optional[
761
- constr(regex=r"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_\.]*[a-zA-Z0-9]))*/$")
762
- ] = Field(
763
- None,
764
- description="+usage=Path e.g. /v1/api/ml/, /v2/docs/\n+message=Should begin and end with a forward slash (/). Each part can can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts should be separated by forward slashes (/)",
765
- )
766
- rewrite_path_to: Optional[
767
- constr(regex=r"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_\.]*[a-zA-Z0-9]))*/$")
768
- ] = Field(
769
- None,
770
- description="+label=Rewrite Path to\n+usage=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.\n+message=Should begin and end with a forward slash (/). Each part can can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts should be separated by forward slashes (/)",
771
- )
772
- auth: Optional[Union[BasicAuthCreds, JwtAuthCreds]] = Field(
773
- None, description="+usage=Username and Password for service auth"
774
- )
775
-
776
-
777
746
  class PythonBuild(BaseModel):
778
747
  """
779
748
  +docs=Describes that we are using python to build a container image with a specific python version and pip packages installed.
@@ -1021,6 +990,42 @@ class ServiceAutoscaling(BaseAutoscaling):
1021
990
  )
1022
991
 
1023
992
 
993
+ class SparkDriverConfig(BaseModel):
994
+ """
995
+ +label=Driver Config
996
+ """
997
+
998
+ ui_endpoint: Endpoint
999
+ resources: Optional[Resources] = None
1000
+
1001
+
1002
+ class SparkExecutorDynamicScaling(BaseModel):
1003
+ """
1004
+ +label=Dynamic Scaling
1005
+ """
1006
+
1007
+ type: Literal["dynamic"] = Field(..., description="+value=dynamic")
1008
+ min: conint(ge=0, le=500) = Field(
1009
+ 1,
1010
+ description="+label=Min Instances\n+usage=Minimum number of instances to start / scale down to\n+sort=100",
1011
+ )
1012
+ max: conint(ge=0, le=500) = Field(
1013
+ 1,
1014
+ description="+label=Max Instances\n+usage=Maximum number of instances to scale up to\n+sort=200",
1015
+ )
1016
+
1017
+
1018
+ class SparkExecutorFixedInstances(BaseModel):
1019
+ """
1020
+ +label=Fixed Instances
1021
+ """
1022
+
1023
+ type: Literal["fixed"] = Field(..., description="+value=fixed")
1024
+ count: conint(ge=0, le=500) = Field(
1025
+ 1, description="+label=Instances Count\n+usage=Number of instances to start"
1026
+ )
1027
+
1028
+
1024
1029
  class StaticVolumeConfig(BaseModel):
1025
1030
  """
1026
1031
  +label=Static Volume Config
@@ -1106,6 +1111,16 @@ class TaskPythonBuild(BaseModel):
1106
1111
  )
1107
1112
 
1108
1113
 
1114
+ class TrueFoundryInteractiveLogin(BaseModel):
1115
+ """
1116
+ +label=Login with truefoundry
1117
+ """
1118
+
1119
+ type: Literal["truefoundry_oauth"] = Field(
1120
+ ..., description="+value=truefoundry_oauth"
1121
+ )
1122
+
1123
+
1109
1124
  class TruefoundryArtifactSource(BaseModel):
1110
1125
  """
1111
1126
  +docs=Input for Artifact from Truefoundry Artifact Registry
@@ -1279,9 +1294,8 @@ class Codeserver(BaseWorkbenchInput):
1279
1294
  +docs=Describes the configuration for the code server
1280
1295
  """
1281
1296
 
1282
- type: Literal["codeserver"] = Field(..., description="+value=Code Server")
1297
+ type: Literal["codeserver"] = Field(..., description="+value=codeserver")
1283
1298
  image: WorkbenchImage
1284
- auth: Optional[BasicAuthCreds] = None
1285
1299
 
1286
1300
 
1287
1301
  class ContainerTaskConfig(BaseModel):
@@ -1549,13 +1563,51 @@ class Notebook(BaseWorkbenchInput):
1549
1563
 
1550
1564
  type: Literal["notebook"] = Field(..., description="+value=notebook")
1551
1565
  image: WorkbenchImage
1552
- auth: Optional[BasicAuthCreds] = None
1553
1566
  cull_timeout: conint(ge=5) = Field(
1554
1567
  30,
1555
1568
  description="+label=Stop after (minutes of inactivity)\n+usage=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.\n+sort=5",
1556
1569
  )
1557
1570
 
1558
1571
 
1572
+ class Port(BaseModel):
1573
+ """
1574
+ +docs=Describes the ports the service should be exposed to.
1575
+ """
1576
+
1577
+ port: conint(ge=1, le=65535) = Field(
1578
+ 80, description="+usage=Port number to expose."
1579
+ )
1580
+ protocol: Protocol = Field("TCP", description="+usage=Protocol for the port.")
1581
+ expose: bool = Field(True, description="+usage=Expose the port")
1582
+ app_protocol: AppProtocol = Field(
1583
+ "http",
1584
+ description="+label=Application Protocol\n+usage=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`.",
1585
+ )
1586
+ host: Optional[
1587
+ constr(
1588
+ regex=r"^((([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]?)))$"
1589
+ )
1590
+ ] = Field(
1591
+ None,
1592
+ description="+usage=Host e.g. ai.example.com, app.truefoundry.com\n+message=Upto 253 characters, each part of host should be at most 63 characters long, can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts must be separated by periods (.)",
1593
+ )
1594
+ path: Optional[
1595
+ constr(regex=r"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_\.]*[a-zA-Z0-9]))*/$")
1596
+ ] = Field(
1597
+ None,
1598
+ description="+usage=Path e.g. /v1/api/ml/, /v2/docs/\n+message=Should begin and end with a forward slash (/). Each part can can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts should be separated by forward slashes (/)",
1599
+ )
1600
+ rewrite_path_to: Optional[
1601
+ constr(regex=r"^(/([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_\.]*[a-zA-Z0-9]))*/$")
1602
+ ] = Field(
1603
+ None,
1604
+ description="+label=Rewrite Path to\n+usage=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.\n+message=Should begin and end with a forward slash (/). Each part can can contain alphabets, digits and hypen, must begin and end with an alphanumeric characters. Parts should be separated by forward slashes (/)",
1605
+ )
1606
+ auth: Optional[Union[BasicAuthCreds, JwtAuthCreds, TrueFoundryInteractiveLogin]] = (
1607
+ Field(None, description="+usage=Authentication method for inbound traffic")
1608
+ )
1609
+
1610
+
1559
1611
  class PythonTaskConfig(BaseModel):
1560
1612
  """
1561
1613
  +docs=Describes the configuration for the python function task
@@ -1582,17 +1634,83 @@ class PythonTaskConfig(BaseModel):
1582
1634
  )
1583
1635
 
1584
1636
 
1637
+ class RStudio(BaseWorkbenchInput):
1638
+ """
1639
+ +docs=Describes the configuration for the Rstudio server
1640
+ """
1641
+
1642
+ type: Literal["rstudio"] = Field(..., description="+value=rstudio")
1643
+ image: WorkbenchImage
1644
+
1645
+
1585
1646
  class SSHServer(BaseWorkbenchInput):
1586
1647
  """
1587
1648
  +docs=Describes the configuration for the ssh server
1588
1649
  """
1589
1650
 
1590
- type: Literal["ssh-server"] = Field(..., description="+value=SSH Server")
1651
+ type: Literal["ssh-server"] = Field(..., description="+value=ssh-server")
1591
1652
  image: WorkbenchImage
1592
1653
  ssh_public_key: str = Field(
1593
1654
  ...,
1594
1655
  description="+label: SSH Public Key\n+usage=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)\n+uiType=TextArea\n+sort=4",
1595
1656
  )
1657
+ cull_timeout: Optional[conint(ge=5)] = Field(
1658
+ None,
1659
+ description="+label=Stop after (minutes of inactivity)\n+usage=Stop the SSH Server instance after this much time in minutes of inactivity. \\\nThe instance is considered active if there is at least one active SSH connection (a client connected to the SSH server), \\\nor if a background job is running using tmux or screen, or if the pod has restarted.\n+sort=5",
1660
+ )
1661
+
1662
+
1663
+ class SparkExecutorConfig(BaseModel):
1664
+ """
1665
+ +label=Executor Config
1666
+ """
1667
+
1668
+ instances: Union[SparkExecutorFixedInstances, SparkExecutorDynamicScaling] = Field(
1669
+ {"type": "fixed", "count": 1}, description="+label=Executor Instances"
1670
+ )
1671
+ resources: Optional[Resources] = None
1672
+
1673
+
1674
+ class SparkJob(BaseModel):
1675
+ type: Literal["spark-job"] = Field(..., description="+value=spark-job\n+sort=1")
1676
+ name: constr(regex=r"^[a-z][a-z0-9\-]{1,30}[a-z0-9]$") = Field(
1677
+ ...,
1678
+ description="+label=Name\n+usage=Name of the job\n+message=3 to 32 lower case characters long alphanumeric word, may contain - in between, cannot start with a number\n+sort=2",
1679
+ )
1680
+ image: Image
1681
+ spark_version: str = Field(
1682
+ "3.5.2",
1683
+ description="+label=Spark Version\n+usage=Spark version should match the spark version installed in the image.\n+sort=2000",
1684
+ )
1685
+ main_application_file: str = Field(
1686
+ ...,
1687
+ description="+label=Main Application File\n+usage=The main application file to be executed by the spark job.\n+sort=3000",
1688
+ )
1689
+ arguments: Optional[str] = Field(
1690
+ None,
1691
+ description="+label=Arguments\n+usage=Arguments to be passed to the main application file.\n+sort=4000",
1692
+ )
1693
+ driver_config: SparkDriverConfig
1694
+ executor_config: SparkExecutorConfig
1695
+ env: Optional[Dict[str, Any]] = Field(
1696
+ None,
1697
+ description="+label=Environment Variables\n+usage=Configure environment variables to be injected in the service either as plain text. [Docs](https://docs.truefoundry.com/docs/env-variables)\n+icon=fa-globe\n+sort=21000",
1698
+ )
1699
+ mounts: Optional[List[VolumeMount]] = Field(
1700
+ None,
1701
+ description="+label=Mounts\n+usage=Configure volumes to be mounted to driver and executors. [Docs](https://docs.truefoundry.com/docs/mounting-volumes-job)\n+sort=22000\n+uiType=Mounts",
1702
+ )
1703
+ retries: conint(ge=0, le=10) = Field(
1704
+ 0,
1705
+ description="+label=Retries\n+usage=Specify the maximum number of attempts to retry a job before it is marked as failed.\n+icon=fa-repeat\n+sort=23000",
1706
+ )
1707
+ service_account: Optional[str] = Field(
1708
+ None, description="+label=Service Account\n+sort=24000"
1709
+ )
1710
+ workspace_fqn: Optional[str] = Field(
1711
+ None,
1712
+ description="+label=Workspace FQN\n+docs=Fully qualified name of the workspace\n+uiType=Hidden",
1713
+ )
1596
1714
 
1597
1715
 
1598
1716
  class Volume(BaseModel):
@@ -1780,8 +1898,10 @@ class Application(BaseModel):
1780
1898
  Notebook,
1781
1899
  Codeserver,
1782
1900
  SSHServer,
1901
+ RStudio,
1783
1902
  Helm,
1784
1903
  Volume,
1785
1904
  ApplicationSet,
1786
1905
  Workflow,
1906
+ SparkJob,
1787
1907
  ]
@@ -74,10 +74,12 @@ def _handle_if_local_source(component: Component, workspace_fqn: str) -> Compone
74
74
  else:
75
75
  # We'll build image on TrueFoundry servers, upload the source and update image.build_source
76
76
  logger.info("Uploading code for %s '%s'", component.type, component.name)
77
+ client = ServiceFoundryServiceClient()
77
78
  new_component.image.build_source = local_source_to_remote_source(
78
79
  local_source=component.image.build_source,
79
80
  workspace_fqn=workspace_fqn,
80
81
  component_name=component.name,
82
+ upload_code_package=client.upload_code_package,
81
83
  )
82
84
  logger.debug("Uploaded code for %s '%s'", component.type, component.name)
83
85
  return new_component
@@ -30,6 +30,10 @@ class Job(models.Job, DeployablePatchedModelBase):
30
30
  resources: models.Resources = Field(default_factory=models.Resources)
31
31
 
32
32
 
33
+ class SparkJob(models.SparkJob, DeployablePatchedModelBase):
34
+ type: Literal["spark-job"] = "spark-job"
35
+
36
+
33
37
  class Notebook(models.Notebook, DeployablePatchedModelBase):
34
38
  type: Literal["notebook"] = "notebook"
35
39
  resources: models.Resources = Field(default_factory=models.Resources)
@@ -37,6 +41,12 @@ class Notebook(models.Notebook, DeployablePatchedModelBase):
37
41
 
38
42
  class Codeserver(models.Codeserver, DeployablePatchedModelBase):
39
43
  type: Literal["codeserver"] = "codeserver"
44
+ resources: models.Resources = Field(default_factory=models.Resources)
45
+
46
+
47
+ class RStudio(models.RStudio, DeployablePatchedModelBase):
48
+ type: Literal["rstudio"] = "rstudio"
49
+ resources: models.Resources = Field(default_factory=models.Resources)
40
50
 
41
51
 
42
52
  class Helm(models.Helm, DeployablePatchedModelBase):
@@ -256,6 +256,10 @@ class JwtAuthCreds(models.JwtAuthCreds, PatchedModelBase):
256
256
  type: Literal["jwt_auth"] = "jwt_auth"
257
257
 
258
258
 
259
+ class TrueFoundryInteractiveLogin(models.TrueFoundryInteractiveLogin, PatchedModelBase):
260
+ type: Literal["truefoundry_oauth"] = "truefoundry_oauth"
261
+
262
+
259
263
  class HealthProbe(models.HealthProbe, PatchedModelBase):
260
264
  pass
261
265
 
@@ -504,6 +508,10 @@ class TruefoundryArtifactSource(models.TruefoundryArtifactSource, PatchedModelBa
504
508
  type: Literal["truefoundry-artifact"] = "truefoundry-artifact"
505
509
 
506
510
 
511
+ # TODO: When we do the renaming in CUE, we will make TruefoundryArtifactSource the alias and mark it deprecated
512
+ TrueFoundryArtifactSource = TruefoundryArtifactSource
513
+
514
+
507
515
  class ArtifactsDownload(models.ArtifactsDownload, PatchedModelBase):
508
516
  pass
509
517
 
@@ -136,6 +136,7 @@ def local_source_to_remote_source(
136
136
  local_source: models.LocalSource,
137
137
  workspace_fqn: str,
138
138
  component_name: str,
139
+ upload_code_package: Callable[[str, str, str], str],
139
140
  ) -> RemoteSource:
140
141
  with tempfile.TemporaryDirectory() as local_dir:
141
142
  package_local_path = os.path.join(local_dir, "build.tar.gz")
@@ -164,8 +165,7 @@ def local_source_to_remote_source(
164
165
  logger.exception("Failed to calculate code archive size")
165
166
 
166
167
  logger.debug("Uploading code archive.")
167
- client = ServiceFoundryServiceClient()
168
- remote_uri = client.upload_code_package(
168
+ remote_uri = upload_code_package(
169
169
  workspace_fqn=workspace_fqn,
170
170
  component_name=component_name,
171
171
  package_local_path=package_local_path,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: truefoundry
3
- Version: 0.5.4
3
+ Version: 0.5.5
4
4
  Summary: Truefoundry CLI
5
5
  Author: Abhishek Choudhary
6
6
  Author-email: abhishek@truefoundry.com
@@ -43,8 +43,8 @@ truefoundry/common/session.py,sha256=BiTJ2WEzLkTvzpqy67xX3fXgiKH_ltzzmQdFG7xUtwI
43
43
  truefoundry/common/storage_provider_utils.py,sha256=yURhMw8k0FLFvaviRHDiifhvc6GnuQwGMC9Qd2uM440,10934
44
44
  truefoundry/common/utils.py,sha256=sZyg-vpShVXvnrwnINrdsyWJR3FHMUBiOB1CslYdQTo,6072
45
45
  truefoundry/common/warnings.py,sha256=rs6BHwk7imQYedo07iwh3TWEOywAR3Lqhj0AY4khByg,504
46
- truefoundry/deploy/__init__.py,sha256=p14_yIJw2bcaKW3c1DTaoM7UwfHvt2T_MfeFlZIz1g4,2359
47
- truefoundry/deploy/auto_gen/models.py,sha256=3_GTdaYE95piMzhbM4SvMSQhP4UGWDGpJnLxERjYHGw,82555
46
+ truefoundry/deploy/__init__.py,sha256=e0EgG-fVJ6N9PNIlBINO6QtIMEehQgmz3ONPPjYlcSY,2596
47
+ truefoundry/deploy/auto_gen/models.py,sha256=B1Ze90HKsMTh0telC_nyPaep1guos-hqfZr6ztAZ9LM,87574
48
48
  truefoundry/deploy/builder/__init__.py,sha256=1qjHMNBE1poRCZW0WrG46dFM1f1IlivD5352qzsioMU,4953
49
49
  truefoundry/deploy/builder/builders/__init__.py,sha256=tlFLXqyDaKLd4iZbo4Hcu_8gOmgtL6drnXpbmQ6x1P8,636
50
50
  truefoundry/deploy/builder/builders/dockerfile.py,sha256=AXXTziCkaqIhuM_bwyD1vT1znOwemN1TKgU7eyo-KuM,1522
@@ -99,12 +99,12 @@ truefoundry/deploy/lib/win32.py,sha256=1RcvPTdlOAJ48rt8rCbE2Ufha2ztRqBAE9dueNXAr
99
99
  truefoundry/deploy/python_deploy_codegen.py,sha256=qJHH1BJQII9e6PhkcRFYiE_3De7_VMMm8nM4AX5Eq1o,6513
100
100
  truefoundry/deploy/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
101
  truefoundry/deploy/v2/lib/__init__.py,sha256=WEiVMZXOVljzEE3tpGJil14liIn_PCDoACJ6b3tZ6sI,188
102
- truefoundry/deploy/v2/lib/deploy.py,sha256=oK5yTlrhzKNTGZckwuBzu8Q_pxQYgBVcdA-KB-SbzCI,11990
102
+ truefoundry/deploy/v2/lib/deploy.py,sha256=Q4CL8SKnFLQ1FRqFyIwOAf77j_rP-fv58e-F-s3GqBw,12105
103
103
  truefoundry/deploy/v2/lib/deploy_workflow.py,sha256=6Y4PNhd5PCc_4TjpcIZPkr6FCm3BNIQ_SsJTvpUu7a0,12579
104
- truefoundry/deploy/v2/lib/deployable_patched_models.py,sha256=MROgMxhn9hDEAKwJSWl3iz12tUVvRKzEtqF2QUT6dAk,3343
104
+ truefoundry/deploy/v2/lib/deployable_patched_models.py,sha256=FmpZWpSbBTHe4yt0XMIPgdCNy_Rw1aXQCt8icv8TcWE,3701
105
105
  truefoundry/deploy/v2/lib/models.py,sha256=pSolLMTArDuYpeNsmeeS5DWliloN_iCDfZSpRllMHUg,1120
106
- truefoundry/deploy/v2/lib/patched_models.py,sha256=YDM75pdUPdMFgH2G8ZNbztalLIiMcHVHBHt7cLWmiDg,16050
107
- truefoundry/deploy/v2/lib/source.py,sha256=tzMSOTrTH3dJzICjo8gI8iY6n0-ckktP3Dh7bVK-nTI,9344
106
+ truefoundry/deploy/v2/lib/patched_models.py,sha256=VkDzYzlKpFu7yCsqdMUL44YS-pTIxHegBO87-jjttTM,16370
107
+ truefoundry/deploy/v2/lib/source.py,sha256=wArU8AwSy7U9EUGLEMmB4Ke7ZwgZWmh8fFU-PACogIk,9347
108
108
  truefoundry/logger.py,sha256=u-YCNjg5HBwE70uQcpjIG64Ghos-K2ulTWaxC03BSj4,714
109
109
  truefoundry/ml/__init__.py,sha256=ssUEIs8BixPWxynKoeSh-dkRl6AtLXG0PBGYnUR5Az8,2217
110
110
  truefoundry/ml/artifact/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -368,7 +368,7 @@ truefoundry/workflow/remote_filesystem/tfy_signed_url_client.py,sha256=xcT0wQmQl
368
368
  truefoundry/workflow/remote_filesystem/tfy_signed_url_fs.py,sha256=nSGPZu0Gyd_jz0KsEE-7w_BmnTD8CVF1S8cUJoxaCbc,13305
369
369
  truefoundry/workflow/task.py,sha256=ToitYiKcNzFCtOVQwz1W8sRjbR97eVS7vQBdbgUQtKg,1779
370
370
  truefoundry/workflow/workflow.py,sha256=WaTqUjhwfAXDWu4E5ehuwAxrCbDJkoAf1oWmR2E9Qy0,4575
371
- truefoundry-0.5.4.dist-info/METADATA,sha256=D0jCYkwZ0ZxsEWz5G1VkuNwn_Ibnv4cycSq4hYQ_C2c,2884
372
- truefoundry-0.5.4.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
373
- truefoundry-0.5.4.dist-info/entry_points.txt,sha256=TXvUxQkI6zmqJuycPsyxEIMr3oqfDjgrWj0m_9X12x4,95
374
- truefoundry-0.5.4.dist-info/RECORD,,
371
+ truefoundry-0.5.5.dist-info/METADATA,sha256=tAB2DHOeD0JgYGfDPp48HY1IU0b5zX1yOzMoYzrdbh0,2884
372
+ truefoundry-0.5.5.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
373
+ truefoundry-0.5.5.dist-info/entry_points.txt,sha256=TXvUxQkI6zmqJuycPsyxEIMr3oqfDjgrWj0m_9X12x4,95
374
+ truefoundry-0.5.5.dist-info/RECORD,,