projectdavid 1.32.12__tar.gz → 1.32.13__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.12 → projectdavid-1.32.13}/CHANGELOG.md +7 -0
  2. {projectdavid-1.32.12/src/projectdavid.egg-info → projectdavid-1.32.13}/PKG-INFO +1 -1
  3. {projectdavid-1.32.12 → projectdavid-1.32.13}/pyproject.toml +1 -1
  4. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/synchronous_inference_wrapper.py +16 -62
  5. {projectdavid-1.32.12 → projectdavid-1.32.13/src/projectdavid.egg-info}/PKG-INFO +1 -1
  6. {projectdavid-1.32.12 → projectdavid-1.32.13}/LICENSE +0 -0
  7. {projectdavid-1.32.12 → projectdavid-1.32.13}/MANIFEST.in +0 -0
  8. {projectdavid-1.32.12 → projectdavid-1.32.13}/README.md +0 -0
  9. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/assistants.md +0 -0
  10. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/code_interpretation.md +0 -0
  11. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/database.md +0 -0
  12. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/database_assistant_example.md +0 -0
  13. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/docker_comtainers.md +0 -0
  14. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/file_search.md +0 -0
  15. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/files.md +0 -0
  16. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/function_call_definition.md +0 -0
  17. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/function_calls.md +0 -0
  18. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/handling_function_calls.md +0 -0
  19. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/inference.md +0 -0
  20. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/messages.md +0 -0
  21. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/runs.md +0 -0
  22. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/streams.md +0 -0
  23. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/threads.md +0 -0
  24. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/tools.md +0 -0
  25. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/users.md +0 -0
  26. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/vector_store.md +0 -0
  27. {projectdavid-1.32.12 → projectdavid-1.32.13}/docs/versioning.md +0 -0
  28. {projectdavid-1.32.12 → projectdavid-1.32.13}/setup.cfg +0 -0
  29. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/__init__.py +0 -0
  30. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/_version.py +0 -0
  31. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/actions_client.py +0 -0
  32. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/api_key_client.py +0 -0
  33. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/assistants_client.py +0 -0
  34. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/base_client.py +0 -0
  35. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/base_vector_store.py +0 -0
  36. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/event_handler.py +0 -0
  37. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/file_processor.py +0 -0
  38. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/file_search.py +0 -0
  39. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/files_client.py +0 -0
  40. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/inference_client.py +0 -0
  41. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/messages_client.py +0 -0
  42. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/runs.py +0 -0
  43. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/threads_client.py +0 -0
  44. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/tools_client.py +0 -0
  45. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/users_client.py +0 -0
  46. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/vector_store_manager.py +0 -0
  47. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/clients/vectors.py +0 -0
  48. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/constants/platform.py +0 -0
  49. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/entity.py +0 -0
  50. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/events.py +0 -0
  51. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/serializers.py +0 -0
  52. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/services/logging_service.py +0 -0
  53. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/synthesis/__init__.py +0 -0
  54. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
  55. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/synthesis/prompt.py +0 -0
  56. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/synthesis/reranker.py +0 -0
  57. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/synthesis/retriever.py +0 -0
  58. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/__init__.py +0 -0
  59. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/function_call_suppressor.py +0 -0
  60. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/monitor_launcher.py +0 -0
  61. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/peek_gate.py +0 -0
  62. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/run_monitor.py +0 -0
  63. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid/utils/vector_search_formatter.py +0 -0
  64. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid.egg-info/SOURCES.txt +0 -0
  65. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid.egg-info/dependency_links.txt +0 -0
  66. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid.egg-info/requires.txt +0 -0
  67. {projectdavid-1.32.12 → projectdavid-1.32.13}/src/projectdavid.egg-info/top_level.txt +0 -0
  68. {projectdavid-1.32.12 → projectdavid-1.32.13}/tests/test_clients.py +0 -0
@@ -1,3 +1,10 @@
1
+ ## [1.32.13](https://github.com/frankie336/projectdavid/compare/v1.32.12...v1.32.13) (2025-06-09)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Filter and supress file_search inline-4 ([c255c3b](https://github.com/frankie336/projectdavid/commit/c255c3b2ef93c784ca90504d34d523c32457223e))
7
+
1
8
  ## [1.32.12](https://github.com/frankie336/projectdavid/compare/v1.32.11...v1.32.12) (2025-06-09)
2
9
 
3
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid
3
- Version: 1.32.12
3
+ Version: 1.32.13
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.12"
7
+ version = "1.32.13"
8
8
  description = "Python SDK for interacting with the Entities Assistant API."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -14,9 +14,7 @@ class SynchronousInferenceStream:
14
14
  _GLOBAL_LOOP = asyncio.new_event_loop()
15
15
  asyncio.set_event_loop(_GLOBAL_LOOP)
16
16
 
17
- # --------------------------------------------------------------
18
- # ctor / setup
19
- # --------------------------------------------------------------
17
+ # ────────────────────────────────────────────────────────────────
20
18
  def __init__(self, inference) -> None:
21
19
  self.inference_client = inference
22
20
  self.user_id: Optional[str] = None
