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