chalkruntime 3.36.2__tar.gz → 3.36.4__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 (114) hide show
  1. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/PKG-INFO +1 -1
  2. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/entrypoint.py +14 -4
  3. chalkruntime-3.36.4/chalkruntime/utils/proto_bytes_cache.py +82 -0
  4. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime.egg-info/PKG-INFO +1 -1
  5. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime.egg-info/SOURCES.txt +1 -0
  6. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/pyproject.toml +1 -1
  7. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/README.md +0 -0
  8. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/__init__.py +0 -0
  9. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/constants.py +0 -0
  10. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/dataframe/__init__.py +0 -0
  11. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/dataframe/dataframe.py +0 -0
  12. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/dataframe/lazyframe.py +0 -0
  13. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/exc/__init__.py +0 -0
  14. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/exc/failed_argument.py +0 -0
  15. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/exc/resolver_errors.py +0 -0
  16. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/exc/wrapped_resolver_exception.py +0 -0
  17. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/__init__.py +0 -0
  18. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/chalk_overload.py +0 -0
  19. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/convert_chalkpy_underscore.py +0 -0
  20. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/feature.py +0 -0
  21. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/filter_conversion.py +0 -0
  22. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/global_graph.py +0 -0
  23. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/graph.py +0 -0
  24. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/graph_impl.py +0 -0
  25. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/graph_proxy.py +0 -0
  26. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/graph_state.py +0 -0
  27. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/jinja_parser.py +0 -0
  28. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/materializations.py +0 -0
  29. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/maybe_named_collection.py +0 -0
  30. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/named_query.py +0 -0
  31. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/nearest_neighbor.py +0 -0
  32. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/overlay_graph.py +0 -0
  33. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/prompt_service.py +0 -0
  34. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/protograph_deserializer.py +0 -0
  35. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/protograph_serializer.py +0 -0
  36. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/resolver.py +0 -0
  37. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/singletons.py +0 -0
  38. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/sklearn_model_parser.py +0 -0
  39. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/stream_resolver.py +0 -0
  40. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/underscore.py +0 -0
  41. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/underscore_codec_info.py +0 -0
  42. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/underscore_operation_registry.py +0 -0
  43. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/graph/variables.py +0 -0
  44. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/heaptrack_launcher.py +0 -0
  45. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/incrementalization/__init__.py +0 -0
  46. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/incrementalization/group_incrementalizer.py +0 -0
  47. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/incrementalization/incrementalizer.py +0 -0
  48. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/__init__.py +0 -0
  49. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/batch_result_collector.py +0 -0
  50. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/bound_invoker.py +0 -0
  51. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/bound_invoker_cache.py +0 -0
  52. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/general_bound_invoker.py +0 -0
  53. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/no_arg_scalar_invoker.py +0 -0
  54. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/one_to_one_invoker.py +0 -0
  55. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/overlay_features.py +0 -0
  56. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/parse_external_resolver.py +0 -0
  57. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/partition_batch.py +0 -0
  58. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/query_execution_parameters.py +0 -0
  59. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_args_builder.py +0 -0
  60. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_input.py +0 -0
  61. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_input_upload.py +0 -0
  62. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_output_metadata.py +0 -0
  63. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_raw_output_parsing.py +0 -0
  64. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_result.py +0 -0
  65. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/resolver_runner.py +0 -0
  66. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/sample.py +0 -0
  67. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/validator.py +0 -0
  68. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/invoker/vectorized_hasmany_sampler.py +0 -0
  69. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/loader/__init__.py +0 -0
  70. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/loader/converter.py +0 -0
  71. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/loader/importer.py +0 -0
  72. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/memray_launcher.py +0 -0
  73. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/metadata.py +0 -0
  74. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/py.typed +0 -0
  75. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/__init__.py +0 -0
  76. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/branch_model_endpoint_config.py +0 -0
  77. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/config.py +0 -0
  78. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/env_helper.py +0 -0
  79. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/remote_python_function_registry_client.py +0 -0
  80. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/server/service.py +0 -0
  81. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/__init__.py +0 -0
  82. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/composed_rewriter.py +0 -0
  83. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/contextual_query_rewriter.py +0 -0
  84. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/filter_query_rewriter.py +0 -0
  85. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/identity_rewriter.py +0 -0
  86. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/query_rewriter.py +0 -0
  87. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/sql_rewriter/query_rewriter_helper.py +0 -0
  88. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/__init__.py +0 -0
  89. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/converter_utils.py +0 -0
  90. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/exc.py +0 -0
  91. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/message_parsing.py +0 -0
  92. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/resolver_utils.py +0 -0
  93. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/streaming_invoker_kernel/__init__.py +0 -0
  94. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/streaming_invoker_kernel/local_streaming_invoker_kernel.py +0 -0
  95. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/types.py +0 -0
  96. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/streaming/window_keys.py +0 -0
  97. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/__init__.py +0 -0
  98. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/async_helpers.py +0 -0
  99. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/contextvars.py +0 -0
  100. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/datadog.py +0 -0
  101. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/internal_pl_utils.py +0 -0
  102. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/posix_file_lock.py +0 -0
  103. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/tracing.py +0 -0
  104. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/utils/viztracer_profiling.py +0 -0
  105. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime/valgrind_launcher.py +0 -0
  106. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime.egg-info/dependency_links.txt +0 -0
  107. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime.egg-info/requires.txt +0 -0
  108. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/chalkruntime.egg-info/top_level.txt +0 -0
  109. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/setup.cfg +0 -0
  110. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/setup.py +0 -0
  111. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/tests/test_branch_model_endpoint_config.py +0 -0
  112. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/tests/test_captured_global_function_refs.py +0 -0
  113. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/tests/test_graph_cache.py +0 -0
  114. {chalkruntime-3.36.2 → chalkruntime-3.36.4}/tests/test_posix_file_lock.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chalkruntime
