Ë
    µŒj‰  ã                   ór   — d Z ddlZddlmZmZ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  G d„ d	e«      Zy)
zPromptLayer wrapper.é    N)ÚAnyÚDictÚListÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseMessage)Ú
ChatResult)Ú
ChatOpenAIc                   ó(  ‡ — e Zd ZU dZeee      ed<   dZee	   ed<   e
de	fd„«       Z	 	 	 ddee   deee      d	ee   d
ee	   dedefˆ fd„Z	 	 	 ddee   deee      d	ee   d
ee	   dedefˆ fd„Zedefd„«       Zedeeef   fˆ fd„«       Zˆ xZS )ÚPromptLayerChatOpenAIad  `PromptLayer` and `OpenAI` Chat large language models API.

    To use, you should have the ``openai`` and ``promptlayer`` python
    package installed, and the environment variable ``OPENAI_API_KEY``
    and ``PROMPTLAYER_API_KEY`` set with your openAI API key and
    promptlayer key respectively.

    All parameters that can be passed to the OpenAI LLM can also
    be passed here. The PromptLayerChatOpenAI adds to optional

    parameters:
        ``pl_tags``: List of strings to tag the request with.
        ``return_pl_id``: If True, the PromptLayer request ID will be
            returned in the ``generation_info`` field of the
            ``Generation`` object.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import PromptLayerChatOpenAI
            openai = PromptLayerChatOpenAI(model="gpt-3.5-turbo")
    Úpl_tagsFÚreturn_pl_idÚreturnc                  ó   — y)NF© )Úclss    ú|/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/promptlayer_openai.pyÚis_lc_serializablez(PromptLayerChatOpenAI.is_lc_serializable+   s   € àó    ÚmessagesÚstopÚrun_managerÚstreamÚkwargsc                 ó€  •— ddl m}m} t        j                  j	                  «       j                  «       }t        ‰| �  |||fd|i|¤Ž}	t        j                  j	                  «       j                  «       }
t        ‰| �!  ||«      \  }}t        |	j                  «      D ]�  \  }}t        ‰| �!  |j                  g|«      \  }}i |¥|¥} |dd||| j                  |||
 |«       | j                  ¬«
      }| j                  sŒb|j                  �t        |j                  t         «      si |_        ||j                  d<   ŒŸ |	S )zJCall ChatOpenAI generate and then call PromptLayer API to log the request.r   )Úget_api_keyÚpromptlayer_api_requestr   zlangchain.PromptLayerChatOpenAIÚ	langchain©r   Úpl_request_id)Úpromptlayer.utilsr   r   ÚdatetimeÚnowÚ	timestampÚsuperÚ	_generateÚ_create_message_dictsÚ	enumerateÚgenerationsÚmessager   r   Úgeneration_infoÚ
isinstanceÚdict)Úselfr   r   r   r   r   r   r   Úrequest_start_timeÚgenerated_responsesÚrequest_end_timeÚmessage_dictsÚparamsÚiÚ
generationÚresponse_dictr!   Ú	__class__s                    €r   r'   zPromptLayerChatOpenAI._generate/   sQ  ø€ ÷ 	Kä%×.Ñ.×2Ñ2Ó4×>Ñ>Ó@ÐÜ#™gÑ/Ø�d˜Kñ
Ø06ð
Ø:@ñ
Ðô $×,Ñ,×0Ñ0Ó2×<Ñ<Ó>ÐÜ %¡Ñ =¸hÈÓ MÑˆ�vÜ&Ð':×'FÑ'FÖG‰MˆAˆzÜ$)¡GÑ$AØ×#Ñ#Ð$ dó%Ñ!ˆM˜6ð *˜Ð) &Ð)ˆFÙ3Ø1ØØØØ—‘ØØ"Ø Ù“Ø!×.Ñ.ôˆMð × Ó Ø×-Ñ-Ð5¼ZØ×.Ñ.´ô>ð 24�JÔ.Ø>K�
×*Ñ*¨?Ò;ð- Hð. #Ð"r   c              ‹   ó²  •K  — ddl m}m} t        j                  j	                  «       j                  «       }t        ‰| �  |||fd|i|¤Žƒ d{  –—† }	t        j                  j	                  «       j                  «       }
t        ‰| �!  ||«      \  }}t        |	j                  «      D ]¥  \  }}t        ‰| �!  |j                  g|«      \  }}i |¥|¥} |dd||| j                  |||
 |«       | j                  ¬«
      ƒ d{  –—† }| j                  sŒj|j                  �t        |j                  t         «      si |_        ||j                  d<   Œ§ |	S 7 �Œ7 ŒT­w)	z;Call ChatOpenAI agenerate and then call PromptLayer to log.r   )r   Úpromptlayer_api_request_asyncr   Nz%langchain.PromptLayerChatOpenAI.asyncr   r    r!   )r"   r   r:   r#   r$   r%   r&   Ú
