dasein-core 0.2.15__tar.gz → 0.2.17__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.
- {dasein_core-0.2.15/src/dasein_core.egg-info → dasein_core-0.2.17}/PKG-INFO +1 -1
- {dasein_core-0.2.15 → dasein_core-0.2.17}/pyproject.toml +1 -1
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/api.py +4 -8
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/capture.py +30 -3
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/pipecleaner.py +1918 -1920
- {dasein_core-0.2.15 → dasein_core-0.2.17/src/dasein_core.egg-info}/PKG-INFO +1 -1
- {dasein_core-0.2.15 → dasein_core-0.2.17}/LICENSE +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/MANIFEST.in +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/README.md +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/examples/dasein_examples.ipynb +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/setup.cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/setup.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/__init__.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/advice_format.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/config.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/events.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/extractors.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/injection_strategies.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/injector.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/microturn.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/__init__.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSE +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSES_SOURCES +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/README.md +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/accuracy.json +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/attribute_ruler/patterns +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/config.cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/lemmatizer/lookups/lookups.bin +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/meta.json +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/model +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/moves +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/model +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/moves +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/model +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/model +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/model +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tokenizer +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/key2row +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/lookups.bin +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/strings.json +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors.cfg +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm/meta.json +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSE +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSES_SOURCES +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/METADATA +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/RECORD +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/WHEEL +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/entry_points.txt +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/top_level.txt +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/services/__init__.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/services/post_run_client.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/services/pre_run_client.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/services/service_adapter.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/services/service_config.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/trace_buffer.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/types.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein/wrappers.py +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein_core.egg-info/SOURCES.txt +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein_core.egg-info/dependency_links.txt +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein_core.egg-info/requires.txt +0 -0
- {dasein_core-0.2.15 → dasein_core-0.2.17}/src/dasein_core.egg-info/top_level.txt +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "dasein-core"
|
7
|
-
version = "0.2.
|
7
|
+
version = "0.2.17"
|
8
8
|
description = "Universal memory for agentic AI. Attach a brain to any LangChain/LangGraph agent in a single line."
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.8"
|
@@ -3044,11 +3044,9 @@ Follow these rules when planning your actions."""
|
|
3044
3044
|
print(f"Query: {query}")
|
3045
3045
|
print("-" * 50)
|
3046
3046
|
|
3047
|
-
#
|
3047
|
+
# Reset callback handler state before each run (except the first one)
|
3048
|
+
# Note: reset_run_state() already clears trace, function calls, guards, and timers
|
3048
3049
|
if i > 0:
|
3049
|
-
from .capture import clear_trace
|
3050
|
-
clear_trace()
|
3051
|
-
# Reset callback handler state (function calls, injection guard)
|
3052
3050
|
if hasattr(self, '_callback_handler') and hasattr(self._callback_handler, 'reset_run_state'):
|
3053
3051
|
self._callback_handler.reset_run_state()
|
3054
3052
|
|
@@ -3088,11 +3086,9 @@ Follow these rules when planning your actions."""
|
|
3088
3086
|
print(f"Query: {query}")
|
3089
3087
|
print("-" * 50)
|
3090
3088
|
|
3091
|
-
#
|
3089
|
+
# Reset callback handler state before each run (except the first one)
|
3090
|
+
# Note: reset_run_state() already clears trace, function calls, guards, and timers
|
3092
3091
|
if i > 0:
|
3093
|
-
from .capture import clear_trace
|
3094
|
-
clear_trace()
|
3095
|
-
# Reset callback handler state (function calls, injection guard)
|
3096
3092
|
if hasattr(self, '_callback_handler') and hasattr(self._callback_handler, 'reset_run_state'):
|
3097
3093
|
self._callback_handler.reset_run_state()
|
3098
3094
|
|
@@ -379,6 +379,7 @@ class DaseinCallbackHandler(BaseCallbackHandler):
|
|
379
379
|
self._compiled_tools_metadata = [] # Store extracted tools
|
380
380
|
self._pipecleaner_embedding_model = None # Cache embedding model for this run
|
381
381
|
self._current_tool_name = None # Track currently executing tool for hotpath deduplication
|
382
|
+
self._last_reset_ts = None # Debounce guard for reset_run_state()
|
382
383
|
|
383
384
|
# Generate stable run_id for corpus deduplication
|
384
385
|
import uuid
|
@@ -397,6 +398,24 @@ class DaseinCallbackHandler(BaseCallbackHandler):
|
|
397
398
|
|
398
399
|
def reset_run_state(self):
|
399
400
|
"""Reset state that should be cleared between runs."""
|
401
|
+
# Debounce: suppress duplicate rapid invocations (e.g., from multiple callers in same tick)
|
402
|
+
try:
|
403
|
+
from time import monotonic
|
404
|
+
now = monotonic()
|
405
|
+
if getattr(self, '_last_reset_ts', None) is not None and (now - self._last_reset_ts) < 0.05:
|
406
|
+
# Too soon since last reset; skip
|
407
|
+
return
|
408
|
+
self._last_reset_ts = now
|
409
|
+
except Exception:
|
410
|
+
pass
|
411
|
+
# Optional debug: print caller stack to trace root cause of unexpected resets
|
412
|
+
try:
|
413
|
+
import os, traceback
|
414
|
+
if os.getenv("DASEIN_DEBUG_RESET", "0") == "1":
|
415
|
+
stack_excerpt = ''.join(traceback.format_stack(limit=8))
|
416
|
+
self._vprint("[DASEIN][CALLBACK] reset_run_state() caller stack (set DASEIN_DEBUG_RESET=0 to disable):\n" + stack_excerpt, True)
|
417
|
+
except Exception:
|
418
|
+
pass
|
400
419
|
self._function_calls_made = {}
|
401
420
|
self._injection_guard = set()
|
402
421
|
self._trace = [] # Clear instance trace
|
@@ -1796,7 +1815,7 @@ EXECUTION STATE (functions called so far in this run):
|
|
1796
1815
|
|
1797
1816
|
"""
|
1798
1817
|
|
1799
|
-
combined_injection = f""" SYSTEM OVERRIDE
|
1818
|
+
combined_injection = f""" SYSTEM OVERRIDE
|
1800
1819
|
These rules OVERRIDE all defaults. You MUST enforce them exactly or the task FAILS.
|
1801
1820
|
|
1802
1821
|
Tags: AVOID (absolute ban), SKIP (force bypass), FIX (mandatory params), PREFER (ranked choice), HINT (optional).
|
@@ -2147,9 +2166,17 @@ def clear_trace() -> None:
|
|
2147
2166
|
# Try to clear traces in active CognateProxy instances
|
2148
2167
|
try:
|
2149
2168
|
import gc
|
2169
|
+
seen_handlers = set()
|
2150
2170
|
for obj in gc.get_objects():
|
2151
|
-
if hasattr(obj, '_callback_handler')
|
2152
|
-
obj
|
2171
|
+
if hasattr(obj, '_callback_handler'):
|
2172
|
+
handler = getattr(obj, '_callback_handler', None)
|
2173
|
+
if handler is None or not hasattr(handler, 'reset_run_state'):
|
2174
|
+
continue
|
2175
|
+
handler_id = id(handler)
|
2176
|
+
if handler_id in seen_handlers:
|
2177
|
+
continue
|
2178
|
+
seen_handlers.add(handler_id)
|
2179
|
+
handler.reset_run_state()
|
2153
2180
|
except Exception:
|
2154
2181
|
pass # Ignore if not available
|
2155
2182
|
|