projectdavid 1.33.7__tar.gz → 1.33.9__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.
- {projectdavid-1.33.7 → projectdavid-1.33.9}/CHANGELOG.md +14 -0
- {projectdavid-1.33.7/src/projectdavid.egg-info → projectdavid-1.33.9}/PKG-INFO +1 -1
- {projectdavid-1.33.7 → projectdavid-1.33.9}/pyproject.toml +1 -1
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/synchronous_inference_wrapper.py +24 -41
- {projectdavid-1.33.7 → projectdavid-1.33.9/src/projectdavid.egg-info}/PKG-INFO +1 -1
- {projectdavid-1.33.7 → projectdavid-1.33.9}/LICENSE +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/MANIFEST.in +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/README.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/assistants.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/code_interpretation.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/database.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/database_assistant_example.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/docker_comtainers.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/file_search.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/files.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/function_call_definition.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/function_calls.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/handling_function_calls.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/inference.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/messages.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/runs.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/streams.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/threads.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/tools.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/users.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/vector_store.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/docs/versioning.md +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/setup.cfg +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/__init__.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/_version.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/actions_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/api_key_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/assistants_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/base_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/base_vector_store.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/event_handler.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/file_processor.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/file_search.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/files_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/inference_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/messages_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/runs.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/threads_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/tools_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/users_client.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/vector_store_manager.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/clients/vectors.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/constants/platform.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/decorators.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/entity.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/events.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/serializers.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/services/logging_service.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/synthesis/__init__.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/synthesis/prompt.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/synthesis/reranker.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/synthesis/retriever.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/__init__.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/function_call_suppressor.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/monitor_launcher.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/peek_gate.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/run_monitor.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid/utils/vector_search_formatter.py +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid.egg-info/SOURCES.txt +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid.egg-info/dependency_links.txt +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid.egg-info/requires.txt +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/src/projectdavid.egg-info/top_level.txt +0 -0
- {projectdavid-1.33.7 → projectdavid-1.33.9}/tests/test_clients.py +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.33.9](https://github.com/frankie336/projectdavid/compare/v1.33.8...v1.33.9) (2025-06-13)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* restore code_interpreter_stream passthrough.9 ([98999d3](https://github.com/frankie336/projectdavid/commit/98999d3eca403d675d3cd8d54e2e59ec3f99f5a7))
|
|
7
|
+
|
|
8
|
+
## [1.33.8](https://github.com/frankie336/projectdavid/compare/v1.33.7...v1.33.8) (2025-06-12)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* restore code_interpreter_stream passthrough.8 ([f5c7f61](https://github.com/frankie336/projectdavid/commit/f5c7f61cc43019d7af7f2524ce2c4fe4fd4da999))
|
|
14
|
+
|
|
1
15
|
## [1.33.7](https://github.com/frankie336/projectdavid/compare/v1.33.6...v1.33.7) (2025-06-12)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: projectdavid
|
|
3
|
-
Version: 1.33.
|
|
3
|
+
Version: 1.33.9
|
|
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,6 +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
|
def __init__(self, inference) -> None:
|
|
18
19
|
self.inference_client = inference
|
|
19
20
|
self.user_id: Optional[str] = None
|
|
@@ -23,6 +24,7 @@ class SynchronousInferenceStream:
|
|
|
23
24
|
self.run_id: Optional[str] = None
|
|
24
25
|
self.api_key: Optional[str] = None
|
|
25
26
|
|
|
27
|
+
# ────────────────────────────────────────────────────────────
|
|
26
28
|
def setup(
|
|
27
29
|
self,
|
|
28
30
|
user_id: str,
|
|
@@ -39,6 +41,7 @@ class SynchronousInferenceStream:
|
|
|
39
41
|
self.run_id = run_id
|
|
40
42
|
self.api_key = api_key
|
|
41
43
|
|
|
44
|
+
# ────────────────────────────────────────────────────────────
|
|
42
45
|
def stream_chunks(
|
|
43
46
|
self,
|
|
44
47
|
provider: str,
|
|
@@ -65,88 +68,67 @@ class SynchronousInferenceStream:
|
|
|
65
68
|
|
|
66
69
|
agen = _stream_chunks_async().__aiter__()
|
|
67
70
|
|
|
71
|
+
# ── build the <fc> suppressor chain ─────────────────────────
|
|
68
72
|
if suppress_fc:
|
|
69
73
|
_suppressor = FunctionCallSuppressor()
|
|
70
74
|
_peek_gate = PeekGate(_suppressor)
|
|
71
75
|
|
|
72
|
-
def _filter_text(txt: str) -> str:
|
|
76
|
+
def _filter_text(txt: str) -> str: # noqa: D401
|
|
73
77
|
return _peek_gate.feed(txt)
|
|
74
78
|
|
|
75
79
|
else:
|
|
76
80
|
|
|
77
|
-
def _filter_text(txt: str) -> str:
|
|
81
|
+
def _filter_text(txt: str) -> str: # noqa: D401
|
|
78
82
|
return txt
|
|
79
83
|
|
|
84
|
+
# helper – drain **all** residual bytes from the chain
|
|
80
85
|
def _drain_filters() -> Optional[dict]:
|
|
81
86
|
if not suppress_fc:
|
|
82
87
|
return None
|
|
83
88
|
parts: list[str] = []
|
|
84
89
|
while True:
|
|
85
|
-
out = _filter_text("")
|
|
90
|
+
out = _filter_text("") # empty feed ⇒ “give me whatever’s left”
|
|
86
91
|
if not out:
|
|
87
92
|
break
|
|
88
93
|
parts.append(out)
|
|
89
|
-
if not _peek_gate.suppressing and _peek_gate.buf:
|
|
90
|
-
parts.append(_peek_gate.buf)
|
|
91
|
-
_peek_gate.buf = ""
|
|
92
94
|
if parts:
|
|
93
|
-
return {
|
|
94
|
-
"type": "content",
|
|
95
|
-
"content": "".join(parts),
|
|
96
|
-
"run_id": self.run_id,
|
|
97
|
-
}
|
|
95
|
+
return {"type": "content", "content": "".join(parts)}
|
|
98
96
|
return None
|
|
99
97
|
|
|
98
|
+
# ── main loop ─────────────────────────────────────────────
|
|
100
99
|
while True:
|
|
101
100
|
try:
|
|
102
101
|
chunk = self._GLOBAL_LOOP.run_until_complete(
|
|
103
102
|
asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
|
|
104
103
|
)
|
|
105
104
|
|
|
106
|
-
#
|
|
107
|
-
chunk
|
|
108
|
-
|
|
109
|
-
# ------------------------------------------------------
|
|
110
|
-
# allow status chunks to bypass suppression suppression
|
|
111
|
-
# -------------------------------------------------------
|
|
112
|
-
if chunk.get("type") == "status":
|
|
113
|
-
yield chunk
|
|
114
|
-
continue
|
|
115
|
-
|
|
116
|
-
if chunk.get("type") == "code_interpreter_stream":
|
|
117
|
-
yield chunk
|
|
118
|
-
continue
|
|
119
|
-
|
|
120
|
-
if chunk.get("type") == "code_execution":
|
|
121
|
-
yield chunk
|
|
122
|
-
continue
|
|
123
|
-
|
|
124
|
-
if chunk.get("type") == "hot_code_output":
|
|
125
|
-
yield chunk
|
|
105
|
+
# ① drop provider-labelled function_call objects
|
|
106
|
+
if suppress_fc and chunk.get("type") == "function_call":
|
|
107
|
+
LOG.debug("[SUPPRESS] provider function_call dropped")
|
|
126
108
|
continue
|
|
127
109
|
|
|
110
|
+
# ② hot-code & file-preview payloads always pass
|
|
128
111
|
if chunk.get("type") in ("hot_code", "hot_code_output"):
|
|
129
112
|
yield chunk
|
|
130
113
|
continue
|
|
131
114
|
|
|
132
|
-
if
|
|
115
|
+
if (
|
|
116
|
+
chunk.get("stream_type") == "code_execution"
|
|
117
|
+
and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
|
|
118
|
+
):
|
|
133
119
|
yield chunk
|
|
134
120
|
continue
|
|
135
121
|
|
|
136
|
-
#
|
|
137
|
-
# chunk.get("stream_type") == "code_execution"
|
|
138
|
-
# and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
|
|
139
|
-
# ):
|
|
140
|
-
# yield chunk
|
|
141
|
-
# continue
|
|
142
|
-
|
|
122
|
+
# ③ ordinary TEXT content — run through the <fc> filter
|
|
143
123
|
if isinstance(chunk.get("content"), str):
|
|
144
124
|
chunk["content"] = _filter_text(chunk["content"])
|
|
145
125
|
if chunk["content"] == "":
|
|
146
|
-
continue
|
|
126
|
+
continue # fully suppressed / still buffering
|
|
147
127
|
|
|
128
|
+
# ④ everything else streams unchanged
|
|
148
129
|
yield chunk
|
|
149
130
|
|
|
131
|
+
# ─────────── graceful endings ───────────
|
|
150
132
|
except StopAsyncIteration:
|
|
151
133
|
if tail := _drain_filters():
|
|
152
134
|
yield tail
|
|
@@ -159,12 +141,13 @@ class SynchronousInferenceStream:
|
|
|
159
141
|
LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
|
|
160
142
|
break
|
|
161
143
|
|
|
162
|
-
except Exception as exc:
|
|
144
|
+
except Exception as exc: # noqa: BLE001
|
|
163
145
|
if tail := _drain_filters():
|
|
164
146
|
yield tail
|
|
165
147
|
LOG.error("Unexpected streaming error: %s", exc, exc_info=True)
|
|
166
148
|
break
|
|
167
149
|
|
|
150
|
+
# ────────────────────────────────────────────────────────────
|
|
168
151
|
@classmethod
|
|
169
152
|
def shutdown_loop(cls) -> None:
|
|
170
153
|
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.9
|
|
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.7 → projectdavid-1.33.9}/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.7 → projectdavid-1.33.9}/src/projectdavid/utils/function_call_suppressor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.33.7 → projectdavid-1.33.9}/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
|