projectdavid 1.32.19__tar.gz → 1.32.21__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.

Potentially problematic release.


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

Files changed (68) hide show
  1. {projectdavid-1.32.19 → projectdavid-1.32.21}/CHANGELOG.md +14 -0
  2. {projectdavid-1.32.19/src/projectdavid.egg-info → projectdavid-1.32.21}/PKG-INFO +1 -1
  3. {projectdavid-1.32.19 → projectdavid-1.32.21}/pyproject.toml +1 -1
  4. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/synchronous_inference_wrapper.py +19 -24
  5. {projectdavid-1.32.19 → projectdavid-1.32.21/src/projectdavid.egg-info}/PKG-INFO +1 -1
  6. {projectdavid-1.32.19 → projectdavid-1.32.21}/LICENSE +0 -0
  7. {projectdavid-1.32.19 → projectdavid-1.32.21}/MANIFEST.in +0 -0
  8. {projectdavid-1.32.19 → projectdavid-1.32.21}/README.md +0 -0
  9. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/assistants.md +0 -0
  10. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/code_interpretation.md +0 -0
  11. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/database.md +0 -0
  12. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/database_assistant_example.md +0 -0
  13. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/docker_comtainers.md +0 -0
  14. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/file_search.md +0 -0
  15. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/files.md +0 -0
  16. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/function_call_definition.md +0 -0
  17. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/function_calls.md +0 -0
  18. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/handling_function_calls.md +0 -0
  19. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/inference.md +0 -0
  20. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/messages.md +0 -0
  21. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/runs.md +0 -0
  22. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/streams.md +0 -0
  23. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/threads.md +0 -0
  24. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/tools.md +0 -0
  25. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/users.md +0 -0
  26. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/vector_store.md +0 -0
  27. {projectdavid-1.32.19 → projectdavid-1.32.21}/docs/versioning.md +0 -0
  28. {projectdavid-1.32.19 → projectdavid-1.32.21}/setup.cfg +0 -0
  29. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/__init__.py +0 -0
  30. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/_version.py +0 -0
  31. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/actions_client.py +0 -0
  32. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/api_key_client.py +0 -0
  33. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/assistants_client.py +0 -0
  34. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/base_client.py +0 -0
  35. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/base_vector_store.py +0 -0
  36. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/event_handler.py +0 -0
  37. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/file_processor.py +0 -0
  38. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/file_search.py +0 -0
  39. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/files_client.py +0 -0
  40. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/inference_client.py +0 -0
  41. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/messages_client.py +0 -0
  42. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/runs.py +0 -0
  43. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/threads_client.py +0 -0
  44. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/tools_client.py +0 -0
  45. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/users_client.py +0 -0
  46. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/vector_store_manager.py +0 -0
  47. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/clients/vectors.py +0 -0
  48. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/constants/platform.py +0 -0
  49. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/entity.py +0 -0
  50. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/events.py +0 -0
  51. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/serializers.py +0 -0
  52. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/services/logging_service.py +0 -0
  53. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/synthesis/__init__.py +0 -0
  54. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
  55. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/synthesis/prompt.py +0 -0
  56. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/synthesis/reranker.py +0 -0
  57. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/synthesis/retriever.py +0 -0
  58. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/__init__.py +0 -0
  59. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/function_call_suppressor.py +0 -0
  60. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/monitor_launcher.py +0 -0
  61. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/peek_gate.py +0 -0
  62. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/run_monitor.py +0 -0
  63. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid/utils/vector_search_formatter.py +0 -0
  64. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid.egg-info/SOURCES.txt +0 -0
  65. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid.egg-info/dependency_links.txt +0 -0
  66. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid.egg-info/requires.txt +0 -0
  67. {projectdavid-1.32.19 → projectdavid-1.32.21}/src/projectdavid.egg-info/top_level.txt +0 -0
  68. {projectdavid-1.32.19 → projectdavid-1.32.21}/tests/test_clients.py +0 -0
@@ -1,3 +1,17 @@
1
+ ## [1.32.21](https://github.com/frankie336/projectdavid/compare/v1.32.20...v1.32.21) (2025-06-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * allow status chunks to bypass suppression ([9a21581](https://github.com/frankie336/projectdavid/commit/9a2158156b85c1685aff65925c17730722972ddb))
7
+
8
+ ## [1.32.20](https://github.com/frankie336/projectdavid/compare/v1.32.19...v1.32.20) (2025-06-09)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * parse run_id into emission. ([60ace8c](https://github.com/frankie336/projectdavid/commit/60ace8cf669c873c40a1b031740b2f7103a59c53))
14
+
1
15
  ## [1.32.19](https://github.com/frankie336/projectdavid/compare/v1.32.18...v1.32.19) (2025-06-09)
2
16
 
3
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid
3
- Version: 1.32.19
3
+ Version: 1.32.21
4
4
  Summary: Python SDK for interacting with the Entities Assistant API.
5
5
  Author-email: Francis Neequaye Armah <francis.neequaye@projectdavid.co.uk>
6
6
  License: PolyForm Noncommercial License 1.0.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "projectdavid"
7
- version = "1.32.19"
7
+ version = "1.32.21"
8
8
  description = "Python SDK for interacting with the Entities Assistant API."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -14,7 +14,6 @@ class SynchronousInferenceStream:
14
14
  _GLOBAL_LOOP = asyncio.new_event_loop()
