visionai-sdk-python 2.2.0.dev3__tar.gz → 2.2.0.dev4__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 (62) hide show
  1. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/.gitignore +2 -0
  2. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/PKG-INFO +4 -3
  3. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/README.md +3 -2
  4. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/pyproject.toml +3 -0
  5. visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples/__init__.py +28 -0
  6. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/PKG-INFO +4 -3
  7. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/SOURCES.txt +10 -9
  8. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/scm_file_list.json +9 -8
  9. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/scm_version.json +2 -2
  10. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/relay/test_protocol.py +7 -8
  11. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/.github/dependabot.yml +0 -0
  12. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/.github/workflows/ci.yml +0 -0
  13. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/.github/workflows/publish.yml +0 -0
  14. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/setup.cfg +0 -0
  15. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/__init__.py +0 -0
  16. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/_base.py +0 -0
  17. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/_jwt_verifier.py +0 -0
  18. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/_request_attribution.py +0 -0
  19. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/_source_header.py +0 -0
  20. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/async_client.py +0 -0
  21. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/__init__.py +0 -0
  22. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/_mixin.py +0 -0
  23. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/async_resource.py +0 -0
  24. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/credentials.py +0 -0
  25. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/models.py +0 -0
  26. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/auth/resource.py +0 -0
  27. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/client.py +0 -0
  28. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/constants.py +0 -0
  29. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/endpoints.py +0 -0
  30. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/exceptions.py +0 -0
  31. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/instrumentation.py +0 -0
  32. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/py.typed +0 -0
  33. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/relay/__init__.py +0 -0
  34. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/error_connection.json +0 -0
  35. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/error_request.json +0 -0
  36. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/heartbeat.json +0 -0
  37. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/register.json +0 -0
  38. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/registered.json +0 -0
  39. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/request.json +0 -0
  40. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/response.json +0 -0
  41. {visionai_sdk_python-2.2.0.dev3/tests/relay/fixtures/adr → visionai_sdk_python-2.2.0.dev4/src/visionai_sdk_python/relay/examples}/response_text.json +0 -0
  42. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/relay/protocol.py +0 -0
  43. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/__init__.py +0 -0
  44. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/_mixin.py +0 -0
  45. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/async_resource.py +0 -0
  46. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/models.py +0 -0
  47. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/preprocess.py +0 -0
  48. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python/vlm/resource.py +0 -0
  49. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/dependency_links.txt +0 -0
  50. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/requires.txt +0 -0
  51. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/src/visionai_sdk_python.egg-info/top_level.txt +0 -0
  52. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/__init__.py +0 -0
  53. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/constants.py +0 -0
  54. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/relay/__init__.py +0 -0
  55. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test__base.py +0 -0
  56. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_async_client.py +0 -0
  57. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_client.py +0 -0
  58. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_credentials.py +0 -0
  59. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_instrumentation.py +0 -0
  60. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_request.py +0 -0
  61. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/tests/test_vlm_preprocess.py +0 -0
  62. {visionai_sdk_python-2.2.0.dev3 → visionai_sdk_python-2.2.0.dev4}/uv.lock +0 -0
@@ -67,6 +67,8 @@ dmypy.json
67
67
 
68
68
  # Local test usage
69
69
  examples/
70
+ # The relay protocol's ADR examples are package data, not scratch files.
71
+ !src/visionai_sdk_python/relay/examples/
70
72
 
71
73
  # Claude
72
74
  .claude/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: visionai-sdk-python
3
- Version: 2.2.0.dev3
3
+ Version: 2.2.0.dev4
4
4
  Summary: VisionAI SDK for Python
5
5
  Author-email: Tony Yang <tonyyang@linkervision.com>
6
6
  Requires-Python: >=3.11
@@ -170,8 +170,9 @@ authentication wins. `vlm_url` is optional for clients that only authenticate.
170
170
  platform-edge-agent: the frame models, the constants and `parse_agent_frame()` /
171
171
  `parse_relay_frame()` / `dump_frame()`. The spec is platform-service's
172
172
  `docs/adr/0001-relay-protocol.md`; both sides import this module instead of keeping a
173
- copy, and the ADR's JSON examples are this package's tests. It is internal to the
174
- platform and not a public API.
173
+ copy. The ADR's JSON examples ship with it (`visionai_sdk_python.relay.examples`:
174
+ `example(name)` / `example_text(name)`), so every implementation tests against the same
175
+ frames. It is internal to the platform and not a public API.
175
176
 
