
    dhf"                     x    S SK r S SKJrJrJr  S SKJrJr  S SKJ	r	  S SK
JrJr   " S S\5      r " S S	\5      rg)
    N)AnyListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)	LLMResult)OpenAI
OpenAIChatc                      ^  \ rS rSr% Sr\\\      \S'   Sr	\\
   \S'   \S\
4S j5       r  SS\\   S	\\\      S
\\   S\S\4
U 4S jjjr  SS\\   S	\\\      S
\\   S\S\4
U 4S jjjrSrU =r$ )PromptLayerOpenAI   a  PromptLayer OpenAI large language models.

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 PromptLayerOpenAI LLM adds two 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.llms import PromptLayerOpenAI
        openai = PromptLayerOpenAI(model_name="gpt-3.5-turbo-instruct")
pl_tagsFreturn_pl_idreturnc                     g)NF )clss    c/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/promptlayer_openai.pyis_lc_serializable$PromptLayerOpenAI.is_lc_serializable(   s        promptsstoprun_managerkwargsc                   > SSK JnJn  [        R                  R	                  5       R                  5       n[        TU ]  XU5      n[        R                  R	                  5       R                  5       n	[        [        U5      5       H  n
X   nUR                  U
   S   nUR                  UR                  S.n0 U R                  EUEnU" SSU/UU R                  UUU	U" 5       U R                  S9
nU R                  (       d  M~  UR                   b  [#        UR                   [$        5      (       d  0 Ul        XR                   S'   M     U$ )FCall OpenAI generate and then call PromptLayer API to log the request.r   get_api_keypromptlayer_api_requesttext
llm_outputzlangchain.PromptLayerOpenAI	langchainr   pl_request_idpromptlayer.utilsr   r    datetimenow	timestampsuper	_generaterangelengenerationsr"   r#   _identifying_paramsr   r   generation_info
isinstancedictselfr   r   r   r   r   r    request_start_timegenerated_responsesrequest_end_timeiprompt
generationrespparamsr&   	__class__s                   r   r-   PromptLayerOpenAI._generate,   s;    	K%..224>>@#g/{K#,,002<<>s7|$AZF,88;A>J"1<<D <00;F;F3-" !..M    --5Z..> > 24J.>K**?;3 %4 #"r   c                   >#    SSK JnJn  [        R                  R	                  5       R                  5       n[        TU ]  XU5      I S h  vN n[        R                  R	                  5       R                  5       n	[        [        U5      5       H  n
X   nUR                  U
   S   nUR                  UR                  S.n0 U R                  EUEnU" SSU/UU R                  UUU	U" 5       U R                  S9
I S h  vN nU R                  (       d  M  UR                   b  [#        UR                   [$        5      (       d  0 Ul        XR                   S'   M     U$  GN Na7f)Nr   r   promptlayer_api_request_asyncr!   z!langchain.PromptLayerOpenAI.asyncr$   r%   r&   r(   r   rC   r)   r*   r+   r,   
_agenerater.   r/   r0   r"   r#   r1   r   r   r2   r3   r4   r6   r   r   r   r   r   rC   r7   r8   r9   r:   r;   r<   r=   r>   r&   r?   s                   r   rE   PromptLayerOpenAI._agenerateU   sQ     	Q%..224>>@$)G$6wk$RR#,,002<<>s7|$AZF,88;A>J"1<<D <00;F;F"?3" !..# M    --5Z..> > 24J.>K**?;3 %4 #"9 S,   AE"EB2E">E ?E"AE" E"r   NN)__name__
__module____qualname____firstlineno____doc__r   r   str__annotations__r   boolclassmethodr   r   r   r   r-   r   rE   __static_attributes____classcell__r?   s   @r   r   r      s    . d3i  #(L(4.(4   %):>	'#c'# tCy!'# 67	'#
 '# 
'# '#X %)?C	&#c&# tCy!&# ;<	&#
 &# 
&# &#r   r   c                      ^  \ rS rSr% Sr\\\      \S'   Sr	\\
   \S'     SS\\   S\\\      S\\   S	\S
\4
U 4S jjjr  SS\\   S\\\      S\\   S	\S
\4
U 4S jjjrSrU =r$ )PromptLayerOpenAIChat~   a  PromptLayer OpenAI large language models.

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 OpenAIChat LLM can also
be passed here. The PromptLayerOpenAIChat adds two 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.llms import PromptLayerOpenAIChat
        openaichat = PromptLayerOpenAIChat(model_name="gpt-3.5-turbo")
r   Fr   r   r   r   r   r   c                   > SSK JnJn  [        R                  R	                  5       R                  5       n[        TU ]  XU5      n[        R                  R	                  5       R                  5       n	[        [        U5      5       H  n
X   nUR                  U
   S   nUR                  UR                  S.n0 U R                  EUEnU" SSU/UU R                  UUU	U" 5       U R                  S9
nU R                  (       d  M~  UR                   b  [#        UR                   [$        5      (       d  0 Ul        XR                   S'   M     U$ )r   r   r   r!   zlangchain.PromptLayerOpenAIChatr$   r%   r&   r'   r5   s                   r   r-   PromptLayerOpenAIChat._generate   s;    	K%..224>>@#g/{K#,,002<<>s7|$AZF,88;A>J"1<<D <00;F;F31" !..M    --5Z..> > 24J.>K**?;3 %4 #"r   c                   >#    SSK JnJn  [        R                  R	                  5       R                  5       n[        TU ]  XU5      I S h  vN n[        R                  R	                  5       R                  5       n	[        [        U5      5       H  n
X   nUR                  U
   S   nUR                  UR                  S.n0 U R                  EUEnU" SSU/UU R                  UUU	U" 5       U R                  S9
I S h  vN nU R                  (       d  M  UR                   b  [#        UR                   [$        5      (       d  0 Ul        XR                   S'   M     U$  GN Na7f)Nr   rB   r!   z%langchain.PromptLayerOpenAIChat.asyncr$   r%   r&   rD   rF   s                   r   rE    PromptLayerOpenAIChat._agenerate   sQ     	Q%..224>>@$)G$6wk$RR#,,002<<>s7|$AZF,88;A>J"1<<D <00;F;F"?7" !..# M    --5Z..> > 24J.>K**?;3 %4 #"9 SrH   r   rI   )rJ   rK   rL   rM   rN   r   r   rO   rP   r   rQ   r   r   r   r-   r   rE   rS   rT   rU   s   @r   rW   rW   ~   s    . d3i  #(L(4.(
 %):>	'#c'# tCy!'# 67	'#
 '# 
'# '#X %)?C	&#c&# tCy!&# ;<	&#
 &# 
&# &#r   rW   )r)   typingr   r   r   langchain_core.callbacksr   r   langchain_core.outputsr   langchain_community.llms.openair	   r
   r   rW   r   r   r   <module>ra      s8     & & - >n# n#bj#J j#r   