projectdavid 1.32.13__py3-none-any.whl → 1.32.14__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,7 +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
18
  def __init__(self, inference) -> None:
19
19
  self.inference_client = inference
20
20
  self.user_id: Optional[str] = None
@@ -24,6 +24,7 @@ class SynchronousInferenceStream:
24
24
  self.run_id: Optional[str] = None
25
25
  self.api_key: Optional[str] = None
26
26
 
27
+ # ────────────────────────────────────────────────────────────
27
28
  def setup(
28
29
  self,
29
30
  user_id: str,
@@ -40,7 +41,7 @@ class SynchronousInferenceStream:
40
41
  self.run_id = run_id
41
42
  self.api_key = api_key
42
43
 
43
- # ────────────────────────────────────────────────────────────────
44
+ # ────────────────────────────────────────────────────────────
44
45
  def stream_chunks(
45
46
  self,
46
47
  provider: str,
@@ -72,15 +73,28 @@ class SynchronousInferenceStream:
72
73
  _suppressor = FunctionCallSuppressor()
73
74
  _peek_gate = PeekGate(_suppressor)
74
75
 
75
- def _filter_text(txt: str) -> str:
76
+ def _filter_text(txt: str) -> str: # noqa: D401
76
77
  return _peek_gate.feed(txt)
77
78
 
78
79
  else:
79
80
 
80
- def _filter_text(txt: str) -> str:
81
+ def _filter_text(txt: str) -> str: # noqa: D401
81
82
  return txt
82
83
 
83
- # ── main loop ───────────────────────────────────────────────
84
+ # helper drain any leftover bytes still buffered
85
+ def _flush_tail() -> Optional[dict]:
86
+ """
87
+ Force-flush PeekGate / FunctionCallSuppressor so the last few
88
+ characters (kept for safety-margin) reach the frontend.
89
+ Returns a ready-to-stream chunk or None.
90
+ """
91
+ if suppress_fc:
92
+ tail = _filter_text("") # empty feed ⇒ flush
93
+ if tail:
94
+ return {"type": "content", "content": tail}
95
+ return None
96
+
97
+ # ── main loop ─────────────────────────────────────────────
84
98
  while True:
85
99
  try:
86
100
  chunk = self._GLOBAL_LOOP.run_until_complete(
@@ -108,23 +122,31 @@ class SynchronousInferenceStream:
108
122
  if isinstance(chunk.get("content"), str):
109
123
  chunk["content"] = _filter_text(chunk["content"])
110
124
  if chunk["content"] == "":
111
- # fully suppressed (either buffering or an <fc> block)
112
- continue
125
+ continue # fully suppressed / still buffering
113
126
 
114
127
  # ④ everything else streams unchanged
115
128
  yield chunk
116
129
 
130
+ # ─────────── graceful endings ───────────
117
131
  except StopAsyncIteration:
132
+ if tail := _flush_tail():
133
+ yield tail
118
134
  LOG.info("Stream completed normally.")
119
135
  break
136
+
120
137
  except asyncio.TimeoutError:
138
+ if tail := _flush_tail():
139
+ yield tail
121
140
  LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
122
141
  break
142
+
123
143
  except Exception as exc: # noqa: BLE001
144
+ if tail := _flush_tail():
145
+ yield tail
124
146
  LOG.error("Unexpected streaming error: %s", exc, exc_info=True)
125
147
  break
126
148
 
127
- # ────────────────────────────────────────────────────────────────
149
+ # ────────────────────────────────────────────────────────────
128
150
  @classmethod
129
151
  def shutdown_loop(cls) -> None:
130
152
  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.13
3
+ Version: 1.32.14
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=K6AQVrMBRBDqGn-rzoKsdFnOGvKHmFrlPplW8tCpUIM,5218
18
+ projectdavid/clients/synchronous_inference_wrapper.py,sha256=RuFOgvUar1p8xpklMZTMswDjZ8n2N3ghtjmDjSiI6Eo,6209
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.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,,
37
+ projectdavid-1.32.14.dist-info/licenses/LICENSE,sha256=_8yjiEGttpS284BkfhXxfERqTRZW_tUaHiBB0GTJTMg,4563
38
+ projectdavid-1.32.14.dist-info/METADATA,sha256=lwrij-9rEDGMo6elHx8cZyAmArJirSaL1Nit8177LeA,10782
39
+ projectdavid-1.32.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ projectdavid-1.32.14.dist-info/top_level.txt,sha256=kil8GU4s7qYRfNnzGnFHhZnSNRSxgNG-J4HLgQMmMtw,13
41
+ projectdavid-1.32.14.dist-info/RECORD,,