176
177
  ## VLM Inference
177
178
 
@@ -152,8 +152,9 @@ authentication wins. `vlm_url` is optional for clients that only authenticate.
152
152
  platform-edge-agent: the frame models, the constants and `parse_agent_frame()` /
153
153
  `parse_relay_frame()` / `dump_frame()`. The spec is platform-service's
154
154
  `docs/adr/0001-relay-protocol.md`; both sides import this module instead of keeping a
155
- copy, and the ADR's JSON examples are this package's tests. It is internal to the
156
- platform and not a public API.
155
+ copy. The ADR's JSON examples ship with it (`visionai_sdk_python.relay.examples`:
156
+ `example(name)` / `example_text(name)`), so every implementation tests against the same
157
+ frames. It is internal to the platform and not a public API.
157
158
 
158
159
  ## VLM Inference
159
160
 
@@ -32,6 +32,9 @@ build-backend = "setuptools.build_meta"
32
32
 
33
33
  [tool.setuptools_scm]
34
34
 
35
+ [tool.setuptools.package-data]
36
+ "visionai_sdk_python.relay.examples" = ["*.json"]
37
+
35
38
  [tool.uv]
36
39
  # Mitigate supply chain attacks. Kept in sync with
37
40
  # .github/dependabot.yml's cooldown.default-days (3 days, matching the
@@ -0,0 +1,28 @@
1
+ """The ADR's JSON examples, shipped so every implementation tests against the same frames.
2
+
3
+ ``example("register")`` is the parsed object, ``example_text("register")`` the wire text.
4
+ """
5
+
6
+ import json
7
+ from importlib.resources import files
8
+
9
+ NAMES = (
10
+ "register",
11
+ "registered",
12
+ "heartbeat",
13
+ "request",
14
+ "response",
15
+ "response_text",
16
+ "error_request",
17
+ "error_connection",
18
+ )
19
+
20
+
21
+ def example_text(name: str) -> str:
22
+ """One ADR example as the text that goes over the wire."""
23
+ return (files(__package__) / f"{name}.json").read_text(encoding="utf-8")
24
+
25
+
26
+ def example(name: str) -> dict:
27
+ """One ADR example as a dict, for building or comparing frames in tests."""
28
+ return json.loads(example_text(name))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: visionai-sdk-python
3
- Version: 2.2.0.dev3
3
+ Version: 2.2.0.dev4
4
4
  Summary: VisionAI SDK for Python
5
5
  Author-email: Tony Yang <tonyyang@linkervision.com>
6
6
  Requires-Python: >=3.11
@@ -170,8 +170,9 @@ authentication wins. `vlm_url` is optional for clients that only authenticate.
170
170
  platform-edge-agent: the frame models, the constants and `parse_agent_frame()` /
171
171
  `parse_relay_frame()` / `dump_frame()`. The spec is platform-service's
172
172
  `docs/adr/0001-relay-protocol.md`; both sides import this module instead of keeping a
173
- copy, and the ADR's JSON examples are this package's tests. It is internal to the
174
- platform and not a public API.
173
+ copy. The ADR's JSON examples ship with it (`visionai_sdk_python.relay.examples`:
174
+ `example(name)` / `example_text(name)`), so every implementation tests against the same
175
+ frames. It is internal to the platform and not a public API.
175
176
 
176
177
  ## VLM Inference
177
178
 
@@ -32,6 +32,15 @@ src/visionai_sdk_python/auth/models.py
32
32
  src/visionai_sdk_python/auth/resource.py
33
33
  src/visionai_sdk_python/relay/__init__.py
34
34
  src/visionai_sdk_python/relay/protocol.py
35
+ src/visionai_sdk_python/relay/examples/__init__.py
36
+ src/visionai_sdk_python/relay/examples/error_connection.json
37
+ src/visionai_sdk_python/relay/examples/error_request.json
38
+ src/visionai_sdk_python/relay/examples/heartbeat.json
39
+ src/visionai_sdk_python/relay/examples/register.json
40
+ src/visionai_sdk_python/relay/examples/registered.json
41
+ src/visionai_sdk_python/relay/examples/request.json
42
+ src/visionai_sdk_python/relay/examples/response.json
43
+ src/visionai_sdk_python/relay/examples/response_text.json
35
44
  src/visionai_sdk_python/vlm/__init__.py
