
    +#h                     D    d dl Z d dlZd dlmZ ddlmZ 	  G d de      Zy)    N)ensure_signature   )Predictc                   >     e Zd Zd fd	Z fdZ fdZ fdZ xZS )ChainOfThoughtc                    t        |   |fi | || _        t        | j                        }|j
                  j                         ^ }}|xs t        j                  dd|z   dz         }|j                  d|t              | _        y )Nz/Reasoning: Let's think step by step in order toz${produce the z	}. We ...)prefixdesc	rationale)type_)super__init__	activatedr   	signatureoutput_fieldskeysdspyOutputFieldprependstrextended_signature)selfr   rationale_typer   config_keyslast_key	__class__s          Z/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dspy/predict/chain_of_thought.pyr   zChainOfThought.__init__    s    -f-"$T^^4	$22779' 
4+;+;D!H,{:,

 #,"3"3KWZ"3"[    c                    |j                  dd       }|f| j                  du s>| j                  ?t        t        j                  j
                  t        j                        r| j                  }n| j                  }n|}t        | (  dd|i|S )Nnew_signatureTr    )popr   
isinstancedspsettingslmGPT3r   r   r   forward)r   kwargsr!   r   r   s       r   r)   zChainOfThought.forward/   st    

?D9 ~~%&:clloosxx+P 33	 NN	%Iw==f==r   c                     t         |          }| j                  j                  |d<   | j                  j
                  j                         ^ }}| j                  j
                  |   j                  d   |d<   |S )Nextended_signature_instructionsr	   extended_signature_prefix)r   
dump_stater   instructionsr   fieldsr   json_schema_extra)r   state_r   r   s       r   r.   zChainOfThought.dump_state>   sr    "$ 483J3J3W3W/0~~,,113H-1-D-D-K-KH-U-g-ghp-q)*r   c                    t         |   |       d|v r%|d   }| j                  j                  |      | _        d|v rO|d   }| j                  j                  j                         ^ }}| j                  j                  ||      | _        y y )Nr,   r-   )r	   )r   
load_stater   with_instructionsr0   r   with_updated_fields)r   r2   r/   r	   r3   r   r   s         r   r5   zChainOfThought.load_stateI   s    5! -5 !BCL&*&=&=&O&OP\&]D#&%/67F2299>>@LQ&*&=&=&Q&QRZci&Q&jD# 0r   )NT)__name__
__module____qualname__r   r)   r.   r5   __classcell__)r   s   @r   r   r      s    \>	k kr   r   )r%   r   dspy.signatures.signaturer   predictr   r   r"   r   r   <module>r>      s*    
  6 "5kW 5knr   