teganmosi commited on
Commit
ff43154
·
1 Parent(s): deea75c

Refine Stage 2: Add MemoryService, JSON logging middleware, and fuzzed stress tests

Browse files
middleware/logging_middleware.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import logging
2
  from models.event import Event, EventType
3
 
@@ -12,14 +13,20 @@ class LoggingMiddleware:
12
  if event.type in (EventType.LLM_TOKEN, EventType.TTS_CHUNK):
13
  return
14
 
15
- payload_summary = ""
16
  if event.payload is not None:
17
  # Truncate strings to prevent log flooding
18
  payload_str = str(event.payload)
19
  if len(payload_str) > 80:
20
- payload_str = payload_str[:80] + "..."
21
- payload_summary = f" | Payload: {payload_str}"
 
22
 
23
- logger.info(
24
- f"[{self.session_id}] [TraceEvent] {event.type.name} (EventId: {event.event_id[:8]}){payload_summary}"
25
- )
 
 
 
 
 
 
1
+ import json
2
  import logging
3
  from models.event import Event, EventType
4
 
 
13
  if event.type in (EventType.LLM_TOKEN, EventType.TTS_CHUNK):
14
  return
15
 
16
+ payload_summary = None
17
  if event.payload is not None:
18
  # Truncate strings to prevent log flooding
19
  payload_str = str(event.payload)
20
  if len(payload_str) > 80:
21
+ payload_summary = payload_str[:80] + "..."
22
+ else:
23
+ payload_summary = payload_str
24
 
25
+ trace_record = {
26
+ "session_id": self.session_id,
27
+ "event_type": event.type.name,
28
+ "event_id": event.event_id,
29
+ "timestamp": event.timestamp,
30
+ "payload": payload_summary,
31
+ }
32
+ logger.info(f"JSON_TRACE: {json.dumps(trace_record)}")
runtime/cleanup_manager.py CHANGED
@@ -40,5 +40,9 @@ class CleanupManager:
40
  # 6. Reset TTS service state
41
  if self.context.tts_service:
42
  self.context.tts_service.reset()
 
 
 
 
43
 
44
  self.context.logger.debug(f"[{self.context.session_id}] CleanupManager: Conversation reset completed.")
 
40
  # 6. Reset TTS service state
41
  if self.context.tts_service:
42
  self.context.tts_service.reset()
43
+
44
+ # 7. Reset Memory service state
45
+ if self.context.memory_service:
46
+ self.context.memory_service.reset()
47
 
48
  self.context.logger.debug(f"[{self.context.session_id}] CleanupManager: Conversation reset completed.")
runtime/runtime_context.py CHANGED
@@ -36,3 +36,4 @@ class RuntimeContext:
36
  self.tts_service: Any = None
37
  self.sentence_accumulator: Any = None
38
  self.error_handler: Any = None
 
 
36
  self.tts_service: Any = None
37
  self.sentence_accumulator: Any = None
38
  self.error_handler: Any = None
39
+ self.memory_service: Any = None
runtime/session.py CHANGED
@@ -19,6 +19,7 @@ from services.asr_service import ASRService
19
  from services.llm_service import LLMService
20
  from services.tts_service import TTSService
21
  from services.tool_service import ToolService
 
22
  from middleware.logging_middleware import LoggingMiddleware
23
  from middleware.metrics_middleware import MetricsMiddleware
24
 
@@ -75,12 +76,14 @@ class ClientSession:
75
  self.llm = LLMService(self.context)
76
  self.tts = TTSService(self.context)
77
  self.tools = ToolService(self.context)
 
78
 
79
  # Link services to context
80
  self.context.vad_service = self.vad
81
  self.context.asr_service = self.asr
82
  self.context.llm_service = self.llm
83
  self.context.tts_service = self.tts
 
84
 
85
  # Turn Orchestrator
86
  self.turn_manager = TurnManager(self.context)
@@ -111,6 +114,7 @@ class ClientSession:
111
  await self.llm.start()
112
  await self.tts.start()
113
  await self.tools.start()
 
114
  self.context.logger.info(f"[{self.session_id}] ClientSession: Services running.")
115
 
116
  async def stop(self):
@@ -120,6 +124,7 @@ class ClientSession:
120
  await self.llm.stop()
121
  await self.tts.stop()
122
  await self.tools.stop()
 
123
  self.task_supervisor.cancel_all()
124
 
125
  async def cleanup(self):
 
19
  from services.llm_service import LLMService
20
  from services.tts_service import TTSService
21
  from services.tool_service import ToolService
22
+ from services.memory_service import MemoryService
23
  from middleware.logging_middleware import LoggingMiddleware
24
  from middleware.metrics_middleware import MetricsMiddleware
25
 
 
76
  self.llm = LLMService(self.context)
77
  self.tts = TTSService(self.context)
78
  self.tools = ToolService(self.context)
79
+ self.memory = MemoryService(self.context)
80
 
81
  # Link services to context
82
  self.context.vad_service = self.vad
83
  self.context.asr_service = self.asr
84
  self.context.llm_service = self.llm
85
  self.context.tts_service = self.tts
86
+ self.context.memory_service = self.memory
87
 
88
  # Turn Orchestrator
89
  self.turn_manager = TurnManager(self.context)
 
114
  await self.llm.start()
115
  await self.tts.start()
116
  await self.tools.start()
117
+ await self.memory.start()
118
  self.context.logger.info(f"[{self.session_id}] ClientSession: Services running.")
119
 
120
  async def stop(self):
 
124
  await self.llm.stop()
125
  await self.tts.stop()
126
  await self.tools.stop()
127
+ await self.memory.stop()
128
  self.task_supervisor.cancel_all()
129
 
130
  async def cleanup(self):
services/__init__.py CHANGED
@@ -6,6 +6,7 @@ from services.asr_service import ASRService
6
  from services.llm_service import LLMService
7
  from services.tts_service import TTSService
8
  from services.tool_service import ToolService
 
9
 
10
  __all__ = [
11
  "BaseVAD",
@@ -16,4 +17,5 @@ __all__ = [
16
  "LLMService",
17
  "TTSService",
18
  "ToolService",
 
19
  ]
 
6
  from services.llm_service import LLMService
7
  from services.tts_service import TTSService
8
  from services.tool_service import ToolService
9
+ from services.memory_service import MemoryService
10
 
11
  __all__ = [
12
  "BaseVAD",
 
17
  "LLMService",
18
  "TTSService",
19
  "ToolService",
20
+ "MemoryService",
21
  ]
services/memory_service.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, List
2
+
3
+ class MemoryService:
4
+ def __init__(self, context: Any):
5
+ self.context = context
6
+
7
+ async def start(self):
8
+ # Stub service setup
9
+ pass
10
+
11
+ async def stop(self):
12
+ # Stub service teardown
13
+ pass
14
+
15
+ def reset(self):
16
+ # Stub state reset
17
+ pass
18
+
19
+ async def retrieve(self) -> List[Any]:
20
+ # Stub for context retrieval, long-term memory, etc.
21
+ return []