
    Sg                        d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZm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mZmZ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)m*Z*m+Z+m,Z,m-Z-  G d de      Z. G d de      Z/y)    )OpenAIN)
ChatOpenAI)get_llm_cache)BaseLanguageModelLangSmithParamsLanguageModelInput)dumpddumps)	AIMessageSystemMessage
AnyMessageBaseMessageBaseMessageChunkHumanMessageconvert_to_messagesmessage_chunk_to_message)ChatGenerationChatGenerationChunk
ChatResult	LLMResultRunInfo)
ChatOllama)OutputParserLike)RunnableRunnableConfig)BaseTool)TYPE_CHECKINGAnyCallableLiteralOptionalUnioncastc                        e Zd Zdededdf fdZ	 ddddedee   d	eee	      dede
f
d
Z	 ddddedee   d	eee	      dede
f
dZ xZS )DeepSeekR1ChatOpenAIargskwargsreturnNc                     t        |   |i | t        |j                  d      |j                  d            | _        y )Nbase_urlapi_key)r*   r+   )super__init__r   getclient)selfr&   r'   	__class__s      =/Users/kosar/src/browser-use-projects/web-ui/src/utils/llm.pyr-   zDeepSeekR1ChatOpenAI.__init__-   s9    $)&)ZZ
+JJy)
    stopinputconfigr5   c                0  K   g }|D ]~  }t        |t              r|j                  d|j                  d       2t        |t              r|j                  d|j                  d       a|j                  d|j                  d        | j
                  j                  j                  j                  | j                  |      }|j                  d   j                  j                  }|j                  d   j                  j                  }	t	        |	|      S wNsystem)rolecontent	assistantuser)modelmessagesr   r<   reasoning_content
isinstancer   appendr<   r   r/   chatcompletionscreate
model_namechoicesmessagerB   
r0   r6   r7   r5   r'   message_historyinput_responserB   r<   s
             r2   ainvokezDeepSeekR1ChatOpenAI.ainvoke4   s       	TF&-0&&V^^'TUFI.&&'WX&&6>>'RS	T ;;##//66//$ 7 

 %,,Q/77II""1%--55<MNNs   DDc                (   g }|D ]~  }t        |t              r|j                  d|j                  d       2t        |t              r|j                  d|j                  d       a|j                  d|j                  d        | j
                  j                  j                  j                  | j                  |      }|j                  d   j                  j                  }|j                  d   j                  j                  }	t	        |	|      S r9   rC   rL   s
             r2   invokezDeepSeekR1ChatOpenAI.invokeN   s      	TF&-0&&V^^'TUFI.&&'WX&&6>>'RS	T ;;##//66//$ 7 

 %,,Q/77II""1%--55<MNNr3   N)__name__
__module____qualname__r   r-   r   r!   r   liststrr   rP   rR   __classcell__r1   s   @r2   r%   r%   +   s    
c 
S 
T 
 ,0O
 %)O!O (O
 tCy!O O 
O: ,0O
 %)O!O (O
 tCy!O O 
Or3   r%   c                        e Zd Z	 d
dddedee   deee      dede	f
 fdZ
	 d
dddedee   deee      dede	f
 fd	Z xZS )DeepSeekR1ChatOllamaNr4   r6   r7   r5   r'   r(   c                  K   t         	|   |       d {   }|j                  }|j                  d      d   j	                  dd      }|j                  d      d   }d|v r|j                  d      d   }t        ||	      S 7 mw
N)r6   z</think>r   z<think>    z**JSON Response:**rA   )r,   rP   r<   splitreplacer   
r0   r6   r7   r5   r'   org_ai_messageorg_contentrB   r<   r1   s
            r2   rP   zDeepSeekR1ChatOllama.ainvokej   s       %wU;;$,,'--j9!<DDYPRS##J/27*mm$89"=G<MNN <s   BBA.Bc                    t         	|   |      }|j                  }|j                  d      d   j	                  dd      }|j                  d      d   }d|v r|j                  d      d   }t        ||	      S r^   )r,   rR   r<   rb   rc   r   rd   s
            r2   rR   zDeepSeekR1ChatOllama.invokez   s     e4$,,'--j9!<DDYPRS##J/27*mm$89"=G<MNNr3   rS   )rT   rU   rV   r   r!   r   rW   rX   r   r   rP   rR   rY   rZ   s   @r2   r\   r\   h   s    
 ,0O
 %)O!O (O
 tCy!O O 
O& ,0O
 %)O!O (O
 tCy!O O 
O Or3   r\   )0openair   pdblangchain_openair   langchain_core.globalsr   #langchain_core.language_models.baser   r   r   langchain_core.loadr	   r
   langchain_core.messagesr   r   r   r   r   r   r   r   langchain_core.outputsr   r   r   r   r   langchain_ollamar   "langchain_core.output_parsers.baser   langchain_core.runnablesr   r   langchain_core.toolsr   typingr   r   r   r    r!   r"   r#   r%   r\    r3   r2   <module>rv      ss     
 ' 0 
 -	 	 	  ( ? = )  ;O: ;Oz O:  Or3   