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.
- {projectdavid-1.33.9 → projectdavid-1.33.10}/CHANGELOG.md +7 -0
- {projectdavid-1.33.9/src/projectdavid.egg-info → projectdavid-1.33.10}/PKG-INFO +1 -1
- {projectdavid-1.33.9 → projectdavid-1.33.10}/pyproject.toml +1 -1
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/synchronous_inference_wrapper.py +29 -51
- {projectdavid-1.33.9 → projectdavid-1.33.10/src/projectdavid.egg-info}/PKG-INFO +1 -1
- {projectdavid-1.33.9 → projectdavid-1.33.10}/LICENSE +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/MANIFEST.in +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/README.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/assistants.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/code_interpretation.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/database.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/database_assistant_example.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/docker_comtainers.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/file_search.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/files.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/function_call_definition.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/function_calls.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/handling_function_calls.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/inference.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/messages.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/runs.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/streams.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/threads.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/tools.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/users.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/vector_store.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/docs/versioning.md +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/setup.cfg +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/__init__.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/_version.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/actions_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/api_key_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/assistants_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/base_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/base_vector_store.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/event_handler.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/file_processor.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/file_search.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/files_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/inference_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/messages_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/runs.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/threads_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/tools_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/users_client.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/vector_store_manager.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/vectors.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/constants/platform.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/decorators.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/entity.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/events.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/serializers.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/services/logging_service.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/synthesis/__init__.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/synthesis/prompt.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/synthesis/reranker.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/synthesis/retriever.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/__init__.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/function_call_suppressor.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/monitor_launcher.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/peek_gate.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/run_monitor.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/vector_search_formatter.py +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid.egg-info/SOURCES.txt +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid.egg-info/dependency_links.txt +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid.egg-info/requires.txt +0 -0
- {projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid.egg-info/top_level.txt +0 -0
- {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.
|
|
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
|
|
@@ -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
|
-
#
|
|
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:
|
|
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: #
|
|
84
|
+
def _filter_text(txt: str) -> str: # no-op
|
|
82
85
|
return txt
|
|
83
86
|
|
|
84
|
-
#
|
|
85
|
-
|
|
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
|
-
#
|
|
95
|
+
# provider-labelled function_call
|
|
106
96
|
if suppress_fc and chunk.get("type") == "function_call":
|
|
107
|
-
LOG.debug("[
|
|
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
|
-
#
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/clients/vector_store_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/function_call_suppressor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.33.9 → projectdavid-1.33.10}/src/projectdavid/utils/vector_search_formatter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|