ayushKishor's picture
Add Pluto memory layer and pipeline fixes
23cdeed
raw
history blame contribute delete
907 Bytes
# -*- coding: utf-8 -*-
"""
pluto/utils.py — Shared utilities for response parsing.
"""
from __future__ import annotations
import re
def strip_think_block(text: str) -> str:
"""Remove DeepSeek-style <think>...</think> blocks from LLM responses."""
return re.sub(r"<think>[\s\S]*?</think>", "", text, flags=re.DOTALL).strip()
def extract_json_from_response(raw: str) -> str:
"""Extract JSON string from an LLM response (handles markdown blocks, think blocks)."""
# Strip think blocks first
cleaned = strip_think_block(raw)
# Try markdown code block
json_match = re.search(r"```(?:json)?\s*\n?([\s\S]*?)```", cleaned)
if json_match:
return json_match.group(1).strip()
# Try to find raw JSON object
brace_match = re.search(r"\{[\s\S]*\}", cleaned)
if brace_match:
return brace_match.group(0).strip()
return cleaned.strip()