projectdavid 1.33.8__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.

Files changed (69) hide show
  1. {projectdavid-1.33.8 → projectdavid-1.33.10}/CHANGELOG.md +14 -0
  2. {projectdavid-1.33.8/src/projectdavid.egg-info → projectdavid-1.33.10}/PKG-INFO +1 -1
  3. {projectdavid-1.33.8 → projectdavid-1.33.10}/pyproject.toml +1 -1
  4. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/synchronous_inference_wrapper.py +27 -50
  5. {projectdavid-1.33.8 → projectdavid-1.33.10/src/projectdavid.egg-info}/PKG-INFO +1 -1
  6. {projectdavid-1.33.8 → projectdavid-1.33.10}/LICENSE +0 -0
  7. {projectdavid-1.33.8 → projectdavid-1.33.10}/MANIFEST.in +0 -0
  8. {projectdavid-1.33.8 → projectdavid-1.33.10}/README.md +0 -0
  9. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/assistants.md +0 -0
  10. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/code_interpretation.md +0 -0
  11. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/database.md +0 -0
  12. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/database_assistant_example.md +0 -0
  13. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/docker_comtainers.md +0 -0
  14. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/file_search.md +0 -0
  15. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/files.md +0 -0
  16. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/function_call_definition.md +0 -0
  17. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/function_calls.md +0 -0
  18. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/handling_function_calls.md +0 -0
  19. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/inference.md +0 -0
  20. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/messages.md +0 -0
  21. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/runs.md +0 -0
  22. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/streams.md +0 -0
  23. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/threads.md +0 -0
  24. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/tools.md +0 -0
  25. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/users.md +0 -0
  26. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/vector_store.md +0 -0
  27. {projectdavid-1.33.8 → projectdavid-1.33.10}/docs/versioning.md +0 -0
  28. {projectdavid-1.33.8 → projectdavid-1.33.10}/setup.cfg +0 -0
  29. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/__init__.py +0 -0
  30. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/_version.py +0 -0
  31. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/actions_client.py +0 -0
  32. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/api_key_client.py +0 -0
  33. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/assistants_client.py +0 -0
  34. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/base_client.py +0 -0
  35. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/base_vector_store.py +0 -0
  36. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/event_handler.py +0 -0
  37. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/file_processor.py +0 -0
  38. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/file_search.py +0 -0
  39. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/files_client.py +0 -0
  40. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/inference_client.py +0 -0
  41. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/messages_client.py +0 -0
  42. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/runs.py +0 -0
  43. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/threads_client.py +0 -0
  44. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/tools_client.py +0 -0
  45. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/users_client.py +0 -0
  46. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/vector_store_manager.py +0 -0
  47. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/clients/vectors.py +0 -0
  48. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/constants/platform.py +0 -0
  49. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/decorators.py +0 -0
  50. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/entity.py +0 -0
  51. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/events.py +0 -0
  52. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/serializers.py +0 -0
  53. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/services/logging_service.py +0 -0
  54. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/synthesis/__init__.py +0 -0
  55. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/synthesis/llm_synthesizer.py +0 -0
  56. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/synthesis/prompt.py +0 -0
  57. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/synthesis/reranker.py +0 -0
  58. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/synthesis/retriever.py +0 -0
  59. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/__init__.py +0 -0
  60. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/function_call_suppressor.py +0 -0
  61. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/monitor_launcher.py +0 -0
  62. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/peek_gate.py +0 -0
  63. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/run_monitor.py +0 -0
  64. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid/utils/vector_search_formatter.py +0 -0
  65. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid.egg-info/SOURCES.txt +0 -0
  66. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid.egg-info/dependency_links.txt +0 -0
  67. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid.egg-info/requires.txt +0 -0
  68. {projectdavid-1.33.8 → projectdavid-1.33.10}/src/projectdavid.egg-info/top_level.txt +0 -0
  69. {projectdavid-1.33.8 → projectdavid-1.33.10}/tests/test_clients.py +0 -0
@@ -1,3 +1,17 @@
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
+
8
+ ## [1.33.9](https://github.com/frankie336/projectdavid/compare/v1.33.8...v1.33.9) (2025-06-13)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * restore code_interpreter_stream passthrough.9 ([98999d3](https://github.com/frankie336/projectdavid/commit/98999d3eca403d675d3cd8d54e2e59ec3f99f5a7))
14
+
1
15
  ## [1.33.8](https://github.com/frankie336/projectdavid/compare/v1.33.7...v1.33.8) (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.8
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "projectdavid"
7
- version = "1.33.8"
7
+ version = "1.33.10"
8
8
  description = "Python SDK for interacting with the Entities Assistant API."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -14,6 +14,9 @@ class SynchronousInferenceStream:
