Compare commits

...

2 Commits

Author SHA1 Message Date
Xin Wang
7666759121 Merge branch 'main' of https://gitea.xiaowang.eu.org/wx44wx/ZNJJ-api-server 2026-06-17 13:33:23 +08:00
Xin Wang
6ff23e433b Refactor form update handling in API endpoints and models
- Introduced a new function to parse JSON values in endpoints.py for improved data handling.
- Updated extract_form_update_from_flow_nodes to return structured data instead of strings.
- Changed formUpdate field in ProcessResponse_chat model to use Any type with a default empty dictionary for better flexibility in handling updates.
2026-06-17 13:29:50 +08:00
2 changed files with 28 additions and 14 deletions

View File

@@ -71,10 +71,26 @@ def extract_state_and_content(data1: str) -> dict | None:
return None
def extract_form_update_from_flow_nodes(nodes) -> str:
def parse_json_value(value):
"""Parse JSON string values when possible."""
parsed = value
for _ in range(3):
if not isinstance(parsed, str):
return parsed
parsed = parsed.strip()
if not parsed:
return {}
try:
parsed = json.loads(parsed)
except json.JSONDecodeError:
return parsed
return parsed
def extract_form_update_from_flow_nodes(nodes):
"""Extract form update data from the configured FastGPT content-extract node."""
if not isinstance(nodes, list):
return ""
return {}
for node in nodes:
if not isinstance(node, dict):
@@ -84,16 +100,14 @@ def extract_form_update_from_flow_nodes(nodes) -> str:
extract_result = node.get("extractResult", {})
if not isinstance(extract_result, dict):
return ""
return {}
form_update = extract_result.get("formUpdate", "")
if isinstance(form_update, str):
return form_update
if form_update:
return json.dumps(form_update, ensure_ascii=False)
return ""
form_update = extract_result.get("formUpdate") or extract_result.get("form") or ""
if not form_update:
return {}
return parse_json_value(form_update)
return ""
return {}
def format_set_info_input(payload: dict, include_input_info: bool) -> str:
@@ -180,8 +194,8 @@ async def chat(
def flush_text_delta(text: str):
return create_sse_event("text_delta", {"text": text})
def flush_form_update(form_update: str):
return create_sse_event("formUpdate", {"formUpdate": form_update})
def flush_form_update(form_update):
return create_sse_event("formUpdate", form_update)
async for event in aiter_stream_events(response):
try:

View File

@@ -1,5 +1,5 @@
from pydantic import BaseModel, Field
from typing import Optional
from typing import Any, Optional
class ProcessRequest_chat(BaseModel):
sessionId: str = Field(..., max_length=64)
@@ -11,7 +11,7 @@ class ProcessResponse_chat(BaseModel):
sessionId: str = Field(..., max_length=64)
timeStamp: str = Field(..., max_length=32)
outputText: str = Field(...)
formUpdate: str = Field(default="")
formUpdate: Any = Field(default_factory=dict)
nextStage: str = Field(..., max_length=32)
nextStageCode: str = Field(..., max_length=4)
code: str = Field(..., max_length=4)