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