feat: add session updates and message dialogs
This commit is contained in:
@@ -210,6 +210,39 @@ class DynamicVariableStore:
|
||||
raise DynamicVariableError(f"动态变量 {name} 类型应为 {expected}")
|
||||
self.values[name] = primitive
|
||||
|
||||
def assign_declared_many(self, values: dict[str, Any]) -> list[str]:
|
||||
"""Atomically update public variables declared by the assistant."""
|
||||
staged: dict[str, Primitive] = {}
|
||||
for name, value in values.items():
|
||||
if (
|
||||
name.startswith(("system__", "secret__"))
|
||||
or not VARIABLE_NAME.fullmatch(name)
|
||||
):
|
||||
raise DynamicVariableError(f"会话不能更新保留变量: {name}")
|
||||
if name not in self.variable_types:
|
||||
raise DynamicVariableError(f"动态变量未声明: {name}")
|
||||
primitive = _primitive(value, name)
|
||||
expected = self.variable_types[name]
|
||||
if not _type_matches(primitive, expected):
|
||||
raise DynamicVariableError(f"动态变量 {name} 类型应为 {expected}")
|
||||
staged[name] = primitive
|
||||
|
||||
changed = [
|
||||
name
|
||||
for name, value in staged.items()
|
||||
if name not in self.values or self.values[name] != value
|
||||
]
|
||||
self.values.update(staged)
|
||||
return changed
|
||||
|
||||
def public_values(self) -> dict[str, Primitive]:
|
||||
"""Return the client-visible dynamic-variable snapshot."""
|
||||
return {
|
||||
name: value
|
||||
for name, value in self.values.items()
|
||||
if not name.startswith(("system__", "secret__"))
|
||||
}
|
||||
|
||||
|
||||
def prepare_dynamic_config(
|
||||
cfg: AssistantConfig,
|
||||
|
||||
Reference in New Issue
Block a user