
    yj                        d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ dd	lmZ ed
         Z G d de          Zd%dZd&dZd'dZd(dZddd)d$ZdS )*    )annotationsN)	AwaitableCallable)Literal)	BaseModelValidationError)validate_and_repair_json)PromptRepresentation   )CompletionResult)raiserepair_then_raiserepair_then_emptyc                      e Zd ZdZdS )StructuredOutputErrorz>Raised when structured output cannot be validated or repaired.N)__name__
__module____qualname____doc__     A/DATA/AppData/hermes/projects/honcho/src/llm/structured_output.pyr   r      s        HHHHr   r   raw_contentstrresponse_modeltype[BaseModel]_modelreturnr   c                P   	 t          |           }t          j        |          }|t          u r{d|v rwt	          |d         t
                    r\|d         D ]S}t	          |t                    r<d|vr/d|v r+|d         rd|d         d         dd          d|d<   nd	|d<   d|vrg |d<   Tt          j        |          }n*# t          j        t          t          t          f$ r d
}Y nw xY w	 |                    |          S # t          $ r |t          u rt          g           cY S  w xY w)zKRepair truncated or malformed JSON and validate against the response model.	deductive
conclusionpremisesz%[Incomplete reasoning from premises: r   Nd   z...]z+[Incomplete reasoning - conclusion missing] explicit)r	   jsonloadsr
   
isinstancelistdictdumpsJSONDecodeErrorKeyError	TypeError
ValueErrormodel_validate_jsonr   )r   r   r   finalrepaired_dataitems         r   repair_response_model_jsonr5      s   (55
5)) 222},,=5t<< - &k2 . .dD)) .#4//J$4F4F
+  gZHXYZH[\`]`\`Ha g g g !..
 !N !. "--+-Z(
=)) (IzB   11%888   111'444444s$   B;B> >$C%$C%)C> >#D%#D%contentobjectc                   t          | |          r| S t          | t                    r|                    |           S t          | t                    r|                    |           S t          dt          |           j                   )Nz'Unsupported structured output payload: )r)   r   r1   r+   model_validater   typer   )r6   r   s     r   validate_structured_outputr;   C   s     '>** '3 ;11':::'4   6,,W555
J$w--2HJJ  r   modelBaseModel | Nonec                    t          | t                    sd S 	 t          | ||          S # t          t          f$ r Y d S w xY w)N)r)   r   r5   r   r   )r6   r   r<   s      r    attempt_structured_output_repairr?   R   sY    
 gs## t)'>5III!?3   tts   * ??c                ^    | t           u rt          g           S |                     i           S )Nr%   )r
   r9   )r   s    r   empty_structured_outputrA   _   s3    ---#R0000((,,,r   r   )failure_policyexecutor)Callable[[], Awaitable[CompletionResult]]
model_namerB   StructuredOutputFailurePolicyr   c               :  K    |              d {V }	 t          |j        |          |_        |S # t          t          f$ r
 |dk    r Y nw xY wt	          |j        ||          }|	||_        |S |dk    rt          |          |_        |S t          d|           )Nr   r   z.Failed to produce valid structured output for )r;   r6   r   r   r?   rA   )rC   r   rE   rB   resultrepaireds         r   execute_structured_output_callrJ   e   s       8::F3FNNSS!?3   W$$ %$ 0 H
 !,,,0@@
EEE  s   0 A
A)r   r   r   r   r   r   r   r   )r6   r7   r   r   r   r   )r6   r7   r   r   r<   r   r   r=   )r   r   r   r   )
rC   rD   r   r   rE   r   rB   rF   r   r   )
__future__r   r'   collections.abcr   r   typingr   pydanticr   r   src.utils.json_parserr	   src.utils.representationr
   backendr   rF   r0   r   r5   r;   r?   rA   rJ   r   r   r   <module>rR      sY   " " " " " "  / / / / / / / /       / / / / / / / / : : : : : : 9 9 9 9 9 9 % % % % % % '! I I I I IJ I I I' ' ' 'T   
 
 
 
- - - - 5H       r   