Spaces:
Building
Building
Update state_orchestrator.py
Browse files- state_orchestrator.py +38 -36
state_orchestrator.py
CHANGED
@@ -375,46 +375,48 @@ class StateOrchestrator:
|
|
375 |
data={"reason": "critical_error"}
|
376 |
))
|
377 |
|
378 |
-
async def transition_to(self, session_id: str, new_state: ConversationState):
|
379 |
-
"""
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
|
|
|
|
|
|
385 |
|
386 |
-
|
387 |
-
|
388 |
-
log_error(
|
389 |
-
f"❌ Invalid state transition",
|
390 |
-
session_id=session_id,
|
391 |
-
from_state=current_state.value,
|
392 |
-
to_state=new_state.value
|
393 |
-
)
|
394 |
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
)
|
400 |
-
return
|
401 |
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
session_id=session_id,
|
408 |
-
from_state=current_state.value,
|
409 |
-
to_state=new_state.value
|
410 |
-
)
|
411 |
-
|
412 |
-
# Publish state transition event
|
413 |
-
await publish_state_transition(
|
414 |
-
session_id=session_id,
|
415 |
-
from_state=current_state.value,
|
416 |
-
to_state=new_state.value
|
417 |
-
)
|
418 |
|
419 |
def get_state(self, session_id: str) -> Optional[ConversationState]:
|
420 |
"""Get current state for a session"""
|
|
|
375 |
data={"reason": "critical_error"}
|
376 |
))
|
377 |
|
378 |
+
async def transition_to(self, session_id: str, new_state: ConversationState) -> bool:
|
379 |
+
"""
|
380 |
+
Transition to a new state with validation
|
381 |
+
"""
|
382 |
+
try:
|
383 |
+
# Get session context
|
384 |
+
context = self._sessions.get(session_id)
|
385 |
+
if not context:
|
386 |
+
log(f"❌ Session not found for state transition | session_id={session_id}")
|
387 |
+
return False
|
388 |
|
389 |
+
# Get current state from context (DÜZELTME BURADA)
|
390 |
+
current_state = context.state # context'i değil, context.state'i kullan
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
+
# Check if transition is valid
|
393 |
+
if new_state not in self.VALID_TRANSITIONS.get(current_state, set()):
|
394 |
+
log(f"❌ Invalid state transition | session_id={session_id}, current={current_state.value}, requested={new_state.value}")
|
395 |
+
return False
|
396 |
+
|
397 |
+
# Update state
|
398 |
+
old_state = current_state
|
399 |
+
context.state = new_state
|
400 |
+
context.last_activity = datetime.utcnow()
|
401 |
+
|
402 |
+
log(f"✅ State transition | session_id={session_id}, {old_state.value} → {new_state.value}")
|
403 |
+
|
404 |
+
# Emit state transition event
|
405 |
+
await self._event_bus.publish(
|
406 |
+
EventType.STATE_TRANSITION,
|
407 |
+
{
|
408 |
+
"session_id": session_id,
|
409 |
+
"old_state": old_state.value,
|
410 |
+
"new_state": new_state.value,
|
411 |
+
"timestamp": datetime.utcnow().isoformat()
|
412 |
+
}
|
413 |
)
|
|
|
414 |
|
415 |
+
return True
|
416 |
+
|
417 |
+
except Exception as e:
|
418 |
+
log_error(f"❌ State transition error | session_id={session_id}", e)
|
419 |
+
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
420 |
|
421 |
def get_state(self, session_id: str) -> Optional[ConversationState]:
|
422 |
"""Get current state for a session"""
|