14
14
  _GLOBAL_LOOP = asyncio.new_event_loop()
15
15
  asyncio.set_event_loop(_GLOBAL_LOOP)
16
16
 
17
+ # --------------------------------------------------------------
18
+ # ctor / setup
19
+ # --------------------------------------------------------------
17
20
  def __init__(self, inference) -> None:
18
21
  self.inference_client = inference
19
22
  self.user_id: Optional[str] = None
@@ -39,6 +42,9 @@ class SynchronousInferenceStream:
39
42
  self.run_id = run_id
40
43
  self.api_key = api_key
41
44
 
45
+ # --------------------------------------------------------------
46
+ # main streaming entry-point
47
+ # --------------------------------------------------------------
42
48
  def stream_chunks(
43
49
  self,
44
50
  provider: str,
@@ -65,6 +71,7 @@ class SynchronousInferenceStream:
65
71
 
66
72
  agen = _stream_chunks_async().__aiter__()
67
73
 
74
+ # ---------- suppression chain ----------
68
75
  if suppress_fc:
69
76
  _suppressor = FunctionCallSuppressor()
70
77
  _peek_gate = PeekGate(_suppressor)
@@ -74,28 +81,10 @@ class SynchronousInferenceStream:
74
81
 
75
82
  else:
76
83
 
77
- def _filter_text(txt: str) -> str:
84
+ def _filter_text(txt: str) -> str: # no-op
78
85
  return txt
79
86
 
80
- def _drain_filters() -> Optional[dict]:
81
- if not suppress_fc:
82
- return None
83
- parts: list[str] = []
84
- while True:
85
- out = _filter_text("")
86
- if not out:
87
- break
88
- parts.append(out)
89
- if not _peek_gate.suppressing and _peek_gate.buf:
90
- parts.append(_peek_gate.buf)
91
- _peek_gate.buf = ""
92
- if parts:
93
- return {
94
- "type": "content",
95
- "content": "".join(parts),
96
- "run_id": self.run_id,
97
- }
98
- return None
87
+ # ---------------------------------------
99
88
 
100
89
  while True:
101
90
  try:
@@ -103,52 +92,40 @@ class SynchronousInferenceStream:
103
92
  asyncio.wait_for(agen.__anext__(), timeout=timeout_per_chunk)
104
93
  )
105
94
 
106
- # Always attach run_id
107
- chunk["run_id"] = self.run_id
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") in ("hot_code", "hot_code_output"):
117
- yield chunk
118
- continue
119
-
120
- if (
121
- chunk.get("stream_type") == "code_execution"
122
- and chunk.get("chunk", {}).get("type") == "code_interpreter_stream"
123
- ):
124
- yield chunk
95
+ # provider-labelled function_call
96
+ if suppress_fc and chunk.get("type") == "function_call":
97
+ LOG.debug("[SUPPRESSOR] blocked provider-labelled function_call")
125
98
  continue
126
99
 
100
+ # inline content
127
101
  if isinstance(chunk.get("content"), str):
128
102
  chunk["content"] = _filter_text(chunk["content"])
129
103
  if chunk["content"] == "":
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")
130
112
  continue
131
113
 
132
114
  yield chunk
133
115
 
134
116
  except StopAsyncIteration:
135
- if tail := _drain_filters():
136
- yield tail
137
117
  LOG.info("Stream completed normally.")
138
118
  break
139
-
140
119
  except asyncio.TimeoutError:
141
- if tail := _drain_filters():
142
- yield tail
143
- LOG.error("[TimeoutError] Chunk wait expired – aborting stream.")
120
+ LOG.error("[TimeoutError] Timeout occurred, stopping stream.")
144
121
  break
145
-
146
- except Exception as exc:
147
- if tail := _drain_filters():
148
- yield tail
149
- 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)
150
124
  break
151
125
 
126
+ # --------------------------------------------------------------
127
+ # housekeeping
128
+ # --------------------------------------------------------------
152
129
  @classmethod
153
130
  def shutdown_loop(cls) -> None:
154
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.8
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