dasein-core 0.2.6__py3-none-any.whl → 0.2.9__py3-none-any.whl

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.
Files changed (48) hide show
  1. dasein/api.py +1219 -133
  2. dasein/capture.py +2379 -1803
  3. dasein/microturn.py +475 -0
  4. dasein/models/en_core_web_sm/en_core_web_sm/__init__.py +10 -0
  5. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSE +19 -0
  6. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSES_SOURCES +66 -0
  7. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/README.md +47 -0
  8. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/accuracy.json +330 -0
  9. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/attribute_ruler/patterns +0 -0
  10. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/config.cfg +269 -0
  11. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/lemmatizer/lookups/lookups.bin +1 -0
  12. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/meta.json +521 -0
  13. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/cfg +13 -0
  14. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/model +0 -0
  15. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/moves +1 -0
  16. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/cfg +13 -0
  17. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/model +0 -0
  18. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/moves +1 -0
  19. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/cfg +3 -0
  20. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/model +0 -0
  21. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/cfg +57 -0
  22. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/model +0 -0
  23. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/cfg +3 -0
  24. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/model +0 -0
  25. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tokenizer +3 -0
  26. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/key2row +1 -0
  27. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/lookups.bin +0 -0
  28. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/strings.json +84782 -0
  29. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors +0 -0
  30. dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors.cfg +3 -0
  31. dasein/models/en_core_web_sm/en_core_web_sm/meta.json +521 -0
  32. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSE +19 -0
  33. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSES_SOURCES +66 -0
  34. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/METADATA +59 -0
  35. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/RECORD +35 -0
  36. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/WHEEL +5 -0
  37. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/entry_points.txt +2 -0
  38. dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/top_level.txt +1 -0
  39. dasein/pipecleaner.py +1917 -0
  40. dasein/services/post_run_client.py +4 -2
  41. dasein/services/service_adapter.py +4 -2
  42. dasein/wrappers.py +314 -0
  43. {dasein_core-0.2.6.dist-info → dasein_core-0.2.9.dist-info}/METADATA +4 -1
  44. dasein_core-0.2.9.dist-info/RECORD +59 -0
  45. dasein_core-0.2.6.dist-info/RECORD +0 -21
  46. {dasein_core-0.2.6.dist-info → dasein_core-0.2.9.dist-info}/WHEEL +0 -0
  47. {dasein_core-0.2.6.dist-info → dasein_core-0.2.9.dist-info}/licenses/LICENSE +0 -0
  48. {dasein_core-0.2.6.dist-info → dasein_core-0.2.9.dist-info}/top_level.txt +0 -0
@@ -32,7 +32,8 @@ class RuleSynthesisRequest:
32
32
  skip_synthesis: bool = False
33
33
  wait_for_synthesis: bool = False
34
34
  step_id: Optional[str] = None
35
- tools_metadata: Optional[List[Dict[str, Any]]] = None # Tool metadata for Stage 3.5 grounding
35
+ tools_metadata: Optional[List[Dict[str, Any]]] = None # Tool metadata for Stage 3.5 tool grounding
36
+ graph_metadata: Optional[Dict[str, Any]] = None # Graph metadata for Stage 3.5 node grounding
36
37
 
37
38
 
38
39
  @dataclass
@@ -96,7 +97,8 @@ class PostRunClient:
96
97
  "performance_tracking_id": request.performance_tracking_id,
97
98
  "skip_synthesis": request.skip_synthesis,
98
99
  "wait_for_synthesis": request.wait_for_synthesis,
99
- "tools_metadata": request.tools_metadata or [], # Tool metadata for Stage 3.5 grounding
100
+ "tools_metadata": request.tools_metadata or [], # Tool metadata for Stage 3.5 tool grounding
101
+ "graph_metadata": request.graph_metadata or {}, # Graph metadata for Stage 3.5 node grounding
100
102
  }
101
103
 
102
104
  logger.info(f"Synthesizing rules for run: {request.run_id}")
@@ -95,7 +95,8 @@ class ServiceAdapter:
95
95
  max_rules: Optional[int] = 5, performance_tracking_id: Optional[str] = None,
96
96
  skip_synthesis: bool = False, agent_fingerprint: Optional[str] = None,
97
97
  step_id: Optional[str] = None, post_run_mode: str = "full",
98
- wait_for_synthesis: bool = False, tools_metadata: Optional[List[Dict[str, Any]]] = None) -> Dict[str, Any]:
98
+ wait_for_synthesis: bool = False, tools_metadata: Optional[List[Dict[str, Any]]] = None,
99
+ graph_metadata: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
99
100
  """
100
101
  Synthesize rules from run telemetry (replaces local rule synthesis)
101
102
 
@@ -139,7 +140,8 @@ class ServiceAdapter:
139
140
  skip_synthesis=should_skip_synthesis,
140
141
  wait_for_synthesis=wait_for_synthesis,
141
142
  step_id=step_id,
142
- tools_metadata=tools_metadata
143
+ tools_metadata=tools_metadata,
144
+ graph_metadata=graph_metadata
143
145
  )
144
146
 
145
147
  response = self.post_run_client.synthesize_rules(request)
dasein/wrappers.py ADDED
@@ -0,0 +1,314 @@
1
+ """
2
+ Monkey-patching wrappers for LLMs and Tools.
3
+
4
+ This module contains the monkey-patch logic for intercepting:
5
+ 1. LLM calls (for microturn enforcement)
6
+ 2. Tool calls (for pipecleaner deduplication)
7
+ """
8
+
9
+ import threading
10
+ import time
11
+ from typing import Any, Optional
12
+
13
+ # Thread-local storage for callback handler (injected at runtime)
14
+ _tool_context = threading.local()
15
+
16
+
17
+ def set_pipecleaner_context(callback_handler: Any):
18
+ """
19
+ Inject callback handler into thread-local storage.
20
+ Called from CognateProxy.__init__ after handler is created.
21
+ """
22
+ _tool_context.callback_handler = callback_handler
23
+
24
+
25
+ def get_pipecleaner_context():
26
+ """Get callback handler from thread-local storage."""
27
+ return getattr(_tool_context, 'callback_handler', None)
28
+
29
+
30
+ def wrap_tools_for_pipecleaner(agent: Any, callback_handler: Any, verbose: bool = False) -> bool:
31
+ """
32
+ Instrument tool execution paths for pipecleaner deduplication.
33
+
34
+ Wraps:
35
+ - ToolNode._run_one/_arun_one (per-invocation choke point)
36
+ - BaseTool.invoke/ainvoke (catches @tool/StructuredTool)
37
+ - ToolMessage.__init__ (message construction)
38
+ """
39
+ try:
40
+ import importlib
41
+
42
+ if verbose:
43
+ print(f"[DASEIN][TOOL_WRAPPER] 🔍 Instrumenting tool wrappers...")
44
+
45
+ patched_count = 0
46
+
47
+ # ===== [HP2] ToolNode._run_one/_arun_one =====
48
+ try:
49
+ from langgraph.prebuilt.tool_node import ToolNode
50
+
51
+ if hasattr(ToolNode, '_arun_one'):
52
+ original_arun_one = ToolNode._arun_one
53
+
54
+ async def patched_arun_one(self, call, config):
55
+ tool_name = call.get('name', 'unknown') if isinstance(call, dict) else getattr(call, 'name', 'unknown')
56
+ result = await original_arun_one(self, call, config)
57
+ # Apply pipecleaner
58
+ result = _apply_pipecleaner_to_result(tool_name, result, callback_handler)
59
+ return result
60
+
61
+ ToolNode._arun_one = patched_arun_one
62
+ if verbose:
63
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched ToolNode._arun_one")
64
+ patched_count += 1
65
+
66
+ if hasattr(ToolNode, '_run_one'):
67
+ original_run_one = ToolNode._run_one
68
+
69
+ def patched_run_one(self, call, config):
70
+ tool_name = call.get('name', 'unknown') if isinstance(call, dict) else getattr(call, 'name', 'unknown')
71
+ result = original_run_one(self, call, config)
72
+ result = _apply_pipecleaner_to_result(tool_name, result, callback_handler)
73
+ return result
74
+
75
+ ToolNode._run_one = patched_run_one
76
+ if verbose:
77
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched ToolNode._run_one")
78
+ patched_count += 1
79
+ except ImportError:
80
+ if verbose:
81
+ print(f"[DASEIN][TOOL_WRAPPER] ⚠️ ToolNode not available")
82
+
83
+ # ===== BaseTool._run/_arun (ACTUAL EXECUTION, not wrapper) =====
84
+ try:
85
+ from langchain_core.tools.base import BaseTool
86
+
87
+ # Patch _arun (the actual async execution method)
88
+ if hasattr(BaseTool, '_arun'):
89
+ original_arun = BaseTool._arun
90
+
91
+ async def patched_arun(self, *args, **kwargs):
92
+ tool_name = getattr(self, 'name', 'unknown')
93
+ result = await original_arun(self, *args, **kwargs)
94
+ handler = get_pipecleaner_context()
95
+ cleaned_result = _apply_pipecleaner_to_result(tool_name, result, handler)
96
+ return cleaned_result
97
+
98
+ BaseTool._arun = patched_arun
99
+ if verbose:
100
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched BaseTool._arun")
101
+ patched_count += 1
102
+
103
+ # Patch _run (sync version)
104
+ if hasattr(BaseTool, '_run'):
105
+ original_run = BaseTool._run
106
+
107
+ def patched_run(self, *args, **kwargs):
108
+ tool_name = getattr(self, 'name', 'unknown')
109
+ result = original_run(self, *args, **kwargs)
110
+ handler = get_pipecleaner_context()
111
+ cleaned_result = _apply_pipecleaner_to_result(tool_name, result, handler)
112
+ return cleaned_result
113
+
114
+ BaseTool._run = patched_run
115
+ if verbose:
116
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched BaseTool._run")
117
+ patched_count += 1
118
+
119
+ # ALSO patch ainvoke/invoke as backup
120
+ if hasattr(BaseTool, 'ainvoke'):
121
+ original_ainvoke = BaseTool.ainvoke
122
+
123
+ async def patched_ainvoke(self, *args, **kwargs):
124
+ tool_name = getattr(self, 'name', 'unknown')
125
+ result = await original_ainvoke(self, *args, **kwargs)
126
+ handler = get_pipecleaner_context()
127
+ cleaned_result = _apply_pipecleaner_to_result(tool_name, result, handler)
128
+
129
+ if cleaned_result != result:
130
+ print(f"[🧹 CLEANED] Tool '{tool_name}' | {len(str(result))} → {len(str(cleaned_result))} chars")
131
+
132
+ return cleaned_result
133
+
134
+ BaseTool.ainvoke = patched_ainvoke
135
+ if verbose:
136
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched BaseTool.ainvoke")
137
+ patched_count += 1
138
+
139
+ if hasattr(BaseTool, 'invoke'):
140
+ original_invoke = BaseTool.invoke
141
+
142
+ def patched_invoke(self, *args, **kwargs):
143
+ tool_name = getattr(self, 'name', 'unknown')
144
+ result = original_invoke(self, *args, **kwargs)
145
+ handler = get_pipecleaner_context()
146
+ cleaned_result = _apply_pipecleaner_to_result(tool_name, result, handler)
147
+
148
+ if cleaned_result != result:
149
+ print(f"[🧹 CLEANED] Tool '{tool_name}' | {len(str(result))} → {len(str(cleaned_result))} chars")
150
+
151
+ return cleaned_result
152
+
153
+ BaseTool.invoke = patched_invoke
154
+ if verbose:
155
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched BaseTool.invoke")
156
+ patched_count += 1
157
+ except ImportError:
158
+ if verbose:
159
+ print(f"[DASEIN][TOOL_WRAPPER] ⚠️ BaseTool not available")
160
+
161
+ # ===== ToolMessage creation (catches streaming results) =====
162
+ try:
163
+ from langchain_core.messages import ToolMessage
164
+
165
+ if hasattr(ToolMessage, '__init__'):
166
+ original_init = ToolMessage.__init__
167
+
168
+ def patched_init(self, content, **kwargs):
169
+ # Get tool name from kwargs if available
170
+ name = kwargs.get('name', 'unknown')
171
+
172
+ # Apply pipecleaner to content before message is created
173
+ handler = get_pipecleaner_context()
174
+ if handler and isinstance(content, str):
175
+ cleaned_content = _apply_pipecleaner_to_result(name, content, handler)
176
+ if cleaned_content != content:
177
+ print(f"[🧹 CLEANED] ToolMessage '{name}' | {len(str(content))} → {len(str(cleaned_content))} chars")
178
+ content = cleaned_content
179
+
180
+ # Call original with potentially cleaned content
181
+ original_init(self, content, **kwargs)
182
+
183
+ ToolMessage.__init__ = patched_init
184
+ if verbose:
185
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Patched ToolMessage.__init__")
186
+ patched_count += 1
187
+ except ImportError:
188
+ if verbose:
189
+ print(f"[DASEIN][TOOL_WRAPPER] ⚠️ ToolMessage not available")
190
+
191
+ if verbose:
192
+ print(f"[DASEIN][TOOL_WRAPPER] ✅ Instrumentation complete: {patched_count} seams wrapped")
193
+ return patched_count > 0
194
+
195
+ except Exception as e:
196
+ print(f"[DASEIN][TOOL_WRAPPER] Error patching: {e}")
197
+ import traceback
198
+ traceback.print_exc()
199
+ return False
200
+
201
+
202
+ def _extract_text_from_search_result(result: Any, tool_name: str) -> str:
203
+ """
204
+ Extract full text content from structured search results.
205
+
206
+ Handles multiple search tool formats:
207
+ - Tavily: list of dicts with 'content', 'url', 'title'
208
+ - Serper: dict with 'organic' results
209
+ - DuckDuckGo: list of dicts with 'body', 'title'
210
+ - Raw strings: pass through
211
+ """
212
+ # If already a string, return as-is
213
+ if isinstance(result, str):
214
+ return result
215
+
216
+ extracted_parts = []
217
+
218
+ # Tavily format: list of result dicts
219
+ if isinstance(result, list):
220
+ print(f"[PIPECLEANER] Extracting from list of {len(result)} search results")
221
+ for i, item in enumerate(result, 1):
222
+ if isinstance(item, dict):
223
+ # Extract all text fields
224
+ title = item.get('title', '')
225
+ url = item.get('url', '')
226
+ content = item.get('content', '') or item.get('body', '') or item.get('snippet', '')
227
+
228
+ if title or content:
229
+ extracted_parts.append(f"--- SOURCE {i}: {title} ---")
230
+ if url:
231
+ extracted_parts.append(f"URL: {url}")
232
+ if content:
233
+ extracted_parts.append(content)
234
+ extracted_parts.append("") # Blank line separator
235
+
236
+ # Serper/dict format with 'organic' or 'results'
237
+ elif isinstance(result, dict):
238
+ organic = result.get('organic', []) or result.get('results', [])
239
+ if organic:
240
+ print(f"[PIPECLEANER] Extracting from dict with {len(organic)} organic results")
241
+ for i, item in enumerate(organic, 1):
242
+ title = item.get('title', '')
243
+ url = item.get('link', '') or item.get('url', '')
244
+ snippet = item.get('snippet', '') or item.get('content', '')
245
+
246
+ if title or snippet:
247
+ extracted_parts.append(f"--- SOURCE {i}: {title} ---")
248
+ if url:
249
+ extracted_parts.append(f"URL: {url}")
250
+ if snippet:
251
+ extracted_parts.append(snippet)
252
+ extracted_parts.append("")
253
+ else:
254
+ # Dict without known structure, try to extract any text
255
+ for key, value in result.items():
256
+ if isinstance(value, str) and len(value) > 20:
257
+ extracted_parts.append(f"{key}: {value}")
258
+
259
+ # Fallback: convert to string (but log warning)
260
+ if not extracted_parts:
261
+ result_str = str(result)
262
+ print(f"[PIPECLEANER] ⚠️ Unknown result format, using str() - may be truncated")
263
+ print(f"[PIPECLEANER] Result type: {type(result).__name__}")
264
+ return result_str
265
+
266
+ full_text = "\n".join(extracted_parts)
267
+ print(f"[PIPECLEANER] ✅ Extracted {len(full_text)} chars from {len(extracted_parts)} parts")
268
+ return full_text
269
+
270
+
271
+ def _apply_pipecleaner_to_result(tool_name: str, result: Any, callback_handler: Any) -> Any:
272
+ """
273
+ Apply pipecleaner deduplication to a tool result.
274
+
275
+ Called from patched tool execution methods.
276
+ """
277
+ try:
278
+ # Check if we have filter rules
279
+ if not callback_handler or not hasattr(callback_handler, '_selected_rules'):
280
+ return result
281
+
282
+ # Extract text from structured result (handles Tavily, Serper, etc.)
283
+ result_str = _extract_text_from_search_result(result, tool_name)
284
+
285
+ # Apply pipecleaner
286
+ from .pipecleaner import apply_pipecleaner_if_applicable
287
+
288
+ # Get cached model
289
+ cached_model = getattr(callback_handler, '_pipecleaner_embedding_model', None)
290
+
291
+ # Apply deduplication
292
+ deduplicated_str, model = apply_pipecleaner_if_applicable(
293
+ tool_name=tool_name,
294
+ output_str=result_str,
295
+ selected_rules=callback_handler._selected_rules,
296
+ cached_model=cached_model
297
+ )
298
+
299
+ # Cache model
300
+ if model is not None:
301
+ callback_handler._pipecleaner_embedding_model = model
302
+
303
+ # Return deduplicated result (as same type as original if possible)
304
+ if deduplicated_str != result_str:
305
+ print(f"[PIPECLEANER] ✅ Deduplicated: {len(result_str)} → {len(deduplicated_str)} chars")
306
+ return deduplicated_str
307
+
308
+ return result
309
+
310
+ except Exception as e:
311
+ print(f"[PIPECLEANER] Error applying pipecleaner: {e}")
312
+ import traceback
313
+ traceback.print_exc()
314
+ return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dasein-core
3
- Version: 0.2.6
3
+ Version: 0.2.9
4
4
  Summary: Universal memory for agentic AI. Attach a brain to any LangChain/LangGraph agent in a single line.
5
5
  Author-email: Dasein Team <support@dasein.ai>
6
6
  License: MIT
@@ -30,6 +30,9 @@ Requires-Dist: sqlalchemy>=2.0
30
30
  Requires-Dist: tabulate>=0.9.0
31
31
  Requires-Dist: python-dotenv>=1.0
32
32
  Requires-Dist: requests<2.35.0,>=2.31.0
33
+ Requires-Dist: numpy>=1.24.0
34
+ Requires-Dist: sentence-transformers>=2.2.0
35
+ Requires-Dist: spacy>=3.5.0
33
36
  Provides-Extra: dev
34
37
  Requires-Dist: pytest>=7.0; extra == "dev"
35
38
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -0,0 +1,59 @@
1
+ dasein/__init__.py,sha256=RY0lhaaWB6yJ_5YMRmaHDvQ0eFbc0BGbYNe5OVyxzYE,2316
2
+ dasein/advice_format.py,sha256=5-h4J24L_B2Y9dlmyDuIYtmPCWOGAYoinBEXqpcNg2s,5386
3
+ dasein/api.py,sha256=Y5-n2foYja1E-1pkD5XkebmyObThXyfS0ZaFq7-j1Ss,251706
4
+ dasein/capture.py,sha256=n-a-uQQgzXMXMwwbvbdAqqO6sD_Q4kjHiReWLozxJrE,113382
5
+ dasein/config.py,sha256=lXO8JG4RXbodn3gT5yEnuB0VRwWdrRVwhX3Rm06IZmU,1957
6
+ dasein/events.py,sha256=mG-lnOvQoZUhXbrPSjrG4RME6ywUcbSZ04PscoJ15GI,12896
7
+ dasein/extractors.py,sha256=fUFBVH9u2x4cJaM-8Zw4qiIpBF2LvjcdYkMvoXQUpL8,3986
8
+ dasein/injection_strategies.py,sha256=JBAvLnJK4xKqK4D1ZQnklIy-yIKSvWuvm2x0YGDMZVU,6507
9
+ dasein/injector.py,sha256=EItWhlG6oMAf_D7YJnRNyDwAQIK5MsaATu1ig3OENqM,7256
10
+ dasein/microturn.py,sha256=raFDQquEPFu5wxYPv9od0Nli9tdV55kXRn7Mvk1pyso,19081
11
+ dasein/pipecleaner.py,sha256=Rgw-gJ6NP2k4K7hNt_Lg0Bvs1BOdr4Cf6wFCXdtM0DU,78872
12
+ dasein/trace_buffer.py,sha256=bIyTpU8ZrNFR_TCwS43HvzUrDHpZ2F8pLVDeUE9jpwM,4117
13
+ dasein/types.py,sha256=FjGXZowiRYZzWj5GzSnAnA_-xwYqqE7WmXFCosVyGI8,2974
14
+ dasein/wrappers.py,sha256=oUXnY6DGUAVDOmFz-9UdB8fxgOL_fx5dOxtv6JXQ8Wo,13310
15
+ dasein/models/en_core_web_sm/en_core_web_sm/__init__.py,sha256=yOtXB5wD_EFXwif2QXgfvLPp0RQ5q-G_C3LkwPp4o40,237
16
+ dasein/models/en_core_web_sm/en_core_web_sm/meta.json,sha256=X8R1--W7Axckn9flHCLVMFI0W7I_E-rxSf9ZAiOWTRw,10085
17
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSE,sha256=OTPBdpebaLxtC8yQLH1sEw8dEn9Hbxe6XNuo2Zz9ABI,1056
18
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/LICENSES_SOURCES,sha256=INnfrNIVESJR8VNB7dGkex-Yvzk6IS8Q8ZT_3H7pipA,2347
19
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/README.md,sha256=GiKC2MD8N5ujf8bnNJLGBW8xoNCoZndnru2HdorqDd8,2587
20
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/accuracy.json,sha256=bO55Bo7GZVz5xo4s2KodP1ZI04LRaqQ_aym1-CumEsQ,6320
21
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/config.cfg,sha256=ZcVFyi2lvUuHsi1JFzGGBTYLN97m7WsYUWoDb4cxn3k,5527
22
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/meta.json,sha256=X8R1--W7Axckn9flHCLVMFI0W7I_E-rxSf9ZAiOWTRw,10085
23
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tokenizer,sha256=sBTou6SVixIK8tDBxj6rt8ADefK6yvEN98UyXv0upGc,77066
24
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/attribute_ruler/patterns,sha256=-Ll_fr75uFNrul8Pwec69hg1Y-luIyW8uwIbjG28ZoM,14735
25
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/lemmatizer/lookups/lookups.bin,sha256=62T0DA-DltF2JzDA3fTa0qUtE49aOJ9xoaHQiBc7dzc,972893
26
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/cfg,sha256=pxcu2tr7qfRy6awPJmDuwEtkBeRxvp4gJnt5xnKI0i0,221
27
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/model,sha256=b0fKBi60Gcj_t9MCPm-8Sy6yHasUxdSapeVYYii4dAU,6154601
28
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/ner/moves,sha256=2CsTRz69M-A5YATdIvAMcf48ElF0K_H3xFVPI_07CvQ,1064
29
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/cfg,sha256=4qJA7wH5Xlj13UydbpDWH1l7jZmJZlcNMAndgeiHl4A,222
30
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/model,sha256=oYNvvAKzkksv1fZTJcWK6FL_ES2xCQynJOWoAeaLhf0,319909
31
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/parser/moves,sha256=7EExjDLrf55NjwULLoRm7meVTS00VcGuxzq_Rsgt1n8,1571
32
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/cfg,sha256=Kk20pym2Rp2h-H1xzHzT7SpzNgzIUyaCHoUINsRnEQM,23
33
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/senter/model,sha256=5iwlBNzcZhRLMMBIEArwXxIgf5M_bWaZgrlHrnH_3u8,197089
34
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/cfg,sha256=1ITD2TkfN7-ccnqi60xHeiTLEDAg-V5S3DeEKBi1ARg,615
35
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tagger/model,sha256=-wDvWSoqRk2V3Yic5CSVKuf9ZOCVFTBUwxA0UZjMD8Q,19829
36
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/cfg,sha256=-KWibjBW62-wbe6z28z9iK50kAIAyYxwtZZru37J1N4,4
37
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/tok2vec/model,sha256=QthBRSHq91-Be9GzUbJgOaIqkSuyYX-V6tMFQg8uv_0,6269370
38
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/key2row,sha256=dr6LUo0Adfeq6Y1vpXptPIOuSAqEaeZo17CvlomVrHE,1
39
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/lookups.bin,sha256=_OnIg8VhZfKVc8yTjCocnUF6xhvY9WtnHdX3mW3nBoI,70040
40
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/strings.json,sha256=sZZtHwegW2hXbfB_Q_QCA7ThESStgsyDnoMSrY1_2uc,1103983
41
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors,sha256=FHcraD5yZDbVlIrT__K0PQNu8uu-NFiq_tYATgWkBwY,128
42
+ dasein/models/en_core_web_sm/en_core_web_sm/en_core_web_sm-3.7.1/vocab/vectors.cfg,sha256=_0NZCRlSyM0W8fBIL1dw-4LRcHNo1cyjxGqlAfVS48U,22
43
+ dasein/services/__init__.py,sha256=0o6vKEVSYgGo-u-xDFf7Z4cQr8gIht2YovD6eEXUquE,356
44
+ dasein/services/post_run_client.py,sha256=UjK3eqf7oWGSuWkKe0vQmeMS0yUUOhYFD4-SZ7uj8WY,4768
45
+ dasein/services/pre_run_client.py,sha256=tXmz_PQaSfq0xwypiWUAqNkXOmREZ6EwXLC4OM89J-A,4317
46
+ dasein/services/service_adapter.py,sha256=YHk41lR3PXh8WTmxOzzwKf6hwPYGqIdApI92vQKlkAY,7350
47
+ dasein/services/service_config.py,sha256=8_4tpV4mZvfaOc5_yyHbOyL4rYsPHzkLTEY1rtYgLs8,1629
48
+ dasein_core-0.2.9.dist-info/licenses/LICENSE,sha256=7FHjIFEKl_3hSc3tGUVEWmufC_3oi8rh_2zVuL7jMKs,1091
49
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSE,sha256=OTPBdpebaLxtC8yQLH1sEw8dEn9Hbxe6XNuo2Zz9ABI,1056
50
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/LICENSES_SOURCES,sha256=INnfrNIVESJR8VNB7dGkex-Yvzk6IS8Q8ZT_3H7pipA,2347
51
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/METADATA,sha256=-vGqRxa_M2RwKtLjBhc4JlBQdJ3k7CwOnseT_ReYcic,2958
52
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/RECORD,sha256=dDb6U7A5lfo6wu0J5z2vXZQnv4IckBO-X9UDR79rdHg,3547
53
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
54
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/entry_points.txt,sha256=OkWs-KxPJtDdpvIFCVXzDC9ECtejhPxv7pP3Tgk2cNg,47
55
+ dasein/models/en_core_web_sm/en_core_web_sm-3.7.1.dist-info/top_level.txt,sha256=56OIuRbEuhr12HsM9XpCMnTtHRMgNC5Hje4Xeo8wF2c,15
56
+ dasein_core-0.2.9.dist-info/METADATA,sha256=tsygy28ayMIG8axna8v1CJRTO-jWnUMHOZwbz7H1XmI,10296
57
+ dasein_core-0.2.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
58
+ dasein_core-0.2.9.dist-info/top_level.txt,sha256=6yYY9kltjvvPsg9K6KyMKRtzEr5qM7sHXN7VzmrDtp0,7
59
+ dasein_core-0.2.9.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- dasein/__init__.py,sha256=RY0lhaaWB6yJ_5YMRmaHDvQ0eFbc0BGbYNe5OVyxzYE,2316
2
- dasein/advice_format.py,sha256=5-h4J24L_B2Y9dlmyDuIYtmPCWOGAYoinBEXqpcNg2s,5386
3
- dasein/api.py,sha256=Ii4_RNFtml3fA2Kt2Et_19RkXoL6OkQ91gkvvFNnP5g,176478
4
- dasein/capture.py,sha256=XrEPsteG5__csqcqXzOmBSzPYgeI-OFzu3IRVMPYj3w,83814
5
- dasein/config.py,sha256=lXO8JG4RXbodn3gT5yEnuB0VRwWdrRVwhX3Rm06IZmU,1957
6
- dasein/events.py,sha256=mG-lnOvQoZUhXbrPSjrG4RME6ywUcbSZ04PscoJ15GI,12896
7
- dasein/extractors.py,sha256=fUFBVH9u2x4cJaM-8Zw4qiIpBF2LvjcdYkMvoXQUpL8,3986
8
- dasein/injection_strategies.py,sha256=JBAvLnJK4xKqK4D1ZQnklIy-yIKSvWuvm2x0YGDMZVU,6507
9
- dasein/injector.py,sha256=EItWhlG6oMAf_D7YJnRNyDwAQIK5MsaATu1ig3OENqM,7256
10
- dasein/trace_buffer.py,sha256=bIyTpU8ZrNFR_TCwS43HvzUrDHpZ2F8pLVDeUE9jpwM,4117
11
- dasein/types.py,sha256=FjGXZowiRYZzWj5GzSnAnA_-xwYqqE7WmXFCosVyGI8,2974
12
- dasein/services/__init__.py,sha256=0o6vKEVSYgGo-u-xDFf7Z4cQr8gIht2YovD6eEXUquE,356
13
- dasein/services/post_run_client.py,sha256=qYT9qp2O1MecYiTLRjFBIJy8mfZ_FTntmK-_I-7-YlI,4552
14
- dasein/services/pre_run_client.py,sha256=tXmz_PQaSfq0xwypiWUAqNkXOmREZ6EwXLC4OM89J-A,4317
15
- dasein/services/service_adapter.py,sha256=0oMDoKDWkZ17jMCVBuDMJ9TMVmfRie4q4PLMIpiV_uw,7230
16
- dasein/services/service_config.py,sha256=8_4tpV4mZvfaOc5_yyHbOyL4rYsPHzkLTEY1rtYgLs8,1629
17
- dasein_core-0.2.6.dist-info/licenses/LICENSE,sha256=7FHjIFEKl_3hSc3tGUVEWmufC_3oi8rh_2zVuL7jMKs,1091
18
- dasein_core-0.2.6.dist-info/METADATA,sha256=Z30TeYgJc6ms5g7gaKCpfvOV9TiOehgXI9sO-uuowdQ,10192
19
- dasein_core-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
20
- dasein_core-0.2.6.dist-info/top_level.txt,sha256=6yYY9kltjvvPsg9K6KyMKRtzEr5qM7sHXN7VzmrDtp0,7
21
- dasein_core-0.2.6.dist-info/RECORD,,