36
45
  src/visionai_sdk_python/vlm/_mixin.py
37
46
  src/visionai_sdk_python/vlm/async_resource.py
@@ -48,12 +57,4 @@ tests/test_instrumentation.py
48
57
  tests/test_request.py
49
58
  tests/test_vlm_preprocess.py
50
59
  tests/relay/__init__.py
51
- tests/relay/test_protocol.py
52
- tests/relay/fixtures/adr/error_connection.json
53
- tests/relay/fixtures/adr/error_request.json
54
- tests/relay/fixtures/adr/heartbeat.json
55
- tests/relay/fixtures/adr/register.json
56
- tests/relay/fixtures/adr/registered.json
57
- tests/relay/fixtures/adr/request.json
58
- tests/relay/fixtures/adr/response.json
59
- tests/relay/fixtures/adr/response_text.json
60
+ tests/relay/test_protocol.py
@@ -25,6 +25,15 @@
25
25
  "src/visionai_sdk_python/instrumentation.py",
26
26
  "src/visionai_sdk_python/py.typed",
27
27
  "src/visionai_sdk_python/relay/__init__.py",
28
+ "src/visionai_sdk_python/relay/examples/__init__.py",
29
+ "src/visionai_sdk_python/relay/examples/error_connection.json",
30
+ "src/visionai_sdk_python/relay/examples/error_request.json",
31
+ "src/visionai_sdk_python/relay/examples/heartbeat.json",
32
+ "src/visionai_sdk_python/relay/examples/register.json",
33
+ "src/visionai_sdk_python/relay/examples/registered.json",
34
+ "src/visionai_sdk_python/relay/examples/request.json",
35
+ "src/visionai_sdk_python/relay/examples/response.json",
36
+ "src/visionai_sdk_python/relay/examples/response_text.json",
28
37
  "src/visionai_sdk_python/relay/protocol.py",
29
38
  "src/visionai_sdk_python/vlm/__init__.py",
30
39
  "src/visionai_sdk_python/vlm/_mixin.py",
@@ -35,14 +44,6 @@
35
44
  "tests/__init__.py",
36
45
  "tests/constants.py",
37
46
  "tests/relay/__init__.py",
38
- "tests/relay/fixtures/adr/error_connection.json",
39
- "tests/relay/fixtures/adr/error_request.json",
40
- "tests/relay/fixtures/adr/heartbeat.json",
41
- "tests/relay/fixtures/adr/register.json",
42
- "tests/relay/fixtures/adr/registered.json",
43
- "tests/relay/fixtures/adr/request.json",
44
- "tests/relay/fixtures/adr/response.json",
45
- "tests/relay/fixtures/adr/response_text.json",
46
47
  "tests/relay/test_protocol.py",
47
48
  "tests/test__base.py",
48
49
  "tests/test_async_client.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "2.2.0.dev3",
2
+ "tag": "2.2.0.dev4",
3
3
  "distance": 0,
4
- "node": "g33d14e37988767f78ffc344ae07033c41e85d7bf",
4
+ "node": "gc851da12b0ae901b04a22a963d81b8fba6fe5f26",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-21"
@@ -1,7 +1,6 @@
1
1
  """The relay wire format: the ADR's JSON examples parse on both sides, bad frames say why."""
2
2
 
3
3
  import json
4
- from pathlib import Path
5
4
 
6
5
  import pytest
7
6
 
@@ -18,13 +17,8 @@ from visionai_sdk_python.relay import (
18
17
  parse_agent_frame,
19
18
  parse_relay_frame,
20
19
  )
21
-
22
- FIXTURES = Path(__file__).parent / "fixtures" / "adr"
23
-
24
-
25
- def example(name: str) -> str:
26
- """One of the ADR's JSON examples, as the text that goes over the wire."""
27
- return (FIXTURES / f"{name}.json").read_text()
20
+ from visionai_sdk_python.relay.examples import NAMES
21
+ from visionai_sdk_python.relay.examples import example_text as example
28
22
 
29
23
 
30
24
  @pytest.mark.parametrize(
@@ -174,3 +168,8 @@ def test_dump_frame_drops_none_fields():
174
168
  )
175
169
  def test_workspace_id_format(value, ok):
176
170
  assert is_workspace_id(value) is ok
171
+
172
+
173
+ def test_every_shipped_example_is_valid_json_with_a_type():
174
+ for name in NAMES:
175
+ assert isinstance(json.loads(example(name))["type"], str), name