
    +#h                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ ddl	m
Z
 ddlmZ e j                  j                  d      r>e j                  j!                  e j                  j                  d      d      Z ee       nd	Ze j                  j'                  e      s e j(                  e       	  G d
 de      Zy)    N)Hasher)signature_to_template   )BootstrapFewShot)TeleprompterDSP_NOTEBOOK_CACHEDIRcompilerzlocal_cache/compilerc                   :    e Zd Zdi dfdZdddddddddddd	d
Zy)BootstrapFinetuneNTc                 d    || _         || _        || _        |xs d }t        |dd|      | _        y )Nc                       y)NT )argss    U/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dspy/teleprompt/finetune.py<lambda>z,BootstrapFinetune.__init__.<locals>.<lambda>8   s        i?B r   )metricmax_bootstrapped_demosmax_labeled_demosteacher_settings)r   r   	multitaskr   teleprompter)selfr   r   r   s       r   __init__zBootstrapFinetune.__init__3   s<     0"/.,#)-	
r   zt5-large   r   g-C6
?F)teachervalsettargetbsize
accumstepslrepochsbf16int8peftpath_prefixc                   |t        d       t        |t              r|n|g}i }|D ]  }| j                  j	                  |||      }| j
                  }|j                         D ]  \  }}|rdn|}||vrg n||   ||<   |j                  D ]  }t        |      }t        |j                        }|j                  |j                  d   j                        }|j                  t        j                   ddg i|      j#                         }||   j%                  t        ||                |D ]A  }t'        j(                  d      j+                  ||          t        |t-        ||                C i }|D ]  }||   }|dz   t/        j0                  |      z   }t2        j4                  j7                  t8        | d	      }t        |       t;        |d
      5 }|D ])  }|j=                  t?        j@                  |      dz          + 	 d d d        |||<    dd l!}dj7                  t'        j(                  tE        jD                               jG                  |jH                  |jJ                  z   d            |d|
|dd||	||d} |r#t2        j4                  j7                  || d         n| d   | d<   ddl&m'}! |}i }"|D ]U  }||   }#t        |       }$| d   dz   |z   |$d<    |!|#||$      }%t        d|% d|        t        jP                  ||%      |"|<   W jS                         }&t-        |j                               t-        |&j                               k(  sJ tU        |j                         |&j                               D ]B  \  \  }}\  }'}(||'k(  sJ rdn|}t        d| d       |"|   |(_+        |(j                  g k(  rBJ  |&S # 1 sw Y   xY w)NzlWARNING: Using a vanilla teacher. Are you sure you want to use BootstrapFinetune without a compiled teacher?)r   trainsetalldemos)prompt
completionr   .z.jsonlw
    )kF)saver%   fp16r#   r$   fid	rationale
batch_sizer"   gradient_accumulation_stepsr!   r4   )finetune_hfz#> Best checkpoint path: z for )model
checkpointzAssigning the LM of predictor r   ),print
isinstancelistr   compiler   named_predictorsr+   dictr   	signaturepopfieldsoutput_variablequerydspExamplestripappendrandomRandomshufflelenr   hashospathjointraining_data_directoryopenwriteujsondumpsstringtimechoicesascii_uppercasedigitsdsp.modules.finetuningr:   HFModel
reset_copyziplm))r   studentr   r(   r   r   r   r    r!   r"   r#   r$   r%   r&   teachersfinetune_datacompiledr   name	predictorname_demotemplater-   r,   finetune_pathsdatahashed_nameoutput_pathflinerY   compiler_configr:   finetune_modelstraining_data_pathcompiler_config_best_ckpt_path	compiled2name2
predictor2s)                                            r   r@   zBootstrapFinetune.compile@   s   $ ?]
 )$77gY 	\G((00'T\0]HI $,#<#<#> \i!*-2--Gr][`Mae$%OO \D:D  5Y5H5HIH!%(//"*=*M*M!NJ%^^CKK,Ib,ID,IJPPRF!%(//Fz0Z[\	\	\( # 	4EMM!$$]5%9:%]5123	4 ! 
	/D &D*v{{4'88K'',,'>;-v@VWK+k3' 61  6DGGEKK-4566 $/N4 
	/ 	 GGdiik*2263I3IFMM3Y]_2` +5
" CNBGGLLof&=>SbciSj 	 	7! 	YD!/!5#O4'6v'>'Dt'KV$();VEUVN-n-=U4&IJ$'KKf$XOD!	Y '')	8,,./3y7Q7Q7S3TTTT69(:S:S:UW`WqWqWs6t 		*2T92z5= =%54D 24&:;+D1JM##r)))		* 6 6s   /OO	)__name__
__module____qualname__r   r@   r   r   r   r   r   2   s7    "R4 
" }r   r   )rQ   rL   rZ   rW   datasets.fingerprintr   rH   dspy.signatures.signaturer   	bootstrapr   
telepromptr   environgetrR   rS   rT   r=   existsmakedirsr   r   r   r   <module>r      s    	    ' 
 ; ' % ::>>)* ggll2::>>:Q+RT^_	
!"4	ww~~-.BKK'(&K Kr   