
    -j	/                       d dl mZ d dlZd dlZd dlm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 d dlmZ d d	lmZ d d
lmZmZ d dlmZmZ d dlmZ d dlmZ d dlm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z: ej;        rd dl<m%Z= d dl>m%Z?  ej@        eA          ZBejC        ejD        eEf         ZFe/de.de-diZGe G d d                      ZHe G d d                      ZIdS )    )annotationsN)	dataclass)choices)Dataset)
Embeddings)BaseLanguageModel)
ChatOpenAI)OpenAIEmbeddings)TestsetGenerationEventtrack)BaseRagasEmbeddingsLangchainEmbeddingsWrapper)ExceptionInRunner)Executor)BaseRagasLLMLangchainLLMWrapper)	RunConfig)DocumentDocumentStoreInMemoryDocumentStore)ComplexEvolutionCurrentNodesDataRow	Evolutionmulti_context	reasoningsimple)KeyphraseExtractor)EvolutionFilter
NodeFilterQuestionFilter)check_if_sum_is_close
deprecatedget_feature_languageis_nan)r   g      ?g      ?c                  6    e Zd ZU dZded<   ddZddZdd
ZdS )TestDatasetz
    TestDataset class
    zt.List[DataRow]	test_datareturnt.List[t.Dict]c                p    g }| j         D ]+}t          |          }d|d<   |                    |           ,|S )NTepisode_done)r(   dictappend)selfdata_samplesdata	data_dicts       a/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/ragas/testset/generator.py_to_recordszTestDataset._to_records5   sJ    N 	+ 	+DT

I(,In%	****    pd.DataFramec                d    t           j                            |                                           S N)pd	DataFramefrom_recordsr4   r/   s    r3   	to_pandaszTestDataset.to_pandas=   s$    |(()9)9););<<<r5   r   c                N    t          j        |                                           S r8   )r   	from_listr4   r<   s    r3   
to_datasetzTestDataset.to_dataset@   s     !1!1!3!3444r5   N)r)   r*   )r)   r6   )r)   r   )__name__
__module____qualname____doc____annotations__r4   r=   r@    r5   r3   r'   r'   -   sj              = = = =5 5 5 5 5 5r5   r'   c                      e Zd ZU ded<   ded<   ded<   ded<   e	 	 	 d6d7d            Ze eddd          	 	 	 	 	 d8d9d                        Z	 	 	 	 	 d:d;d'Z	 	 	 	 	 d:d<d)Z	d=d-Z
	 	 	 	 	 d:d>d.Z	 d?d@d4Z	 d?dAd5ZdS )BTestsetGeneratorr   generator_llm
critic_llmr   
embeddingsr   docstoreN   r   r   t.Optional[DocumentStore]
run_configt.Optional[RunConfig]
chunk_sizeintr)   'TestsetGenerator'c                   t          |          }t          |          }t          |          }	t          |          }
|5ddlm}  ||d          }t          ||	|
|          } | |||	|          S  | |||	|          S )Nllmr   )TokenTextSplitter)rQ   chunk_overlap)splitterrK   	extractorrO   )rI   rJ   rK   rL   )r   r   r   langchain.text_splitterrW   r   )clsrI   rJ   rK   rL   rO   rQ   generator_llm_modelcritic_llm_modelembeddings_modelkeyphrase_extractorrW   rY   s                r3   from_langchainzTestsetGenerator.from_langchainK   s     2-@@.z::5jAA05HIIIAAAAAA((JaPPPH,!+-%	  H 31++!	    31++!	   r5   z0.1.4z0.2.0ra   )removalalternativegpt-3.5-turbo-16kgpt-4text-embedding-ada-002strc                    t          |          }t          |          }t          |          }|                     |||||          S )N)model)rI   rJ   rK   rL   rQ   )r	   r
   ra   )	r\   rI   rJ   rK   rL   rQ   r]   r^   r_   s	            r3   with_openaizTestsetGenerator.with_openair   sc     )}===%J777+*===!!-''! " 
 
 	
r5   FT	documentst.Sequence[LlamaindexDocument]	test_sizedistributionst.Optional[Distributions]is_asyncboolraise_exceptionsc                    |pi }| j                             d |D                        |                     ||||||          S )Nc                6    g | ]}t          j        |          S rF   )r   from_llamaindex_document.0docs     r3   
<listcomp>zBTestsetGenerator.generate_with_llamaindex_docs.<locals>.<listcomp>   s#    IIIX.s33IIIr5   )rm   rn   with_debugging_logsrp   rO   rr   rL   add_documentsgenerater/   rk   rm   rn   rz   rp   rr   rO   s           r3   generate_with_llamaindex_docsz.TestsetGenerator.generate_with_llamaindex_docs   sh     &+##IIyIII	
 	
 	
 }}' 3!-  
 
 	