15
15
  asyncio.set_event_loop(_GLOBAL_LOOP)
16
16
 
17
- # ────────────────────────────────────────────────────────────
18
17
  def __init__(self, inference) -> None:
19
18
  self.inference_client = inference
20
19
  self.user_id: Optional[str] = None
@@ -24,7 +23,6 @@ class SynchronousInferenceStream:
24
23
  self.run_id: Optional[str] = None
25
24
  self.api_key: Optional[str] = None
26
25
 
27
- # ────────────────────────────────────────────────────────────
28
26
  def setup(
29
27
  self,
30
28
  user_id: str,
@@ -41,8 +39,6 @@ class SynchronousInferenceStream:
41
39
  self.run_id = run_id
42
40
  self.api_key = api_key
43
41
 
44
- # ────────────────────────────────────────────────────────────
45
- # ────────────────────────────────────────────────────────────
46
42
  def stream_chunks(
47
43
  self,
48
44
  provider: str,
@@ -69,52 +65,55 @@ class SynchronousInferenceStream:
69
65
 
70
66
  agen = _stream_chunks_async().__aiter__()
71
67
 
72
- # ── build the <fc> suppressor chain ─────────────────────────
73
68
  if suppress_fc:
74
69
  _suppressor = FunctionCallSuppressor()
75
70
  _peek_gate = PeekGate(_suppressor)
76
71
 
77
- def _filter_text(txt: str) -> str: # noqa: D401
72
+ def _filter_text(txt: str) -> str:
78
73
  return _peek_gate.feed(txt)
79
74
 
80
75
  else:
81
76
 
82
- def _filter_text(txt: str) -> str: # noqa: D401
77
+ def _filter_text(txt: str) -> str:
83
78
  return txt
84
79
 
85
- # helper – drain **all** residual bytes from the chain
86
80
  def _drain_filters() -> Optional[dict]:
87
81
  if not suppress_fc:
88
82
  return None
89
83
  parts: list[str] = []
90
- # 1) normal draining loop
91
84
  while True:
92
85
  out = _filter_text("")
93
86
  if not out:
94
87
  break
95
88
  parts.append(out)
96
- # 2) force-drain the ≤ 8 safety-margin tail
97
89
  if not _peek_gate.suppressing and _peek_gate.buf:
98
90
  parts.append(_peek_gate.buf)
99
91
  _peek_gate.buf = ""
100
92
  if parts:
101
- return {"type": "content", "content": "".join(parts)}
93
+ return {
94
+ "type": "content",
95
+ "content": "".join(parts),
96
+ "run_id": self.run_id,
97
+ }
102
98
  return None
103
99
 
104
- # ── main loop ─────────────────────────────────────────────
105
100
  while True:
106
101
  try:
107
102
  chunk = self._GLOBAL_LOOP.run_until_complete(
108
103
  asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
109
104
  )
110
105
 
111
- # drop provider-labelled function_call objects
112
- # if suppress_fc and chunk.get("type") == "function_call":
113
- # LOG.debug("[SUPPRESS] provider function_call dropped")
114
- # continue
106
+ # Always attach run_id
107
+ chunk["run_id"] = self.run_id
115
108
 
116
- # ② hot-code, status, and code-interpreter payloads always pass
117
- if chunk.get("type") in ("hot_code", "hot_code_output", "status"):
109
+ # ------------------------------------------------------
110
+ # allow status chunks to bypass suppression suppression
111
+ # -------------------------------------------------------
112
+ if chunk.get("type") == "status":
113
+ yield chunk
114
+ continue
115
+
116
+ if chunk.get("type") in ("hot_code", "hot_code_output"):
118
117
  yield chunk
119
118
  continue
120
119
 
@@ -125,16 +124,13 @@ class SynchronousInferenceStream:
125
124
  yield chunk
126
125
  continue
127
126
 
128
- # ③ ordinary TEXT content — run through the <fc> filter
129
127
  if isinstance(chunk.get("content"), str):
130
128
  chunk["content"] = _filter_text(chunk["content"])
131
129
  if chunk["content"] == "":
132
- continue # fully suppressed / still buffering
130
+ continue
133
131
 
134
- # ④ everything else streams unchanged
135
132
  yield chunk
136
133
 
137
- # graceful endings ------------------------------------------------
138
134
  except StopAsyncIteration:
139
135
  if tail := _drain_filters():
140
136
  yield tail
@@ -147,13 +143,12 @@ class SynchronousInferenceStream:
147
143
  LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
148
144
  break
149
145
 
150
- except Exception as exc: # noqa: BLE001
146
+ except Exception as exc:
151
147
  if tail := _drain_filters():
152
148
  yield tail
153
149
  LOG.error("Unexpected streaming error: %s", exc, exc_info=True)
154
150
  break
155
151
 
156
- # ────────────────────────────────────────────────────────────
157
152
  @classmethod
158
153
  def shutdown_loop(cls) -> None:
159
154
  if cls._GLOBAL_LOOP and not cls._GLOBAL_LOOP.is_closed():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid
3
- Version: 1.32.19
3
+ Version: 1.32.21
4
4
  Summary: Python SDK for interacting with the Entities Assistant API.
5
5
  Author-email: Francis Neequaye Armah <francis.neequaye@projectdavid.co.uk>
6
6
  License: PolyForm Noncommercial License 1.0.0
File without changes
File without changes
File without changes