podstack 1.3.3__tar.gz → 1.3.5__tar.gz

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.
Files changed (32) hide show
  1. {podstack-1.3.3 → podstack-1.3.5}/PKG-INFO +1 -1
  2. {podstack-1.3.3 → podstack-1.3.5}/podstack/gpu_runner.py +5 -0
  3. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/experiment.py +9 -0
  4. {podstack-1.3.3 → podstack-1.3.5}/podstack.egg-info/PKG-INFO +1 -1
  5. {podstack-1.3.3 → podstack-1.3.5}/pyproject.toml +1 -1
  6. {podstack-1.3.3 → podstack-1.3.5}/LICENSE +0 -0
  7. {podstack-1.3.3 → podstack-1.3.5}/README.md +0 -0
  8. {podstack-1.3.3 → podstack-1.3.5}/podstack/__init__.py +0 -0
  9. {podstack-1.3.3 → podstack-1.3.5}/podstack/annotations.py +0 -0
  10. {podstack-1.3.3 → podstack-1.3.5}/podstack/client.py +0 -0
  11. {podstack-1.3.3 → podstack-1.3.5}/podstack/exceptions.py +0 -0
  12. {podstack-1.3.3 → podstack-1.3.5}/podstack/execution.py +0 -0
  13. {podstack-1.3.3 → podstack-1.3.5}/podstack/models.py +0 -0
  14. {podstack-1.3.3 → podstack-1.3.5}/podstack/notebook.py +0 -0
  15. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/__init__.py +0 -0
  16. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/client.py +0 -0
  17. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/exceptions.py +0 -0
  18. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/model.py +0 -0
  19. {podstack-1.3.3 → podstack-1.3.5}/podstack/registry/model_utils.py +0 -0
  20. {podstack-1.3.3 → podstack-1.3.5}/podstack.egg-info/SOURCES.txt +0 -0
  21. {podstack-1.3.3 → podstack-1.3.5}/podstack.egg-info/dependency_links.txt +0 -0
  22. {podstack-1.3.3 → podstack-1.3.5}/podstack.egg-info/requires.txt +0 -0
  23. {podstack-1.3.3 → podstack-1.3.5}/podstack.egg-info/top_level.txt +0 -0
  24. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/__init__.py +0 -0
  25. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/app.py +0 -0
  26. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/exceptions.py +0 -0
  27. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/image.py +0 -0
  28. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/runner.py +0 -0
  29. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/secret.py +0 -0
  30. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/utils.py +0 -0
  31. {podstack-1.3.3 → podstack-1.3.5}/podstack_gpu/volume.py +0 -0
  32. {podstack-1.3.3 → podstack-1.3.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: podstack
3
- Version: 1.3.3
3
+ Version: 1.3.5
4
4
  Summary: Official Python SDK for Podstack GPU Notebook Platform
5
5
  Author-email: Podstack <support@podstack.ai>
6
6
  License-Expression: MIT
@@ -812,6 +812,11 @@ _stream_install(
812
812
  raise ConnectionError(f"Failed to get result after {max_retries} attempts: {e}")
813
813
  time.sleep(2 * (attempt + 1))
814
814
 
815
+ # Prefer the streamed output over the API result's output field,
816
+ # since __PODSTACK_RESULT__ is printed to stdout during execution.
817
+ if output_buffer:
818
+ result.output = "".join(output_buffer)
819
+
815
820
  if result.success:
816
821
  print(f"\n[Podstack] Completed in {result.gpu_seconds:.1f}s (cost: ₹{result.cost_paise/100:.2f})")
817
822
  else:
@@ -197,6 +197,11 @@ class Run:
197
197
  if self._client:
198
198
  self._client.log_artifact(local_path, artifact_path)
199
199
 
200
+ def log_model(self, model, artifact_path: str = "model", framework: str = None, metadata: Dict[str, str] = None):
201
+ """Serialize and log a model for this run."""
202
+ if self._client:
203
+ self._client.log_model(model, artifact_path=artifact_path, framework=framework, metadata=metadata)
204
+
200
205
  def set_tag(self, key: str, value: str):
201
206
  """Set a tag on this run."""
202
207
  if self._client:
@@ -209,6 +214,10 @@ class Run:
209
214
  self._client.end_run(status)
210
215
  self.status = status
211
216
 
217
+ def end_run(self, status: str = "completed"):
218
+ """End this run (alias for end())."""
219
+ self.end(status)
220
+
212
221
 
213
222
  def _parse_datetime(value: Any) -> Optional[datetime]:
214
223
  """Parse a datetime from string or return None."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: podstack
3
- Version: 1.3.3
3
+ Version: 1.3.5
4
4
  Summary: Official Python SDK for Podstack GPU Notebook Platform
5
5
  Author-email: Podstack <support@podstack.ai>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "podstack"
7
- version = "1.3.3"
7
+ version = "1.3.5"
8
8
  description = "Official Python SDK for Podstack GPU Notebook Platform"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes