agent-runtime-core 0.2.1__py3-none-any.whl → 0.4.0__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 (38) hide show
  1. {agent_runtime → agent_runtime_core}/__init__.py +8 -8
  2. {agent_runtime → agent_runtime_core}/config.py +1 -1
  3. {agent_runtime → agent_runtime_core}/events/__init__.py +5 -5
  4. {agent_runtime → agent_runtime_core}/events/memory.py +1 -1
  5. {agent_runtime → agent_runtime_core}/events/redis.py +1 -1
  6. {agent_runtime → agent_runtime_core}/events/sqlite.py +1 -1
  7. {agent_runtime → agent_runtime_core}/llm/__init__.py +6 -6
  8. {agent_runtime → agent_runtime_core}/llm/anthropic.py +4 -4
  9. {agent_runtime → agent_runtime_core}/llm/litellm_client.py +2 -2
  10. {agent_runtime → agent_runtime_core}/llm/openai.py +4 -4
  11. {agent_runtime → agent_runtime_core}/persistence/__init__.py +48 -12
  12. agent_runtime_core/persistence/base.py +737 -0
  13. {agent_runtime → agent_runtime_core}/persistence/file.py +1 -1
  14. {agent_runtime → agent_runtime_core}/persistence/manager.py +122 -14
  15. {agent_runtime → agent_runtime_core}/queue/__init__.py +5 -5
  16. {agent_runtime → agent_runtime_core}/queue/memory.py +1 -1
  17. {agent_runtime → agent_runtime_core}/queue/redis.py +1 -1
  18. {agent_runtime → agent_runtime_core}/queue/sqlite.py +1 -1
  19. {agent_runtime → agent_runtime_core}/registry.py +1 -1
  20. {agent_runtime → agent_runtime_core}/runner.py +6 -6
  21. {agent_runtime → agent_runtime_core}/state/__init__.py +5 -5
  22. {agent_runtime → agent_runtime_core}/state/memory.py +1 -1
  23. {agent_runtime → agent_runtime_core}/state/redis.py +1 -1
  24. {agent_runtime → agent_runtime_core}/state/sqlite.py +1 -1
  25. {agent_runtime → agent_runtime_core}/testing.py +1 -1
  26. {agent_runtime → agent_runtime_core}/tracing/__init__.py +4 -4
  27. {agent_runtime → agent_runtime_core}/tracing/langfuse.py +1 -1
  28. {agent_runtime → agent_runtime_core}/tracing/noop.py +1 -1
  29. {agent_runtime_core-0.2.1.dist-info → agent_runtime_core-0.4.0.dist-info}/METADATA +352 -42
  30. agent_runtime_core-0.4.0.dist-info/RECORD +36 -0
  31. agent_runtime/persistence/base.py +0 -332
  32. agent_runtime_core-0.2.1.dist-info/RECORD +0 -36
  33. {agent_runtime → agent_runtime_core}/events/base.py +0 -0
  34. {agent_runtime → agent_runtime_core}/interfaces.py +0 -0
  35. {agent_runtime → agent_runtime_core}/queue/base.py +0 -0
  36. {agent_runtime → agent_runtime_core}/state/base.py +0 -0
  37. {agent_runtime_core-0.2.1.dist-info → agent_runtime_core-0.4.0.dist-info}/WHEEL +0 -0
  38. {agent_runtime_core-0.2.1.dist-info → agent_runtime_core-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -15,7 +15,7 @@ from pathlib import Path
15
15
  from typing import Any, Optional
16
16
  from uuid import UUID
17
17
 
18
- from agent_runtime.persistence.base import (
18
+ from agent_runtime_core.persistence.base import (
19
19
  MemoryStore,
20
20
  ConversationStore,
21
21
  TaskStore,
@@ -8,20 +8,32 @@ For Django integration, you can either:
8
8
  1. Pass pre-instantiated store instances
9
9
  2. Pass store classes with appropriate kwargs
10
10
  3. Use factory functions for request-scoped stores
11
+
12
+ Core stores (always available):
13
+ - MemoryStore: Key-value storage
14
+ - ConversationStore: Conversation history
15
+ - TaskStore: Task lists and progress
16
+ - PreferencesStore: User/agent configuration
17
+
18
+ Optional stores (must be explicitly configured):
19
+ - KnowledgeStore: Facts, summaries, embeddings
20
+ - AuditStore: Logs, errors, metrics
11
21
  """
12
22
 
13
23
  from dataclasses import dataclass, field
14
24
  from pathlib import Path
15
25
  from typing import Any, Callable, Optional, Type, Union
16
26
 
17
- from agent_runtime.persistence.base import (
27
+ from agent_runtime_core.persistence.base import (
18
28
  MemoryStore,
19
29
  ConversationStore,
20
30
  TaskStore,
21
31
  PreferencesStore,
32
+ KnowledgeStore,
33
+ AuditStore,
22
34
  Scope,
23
35
  )
24
- from agent_runtime.persistence.file import (
36
+ from agent_runtime_core.persistence.file import (
25
37
  FileMemoryStore,
26
38
  FileConversationStore,
27
39
  FileTaskStore,
@@ -34,6 +46,8 @@ MemoryStoreFactory = Callable[[], MemoryStore]
34
46
  ConversationStoreFactory = Callable[[], ConversationStore]
35
47
  TaskStoreFactory = Callable[[], TaskStore]
36
48
  PreferencesStoreFactory = Callable[[], PreferencesStore]
49
+ KnowledgeStoreFactory = Callable[[], KnowledgeStore]
50
+ AuditStoreFactory = Callable[[], AuditStore]
37
51
 
38
52
 
39
53
  @dataclass
@@ -46,6 +60,9 @@ class PersistenceConfig:
46
60
  - A pre-instantiated store instance
47
61
  - A factory function that returns a store instance
48
62
 
63
+ Core stores (memory, conversations, tasks, preferences) have file-based
64
+ defaults. Optional stores (knowledge, audit) must be explicitly configured.
65
+
49
66
  Example for Django:
50
67
  from myapp.stores import DjangoMemoryStore, DjangoConversationStore
51
68
 
@@ -65,31 +82,47 @@ class PersistenceConfig:
65
82
  config = PersistenceConfig(
66
83
  memory_store_factory=lambda: DjangoMemoryStore(user=get_current_user()),
67
84
  )
85
+
86
+ # Option 4: Enable optional stores
87
+ config = PersistenceConfig(
88
+ knowledge_store=DjangoKnowledgeStore(user=request.user),
89
+ audit_store=DjangoAuditStore(user=request.user),
90
+ )
68
91
  """
69
92
 
70
- # Backend classes (can be swapped for custom implementations)
93
+ # Backend classes for core stores (can be swapped for custom implementations)
71
94
  memory_store_class: Type[MemoryStore] = FileMemoryStore
72
95
  conversation_store_class: Type[ConversationStore] = FileConversationStore
73
96
  task_store_class: Type[TaskStore] = FileTaskStore
74
97
  preferences_store_class: Type[PreferencesStore] = FilePreferencesStore
75
98
 
99
+ # Backend classes for optional stores (no defaults - must be explicitly set)
100
+ knowledge_store_class: Optional[Type[KnowledgeStore]] = None
101
+ audit_store_class: Optional[Type[AuditStore]] = None
102
+
76
103
  # Pre-instantiated store instances (takes precedence over classes)
77
104
  memory_store: Optional[MemoryStore] = None
78
105
  conversation_store: Optional[ConversationStore] = None
79
106
  task_store: Optional[TaskStore] = None
80
107
  preferences_store: Optional[PreferencesStore] = None
108
+ knowledge_store: Optional[KnowledgeStore] = None
109
+ audit_store: Optional[AuditStore] = None
81
110
 
82
111
  # Factory functions (takes precedence over classes, but not instances)
83
112
  memory_store_factory: Optional[MemoryStoreFactory] = None
84
113
  conversation_store_factory: Optional[ConversationStoreFactory] = None
85
114
  task_store_factory: Optional[TaskStoreFactory] = None
86
115
  preferences_store_factory: Optional[PreferencesStoreFactory] = None
116
+ knowledge_store_factory: Optional[KnowledgeStoreFactory] = None
117
+ audit_store_factory: Optional[AuditStoreFactory] = None
87
118
 
88
119
  # Kwargs passed to store class constructors (only used with classes)
89
120
  memory_store_kwargs: dict = field(default_factory=dict)
90
121
  conversation_store_kwargs: dict = field(default_factory=dict)
91
122
  task_store_kwargs: dict = field(default_factory=dict)
92
123
  preferences_store_kwargs: dict = field(default_factory=dict)
124
+ knowledge_store_kwargs: dict = field(default_factory=dict)
125
+ audit_store_kwargs: dict = field(default_factory=dict)
93
126
 
94
127
  # Project directory (convenience for file-based stores)
95
128
  # Only used if store_kwargs doesn't already have project_dir
@@ -100,8 +133,11 @@ class PersistenceManager:
100
133
  """
101
134
  Unified manager for all persistence stores.
102
135
 
103
- Provides access to memory, conversations, tasks, and preferences
104
- with pluggable backends.
136
+ Provides access to core stores (memory, conversations, tasks, preferences)
137
+ and optional stores (knowledge, audit) with pluggable backends.
138
+
139
+ Core stores have file-based defaults. Optional stores return None
140
+ unless explicitly configured.
105
141
 
106
142
  Example:
107
143
  # Use default file-based storage
@@ -120,8 +156,15 @@ class PersistenceManager:
120
156
  config = PersistenceConfig(
121
157
  memory_store=DjangoMemoryStore(user=request.user),
122
158
  conversation_store=DjangoConversationStore(user=request.user),
159
+ # Enable optional stores
160
+ knowledge_store=DjangoKnowledgeStore(user=request.user),
161
+ audit_store=DjangoAuditStore(user=request.user),
123
162
  )
124
163
  manager = PersistenceManager(config)
164
+
165
+ # Check if optional stores are available
166
+ if manager.knowledge:
167
+ await manager.knowledge.save_fact(fact)
125
168
  """
126
169
 
127
170
  def __init__(self, config: Optional[PersistenceConfig] = None):
@@ -130,6 +173,11 @@ class PersistenceManager:
130
173
  self._conversations: Optional[ConversationStore] = None
131
174
  self._tasks: Optional[TaskStore] = None
132
175
  self._preferences: Optional[PreferencesStore] = None
176
+ self._knowledge: Optional[KnowledgeStore] = None
177
+ self._audit: Optional[AuditStore] = None
178
+ # Track if optional stores have been initialized
179
+ self._knowledge_initialized = False
180
+ self._audit_initialized = False
133
181
 
134
182
  def _build_kwargs(self, store_kwargs: dict) -> dict:
135
183
  """Build kwargs for store instantiation."""
@@ -193,6 +241,54 @@ class PersistenceManager:
193
241
  self._preferences = self._config.preferences_store_class(**kwargs)
194
242
  return self._preferences
195
243
 
244
+ @property
245
+ def knowledge(self) -> Optional[KnowledgeStore]:
246
+ """
247
+ Get the knowledge store (optional).
248
+
249
+ Returns None if not configured. Check before using:
250
+ if manager.knowledge:
251
+ await manager.knowledge.save_fact(fact)
252
+ """
253
+ if not self._knowledge_initialized:
254
+ self._knowledge_initialized = True
255
+ if self._config.knowledge_store is not None:
256
+ self._knowledge = self._config.knowledge_store
257
+ elif self._config.knowledge_store_factory is not None:
258
+ self._knowledge = self._config.knowledge_store_factory()
259
+ elif self._config.knowledge_store_class is not None:
260
+ kwargs = self._build_kwargs(self._config.knowledge_store_kwargs)
261
+ self._knowledge = self._config.knowledge_store_class(**kwargs)
262
+ return self._knowledge
263
+
264
+ @property
265
+ def audit(self) -> Optional[AuditStore]:
266
+ """
267
+ Get the audit store (optional).
268
+
269
+ Returns None if not configured. Check before using:
270
+ if manager.audit:
271
+ await manager.audit.log_event(entry)
272
+ """
273
+ if not self._audit_initialized:
274
+ self._audit_initialized = True
275
+ if self._config.audit_store is not None:
276
+ self._audit = self._config.audit_store
277
+ elif self._config.audit_store_factory is not None:
278
+ self._audit = self._config.audit_store_factory()
279
+ elif self._config.audit_store_class is not None:
280
+ kwargs = self._build_kwargs(self._config.audit_store_kwargs)
281
+ self._audit = self._config.audit_store_class(**kwargs)
282
+ return self._audit
283
+
284
+ def has_knowledge(self) -> bool:
285
+ """Check if knowledge store is configured."""
286
+ return self.knowledge is not None
287
+
288
+ def has_audit(self) -> bool:
289
+ """Check if audit store is configured."""
290
+ return self.audit is not None
291
+
196
292
  async def close(self) -> None:
197
293
  """Close all stores."""
198
294
  if self._memory:
@@ -203,6 +299,10 @@ class PersistenceManager:
203
299
  await self._tasks.close()
204
300
  if self._preferences:
205
301
  await self._preferences.close()
302
+ if self._knowledge:
303
+ await self._knowledge.close()
304
+ if self._audit:
305
+ await self._audit.close()
206
306
 
207
307
 
208
308
  # Global manager instance
@@ -215,27 +315,31 @@ def configure_persistence(
215
315
  conversation_store_class: Optional[Type[ConversationStore]] = None,
216
316
  task_store_class: Optional[Type[TaskStore]] = None,
217
317
  preferences_store_class: Optional[Type[PreferencesStore]] = None,
318
+ knowledge_store_class: Optional[Type[KnowledgeStore]] = None,
319
+ audit_store_class: Optional[Type[AuditStore]] = None,
218
320
  project_dir: Optional[Path] = None,
219
321
  **kwargs,
220
322
  ) -> PersistenceConfig:
221
323
  """
222
324
  Configure the global persistence manager.
223
-
325
+
224
326
  Args:
225
327
  memory_store_class: Custom memory store implementation
226
328
  conversation_store_class: Custom conversation store implementation
227
329
  task_store_class: Custom task store implementation
228
330
  preferences_store_class: Custom preferences store implementation
331
+ knowledge_store_class: Custom knowledge store implementation (optional)
332
+ audit_store_class: Custom audit store implementation (optional)
229
333
  project_dir: Project directory for PROJECT scope
230
334
  **kwargs: Additional store-specific configuration
231
-
335
+
232
336
  Returns:
233
337
  The configured PersistenceConfig
234
338
  """
235
339
  global _config, _manager
236
-
340
+
237
341
  config = PersistenceConfig(project_dir=project_dir)
238
-
342
+
239
343
  if memory_store_class:
240
344
  config.memory_store_class = memory_store_class
241
345
  if conversation_store_class:
@@ -244,23 +348,27 @@ def configure_persistence(
244
348
  config.task_store_class = task_store_class
245
349
  if preferences_store_class:
246
350
  config.preferences_store_class = preferences_store_class
247
-
351
+ if knowledge_store_class:
352
+ config.knowledge_store_class = knowledge_store_class
353
+ if audit_store_class:
354
+ config.audit_store_class = audit_store_class
355
+
248
356
  _config = config
249
357
  _manager = None # Reset manager to use new config
250
-
358
+
251
359
  return config
252
360
 
253
361
 
254
362
  def get_persistence_manager() -> PersistenceManager:
255
363
  """
256
364
  Get the global persistence manager.
257
-
365
+
258
366
  Creates a new manager with default config if not configured.
259
367
  """
260
368
  global _manager
261
-
369
+
262
370
  if _manager is None:
263
371
  _manager = PersistenceManager(_config)
264
-
372
+
265
373
  return _manager
266
374
 
@@ -9,8 +9,8 @@ Provides:
9
9
  - SQLiteQueue: For persistent local storage
10
10
  """
11
11
 
12
- from agent_runtime.queue.base import RunQueue, QueuedRun
13
- from agent_runtime.queue.memory import InMemoryQueue
12
+ from agent_runtime_core.queue.base import RunQueue, QueuedRun
13
+ from agent_runtime_core.queue.memory import InMemoryQueue
14
14
 
15
15
  __all__ = [
16
16
  "RunQueue",
@@ -31,7 +31,7 @@ def get_queue(backend: str = None, **kwargs) -> RunQueue:
31
31
  Returns:
32
32
  RunQueue instance
33
33
  """
34
- from agent_runtime.config import get_config
34
+ from agent_runtime_core.config import get_config
35
35
 
36
36
  config = get_config()
37
37
  backend = backend or config.queue_backend
@@ -40,14 +40,14 @@ def get_queue(backend: str = None, **kwargs) -> RunQueue:
40
40
  return InMemoryQueue()
41
41
 
42
42
  elif backend == "redis":
43
- from agent_runtime.queue.redis import RedisQueue
43
+ from agent_runtime_core.queue.redis import RedisQueue
44
44
  url = kwargs.get("url") or config.redis_url
45
45
  if not url:
46
46
  raise ValueError("redis_url is required for redis queue backend")
47
47
  return RedisQueue(url=url)
48
48
 
49
49
  elif backend == "sqlite":
50
- from agent_runtime.queue.sqlite import SQLiteQueue
50
+ from agent_runtime_core.queue.sqlite import SQLiteQueue
51
51
  path = kwargs.get("path") or config.sqlite_path or "agent_runtime.db"
52
52
  return SQLiteQueue(path=path)
53
53
 
@@ -14,7 +14,7 @@ from datetime import datetime, timezone, timedelta
14
14
  from typing import Optional
15
15
  from uuid import UUID
16
16
 
17
- from agent_runtime.queue.base import RunQueue, QueuedRun
17
+ from agent_runtime_core.queue.base import RunQueue, QueuedRun
18
18
 
19
19
 
20
20
  @dataclass
@@ -12,7 +12,7 @@ from datetime import datetime, timedelta, timezone
12
12
  from typing import Optional
13
13
  from uuid import UUID
14
14
 
15
- from agent_runtime.queue.base import RunQueue, QueuedRun, RunStatus
15
+ from agent_runtime_core.queue.base import RunQueue, QueuedRun, RunStatus
16
16
 
17
17
 
18
18
  class RedisQueue(RunQueue):
@@ -14,7 +14,7 @@ from datetime import datetime, timedelta, timezone
14
14
  from typing import Optional
15
15
  from uuid import UUID
16
16
 
17
- from agent_runtime.queue.base import RunQueue, QueuedRun, RunStatus
17
+ from agent_runtime_core.queue.base import RunQueue, QueuedRun, RunStatus
18
18
 
19
19
 
20
20
  class SQLiteQueue(RunQueue):
@@ -7,7 +7,7 @@ looked up by key.
7
7
 
8
8
  from typing import Optional
9
9
 
10
- from agent_runtime.interfaces import AgentRuntime
10
+ from agent_runtime_core.interfaces import AgentRuntime
11
11
 
12
12
 
13
13
  # Global registry
@@ -17,9 +17,9 @@ from datetime import datetime, timezone
17
17
  from typing import Optional
18
18
  from uuid import UUID
19
19
 
20
- from agent_runtime.config import get_config
21
- from agent_runtime.events.base import EventBus
22
- from agent_runtime.interfaces import (
20
+ from agent_runtime_core.config import get_config
21
+ from agent_runtime_core.events.base import EventBus
22
+ from agent_runtime_core.interfaces import (
23
23
  AgentRuntime,
24
24
  EventType,
25
25
  ErrorInfo,
@@ -27,9 +27,9 @@ from agent_runtime.interfaces import (
27
27
  RunResult,
28
28
  ToolRegistry,
29
29
  )
30
- from agent_runtime.queue.base import RunQueue, QueuedRun
31
- from agent_runtime.registry import get_runtime
32
- from agent_runtime.state.base import StateStore
30
+ from agent_runtime_core.queue.base import RunQueue, QueuedRun
31
+ from agent_runtime_core.registry import get_runtime
32
+ from agent_runtime_core.state.base import StateStore
33
33
 
34
34
 
35
35
  @dataclass
@@ -8,8 +8,8 @@ Provides:
8
8
  - SQLiteStateStore: For persistent local storage
9
9
  """
10
10
 
11
- from agent_runtime.state.base import StateStore
12
- from agent_runtime.state.memory import InMemoryStateStore
11
+ from agent_runtime_core.state.base import StateStore
12
+ from agent_runtime_core.state.memory import InMemoryStateStore
13
13
 
14
14
  __all__ = [
15
15
  "StateStore",
@@ -29,7 +29,7 @@ def get_state_store(backend: str = None, **kwargs) -> StateStore:
29
29
  Returns:
30
30
  StateStore instance
31
31
  """
32
- from agent_runtime.config import get_config
32
+ from agent_runtime_core.config import get_config
33
33
 
34
34
  config = get_config()
35
35
  backend = backend or config.state_store_backend
@@ -38,14 +38,14 @@ def get_state_store(backend: str = None, **kwargs) -> StateStore:
38
38
  return InMemoryStateStore()
39
39
 
40
40
  elif backend == "redis":
41
- from agent_runtime.state.redis import RedisStateStore
41
+ from agent_runtime_core.state.redis import RedisStateStore
42
42
  url = kwargs.get("url") or config.redis_url
43
43
  if not url:
44
44
  raise ValueError("redis_url is required for redis state store backend")
45
45
  return RedisStateStore(url=url)
46
46
 
47
47
  elif backend == "sqlite":
48
- from agent_runtime.state.sqlite import SQLiteStateStore
48
+ from agent_runtime_core.state.sqlite import SQLiteStateStore
49
49
  path = kwargs.get("path") or config.sqlite_path or "agent_runtime.db"
50
50
  return SQLiteStateStore(path=path)
51
51
 
@@ -10,7 +10,7 @@ Good for:
10
10
  from typing import Optional
11
11
  from uuid import UUID
12
12
 
13
- from agent_runtime.state.base import StateStore
13
+ from agent_runtime_core.state.base import StateStore
14
14
 
15
15
 
16
16
  class InMemoryStateStore(StateStore):
@@ -12,7 +12,7 @@ from datetime import datetime
12
12
  from typing import Optional
13
13
  from uuid import UUID
14
14
 
15
- from agent_runtime.state.base import StateStore, Checkpoint
15
+ from agent_runtime_core.state.base import StateStore, Checkpoint
16
16
 
17
17
 
18
18
  class RedisStateStore(StateStore):
@@ -15,7 +15,7 @@ from pathlib import Path
15
15
  from typing import Optional
16
16
  from uuid import UUID
17
17
 
18
- from agent_runtime.state.base import StateStore, Checkpoint
18
+ from agent_runtime_core.state.base import StateStore, Checkpoint
19
19
 
20
20
 
21
21
  class SQLiteStateStore(StateStore):
@@ -8,7 +8,7 @@ This module provides tools for testing agent implementations:
8
8
  - LLMEvaluator: Use LLM to evaluate agent responses
9
9
 
10
10
  Example usage:
11
- from agent_runtime.testing import MockRunContext, MockLLMClient, AgentTestCase
11
+ from agent_runtime_core.testing import MockRunContext, MockLLMClient, AgentTestCase
12
12
 
13
13
  class TestMyAgent(AgentTestCase):
14
14
  async def test_agent_responds(self):
@@ -7,7 +7,7 @@ Provides:
7
7
  - LangfuseTraceSink: Langfuse integration
8
8
  """
9
9
 
10
- from agent_runtime.tracing.noop import NoopTraceSink
10
+ from agent_runtime_core.tracing.noop import NoopTraceSink
11
11
 
12
12
  __all__ = [
13
13
  "NoopTraceSink",
@@ -26,8 +26,8 @@ def get_trace_sink(backend: str = None, **kwargs):
26
26
  Returns:
27
27
  TraceSink instance
28
28
  """
29
- from agent_runtime.config import get_config
30
- from agent_runtime.interfaces import TraceSink
29
+ from agent_runtime_core.config import get_config
30
+ from agent_runtime_core.interfaces import TraceSink
31
31
 
32
32
  config = get_config()
33
33
  backend = backend or config.tracing_backend or "noop"
@@ -36,7 +36,7 @@ def get_trace_sink(backend: str = None, **kwargs):
36
36
  return NoopTraceSink()
37
37
 
38
38
  elif backend == "langfuse":
39
- from agent_runtime.tracing.langfuse import LangfuseTraceSink
39
+ from agent_runtime_core.tracing.langfuse import LangfuseTraceSink
40
40
  return LangfuseTraceSink(
41
41
  public_key=kwargs.get("public_key") or config.langfuse_public_key,
42
42
  secret_key=kwargs.get("secret_key") or config.langfuse_secret_key,
@@ -11,7 +11,7 @@ import logging
11
11
  from typing import Optional
12
12
  from uuid import UUID
13
13
 
14
- from agent_runtime.interfaces import TraceSink
14
+ from agent_runtime_core.interfaces import TraceSink
15
15
 
16
16
  try:
17
17
  from langfuse import Langfuse
@@ -7,7 +7,7 @@ Used when tracing is disabled or not configured.
7
7
  from typing import Optional
8
8
  from uuid import UUID
9
9
 
10
- from agent_runtime.interfaces import TraceSink
10
+ from agent_runtime_core.interfaces import TraceSink
11
11
 
12
12
 
13
13
  class NoopTraceSink(TraceSink):