
    dhf                        S SK Jr  S SKrS SKJrJrJrJrJrJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  \(       a  S SKJr  S SKJr  \R,                  " \5      r " S	 S
\5      r " S S\5      rg)    )annotationsN)TYPE_CHECKINGDictIterableIteratorListOptionalUnioncast)BaseChatLoader)ChatSession)loadClientRunc                  t    \ rS rSrSr S
   SS jjr\SS j5       r\SS j5       r\SS j5       r	SS jr
S	rg)LangSmithRunChatLoader   z
Load chat sessions from a list of LangSmith "llm" runs.

Attributes:
    runs (Iterable[Union[str, Run]]): The list of LLM run IDs or run objects.
    client (Client): Instance of LangSmith client for fetching data.
Nc                F    SSK Jn  Xl        U=(       d    U" 5       U l        g)z
Initialize a new LangSmithRunChatLoader instance.

:param runs: List of LLM run IDs or run objects.
:param client: An instance of LangSmith client, if not provided,
    a new client instance will be created.
r   r   N)langsmith.clientr   runsclient)selfr   r   r   s       b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_loaders/langsmith.py__init__LangSmithRunChatLoader.__init__   s     	,	(    c                p    [         R                  U 5      n[         R                  U 5      nU(       a  X!S'   U$ )z
Convert an individual LangSmith LLM run to a ChatSession.

:param llm_run: The LLM run object.
:return: A chat session representing the run's data.
	functions)r   _get_messages_from_llm_run_get_functions_from_llm_run)llm_runchat_sessionr    s      r   _load_single_chat_session0LangSmithRunChatLoader._load_single_chat_session)   s5     .HHQ*FFwO	(1%r   c                ^   U R                   S:w  a  [        SU R                    35      eSU R                  ;  a  [        SU R                   35      eU R                  (       d  [        S5      e[	        U R                  5      S   n[	        U R                  5      S   S   S   n[        X/-   S	9$ )
z
Extract messages from a LangSmith LLM run.

:param llm_run: The LLM run object.
:return: ChatSession with the extracted messages.
llmExpected run of type llm. Got: messagesz"Run has no 'messages' inputs. Got zCannot convert pending rungenerationsr   message)r*   )run_type
ValueErrorinputsoutputsr   r   )r#   r*   message_chunks      r   r!   1LangSmithRunChatLoader._get_messages_from_llm_run7   s     u$>w?O?O>PQRRW^^+A'..AQRSS9::'
3W__-m<Q?	JH$>??r   c                    U R                   S:w  a  [        SU R                    35      eU R                  =(       d    0 R                  S0 5      R                  S5      $ )z
Extract functions from a LangSmith LLM run if they exist.

:param llm_run: The LLM run object.
:return: Functions from the run or None.
r(   r)   invocation_paramsr    )r-   r.   extraget)r#   s    r   r"   2LangSmithRunChatLoader._get_functions_from_llm_runI   sT     u$>w?O?O>PQRR#(()<bAEEkRRr   c           
   #  R  #    SSK Jn  U R                   HQ  n [        US5      (       a  UnOU R                  R                  U5      nU R                  [        X5      5      nUv   MS     g! [         a/  n[        R                  SU S[        U5       35         SnAM  SnAff = f7f)z
Lazy load the chat sessions from the iterable of run IDs.

This method fetches the runs and converts them to chat sessions on-the-fly,
yielding one session at a time.

:return: Iterator of chat sessions containing messages.
r   r   idzCould not load run z: N)langsmith.schemasr   r   hasattrr   read_runr%   r   r.   loggerwarningrepr)r   r   run_objrunsessiones         r   	lazy_load LangSmithRunChatLoader.lazy_loadU   s      	*yyG	7D))!C++..w7C88cH !  !4WIRQyIJs/   B'AA+&B'+
B$5$BB'B$$B')r   r   )N)r   zIterable[Union[str, Run]]r   Optional['Client'])r#   'Run'returnr   )r#   rG   rH   zOptional[List[Dict]]rH   zIterator[ChatSession])__name__
__module____qualname____firstlineno____doc__r   staticmethodr%   r!   r"   rD   __static_attributes__ r   r   r   r      sh     MQ)-)7I)   @ @" 	S 	Sr   r   c                  4    \ rS rSrSrSS.SS jjrS	S jrSrg)
LangSmithDatasetChatLoaderm   z
Load chat sessions from a LangSmith dataset with the "chat" data type.

Attributes:
    dataset_name (str): The name of the LangSmith dataset.
    client (Client): Instance of LangSmith client for fetching data.
N)r   c                    SSK Jn  Xl        U=(       d    U" 5       U l        g! [         a  n[        S5      UeSnAff = f)z
Initialize a new LangSmithChatDatasetLoader instance.

:param dataset_name: The name of the LangSmith dataset.
:param client: An instance of LangSmith client; if not provided,
    a new client instance will be created.
r   r   zkThe LangSmith client is required to load LangSmith datasets.
Please install it with `pip install langsmith`N)r   r   ImportErrordataset_namer   )r   rW   r   r   rC   s        r   r   #LangSmithDatasetChatLoader.__init__v   sJ    	/ )(  	A 	s   $ 
?:?c           	   #    #    SSK Jn  U R                  R                  U R                  S9nU HM  n[        UR                  S/ 5       Vs/ sH  nUR                  U5      PM     snUR                  S5      S9v   MO     gs  snf 7f)a
  
Lazy load the chat sessions from the specified LangSmith dataset.

This method fetches the chat data from the dataset and
converts each data point to chat sessions on-the-fly,
yielding one session at a time.

:return: Iterator of chat sessions containing messages.
r   )openai)rW   r*   r    )r*   r    N)langchain_community.adaptersrZ   r   read_dataset_openai_finetuningrW   r   r6   convert_dict_to_message)r   oai_adapterdata
data_pointms        r   rD   $LangSmithDatasetChatLoader.lazy_load   s      	G{{99** : 
 J (^^J;;  77:; %..5  s   AB
B 
$!B)r   rW   )rW   strr   rF   rI   )rJ   rK   rL   rM   rN   r   rD   rP   rQ   r   r   rS   rS   m   s     KO )&r   rS   )
__future__r   loggingtypingr   r   r   r   r   r	   r
   r   langchain_core.chat_loadersr   langchain_core.chat_sessionsr   langchain_core.load.loadr   r   r   r:   r   	getLoggerrJ   r=   r   rS   rQ   r   r   <module>rk      sQ    "  W W W 6 4 )'%			8	$Y^ Yx2 2r   