@@ -42,9 +40,7 @@ class SynchronousInferenceStream:
42
40
  self.run_id = run_id
43
41
  self.api_key = api_key
44
42
 
45
- # --------------------------------------------------------------
46
- # main streaming entry-point
47
- # --------------------------------------------------------------
43
+ # ────────────────────────────────────────────────────────────────
48
44
  def stream_chunks(
49
45
  self,
50
46
  provider: str,
@@ -71,7 +67,7 @@ class SynchronousInferenceStream:
71
67
 
72
68
  agen = _stream_chunks_async().__aiter__()
73
69
 
74
- # ---------- suppression chain ----------
70
+ # ── build the <fc> suppressor chain ─────────────────────────
75
71
  if suppress_fc:
76
72
  _suppressor = FunctionCallSuppressor()
77
73
  _peek_gate = PeekGate(_suppressor)
@@ -81,50 +77,26 @@ class SynchronousInferenceStream:
81
77
 
82
78
  else:
83
79
 
84
- def _filter_text(txt: str) -> str: # no-op
80
+ def _filter_text(txt: str) -> str:
85
81
  return txt
86
82
 
87
- # ---------------------------------------
88
-
83
+ # ── main loop ───────────────────────────────────────────────
89
84
  while True:
90
85
  try:
91
86
  chunk = self._GLOBAL_LOOP.run_until_complete(
92
87
  asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
93
88
  )
94
89
 
95
- # provider-labelled function_call
90
+ # ① drop provider-labelled function_call objects
96
91
  if suppress_fc and chunk.get("type") == "function_call":
97
- LOG.debug("[SUPPRESSOR] blocked provider-labelled function_call")
98
- continue
99
-
100
- if suppress_fc and isinstance(chunk.get("content"), str):
101
- chunk["content"] = _filter_text(chunk["content"])
102
- if chunk["content"] == "":
103
- # fully suppressed (either buffering or an <fc> block)
104
- continue
105
-
106
- # ------------------------------------------------------
107
- # allow the assistants response1 to bypass suppression
108
- # -------------------------------------------------------
109
- if chunk.get("type") == "content":
110
- yield chunk
111
- continue
112
-
113
- # -------------------------------------
114
- # allow hot_code to bypass suppression
115
- # ------------------------------------
116
- if chunk.get("type") == "hot_code":
117
- yield chunk
92
+ LOG.debug("[SUPPRESS] provider function_call dropped")
118
93
  continue
119
94
 
120
- # allow hot_code_output to bypass suppression
121
- if chunk.get("type") == "hot_code_output":
95
+ # hot-code & file-preview payloads always pass
96
+ if chunk.get("type") in ("hot_code", "hot_code_output"):
122
97
  yield chunk
123
98
  continue
124
99
 
125
- # -------------------------------------------------------
126
- # allow code_interpreter_stream to bypass suppression
127
- # --------------------------------------------------------
128
100
  if (
129
101
  chunk.get("stream_type") == "code_execution"
130
102
  and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
@@ -132,45 +104,27 @@ class SynchronousInferenceStream:
132
104
  yield chunk
133
105
  continue
134
106
 
135
- # ---------------------------------
136
- # inline content
137
- # ----------------------------------
107
+ # ③ ordinary TEXT content — run through the <fc> filter
138
108
  if isinstance(chunk.get("content"), str):
139
109
  chunk["content"] = _filter_text(chunk["content"])
140
110
  if chunk["content"] == "":
141
- continue # fully suppressed (or still peeking)
142
-
143
- if (
144
- suppress_fc
145
- and '"name": "code_interpreter"' in chunk["content"]
146
- and '"arguments": {"code"' in chunk["content"]
147
- ):
148
- LOG.debug("[SUPPRESSOR] inline code_interpreter match blocked")
149
- continue
150
-
151
- if (
152
- suppress_fc
153
- and '"name": "file_search"' in chunk["content"]
154
- and '"arguments": {"query_text"' in chunk["content"]
155
- ):
156
- LOG.debug("[SUPPRESSOR] inline file_search match blocked")
111
+ # fully suppressed (either buffering or an <fc> block)
157
112
  continue
158
113
 
114
+ # ④ everything else streams unchanged
159
115
  yield chunk
160
116
 
161
117
  except StopAsyncIteration:
162
118
  LOG.info("Stream completed normally.")
163
119
  break
164
120
  except asyncio.TimeoutError:
165
- LOG.error("[TimeoutError] Timeout occurred, stopping stream.")
121
+ LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
166
122
  break
167
- except Exception as e:
168
- LOG.error("Unexpected error during streaming completions: %s", e)
123
+ except Exception as exc: # noqa: BLE001
124
+ LOG.error("Unexpected streaming error: %s", exc, exc_info=True)
169
125
  break
170
126
 
171
- # --------------------------------------------------------------
172
- # housekeeping
173
- # --------------------------------------------------------------
127
+ # ────────────────────────────────────────────────────────────────
174
128
  @classmethod
175
129
  def shutdown_loop(cls) -> None:
176
130
  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.12
3
+ Version: 1.32.13
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