Ë
    µŒjf  ã                  óÐ   — d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ erd dlmZ d dlmZ  ej,                  e«      Z G d	„ d
e«      Z G d„ de«      Zy)é    )ÚannotationsN)ÚTYPE_CHECKINGÚDictÚIterableÚIteratorÚListÚOptionalÚUnionÚcast)ÚBaseChatLoader)ÚChatSession)Úload©ÚClient©ÚRunc                  ó`   — e Zd ZdZ	 d	 	 	 d	d„Zed
d„«       Zed
d„«       Zedd„«       Zdd„Z	y)ÚLangSmithRunChatLoaderzí
    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                ó>   — ddl m} || _        |xs  |«       | _        y)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       út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_loaders/langsmith.pyÚ__init__zLangSmithRunChatLoader.__init__   s   € õ 	,àˆŒ	ØÒ(¡£ˆ�ó    c                óh   — t         j                  | «      }t         j                  | «      }|r||d<   |S )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_sessionz0LangSmithRunChatLoader._load_single_chat_session)   s7   € ô .×HÑHÈÓQˆÜ*×FÑFÀwÓOˆ	ÙØ(1ˆL˜Ñ%ØÐr   c                óV  — | j                   dk7  rt        d| j                   › �«      ‚d| j                  vrt        d| j                  › �«      ‚| j                  st        d«      ‚t	        | j                  «      d   }t	        | j                  «      d   d   d   }t        ||gz   ¬	«      S )
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   z1LangSmithRunChatLoader._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                ó®   — | j                   dk7  rt        d| j                   › �«      ‚| j                  xs i j                  di «      j                  d«      S )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    z2LangSmithRunChatLoader._get_functions_from_llm_runI   sT   € ð ×Ñ˜uÒ$ÜÐ>¸w×?OÑ?OÐ>PÐQÓRÐRØ—‘Ò# ×(Ñ(Ð)<¸bÓA×EÑEÀkÓRÐRr   c           
   #  óB  K  — ddl m} | j                  D ]L  }	 t        |d«      r|}n| j                  j                  |«      }| j                  t        ||«      «      }|–— ŒN y# t        $ r.}t        j                  d|› dt        |«      › �«       Y d}~Œ‚d}~ww xY w­w)a	  
        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_loadz LangSmithRunChatLoader.lazy_loadU   sŽ   è ø€ õ 	*à—y”yˆGð	Ü˜7 DÔ)Ø!‘CàŸ+™+×.Ñ.¨wÓ7�CØ×8Ñ8¼¸cÀ3»ÓH�Ø“ñ !øô ò Ü—‘Ð!4°W°I¸RÄÀQÃ¸yÐIÔJÜûðüs/   ‚B™A	A%Á"BÁ%	BÁ.$BÂBÂBÂB)N)r   zIterable[Union[str, Run]]r   úOptional['Client'])r!   ú'Run'Úreturnr   )r!   rA   rB   zOptional[List[Dict]]©rB   zIterator[ChatSession])
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr#   r   r    r?   © r   r   r   r      sh   „ ñð MQð)Ø-ð)Ø7Ió)ð òó ðð ò@ó ð@ð" ò	Só ð	Sôr   r   c                  ó&   — e Zd ZdZddœdd„Zdd„Zy)ÚLangSmithDatasetChatLoaderzé
    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               óz   — 	 ddl m} || _        |xs  |«       | _        y# t        $ r}t        d«      |‚d}~ww xY w)a  
        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   rN   r   r   r>   s        r   r   z#LangSmithDatasetChatLoader.__init__v   sL   € ð	Ý/ð )ˆÔØÒ(¡£ˆ�øô ò 	ÜðAóð ðûð	ús   ‚   	:©5µ:c           	   #  ó  K  — ddl m} | j                  j                  | j                  ¬«      }|D ]M  }t        |j                  dg «      D �cg c]  }|j                  |«      ‘Œ c}|j                  d«      ¬«      –— ŒO yc c}w ­w)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)rN   r'   r   )r'   r   N)Úlangchain_community.adaptersrP   r   Úread_dataset_openai_finetuningrN   r   r2   Úconvert_dict_to_message)r   Úoai_adapterÚdataÚ
data_pointÚms        r   r?   z$LangSmithDatasetChatLoader.lazy_load‰   s�   è ø€ õ 	Gà�{‰{×9Ñ9Ø×*Ñ*ð :ó 
ˆó ˆJÜð (Ÿ^™^¨J¸Ô;óá;˜ð  ×7Ñ7¸Õ:Ø;ñð %Ÿ.™.¨Ó5ôó ñ ùòùs   ‚ABÁB
Á%"B)rN   Ústrr   r@   rC   )rD   rE   rF   rG   r   r?   rI   r   r   rK   rK   m   s   „ ñð KOõ )ô&r   rK   )Ú
__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   r5   r   Ú	getLoggerrD   r8   r   rK   rI   r   r   Ú<module>r`      sS   ðÝ "ã ß W× WÓ Wå 6Ý 4Ý )áÝ'Ý%à	ˆ×	Ñ	˜8Ó	$€ôY˜^ô Yôx2 õ 2r   