File size: 1,186 Bytes
1f0fa9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class ExecutorContext:
    """Holds state for the execution engine, e.g. mapping step IDs to their outputs."""
    def __init__(self):
        self.step_outputs = {}

    def set_output(self, step_id: str, output: str):
        self.step_outputs[step_id] = output
        
    def get_output(self, step_id: str) -> str:
        return self.step_outputs.get(step_id, "")
    
    def resolve_placeholders(self, text: str) -> str:
        """
        Replaces {{step_id.output}} with the actual output of step_id.
        """
        if not isinstance(text, str):
            return text
            
        for s_id, out in self.step_outputs.items():
            placeholder = f"{{{{{s_id}.output}}}}"
            if placeholder in text:
                text = text.replace(placeholder, str(out))
        return text
    
    def resolve_dict(self, parameters: dict) -> dict:
        """Resolves placeholders recursively in a parameters dict for tools."""
        resolved = {}
        for k, v in parameters.items():
            if isinstance(v, str):
                resolved[k] = self.resolve_placeholders(v)
            else:
                resolved[k] = v
        return resolved