Reuse memoir JSON payload parsing

This commit is contained in:
Kevin
2026-03-11 13:46:07 +08:00
parent 32954d4b3f
commit 822aefe54b
4 changed files with 57 additions and 24 deletions

View File

@@ -3,11 +3,11 @@ import logging
import re
from typing import Any, Optional
from .json_payload import extract_json_payload
from .settings import MemoirImageSettings
logger = logging.getLogger(__name__)
_CJK_RE = re.compile(r"[\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff]")
_MARKDOWN_JSON_FENCE_RE = re.compile(r"^\s*```(?:json)?\s*(.*?)\s*```\s*$", re.IGNORECASE | re.DOTALL)
class MemoirImagePromptService:
@@ -63,7 +63,7 @@ class MemoirImagePromptService:
+ json.dumps(llm_input, ensure_ascii=False)
)
raw_response = response.content
parsed = json.loads(_extract_json_payload(raw_response))
parsed = json.loads(extract_json_payload(raw_response))
return {
"prompt": _ensure_style_in_prompt(parsed["prompt"], parsed.get("style", style)),
"style": parsed.get("style", style),
@@ -121,23 +121,6 @@ def _contains_cjk(value: str) -> bool:
return bool(_CJK_RE.search(value or ""))
def _extract_json_payload(raw_response: str | None) -> str:
cleaned = (raw_response or "").strip()
fenced_match = _MARKDOWN_JSON_FENCE_RE.match(cleaned)
if fenced_match:
cleaned = fenced_match.group(1).strip()
if cleaned.startswith("{") and cleaned.endswith("}"):
return cleaned
start = cleaned.find("{")
end = cleaned.rfind("}")
if start != -1 and end != -1 and end > start:
return cleaned[start : end + 1].strip()
return cleaned
def _ensure_style_in_prompt(prompt: str, style: str) -> str:
cleaned_prompt = (prompt or "").strip()
cleaned_style = (style or "").strip()