feat: add decode option to json process tools (#7138)
This commit is contained in:
parent
7ebad74372
commit
d338f69837
@ -36,21 +36,26 @@ class JSONParseTool(BuiltinTool):
|
|||||||
# get create path
|
# get create path
|
||||||
create_path = tool_parameters.get('create_path', False)
|
create_path = tool_parameters.get('create_path', False)
|
||||||
|
|
||||||
|
# get value decode.
|
||||||
|
# if true, it will be decoded to an dict
|
||||||
|
value_decode = tool_parameters.get('value_decode', False)
|
||||||
|
|
||||||
ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
||||||
try:
|
try:
|
||||||
result = self._insert(content, query, new_value, ensure_ascii, index, create_path)
|
result = self._insert(content, query, new_value, ensure_ascii, value_decode, index, create_path)
|
||||||
return self.create_text_message(str(result))
|
return self.create_text_message(str(result))
|
||||||
except Exception:
|
except Exception:
|
||||||
return self.create_text_message('Failed to insert JSON content')
|
return self.create_text_message('Failed to insert JSON content')
|
||||||
|
|
||||||
def _insert(self, origin_json, query, new_value, ensure_ascii: bool, index=None, create_path=False):
|
def _insert(self, origin_json, query, new_value, ensure_ascii: bool, value_decode: bool, index=None, create_path=False):
|
||||||
try:
|
try:
|
||||||
input_data = json.loads(origin_json)
|
input_data = json.loads(origin_json)
|
||||||
expr = parse(query)
|
expr = parse(query)
|
||||||
try:
|
if value_decode is True:
|
||||||
new_value = json.loads(new_value)
|
try:
|
||||||
except json.JSONDecodeError:
|
new_value = json.loads(new_value)
|
||||||
new_value = new_value
|
except json.JSONDecodeError:
|
||||||
|
return "Cannot decode new value to json object"
|
||||||
|
|
||||||
matches = expr.find(input_data)
|
matches = expr.find(input_data)
|
||||||
|
|
||||||
|
@ -47,10 +47,22 @@ parameters:
|
|||||||
pt_BR: New Value
|
pt_BR: New Value
|
||||||
human_description:
|
human_description:
|
||||||
en_US: New Value
|
en_US: New Value
|
||||||
zh_Hans: 新值
|
zh_Hans: 插入的新值
|
||||||
pt_BR: New Value
|
pt_BR: New Value
|
||||||
llm_description: New Value to insert
|
llm_description: New Value to insert
|
||||||
form: llm
|
form: llm
|
||||||
|
- name: value_decode
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
label:
|
||||||
|
en_US: Decode Value
|
||||||
|
zh_Hans: 解码值
|
||||||
|
pt_BR: Decode Value
|
||||||
|
human_description:
|
||||||
|
en_US: Whether to decode the value to a JSON object
|
||||||
|
zh_Hans: 是否将值解码为 JSON 对象
|
||||||
|
pt_BR: Whether to decode the value to a JSON object
|
||||||
|
form: form
|
||||||
- name: create_path
|
- name: create_path
|
||||||
type: select
|
type: select
|
||||||
required: true
|
required: true
|
||||||
|
@ -35,6 +35,10 @@ class JSONReplaceTool(BuiltinTool):
|
|||||||
if not replace_model:
|
if not replace_model:
|
||||||
return self.create_text_message('Invalid parameter replace_model')
|
return self.create_text_message('Invalid parameter replace_model')
|
||||||
|
|
||||||
|
# get value decode.
|
||||||
|
# if true, it will be decoded to an dict
|
||||||
|
value_decode = tool_parameters.get('value_decode', False)
|
||||||
|
|
||||||
ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
||||||
try:
|
try:
|
||||||
if replace_model == 'pattern':
|
if replace_model == 'pattern':
|
||||||
@ -42,17 +46,17 @@ class JSONReplaceTool(BuiltinTool):
|
|||||||
replace_pattern = tool_parameters.get('replace_pattern', '')
|
replace_pattern = tool_parameters.get('replace_pattern', '')
|
||||||
if not replace_pattern:
|
if not replace_pattern:
|
||||||
return self.create_text_message('Invalid parameter replace_pattern')
|
return self.create_text_message('Invalid parameter replace_pattern')
|
||||||
result = self._replace_pattern(content, query, replace_pattern, replace_value, ensure_ascii)
|
result = self._replace_pattern(content, query, replace_pattern, replace_value, ensure_ascii, value_decode)
|
||||||
elif replace_model == 'key':
|
elif replace_model == 'key':
|
||||||
result = self._replace_key(content, query, replace_value, ensure_ascii)
|
result = self._replace_key(content, query, replace_value, ensure_ascii)
|
||||||
elif replace_model == 'value':
|
elif replace_model == 'value':
|
||||||
result = self._replace_value(content, query, replace_value, ensure_ascii)
|
result = self._replace_value(content, query, replace_value, ensure_ascii, value_decode)
|
||||||
return self.create_text_message(str(result))
|
return self.create_text_message(str(result))
|
||||||
except Exception:
|
except Exception:
|
||||||
return self.create_text_message('Failed to replace JSON content')
|
return self.create_text_message('Failed to replace JSON content')
|
||||||
|
|
||||||
# Replace pattern
|
# Replace pattern
|
||||||
def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str, ensure_ascii: bool) -> str:
|
def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str, ensure_ascii: bool, value_decode: bool) -> str:
|
||||||
try:
|
try:
|
||||||
input_data = json.loads(content)
|
input_data = json.loads(content)
|
||||||
expr = parse(query)
|
expr = parse(query)
|
||||||
@ -61,6 +65,12 @@ class JSONReplaceTool(BuiltinTool):
|
|||||||
|
|
||||||
for match in matches:
|
for match in matches:
|
||||||
new_value = match.value.replace(replace_pattern, replace_value)
|
new_value = match.value.replace(replace_pattern, replace_value)
|
||||||
|
if value_decode is True:
|
||||||
|
try:
|
||||||
|
new_value = json.loads(new_value)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
return "Cannot decode replace value to json object"
|
||||||
|
|
||||||
match.full_path.update(input_data, new_value)
|
match.full_path.update(input_data, new_value)
|
||||||
|
|
||||||
return json.dumps(input_data, ensure_ascii=ensure_ascii)
|
return json.dumps(input_data, ensure_ascii=ensure_ascii)
|
||||||
@ -92,10 +102,15 @@ class JSONReplaceTool(BuiltinTool):
|
|||||||
return str(e)
|
return str(e)
|
||||||
|
|
||||||
# Replace value
|
# Replace value
|
||||||
def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str:
|
def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool, value_decode: bool) -> str:
|
||||||
try:
|
try:
|
||||||
input_data = json.loads(content)
|
input_data = json.loads(content)
|
||||||
expr = parse(query)
|
expr = parse(query)
|
||||||
|
if value_decode is True:
|
||||||
|
try:
|
||||||
|
replace_value = json.loads(replace_value)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
return "Cannot decode replace value to json object"
|
||||||
|
|
||||||
matches = expr.find(input_data)
|
matches = expr.find(input_data)
|
||||||
|
|
||||||
|
@ -60,10 +60,22 @@ parameters:
|
|||||||
pt_BR: Replace Value
|
pt_BR: Replace Value
|
||||||
human_description:
|
human_description:
|
||||||
en_US: New Value
|
en_US: New Value
|
||||||
zh_Hans: New Value
|
zh_Hans: 新值
|
||||||
pt_BR: New Value
|
pt_BR: New Value
|
||||||
llm_description: New Value to replace
|
llm_description: New Value to replace
|
||||||
form: llm
|
form: llm
|
||||||
|
- name: value_decode
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
label:
|
||||||
|
en_US: Decode Value
|
||||||
|
zh_Hans: 解码值
|
||||||
|
pt_BR: Decode Value
|
||||||
|
human_description:
|
||||||
|
en_US: Whether to decode the value to a JSON object (Does not apply to replace key)
|
||||||
|
zh_Hans: 是否将值解码为 JSON 对象 (不适用于键替换)
|
||||||
|
pt_BR: Whether to decode the value to a JSON object (Does not apply to replace key)
|
||||||
|
form: form
|
||||||
- name: replace_model
|
- name: replace_model
|
||||||
type: select
|
type: select
|
||||||
required: true
|
required: true
|
||||||
|
Loading…
Reference in New Issue
Block a user