3
- Version: 3.36.2
3
+ Version: 3.36.4
4
4
  Summary: Runtime support library for Chalk AI
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -79,6 +79,7 @@ from chalkruntime.loader.importer import (
79
79
  from chalkruntime.server.config import Config
80
80
  from chalkruntime.server.service import ImportGraphResult, InvokerService
81
81
  from chalkruntime.utils.datadog import get_datadog_kwargs
82
+ from chalkruntime.utils.proto_bytes_cache import load_proto_bytes_with_cache
82
83
 
83
84
  if TYPE_CHECKING:
84
85
  from azure.core.credentials import TokenCredential
@@ -199,11 +200,20 @@ def _grpc_server_thread(grpc_query_server: CppGrpcServer, finished_event: Future
199
200
 
200
201
  def _export_from_bucket(filename: str, storage_client: StorageClient) -> export_pb2.Export:
201
202
  """Download a pre-generated Export proto from cloud storage."""
202
- buf = io.BytesIO()
203
- storage_client.download_object(filename, buf)
204
- buf.seek(0)
203
+
204
+ def _download(uri: str) -> bytes:
205
+ buf = io.BytesIO()
206
+ storage_client.download_object(uri, buf)
207
+ return buf.getvalue()
208
+
209
+ proto_export_bytes = load_proto_bytes_with_cache(
210
+ uri=filename,
211
+ download=_download,
212
+ cache_dir=os.getenv("CHALK_PROTO_GRAPH_CACHE_DIR"),
213
+ proto_label="proto export",
214
+ )
205
215
  proto_export = export_pb2.Export()
206
- proto_export.ParseFromString(buf.read())
216
+ proto_export.ParseFromString(proto_export_bytes)
207
217
  return proto_export
208
218
 
209
219
 
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ import logging
5
+ import os
6
+ import tempfile
7
+ from collections.abc import Callable
8
+ from pathlib import Path
9
+
10
+ from chalkruntime.utils.posix_file_lock import posix_file_lock
11
+
12
+ _logger = logging.getLogger(__name__)
13
+
14
+ DEFAULT_PROTO_BYTES_CACHE_DIR = "/tmp/chalk_proto_graph_cache"
15
+
16
+
17
+ def load_proto_bytes_with_cache(
18
+ *,
19
+ uri: str,
20
+ download: Callable[[str], bytes],
21
+ cache_dir: str | os.PathLike[str] | None = None,
22
+ proto_label: str = "proto bytes",
23
+ ) -> bytes:
24
+ """Return downloaded proto bytes for `uri`, using an on-disk cache + file lock."""
25
+ resolved_cache_dir = Path(cache_dir) if cache_dir else Path(DEFAULT_PROTO_BYTES_CACHE_DIR)
26
+ cache_key = hashlib.sha256(uri.encode("utf-8")).hexdigest()
27
+ cache_path = resolved_cache_dir / f"{cache_key}.pb"
28
+ lock_path = resolved_cache_dir / f"{cache_key}.lock"
29
+
30
+ with posix_file_lock(lock_path):
31
+ if cache_path.exists():
32
+ try:
33
+ cached_bytes = cache_path.read_bytes()
34
+ except OSError:
35
+ _logger.warning(
36
+ "Failed to read %s cache at %s; re-downloading from %s",
37
+ proto_label,
38
+ cache_path,
39
+ uri,
40
+ exc_info=True,
41
+ )
42
+ else:
43
+ _logger.info(
44
+ "Loaded %s (%d bytes) from cache %s for uri=%s",
45
+ proto_label,
46
+ len(cached_bytes),
47
+ cache_path,
48
+ uri,
49
+ )
50
+ return cached_bytes
51
+
52
+ proto_bytes = download(uri)
53
+ _logger.info(
54
+ "Downloaded %s (%d bytes) from %s; writing cache to %s",
55
+ proto_label,
56
+ len(proto_bytes),
57
+ uri,
58
+ cache_path,
59
+ )
60
+ _atomic_write_bytes(cache_path, proto_bytes)
61
+ return proto_bytes
62
+
63
+
64
+ def _atomic_write_bytes(path: Path, data: bytes) -> None:
65
+ path.parent.mkdir(parents=True, exist_ok=True)
66
+ fd, tmp_name = tempfile.mkstemp(
67
+ dir=path.parent,
68
+ prefix=f".{path.name}.",
69
+ suffix=".tmp",
70
+ )
71
+ try:
72
+ with os.fdopen(fd, "wb") as tmp:
73
+ tmp.write(data)
74
+ tmp.flush()
75
+ os.fsync(tmp.fileno())
76
+ os.replace(tmp_name, path)
77
+ except BaseException:
78
+ try:
79
+ os.unlink(tmp_name)
80
+ except FileNotFoundError:
81
+ pass
82
+ raise
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chalkruntime
3
- Version: 3.36.2
3
+ Version: 3.36.4
4
4
  Summary: Runtime support library for Chalk AI
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -141,6 +141,7 @@ chalkruntime/utils/contextvars.py
141
141
  chalkruntime/utils/datadog.py
142
142
  chalkruntime/utils/internal_pl_utils.py
143
143
  chalkruntime/utils/posix_file_lock.py
144
+ chalkruntime/utils/proto_bytes_cache.py
144
145
  chalkruntime/utils/tracing.py
145
146
  chalkruntime/utils/viztracer_profiling.py
146
147
  tests/test_branch_model_endpoint_config.py
@@ -42,7 +42,7 @@ name = "chalkruntime"
42
42
  description = "Runtime support library for Chalk AI"
43
43
  readme = "README.md"
44
44
  requires-python = ">=3.10"
45
- version = "3.36.2"
45
+ version = "3.36.4"
46
46
 
47
47
 
48
48
  [tool.deptry]
File without changes
File without changes
File without changes