r5   t.Sequence[LCDocument]c                    |pi }| j                             d |D                        |                     ||||||          S )Nc                6    g | ]}t          j        |          S rF   )r   from_langchain_documentrv   s     r3   ry   zATestsetGenerator.generate_with_langchain_docs.<locals>.<listcomp>   s#    HHHsX-c22HHHr5   )rm   rn   rz   rp   rr   rO   r{   r~   s           r3   generate_with_langchain_docsz-TestsetGenerator.generate_with_langchain_docs   sh     &+##HHiHHH	
 	
 	
 }}' 3-!  
 
 	
r5   	evolutionr   Nonec                N   |j         | j         |_         |j        | j        |_        |j        t          | j                  |_        |j        t          | j                  |_        t          |t                    r%|j	         t          | j                  |_	        d S d S d S d S )NrU   )rI   rL   question_filterr!   rJ   node_filterr    
isinstancer   evolution_filterr   )r/   r   s     r3   init_evolutionzTestsetGenerator.init_evolution   s    "*&*&8I#!)%)]	"(0,:t,O,O,O	)$,(2t(G(G(G	%)%566 V-51@T_1U1U1UI... +*V V55r5   c                d   pt           t          t                                                    dd          s?t	          dt          t                                                               d          |t          dd          }| j                            |           D ].}| 	                    |           |
                    ||           /|rtd	d
lm}  |dt          j                    |dt          j                    |dt          j                    |dt          j                    |dt          j                   t          dd||          }	d | j                            |          D             }
d	}                                D ]^\  }}t%          t'          ||z                      D ]9}|	                    |j        |
|         |j        j         d|            |dz  }:_||k    r]t1          t                    ||z
            }|D ]9}|	                    |j        |
|         |j        j         d|            |dz  }:	 |	                                }|st5                      n# t          $ r}|d }~ww xY wd |D             }t7          |          }d D             }d |D             }t9          t;          dd D             fdD             t=          |j                  t=          |          d	k    r|d	         nd                      |S )!Ng      ?   z,distributions passed do not sum to 1.0 [got z"]. Please check the distributions.   Z   )max_retriesmax_wait)rp   rO   r   )patch_loggerzragas.testset.evolutionszragas.testset.extractorzragas.testset.filterszragas.testset.docstorezragas.llms.prompt
GeneratingT)desckeep_progress_barrr   rO   c                2    g | ]}t          ||g           S ))	root_nodenodes)r   )rw   ns     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>   s7     
 
 
 1QC000
 
 
r5   )k-)name   c                0    g | ]}t          |          |S rF   )r%   )rw   rs     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>  s#    EEE6!99E!EEEr5   )r(   c                ,    g | ]}t          |          S rF   )r$   rw   es     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>  s!    DDD)!,,DDDr5   c                    g | ]}||S r8   rF   r   s     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>  s    ;;;1Q]Q]]]r5   testset_generationc                J    g | ] }|j         j                                        !S rF   )	__class__rA   lowerr   s     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>  s)     U U U!!5!;!;!=!= U U Ur5   c                     g | ]
}|         S rF   rF   )rw   r   rn   s     r3   ry   z-TestsetGenerator.generate.<locals>.<listcomp>   s    &O&O&OA}Q'7&O&O&Or5    )
event_typeevolution_namesevolution_percentagesnum_rowslanguage) DEFAULT_DISTRIBUTIONr"   listvalues
ValueErrorsumr   rL   set_run_configr   initragas.utilsr   loggingDEBUGr   get_random_nodesitemsrangeroundsubmitevolver   rA   r   resultsr   r'   r   r   lenr(   )r/   rm   rn   rz   rp   rr   rO   r   r   execcurrent_nodestotal_evolutionsprobabilityifiller_evolutionstest_data_rowsr   test_dataset	evol_langs     `                r3   r}   zTestsetGenerator.generate   s    &=)=$T-*>*>*@*@%A%A3JJ 	"s4H\H\H^H^C_C_?`?` " " "   "rB???J$$Z000 ' 	E 	EI	***NNHNDDDD 	=000000L3W]CCCL2GMBBBL0'-@@@L17=AAAL,gm<<<"-!	
 
 

 
]33i3@@
 
 
 &3&9&9&;&; 	& 	&"I{5y!899:: & &$!!$%/8>>1>>    
 !A%  & y(( ']##y3C'C! ! ! / & &	$!"23%/8MM;KMM    
 !A%  	!\\^^N! *')))*  	 	 	G	 FE^EEE"^<<<DDmDDD	;;	;;;	"/ U U} U U U&O&O&O&O&O&O&O\344),Y!););1  	
 	
 	
 s   $J 
JJJr   
evolutionst.List[Evolution]	cache_dirt.Optional[str]c                F   t          | j        t                    s
J d            | j        j        
J d            | j        j                            ||           |D ]B}|                     |           |                                 |                    ||           Cd S )N)Must be an instance of in-memory docstoreExtractor is not setr   )r   rL   r   rZ   adaptr   r   )r/   r   r   r   r   s        r3   r   zTestsetGenerator.adapt(  s     M0
 
 	7 	76	7 	7 
 }&224J222%%h)%DDD# 	; 	;I	***NNOOH	O::::	; 	;r5   c                ~   t          | j        t                    s
