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