_agenerater(   r)   r*   r+   r   r   r,   r-   r.   )r/   r   r   r   r   r   r   r:   r0   r1   r2   r3   r4   r5   r6   r7   r!   r8   s                    €r   r;   z PromptLayerChatOpenAI._agenerateY   sj  øè ø€ ÷ 	Qä%×.Ñ.×2Ñ2Ó4×>Ñ>Ó@ÐÜ$)¡GÑ$6Ø�d˜Kñ%
Ø06ð%
Ø:@ñ%
÷ 
Ðô $×,Ñ,×0Ñ0Ó2×<Ñ<Ó>ÐÜ %¡Ñ =¸hÈÓ MÑˆ�vÜ&Ð':×'FÑ'FÖG‰MˆAˆzÜ$)¡GÑ$AØ×#Ñ#Ð$ dó%Ñ!ˆM˜6ð *˜Ð) &Ð)ˆFÙ"?Ø7ØØØØ—‘ØØ"Ø Ù“Ø!×.Ñ.ô#÷ ˆMð × Ó Ø×-Ñ-Ð5¼ZØ×.Ñ.´ô>ð 24�JÔ.Ø>K�
×*Ñ*¨?Ò;ð- Hð. #Ð"ð9
ùðús,   ƒAEÁEÁB0EÄ EÄEÄAEÅEc                  ó   — y)Nzpromptlayer-openai-chatr   )r/   s    r   Ú	_llm_typezPromptLayerChatOpenAI._llm_typeƒ   s   € à(r   c                 óN   •— i t         ‰| �  ¥| j                  | j                  dœ¥S )N)r   r   )r&   Ú_identifying_paramsr   r   )r/   r8   s    €r   r?   z)PromptLayerChatOpenAI._identifying_params‡   s/   ø€ ð
Ü‰gÑ)ð
à—|‘|Ø ×-Ñ-ò
ð 	
r   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   ÚboolÚclassmethodr   r	   r   r   r
   r'   r   r;   Úpropertyr=   r   r?   Ú__classcell__)r8   s   @r   r   r      sD  ø… ñð. �d˜3‘iÑ Ó Ø#(€L�(˜4‘.Ó(àð 4ò ó ðð %)Ø:>Ø!%ñ(#à�{Ñ#ð(#ð �t˜C‘yÑ!ð(#ð Ð6Ñ7ð	(#ð
 ˜‘ð(#ð ð(#ð 
õ(#ðZ %)Ø?CØ!%ñ(#à�{Ñ#ð(#ð �t˜C‘yÑ!ð(#ð Ð;Ñ<ð	(#ð
 ˜‘ð(#ð ð(#ð 
õ(#ðT ð)˜3ò )ó ð)ð ð
 T¨#¨s¨(¡^ô 
ó ô
r   r   )rC   r#   Útypingr   r   r   r   Úlangchain_core.callbacksr   r   Úlangchain_core.messagesr	   Úlangchain_core.outputsr
   Úlangchain_community.chat_modelsr   r   r   r   r   Ú<module>rO      s/   ðÙ ã ß ,Ó ,÷õ 0Ý -å 6ô}
˜Jõ }
r   