feat(orchestrator): Harden VFS and enhance artifact awareness across workers
This commit is contained in:
@@ -1,4 +1,37 @@
|
||||
import copy
|
||||
from typing import Dict, Any, Optional, Tuple, List
|
||||
from ea_chatbot.utils.logging import get_logger
|
||||
|
||||
logger = get_logger("utils:vfs")
|
||||
|
||||
def safe_vfs_copy(vfs_state: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
Perform a safe deep copy of the VFS state.
|
||||
|
||||
If an entry cannot be deep-copied (e.g., it contains a non-copyable object like a DB handle),
|
||||
logs an error and replaces the entry with a descriptive error marker.
|
||||
This prevents crashing the graph/persistence while making the failure explicit.
|
||||
"""
|
||||
new_vfs = {}
|
||||
for filename, data in vfs_state.items():
|
||||
try:
|
||||
# Attempt a standard deepcopy for isolation
|
||||
new_vfs[filename] = copy.deepcopy(data)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"CRITICAL: VFS artifact '{filename}' is NOT copyable/serializable: {str(e)}. "
|
||||
"Replacing with error placeholder to prevent graph crash."
|
||||
)
|
||||
# Replace with a standardized error artifact
|
||||
new_vfs[filename] = {
|
||||
"content": f"<ERROR: This artifact could not be persisted or copied: {str(e)}>",
|
||||
"metadata": {
|
||||
"type": "error",
|
||||
"error": str(e),
|
||||
"original_filename": filename
|
||||
}
|
||||
}
|
||||
return new_vfs
|
||||
|
||||
class VFSHelper:
|
||||
"""Helper class for managing in-memory Virtual File System (VFS) artifacts."""
|
||||
|
||||
Reference in New Issue
Block a user