J d            | j        j        
J d            | j        j                            |           |D ]`}|j        
J d            |j        
J d            t          |t                    r|j        
J d            |                    |           adS )z6
        Save the docstore prompts to a path.
        r   Nr   zNodeFilter is not setzQuestionFilter is not setzEvolutionFilter is not setr   )	r   rL   r   rZ   saver   r   r   r   )r/   r   r   r   s       r3   r   zTestsetGenerator.save9  s     M0
 
 	7 	76	7 	7 
 }&224J222$$Y///# 	0 	0I(446M444,88:U888)%566 0.::/ ;::NNYN////	0 	0r5   )NNrM   )rI   r   rJ   r   rK   r   rL   rN   rO   rP   rQ   rR   r)   rS   )rd   re   rf   NrM   )rI   rg   rJ   rg   rK   rg   rL   rN   rQ   rR   r)   rS   )NFTTN)rk   rl   rm   rR   rn   ro   rp   rq   rr   rq   rO   rP   )rk   r   rm   rR   rn   ro   rp   rq   rr   rq   rO   rP   )r   r   r)   r   )
rm   rR   rn   ro   rp   rq   rr   rq   rO   rP   r8   )r   rg   r   r   r   r   r)   r   )r   r   r   r   r)   r   )rA   rB   rC   rE   classmethodra   r#   rj   r   r   r   r}   r   r   rF   r5   r3   rH   rH   D   s        #### /3,0$ $ $ $ [$L Z6FGGG 1!2.2
 
 
 
 HG [
0 48!!%,0
 
 
 
 
> 48!!%,0
 
 
 
 
2V V V V$ 48!!%,0[ [ [ [ [B &*	; ; ; ; ;$ KO0 0 0 0 0 0 0r5   rH   )J
__future__r   r   typingtdataclassesr   randomr   pandasr9   datasetsr   langchain_core.embeddingsr   langchain_core.language_modelsr   langchain_openai.chat_modelsr	   langchain_openai.embeddingsr
   ragas._analyticsr   r   ragas.embeddings.baser   r   ragas.exceptionsr   ragas.executorr   
ragas.llmsr   r   ragas.run_configr   ragas.testset.docstorer   r   r   ragas.testset.evolutionsr   r   r   r   r   r   r   ragas.testset.extractorr   ragas.testset.filtersr   r    r!   r   r"   r#   r$   r%   TYPE_CHECKINGlangchain_core.documents
LCDocumentllama_index.core.schemaLlamaindexDocument	getLoggerrA   loggerDictAnyfloatDistributionsr   r'   rH   rF   r5   r3   <module>r      s   " " " " " "      ! ! ! ! ! !                 0 0 0 0 0 0 < < < < < < 3 3 3 3 3 3 8 8 8 8 8 8 : : : : : : : : Q Q Q Q Q Q Q Q . . . . . . # # # # # # 8 8 8 8 8 8 8 8 & & & & & & Q Q Q Q Q Q Q Q Q Q                  7 6 6 6 6 6 M M M M M M M M M M W W W W W W W W W W W W? G??????FFFFFF		8	$	$que|$YmTJ  5 5 5 5 5 5 5 5, G0 G0 G0 G0 G0 G0 G0 G0 G0 G0r5   