reactor-runtime 2.9.2__tar.gz → 2.9.3__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 (134) hide show
  1. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/PKG-INFO +1 -1
  2. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/pyproject.toml +1 -1
  3. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/h264.py +14 -6
  4. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/h265.py +13 -18
  5. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime.egg-info/PKG-INFO +1 -1
  6. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/README.md +0 -0
  7. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/setup.cfg +0 -0
  8. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/api/__init__.py +0 -0
  9. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/__init__.py +0 -0
  10. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/config.py +0 -0
  11. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/experiment/__init__.py +0 -0
  12. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/experiment/session.py +0 -0
  13. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/__init__.py +0 -0
  14. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/client.py +0 -0
  15. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/defaults.py +0 -0
  16. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/driver/__init__.py +0 -0
  17. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/driver/pipeline_executor.py +0 -0
  18. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/driver/step_result.py +0 -0
  19. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/events/__init__.py +0 -0
  20. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/events/connected.py +0 -0
  21. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/events/event.py +0 -0
  22. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/events/messages.py +0 -0
  23. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/events/upload.py +0 -0
  24. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/internal/__init__.py +0 -0
  25. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/internal/input_buffer.py +0 -0
  26. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/internal/output_buffer.py +0 -0
  27. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/internal/reactor_core.py +0 -0
  28. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/model/__init__.py +0 -0
  29. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/model/decorators.py +0 -0
  30. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/model/handlers.py +0 -0
  31. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/model/reactor_model.py +0 -0
  32. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/pipeline/__init__.py +0 -0
  33. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/pipeline/idle.py +0 -0
  34. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/pipeline/input_state.py +0 -0
  35. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/pipeline/reactor_pipeline.py +0 -0
  36. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/tracks/__init__.py +0 -0
  37. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/tracks/descriptors.py +0 -0
  38. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/tracks/input.py +0 -0
  39. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/tracks/output.py +0 -0
  40. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/interface/upload.py +0 -0
  41. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/model_state.py +0 -0
  42. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/__init__.py +0 -0
  43. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/backends/__init__.py +0 -0
  44. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/backends/base.py +0 -0
  45. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/backends/file.py +0 -0
  46. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/backends/otlp.py +0 -0
  47. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/helpers.py +0 -0
  48. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/nvml_sampler.py +0 -0
  49. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/plotting/__init__.py +0 -0
  50. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/plotting/plot_profiling.py +0 -0
  51. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/profiler.py +0 -0
  52. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/singleton.py +0 -0
  53. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/profiling/torch_chunk_profiler.py +0 -0
  54. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/realtime/__init__.py +0 -0
  55. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/realtime/pipeline.py +0 -0
  56. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/__init__.py +0 -0
  57. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/chunk_encoder.py +0 -0
  58. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/chunk_uploader.py +0 -0
  59. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/config.py +0 -0
  60. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/markers.py +0 -0
  61. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/session_recorder.py +0 -0
  62. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/sinks.py +0 -0
  63. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/recording/track_resolver.py +0 -0
  64. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/runtime_api.py +0 -0
  65. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/runtimes/http/config.py +0 -0
  66. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/runtimes/http/http_runtime.py +0 -0
  67. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/runtimes/http/types.py +0 -0
  68. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/schema.py +0 -0
  69. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/schema_validator.py +0 -0
  70. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/__init__.py +0 -0
  71. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/__main__.py +0 -0
  72. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/commands/__init__.py +0 -0
  73. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/commands/run.py +0 -0
  74. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/commands/schema.py +0 -0
  75. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/main.py +0 -0
  76. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/utils/__init__.py +0 -0
  77. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/utils/config.py +0 -0
  78. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/serve/utils/runtime.py +0 -0
  79. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/__init__.py +0 -0
  80. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/config.py +0 -0
  81. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/events.py +0 -0
  82. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/__init__.py +0 -0
  83. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/client.py +0 -0
  84. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/__init__.py +0 -0
  85. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/av1.py +0 -0
  86. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/base.py +0 -0
  87. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/factory.py +0 -0
  88. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/h264.py +0 -0
  89. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/h265.py +0 -0
  90. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/opus.py +0 -0
  91. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/vp8.py +0 -0
  92. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/decoders/vp9.py +0 -0
  93. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/__init__.py +0 -0
  94. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/av1.py +0 -0
  95. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/base.py +0 -0
  96. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/factory.py +0 -0
  97. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/opus.py +0 -0
  98. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/vp8.py +0 -0
  99. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/encoders/vp9.py +0 -0
  100. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/gst.py +0 -0
  101. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/gst_helpers.py +0 -0
  102. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/probes/__init__.py +0 -0
  103. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/probes/fps_probe.py +0 -0
  104. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/quality.py +0 -0
  105. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/receiver/__init__.py +0 -0
  106. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/receiver/audio.py +0 -0
  107. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/receiver/base.py +0 -0
  108. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/receiver/video.py +0 -0
  109. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sdp/__init__.py +0 -0
  110. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sdp/bundle.py +0 -0
  111. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sdp/codec.py +0 -0
  112. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sdp/extmap.py +0 -0
  113. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sdp/ice.py +0 -0
  114. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sender/__init__.py +0 -0
  115. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sender/audio.py +0 -0
  116. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sender/base.py +0 -0
  117. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/sender/video.py +0 -0
  118. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/settings.py +0 -0
  119. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/gstreamer/signals.py +0 -0
  120. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/ice_uris.py +0 -0
  121. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/interface.py +0 -0
  122. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/media.py +0 -0
  123. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/transports/types.py +0 -0
  124. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/launch.py +0 -0
  125. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/loader.py +0 -0
  126. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/log.py +0 -0
  127. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/messages.py +0 -0
  128. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/paths.py +0 -0
  129. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/ports.py +0 -0
  130. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime/utils/typing.py +0 -0
  131. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime.egg-info/SOURCES.txt +0 -0
  132. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime.egg-info/dependency_links.txt +0 -0
  133. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime.egg-info/requires.txt +0 -0
  134. {reactor_runtime-2.9.2 → reactor_runtime-2.9.3}/src/reactor_runtime.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reactor_runtime
