diff --git a/agent/canvas.py b/agent/canvas.py index 3ad8c06c1..572b68e5c 100644 --- a/agent/canvas.py +++ b/agent/canvas.py @@ -154,7 +154,7 @@ class Graph: return self._tenant_id def get_value_with_variable(self,value: str) -> Any: - pat = re.compile(r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z:0-9_.-]+|sys\.[a-z_]+)\} *\}*") + pat = re.compile(r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z0-9_.]+|sys\.[A-Za-z0-9_.]+|env\.[A-Za-z0-9_.]+)\} *\}*") out_parts = [] last = 0 @@ -256,18 +256,19 @@ class Canvas(Graph): self.retrieval = [] self.memory = [] for k in self.globals.keys(): - if isinstance(self.globals[k], str): - self.globals[k] = "" - elif isinstance(self.globals[k], int): - self.globals[k] = 0 - elif isinstance(self.globals[k], float): - self.globals[k] = 0 - elif isinstance(self.globals[k], list): - self.globals[k] = [] - elif isinstance(self.globals[k], dict): - self.globals[k] = {} - else: - self.globals[k] = None + if k.startswith("sys."): + if isinstance(self.globals[k], str): + self.globals[k] = "" + elif isinstance(self.globals[k], int): + self.globals[k] = 0 + elif isinstance(self.globals[k], float): + self.globals[k] = 0 + elif isinstance(self.globals[k], list): + self.globals[k] = [] + elif isinstance(self.globals[k], dict): + self.globals[k] = {} + else: + self.globals[k] = None def run(self, **kwargs): st = time.perf_counter() diff --git a/agent/component/base.py b/agent/component/base.py index 75cb63abe..cfec4ac1f 100644 --- a/agent/component/base.py +++ b/agent/component/base.py @@ -393,7 +393,7 @@ class ComponentParamBase(ABC): class ComponentBase(ABC): component_name: str thread_limiter = trio.CapacityLimiter(int(os.environ.get('MAX_CONCURRENT_CHATS', 10))) - variable_ref_patt = r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z:0-9_.-]+|sys\.[a-z_]+)\} *\}*" + variable_ref_patt = r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z0-9_.]+|sys\.[A-Za-z0-9_.]+|env\.[A-Za-z0-9_.]+)\} *\}*" def __str__(self): """ diff --git a/agent/component/message.py b/agent/component/message.py index 6fcedf984..1a506325e 100644 --- a/agent/component/message.py +++ b/agent/component/message.py @@ -99,7 +99,7 @@ class Message(ComponentBase): continue v = self._canvas.get_variable_value(exp) - if not v: + if v is None: v = "" if isinstance(v, partial): cnt = "" @@ -107,7 +107,7 @@ class Message(ComponentBase): all_content += t cnt += t yield t - + self.set_input_value(exp, cnt) continue elif not isinstance(v, str): try: @@ -115,6 +115,7 @@ class Message(ComponentBase): except Exception: v = str(v) yield v + self.set_input_value(exp, v) all_content += v cache[exp] = v diff --git a/agent/tools/retrieval.py b/agent/tools/retrieval.py index cd6435271..77b6145ed 100644 --- a/agent/tools/retrieval.py +++ b/agent/tools/retrieval.py @@ -135,7 +135,7 @@ class Retrieval(ToolBase, ABC): elif self._param.meta_data_filter.get("method") == "manual": filters=self._param.meta_data_filter["manual"] for flt in filters: - pat = re.compile(r"\{* *\{([a-zA-Z:0-9]+@[A-Za-z:0-9_.-]+|sys\.[a-z_]+)\} *\}*") + pat = re.compile(self.variable_ref_patt) s = flt["value"] out_parts = [] last = 0 diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index f470fa6c1..f24d5baac 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -187,7 +187,7 @@ function start_mcp_server() { } function ensure_docling() { - [[ "${USE_DOCLING}" == "true" ]] || return 0 + [[ "${USE_DOCLING}" == "true" ]] || { echo "[docling] disabled by USE_DOCLING"; return 0; } python3 -c 'import pip' >/dev/null 2>&1 || python3 -m ensurepip --upgrade || true DOCLING_PIN="${DOCLING_VERSION:-==2.58.0}" python3 -c "import importlib.util,sys; sys.exit(0 if importlib.util.find_spec('docling') else 1)" \