mirror of https://github.com/kortix-ai/suna.git
78 lines
2.8 KiB
PL/PgSQL
78 lines
2.8 KiB
PL/PgSQL
CREATE OR REPLACE FUNCTION sanitize_config_for_template(input_config JSONB)
|
|
RETURNS JSONB
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
sanitized_config JSONB;
|
|
custom_mcp_array JSONB;
|
|
custom_mcp_item JSONB;
|
|
sanitized_mcp JSONB;
|
|
result_array JSONB := '[]'::jsonb;
|
|
agentpress_tools JSONB := '{}'::jsonb;
|
|
tool_name TEXT;
|
|
tool_config JSONB;
|
|
BEGIN
|
|
IF input_config->'tools'->'agentpress' IS NOT NULL THEN
|
|
FOR tool_name IN SELECT jsonb_object_keys(input_config->'tools'->'agentpress')
|
|
LOOP
|
|
tool_config := input_config->'tools'->'agentpress'->tool_name;
|
|
|
|
IF jsonb_typeof(tool_config) = 'boolean' THEN
|
|
agentpress_tools := jsonb_set(agentpress_tools, ARRAY[tool_name], tool_config);
|
|
ELSIF jsonb_typeof(tool_config) = 'object' AND tool_config ? 'enabled' THEN
|
|
agentpress_tools := jsonb_set(agentpress_tools, ARRAY[tool_name], tool_config->'enabled');
|
|
ELSE
|
|
agentpress_tools := jsonb_set(agentpress_tools, ARRAY[tool_name], 'false'::jsonb);
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
|
|
sanitized_config := jsonb_build_object(
|
|
'system_prompt', COALESCE(input_config->>'system_prompt', ''),
|
|
'tools', jsonb_build_object(
|
|
'agentpress', agentpress_tools,
|
|
'mcp', COALESCE(input_config->'tools'->'mcp', '[]'::jsonb),
|
|
'custom_mcp', '[]'::jsonb
|
|
),
|
|
'metadata', jsonb_build_object(
|
|
'avatar', input_config->'metadata'->>'avatar',
|
|
'avatar_color', input_config->'metadata'->>'avatar_color'
|
|
)
|
|
);
|
|
|
|
custom_mcp_array := COALESCE(input_config->'tools'->'custom_mcp', '[]'::jsonb);
|
|
|
|
FOR custom_mcp_item IN SELECT jsonb_array_elements(custom_mcp_array)
|
|
LOOP
|
|
sanitized_mcp := jsonb_build_object(
|
|
'name', custom_mcp_item->>'name',
|
|
'type', custom_mcp_item->>'type',
|
|
'display_name', COALESCE(custom_mcp_item->>'display_name', custom_mcp_item->>'name'),
|
|
'enabledTools', COALESCE(custom_mcp_item->'enabledTools', '[]'::jsonb)
|
|
);
|
|
|
|
IF custom_mcp_item->>'type' = 'pipedream' THEN
|
|
sanitized_mcp := jsonb_set(
|
|
sanitized_mcp,
|
|
'{config}',
|
|
jsonb_build_object(
|
|
'url', custom_mcp_item->'config'->>'url',
|
|
'headers', COALESCE(custom_mcp_item->'config'->'headers', '{}'::jsonb) - 'profile_id'
|
|
)
|
|
);
|
|
ELSE
|
|
sanitized_mcp := jsonb_set(sanitized_mcp, '{config}', '{}'::jsonb);
|
|
END IF;
|
|
|
|
result_array := result_array || sanitized_mcp;
|
|
END LOOP;
|
|
|
|
sanitized_config := jsonb_set(
|
|
sanitized_config,
|
|
'{tools,custom_mcp}',
|
|
result_array
|
|
);
|
|
|
|
RETURN sanitized_config;
|
|
END;
|
|
$$; |