
    7Qj                         d dl Z d dlZ ej                  dej                        Z ej                  dej
                        ZdedefdZ	y)    Nz^```(?:json)?\s*|\s*```$z\{.*\}textreturnc                 <   t         j                  d| j                               j                         }	 t        j                  |      S # t        j
                  $ r? t        j                  |      }|s t        j                  |j                  d            cY S w xY w)a  Parse a model's raw text output as a JSON object, tolerating the two ways
    models routinely violate "JSON only": wrapping the object in a ```json fence, or
    prefacing/trailing it with a sentence of commentary.

    Not every provider supports a strict JSON-only response mode (OpenAI's
    response_format does; Anthropic and local Ollama models rely on the system prompt
    alone), so every provider implementation runs its output through this rather than
    calling json.loads directly.
     r   )		_FENCE_REsubstripjsonloadsJSONDecodeError
_OBJECT_REsearchgroup)r   cleanedmatchs      >/var/www/html/meridian/meridian-ai/app/providers/json_utils.pyparse_json_responser      sy     mmB

-335G*zz'"" *!!'*zz%++a.))	*s   A	 	ABB)
r
   recompile	MULTILINEr   DOTALLr   strdictr        r   <module>r      sK     	BJJ2BLLA	RZZ	299-
*c *d *r   