Compare commits
2 Commits
edf85e21cc
...
7666759121
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7666759121 | ||
|
|
6ff23e433b |
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user