projectdavid 1.32.11__py3-none-any.whl → 1.32.13__py3-none-any.whl

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.

@@ -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,44 +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
- # ------------------------------------------------------
101
- # allow the assistants response1 to bypass suppression
102
- # -------------------------------------------------------
103
- if chunk.get("type") == "content":
104
- yield chunk
92
+ LOG.debug("[SUPPRESS] provider function_call dropped")
105
93
  continue
106
94
 
107
- # -------------------------------------
108
- # allow hot_code to bypass suppression
109
- # ------------------------------------
110
- if chunk.get("type") == "hot_code":
95
+ # ② hot-code & file-preview payloads always pass
96
+ if chunk.get("type") in ("hot_code", "hot_code_output"):
111
97
  yield chunk
112
98
  continue
113
99
 
114
- # allow hot_code_output to bypass suppression
115
- if chunk.get("type") == "hot_code_output":
116
- yield chunk
117
- continue
118
-
119
- # -------------------------------------------------------
120
- # allow code_interpreter_stream to bypass suppression
121
- # --------------------------------------------------------
122
100
  if (
123
101
  chunk.get("stream_type") == "code_execution"
124
102
  and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
@@ -126,47 +104,27 @@ class SynchronousInferenceStream:
126
104
  yield chunk
127
105
  continue
128
106
 
129
- # ---------------------------------
130
- # inline content
131
- # ----------------------------------
107
+ # ③ ordinary TEXT content — run through the <fc> filter
132
108
  if isinstance(chunk.get("content"), str):
133
109
  chunk["content"] = _filter_text(chunk["content"])
134
110
  if chunk["content"] == "":
135
- continue # fully suppressed (or still peeking)
136
-
137
- if (
138
- suppress_fc
139
- and '"name": "code_interpreter"' in chunk["content"]
140
- and '"arguments": {"code"' in chunk["content"]
141
- ):
142
- LOG.debug("[SUPPRESSOR] inline code_interpreter match blocked")
143
- continue
144
- # ---------------------------------------------------------------
145
- # Filter and supress file_search inline
146
- # ---------------------------------------------------------------
147
- if (
148
- suppress_fc
149
- and '"name": "file_search"' in chunk["content"]
150
- and '"arguments": {"query_text"' in chunk["content"]
151
- ):
152
- LOG.debug("[SUPPRESSOR] inline file_search match blocked")
111
+ # fully suppressed (either buffering or an <fc> block)
153
112
  continue
154
113
 
114
+ # ④ everything else streams unchanged
155
115
  yield chunk
156
116
 
157
117
  except StopAsyncIteration:
158
118
  LOG.info("Stream completed normally.")
159
119
  break
160
120
  except asyncio.TimeoutError:
161
- LOG.error("[TimeoutError] Timeout occurred, stopping stream.")
121
+ LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
162
122
  break
163
- except Exception as e:
164
- 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)
165
125
  break
166
126
 
167
- # --------------------------------------------------------------
168
- # housekeeping
169
- # --------------------------------------------------------------
127
+ # ────────────────────────────────────────────────────────────────
170
128
  @classmethod
171
129
  def shutdown_loop(cls) -> None:
172
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.11
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
@@ -15,7 +15,7 @@ projectdavid/clients/files_client.py,sha256=XkIDzbQFGDrd88taf0Kouc_4YJOPIYEHiIyW
15
15
  projectdavid/clients/inference_client.py,sha256=xz4ACPv5Tkis604QxO5mJX1inH_TGDfQP-31geETYpE,6609
16
16
  projectdavid/clients/messages_client.py,sha256=467xeIt3VYs6cG8-bl-eDRi_auWOPmfd5tSJDmQSJUI,17232
17
17
  projectdavid/clients/runs.py,sha256=-fXOq5L9w2efDPmZkNxb0s2yjl6oN0XN4_aLXqaeceo,25270
18
- projectdavid/clients/synchronous_inference_wrapper.py,sha256=NSQwG7MAOWd1Y-TE4uISiXGm954qwGEu27_QykIAGXY,6607
18
+ projectdavid/clients/synchronous_inference_wrapper.py,sha256=K6AQVrMBRBDqGn-rzoKsdFnOGvKHmFrlPplW8tCpUIM,5218
19
19
  projectdavid/clients/threads_client.py,sha256=ekzU5w14zftmtmFkiec3NC90Of-_KVSUY1qH9cmfSFg,6771
20
20
  projectdavid/clients/tools_client.py,sha256=GkCVOmwpAoPqVt6aYmH0G1HIFha3iEwR9IIf9teR0j8,11487
21
21
  projectdavid/clients/users_client.py,sha256=eCuUb9qvyH1GUFhZu6TRL9zdoK-qzHSs8-Vmrk_0mmg,13729
@@ -34,8 +34,8 @@ projectdavid/utils/monitor_launcher.py,sha256=3YAgJdeuaUvq3JGvpA4ymqFsAnk29nH5q9
34
34
  projectdavid/utils/peek_gate.py,sha256=5whMRnDOQjATRpThWDJkvY9ScXuJ7Sd_-9rvGgXeTAQ,2532
35
35
  projectdavid/utils/run_monitor.py,sha256=F_WkqIP-qnWH-4llIbileWWLfRj2Q1Cg-ni23SR1rec,3786
36
36
  projectdavid/utils/vector_search_formatter.py,sha256=YTe3HPGec26qGY7uxY8_GS8lc4QaN6aNXMzkl29nZpI,1735
37
- projectdavid-1.32.11.dist-info/licenses/LICENSE,sha256=_8yjiEGttpS284BkfhXxfERqTRZW_tUaHiBB0GTJTMg,4563
38
- projectdavid-1.32.11.dist-info/METADATA,sha256=qmboVh-0BtP2fdD2mah22HGMCAKTlnzKKz-9A2tgX6s,10782
39
- projectdavid-1.32.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- projectdavid-1.32.11.dist-info/top_level.txt,sha256=kil8GU4s7qYRfNnzGnFHhZnSNRSxgNG-J4HLgQMmMtw,13
41
- projectdavid-1.32.11.dist-info/RECORD,,
37
+ projectdavid-1.32.13.dist-info/licenses/LICENSE,sha256=_8yjiEGttpS284BkfhXxfERqTRZW_tUaHiBB0GTJTMg,4563
38
+ projectdavid-1.32.13.dist-info/METADATA,sha256=s7CvoID0lYqa_kHmguh-bpsz7egmADoi4LJThWLgpOk,10782
39
+ projectdavid-1.32.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ projectdavid-1.32.13.dist-info/top_level.txt,sha256=kil8GU4s7qYRfNnzGnFHhZnSNRSxgNG-J4HLgQMmMtw,13
41
+ projectdavid-1.32.13.dist-info/RECORD,,