3
- Version: 2.9.2
3
+ Version: 2.9.3
4
4
  Summary: Reactor runtime with public model API
5
5
  Author-email: Reactor <team@reactor.inc>
6
6
  Requires-Python: >=3.9
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "reactor_runtime"
7
- version = "2.9.2"
7
+ version = "2.9.3"
8
8
  description = "Reactor runtime with public model API"
9
9
  authors = [
10
10
  { name = "Reactor", email = "team@reactor.inc" }
@@ -166,13 +166,21 @@ class H264EncoderBin(BaseEncoderBin):
166
166
  try_set_property(self._pay, "ssrc", ssrc)
167
167
 
168
168
  # ---------------------------------------------------------
169
- # Enforce negotiated profile/level
169
+ # Enforce negotiated profile only — NOT level.
170
170
  # ---------------------------------------------------------
171
- profile, level = h264_plid_to_gst_profile_level(profile_level_id)
172
-
173
- caps = Gst.Caps.from_string(
174
- f"video/x-h264,profile=(string){profile},level=(string){level}"
175
- )
171
+ # The SDP profile-level-id encodes a level (e.g. 42e01f -> 3.1) that is
172
+ # only valid up to ~720p. Pinning that level in the capsfilter caps the
173
+ # encoder below the actual resolution: at 2K the encoded stream is
174
+ # ~level 5.x, the level-3.1 capsfilter fails to negotiate, and the whole
175
+ # send branch stalls with `not-negotiated` — zero RTP ever leaves. VP8
176
+ # (no level) is unaffected, which is why it works over the same path.
177
+ #
178
+ # Pin the profile only. x264/NVENC pick a level valid for the resolution,
179
+ # and receivers (incl. Safari) match on the profile, not the exact level.
180
+ # (`h264_plid_to_gst_profile_level` still validates the negotiated id.)
181
+ profile, _level = h264_plid_to_gst_profile_level(profile_level_id)
182
+
183
+ caps = Gst.Caps.from_string(f"video/x-h264,profile=(string){profile}")
176
184
 
177
185
  try_set_property(self._capsfilter, "caps", caps)
178
186
 
@@ -13,11 +13,19 @@ def h265_fmtp_to_x265_option_string(fmtp: Dict[str, Optional[str]]) -> str:
13
13
  """
14
14
  Map HEVC SDP fmtp (RFC 7798) keys to ``x265enc`` ``option-string`` tokens.
15
15
 
16
- SDP ``tier-flag`` and ``level-id`` are mapped to ``high-tier`` and
17
- ``level-idc`` respectively. ``profile-id`` is intentionally omitted:
18
- GStreamer's x265enc enforces profile through caps negotiation (calling
19
- x265_param_apply_profile internally), not via x265_param_parse — passing
20
- ``profile=...`` in option-string causes an encoder init failure.
16
+ SDP ``tier-flag`` is mapped to ``high-tier``. ``profile-id`` is
17
+ intentionally omitted: GStreamer's x265enc enforces profile through caps
18
+ negotiation (calling x265_param_apply_profile internally), not via
19
+ x265_param_parse — passing ``profile=...`` in option-string causes an
20
+ encoder init failure.
21
+
22
+ ``level-id`` is intentionally NOT mapped to ``level-idc``. The offered
23
+ level-id advertises the receiver's decode ceiling, and forcing it onto
24
+ the encoder makes x265 refuse to initialize for any frame above that
25
+ level's budget (Safari offers level-id=93 = level 3.1, ~720p), silently
26
+ stalling the sender branch. x265 derives a resolution-valid level and
27
+ writes it into the bitstream; receivers decode based on that, and in
28
+ practice tolerate streams above their advertised ceiling.
21
29
 
22
30
  Unrecognized or missing values are omitted so the encoder can use defaults.
23
31
  """
@@ -36,19 +44,6 @@ def h265_fmtp_to_x265_option_string(fmtp: Dict[str, Optional[str]]) -> str:
36
44
  elif tier == "0":
37
45
  parts.append("high-tier=0")
38
46
 
39
- level = _get("level-id")
40
- if level is not None:
41
- try:
42
- lid = int(level)
43
- except ValueError:
44
- lid = -1
45
- if 0 <= lid <= 255:
46
- level_idc = lid / 30
47
- if level_idc == int(level_idc):
48
- parts.append(f"level-idc={int(level_idc)}")
49
- else:
50
- parts.append(f"level-idc={level_idc:.1f}")
51
-
52
47
  return ":".join(parts)
53
48
 
54
49
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reactor_runtime
3
- Version: 2.9.2
3
+ Version: 2.9.3
4
4
  Summary: Reactor runtime with public model API
5
5
  Author-email: Reactor <team@reactor.inc>
6
6
  Requires-Python: >=3.9