fix: stop double-encoding keyword - pass raw value as httpcall params (CRUD style); defensive unquote fallback in dspy for legacy cached UI

This commit is contained in:
yumoqing 2026-08-04 11:33:52 +08:00
parent dfad26d3c7
commit 7993b186da
2 changed files with 12 additions and 1 deletions

View File

@ -40,7 +40,7 @@
"wid": "search_bar", "wid": "search_bar",
"event": "search", "event": "search",
"actiontype": "script", "actiontype": "script",
"script": "var kw=event.params.keyword||'';var kb=bricks.getWidgetById('kb_selector',this);var kb_id=(kb&&kb.resultValue())||'all';var u='/rag/knowledge_bases_list/search_result.dspy?_webbricks_=1&kb_id='+encodeURIComponent(kb_id)+'&keyword='+encodeURIComponent(kw);var target=bricks.getWidgetById('search_results',this);if(target){bricks.buildUrlwidgetHandler(this,target,{},{options:{url:u},mode:'replace'})()}" "script": "var kw=event.params.keyword||'';var kb=bricks.getWidgetById('kb_selector',this);var kb_id=(kb&&kb.resultValue())||'all';var target=bricks.getWidgetById('search_results',this);if(target){bricks.buildUrlwidgetHandler(this,target,{},{options:{url:'/rag/knowledge_bases_list/search_result.dspy',params:{_webbricks_:1,kb_id:kb_id,keyword:kw}},mode:'replace'})()}"
}, },
{ {
"wid": "search_file", "wid": "search_file",

View File

@ -2,6 +2,17 @@ ns = params_kw.copy()
kb_id = ns.get('kb_id', '') kb_id = ns.get('kb_id', '')
env = request._run_ns env = request._run_ns
query = ns.get("query") or ns.get("value") or ns.get("keyword") or ns.get("text") or "" query = ns.get("query") or ns.get("value") or ns.get("keyword") or ns.get("text") or ""
# Defensive: legacy UI cached in browser double-encodes the keyword (%E5%88%86... arrives as-is).
# Normal path: server already decoded once, no '%' present, this is a no-op.
if "%" in query:
try:
from urllib.parse import unquote
d = unquote(query)
if d != query:
info(f'[search_result] unquote fallback: {query!r} -> {d!r}')
query = d
except Exception:
pass
info(f'[search_result] params_kw={params_kw}') info(f'[search_result] params_kw={params_kw}')
info(f'[search_result] parsed: kb_id={kb_id!r} query={query!r} method={request.method} url={request.url}') info(f'[search_result] parsed: kb_id={kb_id!r} query={query!r} method={request.method} url={request.url}')