projectdavid 1.32.6__tar.gz → 1.32.8__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.6 → projectdavid-1.32.8}/CHANGELOG.md +15 -0
- {projectdavid-1.32.6/src/projectdavid.egg-info → projectdavid-1.32.8}/PKG-INFO +1 -1
- {projectdavid-1.32.6 → projectdavid-1.32.8}/pyproject.toml +1 -1
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/synchronous_inference_wrapper.py +29 -32
- {projectdavid-1.32.6 → projectdavid-1.32.8/src/projectdavid.egg-info}/PKG-INFO +1 -1
- {projectdavid-1.32.6 → projectdavid-1.32.8}/LICENSE +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/MANIFEST.in +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/README.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/assistants.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/code_interpretation.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/database.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/database_assistant_example.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/docker_comtainers.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/file_search.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/files.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/function_call_definition.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/function_calls.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/handling_function_calls.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/inference.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/messages.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/runs.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/streams.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/threads.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/tools.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/users.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/vector_store.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/docs/versioning.md +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/setup.cfg +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/__init__.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/_version.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/actions_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/api_key_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/assistants_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/base_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/base_vector_store.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/event_handler.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/file_processor.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/file_search.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/files_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/inference_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/messages_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/runs.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/threads_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/tools_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/users_client.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/vector_store_manager.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/clients/vectors.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/constants/platform.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/entity.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/events.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/serializers.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/services/logging_service.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/synthesis/__init__.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/synthesis/prompt.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/synthesis/reranker.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/synthesis/retriever.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/__init__.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/function_call_suppressor.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/monitor_launcher.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/peek_gate.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/run_monitor.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid/utils/vector_search_formatter.py +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid.egg-info/SOURCES.txt +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid.egg-info/dependency_links.txt +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid.egg-info/requires.txt +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/src/projectdavid.egg-info/top_level.txt +0 -0
- {projectdavid-1.32.6 → projectdavid-1.32.8}/tests/test_clients.py +0 -0
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
## [1.32.8](https://github.com/frankie336/projectdavid/compare/v1.32.7...v1.32.8) (2025-06-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Let every other chunk pass straight through-2 ([0bf280e](https://github.com/frankie336/projectdavid/commit/0bf280e9acd612fc3e788bda7cccc35e910324d2)), closes [throu#2](https://github.com/throu/issues/2)
|
|
7
|
+
|
|
8
|
+
## [1.32.7](https://github.com/frankie336/projectdavid/compare/v1.32.6...v1.32.7) (2025-06-08)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Let every other chunk pass straight through ([c0a11bb](https://github.com/frankie336/projectdavid/commit/c0a11bbfd5fbbb0247792fdfb12f4001b76dc8aa))
|
|
14
|
+
* Let every other chunk pass straight through-1 ([bf102db](https://github.com/frankie336/projectdavid/commit/bf102dbaa71d610f4ba4b6e2ed99ffe640fdd40c)), closes [throu#1](https://github.com/throu/issues/1)
|
|
15
|
+
|
|
1
16
|
## [1.32.6](https://github.com/frankie336/projectdavid/compare/v1.32.5...v1.32.6) (2025-06-08)
|
|
2
17
|
|
|
3
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: projectdavid
|
|
3
|
-
Version: 1.32.
|
|
3
|
+
Version: 1.32.8
|
|
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,14 +11,12 @@ LOG = UtilsInterface.LoggingUtility()
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class SynchronousInferenceStream:
|
|
14
|
-
"""Wrap an async streaming generator and expose it synchronously."""
|
|
15
|
-
|
|
16
14
|
_GLOBAL_LOOP = asyncio.new_event_loop()
|
|
17
15
|
asyncio.set_event_loop(_GLOBAL_LOOP)
|
|
18
16
|
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
17
|
+
# --------------------------------------------------------------
|
|
18
|
+
# ctor / setup
|
|
19
|
+
# --------------------------------------------------------------
|
|
22
20
|
def __init__(self, inference) -> None:
|
|
23
21
|
self.inference_client = inference
|
|
24
22
|
self.user_id: Optional[str] = None
|
|
@@ -44,9 +42,9 @@ class SynchronousInferenceStream:
|
|
|
44
42
|
self.run_id = run_id
|
|
45
43
|
self.api_key = api_key
|
|
46
44
|
|
|
47
|
-
#
|
|
45
|
+
# --------------------------------------------------------------
|
|
48
46
|
# main streaming entry-point
|
|
49
|
-
#
|
|
47
|
+
# --------------------------------------------------------------
|
|
50
48
|
def stream_chunks(
|
|
51
49
|
self,
|
|
52
50
|
provider: str,
|
|
@@ -56,13 +54,6 @@ class SynchronousInferenceStream:
|
|
|
56
54
|
timeout_per_chunk: float = 280.0,
|
|
57
55
|
suppress_fc: bool = True,
|
|
58
56
|
) -> 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
|
-
"""
|
|
66
57
|
|
|
67
58
|
resolved_api_key = api_key or self.api_key
|
|
68
59
|
|
|
@@ -80,36 +71,38 @@ class SynchronousInferenceStream:
|
|
|
80
71
|
|
|
81
72
|
agen = _stream_chunks_async().__aiter__()
|
|
82
73
|
|
|
83
|
-
# ----------
|
|
74
|
+
# ---------- suppression chain ----------
|
|
84
75
|
if suppress_fc:
|
|
85
|
-
|
|
86
|
-
|
|
76
|
+
_suppressor = FunctionCallSuppressor()
|
|
77
|
+
_peek_gate = PeekGate(_suppressor)
|
|
87
78
|
|
|
88
79
|
def _filter_text(txt: str) -> str:
|
|
89
|
-
return
|
|
80
|
+
return _peek_gate.feed(txt)
|
|
90
81
|
|
|
91
82
|
else:
|
|
92
83
|
|
|
93
84
|
def _filter_text(txt: str) -> str: # no-op
|
|
94
85
|
return txt
|
|
95
86
|
|
|
96
|
-
#
|
|
87
|
+
# ---------------------------------------
|
|
88
|
+
|
|
97
89
|
while True:
|
|
98
90
|
try:
|
|
99
91
|
chunk = self._GLOBAL_LOOP.run_until_complete(
|
|
100
92
|
asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
|
|
101
93
|
)
|
|
102
94
|
|
|
103
|
-
#
|
|
95
|
+
# provider-labelled function_call
|
|
104
96
|
if suppress_fc and chunk.get("type") == "function_call":
|
|
105
|
-
LOG.debug("[SUPPRESSOR]
|
|
97
|
+
LOG.debug("[SUPPRESSOR] blocked provider-labelled function_call")
|
|
106
98
|
continue
|
|
107
99
|
|
|
108
|
-
#
|
|
100
|
+
# allow hot_code to bypass suppression
|
|
109
101
|
if chunk.get("type") == "hot_code":
|
|
110
102
|
yield chunk
|
|
111
103
|
continue
|
|
112
104
|
|
|
105
|
+
# allow code_interpreter_stream to bypass suppression
|
|
113
106
|
if (
|
|
114
107
|
chunk.get("stream_type") == "code_execution"
|
|
115
108
|
and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
|
|
@@ -117,12 +110,18 @@ class SynchronousInferenceStream:
|
|
|
117
110
|
yield chunk
|
|
118
111
|
continue
|
|
119
112
|
|
|
120
|
-
#
|
|
113
|
+
# inline content
|
|
121
114
|
if isinstance(chunk.get("content"), str):
|
|
122
115
|
chunk["content"] = _filter_text(chunk["content"])
|
|
123
116
|
if chunk["content"] == "":
|
|
124
|
-
#
|
|
125
|
-
|
|
117
|
+
continue # fully suppressed (or still peeking)
|
|
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")
|
|
126
125
|
continue
|
|
127
126
|
|
|
128
127
|
yield chunk
|
|
@@ -131,17 +130,15 @@ class SynchronousInferenceStream:
|
|
|
131
130
|
LOG.info("Stream completed normally.")
|
|
132
131
|
break
|
|
133
132
|
except asyncio.TimeoutError:
|
|
134
|
-
LOG.error(
|
|
135
|
-
"[Timeout] chunk wait exceeded %.1f s – aborting", timeout_per_chunk
|
|
136
|
-
)
|
|
133
|
+
LOG.error("[TimeoutError] Timeout occurred, stopping stream.")
|
|
137
134
|
break
|
|
138
|
-
except Exception as
|
|
139
|
-
LOG.error("Unexpected streaming
|
|
135
|
+
except Exception as e:
|
|
136
|
+
LOG.error("Unexpected error during streaming completions: %s", e)
|
|
140
137
|
break
|
|
141
138
|
|
|
142
|
-
#
|
|
139
|
+
# --------------------------------------------------------------
|
|
143
140
|
# housekeeping
|
|
144
|
-
#
|
|
141
|
+
# --------------------------------------------------------------
|
|
145
142
|
@classmethod
|
|
146
143
|
def shutdown_loop(cls) -> None:
|
|
147
144
|
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.8
|
|
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.6 → projectdavid-1.32.8}/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.6 → projectdavid-1.32.8}/src/projectdavid/utils/function_call_suppressor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid-1.32.6 → projectdavid-1.32.8}/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
|