projectdavid 1.32.4__tar.gz → 1.32.6__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.4 → projectdavid-1.32.6}/CHANGELOG.md +14 -0
- {projectdavid-1.32.4/src/projectdavid.egg-info → projectdavid-1.32.6}/PKG-INFO +1 -1
- {projectdavid-1.32.4 → projectdavid-1.32.6}/pyproject.toml +1 -1
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/synchronous_inference_wrapper.py +32 -29
- {projectdavid-1.32.4 → projectdavid-1.32.6/src/projectdavid.egg-info}/PKG-INFO +1 -1
- {projectdavid-1.32.4 → projectdavid-1.32.6}/LICENSE +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/MANIFEST.in +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/README.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/assistants.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/code_interpretation.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/database.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/database_assistant_example.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/docker_comtainers.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/file_search.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/files.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/function_call_definition.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/function_calls.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/handling_function_calls.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/inference.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/messages.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/runs.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/streams.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/threads.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/tools.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/users.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/vector_store.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/docs/versioning.md +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/setup.cfg +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/__init__.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/_version.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/actions_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/api_key_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/assistants_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/base_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/base_vector_store.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/event_handler.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/file_processor.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/file_search.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/files_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/inference_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/messages_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/runs.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/threads_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/tools_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/users_client.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/vector_store_manager.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/clients/vectors.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/constants/platform.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/entity.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/events.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/serializers.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/services/logging_service.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/synthesis/__init__.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/synthesis/prompt.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/synthesis/reranker.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/synthesis/retriever.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/__init__.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/function_call_suppressor.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/monitor_launcher.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/peek_gate.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/run_monitor.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid/utils/vector_search_formatter.py +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid.egg-info/SOURCES.txt +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid.egg-info/dependency_links.txt +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid.egg-info/requires.txt +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/src/projectdavid.egg-info/top_level.txt +0 -0
- {projectdavid-1.32.4 → projectdavid-1.32.6}/tests/test_clients.py +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.32.6](https://github.com/frankie336/projectdavid/compare/v1.32.5...v1.32.6) (2025-06-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* code_execution chunks now bypass suppression ([e2762d4](https://github.com/frankie336/projectdavid/commit/e2762d49fc1b8ed60235be98a512e29eea4f3d4a))
|
|
7
|
+
|
|
8
|
+
## [1.32.5](https://github.com/frankie336/projectdavid/compare/v1.32.4...v1.32.5) (2025-06-08)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* code_execution chunks now bypass suppression ([d5f4c11](https://github.com/frankie336/projectdavid/commit/d5f4c11f14cce3017608129c2a94fd52f343cd2d))
|
|
14
|
+
|
|
1
15
|
## [1.32.4](https://github.com/frankie336/projectdavid/compare/v1.32.3...v1.32.4) (2025-06-08)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: projectdavid
|
|
3
|
-
Version: 1.32.
|
|
3
|
+
Version: 1.32.6
|
|
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
|
|
@@ -11,12 +11,14 @@ LOG = UtilsInterface.LoggingUtility()
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class SynchronousInferenceStream:
|
|
14
|
+
"""Wrap an async streaming generator and expose it synchronously."""
|
|
15
|
+
|
|
14
16
|
_GLOBAL_LOOP = asyncio.new_event_loop()
|
|
15
17
|
asyncio.set_event_loop(_GLOBAL_LOOP)
|
|
16
18
|
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
19
|
+
# ------------------------------------------------------------------ #
|
|
20
|
+
# construction / setup
|
|
21
|
+
# ------------------------------------------------------------------ #
|
|
20
22
|
def __init__(self, inference) -> None:
|
|
21
23
|
self.inference_client = inference
|
|
22
24
|
self.user_id: Optional[str] = None
|
|
@@ -42,9 +44,9 @@ class SynchronousInferenceStream:
|
|
|
42
44
|
self.run_id = run_id
|
|
43
45
|
self.api_key = api_key
|
|
44
46
|
|
|
45
|
-
#
|
|
47
|
+
# ------------------------------------------------------------------ #
|
|
46
48
|
# main streaming entry-point
|
|
47
|
-
#
|
|
49
|
+
# ------------------------------------------------------------------ #
|
|
48
50
|
def stream_chunks(
|
|
49
51
|
self,
|
|
50
52
|
provider: str,
|
|
@@ -54,6 +56,13 @@ class SynchronousInferenceStream:
|
|
|
54
56
|
timeout_per_chunk: float = 280.0,
|
|
55
57
|
suppress_fc: bool = True,
|
|
56
58
|
) -> Generator[dict, None, None]:
|
|
59
|
+
"""
|
|
60
|
+
Yield provider chunks synchronously. When *suppress_fc* is True we
|
|
61
|
+
|
|
62
|
+
1. completely drop top-level `type="function_call"` chunks, and
|
|
63
|
+
2. scrub inline `<fc> … </fc>` sections inside text using the
|
|
64
|
+
PeekGate + FunctionCallSuppressor chain.
|
|
65
|
+
"""
|
|
57
66
|
|
|
58
67
|
resolved_api_key = api_key or self.api_key
|
|
59
68
|
|
|
@@ -71,38 +80,36 @@ class SynchronousInferenceStream:
|
|
|
71
80
|
|
|
72
81
|
agen = _stream_chunks_async().__aiter__()
|
|
73
82
|
|
|
74
|
-
# ----------
|
|
83
|
+
# ---------- build inline filter --------------------------------
|
|
75
84
|
if suppress_fc:
|
|
76
|
-
|
|
77
|
-
|
|
85
|
+
suppressor = FunctionCallSuppressor()
|
|
86
|
+
peek_gate = PeekGate(suppressor)
|
|
78
87
|
|
|
79
88
|
def _filter_text(txt: str) -> str:
|
|
80
|
-
return
|
|
89
|
+
return peek_gate.feed(txt)
|
|
81
90
|
|
|
82
91
|
else:
|
|
83
92
|
|
|
84
93
|
def _filter_text(txt: str) -> str: # no-op
|
|
85
94
|
return txt
|
|
86
95
|
|
|
87
|
-
#
|
|
88
|
-
|
|
96
|
+
# ---------- main loop ------------------------------------------
|
|
89
97
|
while True:
|
|
90
98
|
try:
|
|
91
99
|
chunk = self._GLOBAL_LOOP.run_until_complete(
|
|
92
100
|
asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
|
|
93
101
|
)
|
|
94
102
|
|
|
95
|
-
# provider-labelled function_call
|
|
103
|
+
# ① drop provider-labelled function_call objects
|
|
96
104
|
if suppress_fc and chunk.get("type") == "function_call":
|
|
97
|
-
LOG.debug("[SUPPRESSOR]
|
|
105
|
+
LOG.debug("[SUPPRESSOR] stripped top-level function_call chunk")
|
|
98
106
|
continue
|
|
99
107
|
|
|
100
|
-
#
|
|
108
|
+
# ② never touch hot-code or code-interpreter file previews
|
|
101
109
|
if chunk.get("type") == "hot_code":
|
|
102
110
|
yield chunk
|
|
103
111
|
continue
|
|
104
112
|
|
|
105
|
-
# allow code_interpreter_stream to bypass suppression
|
|
106
113
|
if (
|
|
107
114
|
chunk.get("stream_type") == "code_execution"
|
|
108
115
|
and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
|
|
@@ -110,18 +117,12 @@ class SynchronousInferenceStream:
|
|
|
110
117
|
yield chunk
|
|
111
118
|
continue
|
|
112
119
|
|
|
113
|
-
# inline content
|
|
120
|
+
# ③ filter inline text (<fc> blocks) *only* when content is str
|
|
114
121
|
if isinstance(chunk.get("content"), str):
|
|
115
122
|
chunk["content"] = _filter_text(chunk["content"])
|
|
116
123
|
if chunk["content"] == "":
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (
|
|
120
|
-
suppress_fc
|
|
121
|
-
and '"name": "code_interpreter"' in chunk["content"]
|
|
122
|
-
and '"arguments": {"code"' in chunk["content"]
|
|
123
|
-
):
|
|
124
|
-
LOG.debug("[SUPPRESSOR] inline code_interpreter match blocked")
|
|
124
|
+
# Either the text is still in PeekGate’s buffer
|
|
125
|
+
# or it was fully suppressed – skip for now.
|
|
125
126
|
continue
|
|
126
127
|
|
|
127
128
|
yield chunk
|
|
@@ -130,15 +131,17 @@ class SynchronousInferenceStream:
|
|
|
130
131
|
LOG.info("Stream completed normally.")
|
|
131
132
|
break
|
|
132
133
|
except asyncio.TimeoutError:
|
|
133
|
-
LOG.error(
|
|
134
|
+
LOG.error(
|
|
135
|
+
"[Timeout] chunk wait exceeded %.1f s – aborting", timeout_per_chunk
|
|
136
|
+
)
|
|
134
137
|
break
|
|
135
|
-
except Exception as
|
|
136
|
-
LOG.error("Unexpected
|
|
138
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
139
|
+
LOG.error("Unexpected streaming error: %s", exc, exc_info=True)
|
|
137
140
|
break
|
|
138
141
|
|
|
139
|
-
#
|
|
142
|
+
# ------------------------------------------------------------------ #
|
|
140
143
|
# housekeeping
|
|
141
|
-
#
|
|
144
|
+
# ------------------------------------------------------------------ #
|
|
142
145
|
@classmethod
|
|
143
146
|
def shutdown_loop(cls) -> None:
|
|
144
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.6
|
|
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.4 → projectdavid-1.32.6}/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.4 → projectdavid-1.32.6}/src/projectdavid/utils/function_call_suppressor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.32.4 → projectdavid-1.32.6}/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
|