Ë
    µŒj—Y  ã                   óô  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ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 d dlmZ d dl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(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;  ejx                  e=«      Z>dZ?dZ@de#deAfd„ZBdeeCef   de#fd„ZDdeeCef   dee$   de$fd„ZE G d„ de«      ZF G d„ d«      ZGy)é    N)Údatetime)ÚQueue)Úmktime)	ÚAnyÚDictÚ	GeneratorÚIteratorÚListÚMappingÚOptionalÚTypeÚcast)Ú	urlencodeÚurlparseÚ
urlunparse)Úformat_date_time)ÚCallbackManagerForLLMRun)ÚBaseChatModelÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚChatMessageChunkÚFunctionMessageChunkÚHumanMessageÚHumanMessageChunkÚSystemMessageÚToolMessageChunk)Úmake_invalid_tool_callÚparse_tool_call)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Úget_from_dict_or_envÚget_pydantic_field_names)Ú
get_fields)Ú
ConfigDictÚFieldÚmodel_validatorz$wss://spark-api.xf-yun.com/v3.5/chatzgeneralv3.5ÚmessageÚreturnc                 óÚ  — t        | t        «      rd| j                  dœ}|S t        | t        «      rd| j                  dœ}|S t        | t        «      rkd| j                  dœ}d| j
                  v r| j
                  d   |d<   |d   dk(  rd |d<   d| j
                  v r| j
                  d   |d<   |d   dk(  rd |d<   |S t        | t        «      rd| j                  dœ}|S t        d	| › �«      ‚)
NÚuser)ÚroleÚcontentÚ	assistantÚfunction_callr1   Ú Ú
tool_callsÚsystemzGot unknown type )Ú
isinstancer   r1   r   r   Úadditional_kwargsr   Ú
ValueError)r,   Úmessage_dicts     úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/sparkllm.pyÚconvert_message_to_dictr<   9   s  € ä�'œ;Ô'Ø &°7·?±?ÑCˆð( Ðô' 
�Gœ\Ô	*Ø &°7·?±?ÑCˆð$ Ðô# 
�GœYÔ	'Ø +¸¿¹ÑHˆØ˜g×7Ñ7Ñ7Ø,3×,EÑ,EÀoÑ,VˆL˜Ñ)à˜IÑ&¨"Ò,Ø*.�˜YÑ'Ø˜7×4Ñ4Ñ4Ø)0×)BÑ)BÀ<Ñ)PˆL˜Ñ&à˜IÑ&¨"Ò,Ø*.�˜YÑ'ð Ðô 
�Gœ]Ô	+Ø (°W·_±_ÑEˆð Ðô Ð,¨W¨IÐ6Ó7Ð7ó    Ú_dictc           
      óî  — | d   }| d   }|dk(  rt        |¬«      S |dk(  r~g }i }| j                  d«      x}rt        |«      |d<   g }| j                  d«      x}r-||d<   | d   D ]  }	 |j                  t	        |d¬	«      «       Œ! ni }|xs d
}
t        |
|||¬«      S |dk(  rt        |¬«      S t        ||¬«      S # t
        $ r.}	|j                  t        |t        |	«      «      «       Y d }	~	ŒŠd }	~	ww xY w)Nr0   r1   r/   ©r1   r2   r3   r5   T)Ú	return_idr4   )r1   r8   r5   Úinvalid_tool_callsr6   ©r1   r0   )r   ÚgetÚdictÚappendr"   Ú	Exceptionr!   Ústrr   r   r   )r>   Úmsg_roleÚmsg_contentrB   r8   r3   r5   Úraw_tool_callsÚraw_tool_callÚer1   s              r;   Úconvert_dict_to_messagerN   S   s-  € Ø�V‰}€HØ˜	Ñ"€KØ�6ÒÜ KÔ0Ð0Ø	�[Ò	 ØÐØ"$ÐØ!ŸI™I oÓ6Ð6ˆ=Ð6Ü15°mÓ1DÐ˜oÑ.Øˆ
Ø"ŸY™Y |Ó4Ð4ˆ>Ð4Ø.<Ð˜lÑ+Ø!& |Ô!4�ðØ×%Ñ%¤o°mÈtÔ&TÕUñ "5ð !#ÐØÒ# ˆÜØØ/Ø!Ø1ô	
ð 	
ð 
�XÒ	Ü [Ô1Ð1ä ;°XÔ>Ð>øô! !ò Ø&×-Ñ-Ü.¨}¼cÀ!»fÓE÷ñ ûðús   Á)B=Â=	C4Ã$C/Ã/C4Údefault_classc                 óD  — t        t        | j                  d«      «      }t        t        | j                  d«      xs d«      }i }| j                  d«      r!t        | d   «      }d|v r
|d   €d|d<   ||d<   | j                  d«      r| d   |d<   |dk(  s	|t        k(  rt	        |¬«      S |d	k(  s	|t
        k(  rt        ||¬
«      S |dk(  s	|t        k(  rt        || d   ¬«      S |dk(  s	|t        k(  rt        || d   ¬«      S |s	|t        k(  rt        ||¬«      S  ||¬«      S )Nr0   r1   r4   r3   Únamer5   r/   r@   r2   )r1   r8   Úfunction)r1   rQ   ÚtoolÚtool_call_id)r1   rT   rC   )	r   rH   rD   rE   r   r   r   r    r   )r>   rO   rI   rJ   r8   r3   s         r;   Ú_convert_delta_to_message_chunkrU   v   s5  € ô ”C˜Ÿ™ 6Ó*Ó+€HÜ”s˜EŸI™I iÓ0Ò6°BÓ7€KØ ÐØ‡y�y�Ô!Ü˜U ?Ñ3Ó4ˆØ�]Ñ" }°VÑ'<Ð'DØ$&ˆM˜&Ñ!Ø-:Ð˜/Ñ*Ø‡y�y�ÔØ*/°Ñ*=Ð˜,Ñ'Ø�6Ò˜]Ô.?Ò?Ü ¨Ô5Ð5Ø	�[Ò	  M´^Ò$CÜ kÐEVÔWÐWØ	�ZÒ	 =Ô4HÒ#HÜ#¨K¸eÀF¹mÔLÐLØ	�VÒ	˜}Ô0@Ò@Ü¨À%ÈÑBWÔXÐXÙ	�]Ô&6Ò6Ü¨¸(ÔCÐCá [Ô1Ð1r=   c                   óÄ  — e Zd ZU dZedefd„«       Zedee	e	f   fd„«       Z
dZeed<    edd¬«      Zee	   ed	<   	  edd
¬«      Zee	   ed<   	  edd¬«      Zee	   ed<   	  edd¬«      Zee	   ed<   	  edd¬«      Zee	   ed<   	 dZe	ed<   dZeed<   	  edd¬«      Zeed<   	  ed¬«      Zeed<   	 dZeed<   	  ee¬«      Zee	ef   ed <   	  ed!¬"«      Z e d#¬$«      ed%edefd&„«       «       Z! e d#¬$«      ed%ee	ef   defd'„«       «       Z"	 	 d0d(e#e$   d)ee#e	      d*ee%   d+ede&e'   f
d,„Z(	 	 	 d1d(e#e$   d)ee#e	      d*ee%   d-ee   d+ede)fd.„Z*ede	fd/„«       Z+y)2ÚChatSparkLLMu-  IFlyTek Spark chat model integration.

    Setup:
        To use, you should have the environment variable``IFLYTEK_SPARK_API_KEY``,
        ``IFLYTEK_SPARK_API_SECRET`` and ``IFLYTEK_SPARK_APP_ID``.

    Key init args â€” completion params:
        model: Optional[str]
            Name of IFLYTEK SPARK model to use.
        temperature: Optional[float]
            Sampling temperature.
        top_k: Optional[float]
            What search sampling control to use.
        streaming: Optional[bool]
             Whether to stream the results or not.

    Key init args â€” client params:
        api_key: Optional[str]
            IFLYTEK SPARK API KEY. If not passed in will be read from env var IFLYTEK_SPARK_API_KEY.
        api_secret: Optional[str]
            IFLYTEK SPARK API SECRET. If not passed in will be read from env var IFLYTEK_SPARK_API_SECRET.
        api_url: Optional[str]
            Base URL for API requests.
        timeout: Optional[int]
            Timeout for requests.

    See full list of supported init args and their descriptions in the params section.

    Instantiate:
        .. code-block:: python

            from langchain_community.chat_models import ChatSparkLLM

            chat = ChatSparkLLM(
                api_key="your-api-key",
                api_secret="your-api-secret",
                model='Spark4.0 Ultra',
                # temperature=...,
                # other params...
            )

    Invoke:
        .. code-block:: python

            messages = [
                ("system", "ä½ æ˜¯ä¸€å��ä¸“ä¸šçš„ç¿»è¯‘å®¶ï¼Œå�¯ä»¥å°†ç”¨æˆ·çš„ä¸­æ–‡ç¿»è¯‘ä¸ºè‹±æ–‡ã€‚"),
                ("human", "æˆ‘å–œæ¬¢ç¼–ç¨‹ã€‚"),
            ]
            chat.invoke(messages)

        .. code-block:: python

            AIMessage(
                content='I like programming.',
                response_metadata={
                    'token_usage': {
                        'question_tokens': 3,
                        'prompt_tokens': 16,
                        'completion_tokens': 4,
                        'total_tokens': 20
                    }
                },
                id='run-af8b3531-7bf7-47f0-bfe8-9262cb2a9d47-0'
            )

    Stream:
        .. code-block:: python

            for chunk in chat.stream(messages):
                print(chunk)

        .. code-block:: python

            content='I' id='run-fdbb57c2-2d32-4516-b894-6c5a67605d83'
            content=' like programming' id='run-fdbb57c2-2d32-4516-b894-6c5a67605d83'
            content='.' id='run-fdbb57c2-2d32-4516-b894-6c5a67605d83'

        .. code-block:: python

            stream = chat.stream(messages)
            full = next(stream)
            for chunk in stream:
                full += chunk
            full

        .. code-block:: python

            AIMessageChunk(
                content='I like programming.',
                id='run-aca2fa82-c2e4-4835-b7e2-865ddd3c46cb'
            )

    Response metadata
        .. code-block:: python

            ai_msg = chat.invoke(messages)
            ai_msg.response_metadata

        .. code-block:: python

            {
                'token_usage': {
                    'question_tokens': 3,
                    'prompt_tokens': 16,
                    'completion_tokens': 4,
                    'total_tokens': 20
                }
            }

    r-   c                  ó   — y)z9Return whether this model can be serialized by Langchain.F© )Úclss    r;   Úis_lc_serializablezChatSparkLLM.is_lc_serializable  s   € ð r=   c                 ó   — ddddddœS )NÚIFLYTEK_SPARK_APP_IDÚIFLYTEK_SPARK_API_KEYÚIFLYTEK_SPARK_API_SECRETÚIFLYTEK_SPARK_API_URLÚIFLYTEK_SPARK_LLM_DOMAIN)Úspark_app_idÚspark_api_keyÚspark_api_secretÚspark_api_urlÚspark_llm_domainrY   ©Úselfs    r;   Ú
lc_secretszChatSparkLLM.lc_secrets  s   € ð 3Ø4Ø :Ø4Ø :ñ
ð 	
r=   NÚclientÚapp_id)ÚdefaultÚaliasrb   Úapi_keyrc   Ú
api_secretrd   Úapi_urlre   Úmodelrf   Úlc_userÚspark_user_idFÚ	streamingé   Útimeout)rm   Úrequest_timeoutg      à?)rl   Útemperatureé   Útop_k)Údefault_factoryÚmodel_kwargsT)Úpopulate_by_nameÚbefore)ÚmodeÚvaluesc           	      óþ  — t        |ddgd«      |d<   t        |ddgd«      |d<   t        |ddgd	«      |d<   t        |d
dt        «      |d
<   t        |ddt        «      |d<   t        | «      j	                  «       D ��ci c]  \  }}|j
                  �||j
                  “Œ  }}}|j                  d«      |d   d<   |j                  d«      |d   d<   t        |d   |d   |d   |d
   |d   |d   ¬«      |d<   |S c c}}w )Nrb   rk   r]   rc   rn   r^   rd   ro   r_   re   r`   rf   ra   rx   r|   rz   )rk   rn   ro   rp   Úspark_domainr|   rj   )r&   ÚSPARK_API_URLÚSPARK_LLM_DOMAINr(   Úitemsrl   rD   Ú_SparkLLMClient)rZ   r€   rQ   ÚfieldÚdefault_valuess        r;   Úvalidate_environmentz!ChatSparkLLM.validate_environment/  sd  € ô "6ØØ˜XÐ&Ø"ó"
ˆˆ~Ñô
 #7ØØ˜iÐ(Ø#ó#
ˆˆÑô
 &:ØØ Ð.Ø&ó&
ˆÐ!Ñ"ô
 #7ØØØ#Üó	#
ˆˆÑô &:ØØØ&Üó	&
ˆÐ!Ñ"ô  *¨#›×4Ñ4Ô6ô
á6‘��eØ�}‰}Ð(ð �%—-‘-ÑØ6ð 	ñ 
ð
 1?×0BÑ0BÀ=Ó0Qˆˆ~Ñ˜}Ñ-Ø*8×*<Ñ*<¸WÓ*Eˆˆ~Ñ˜wÑ'ä*Ø˜.Ñ)Ø˜?Ñ+ØÐ0Ñ1Ø˜?Ñ+ØÐ 2Ñ3Ø Ñ/ô
ˆˆxÑð ˆùó!
s   Á=#C9c           
      ó`  — t        | «      }|j                  di «      }t        |«      D ]M  }||v rt        d|› d�«      ‚||vsŒt        j                  d|› d|› d|› d�«       |j                  |«      ||<   ŒO |j                  |j                  «       «      }|rt        d|› d	�«      ‚||d<   |S )
z>Build extra kwargs from additional params that were passed in.r|   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.)	r'   rD   Úlistr9   ÚloggerÚwarningÚpopÚintersectionÚkeys)rZ   r€   Úall_required_field_namesÚextraÚ
field_nameÚinvalid_model_kwargss         r;   Úbuild_extrazChatSparkLLM.build_extrae  sç   € ô $<¸CÓ#@Ð Ø—
‘
˜>¨2Ó.ˆÜ˜vž,ˆJØ˜UÑ"Ü  6¨*¨Ð5EÐ!FÓGÐGØÐ!9Ò9Ü—‘Ø! * ð .Ø�Lð !)Ø)3¨Ð4JðNôð
 %+§J¡J¨zÓ$:��jÒ!ð 'ð  8×DÑDÀUÇZÁZÃ\ÓRÐÙÜØÐ2Ð3ð 4Sð Tóð ð
 "'ˆˆ~Ñàˆr=   ÚmessagesÚstopÚrun_managerÚkwargsc              +   ó¨  K  — t         }| j                  j                  |D �cg c]  }t        |«      ‘Œ c}| j                  | j
                  d¬«       | j                  j                  | j                  ¬«      D ]P  }d|vrŒ|d   }t        ||«      }	t        |	¬«      }
|r&|j                  t        |	j                  «      |
¬«       |
–— ŒR y c c}w ­w)NT)rt   ©rv   Údata©r,   )Úchunk)r   rj   Úarunr<   rs   r|   Ú	subscriberw   rU   r$   Úon_llm_new_tokenrH   r1   )rh   r–   r—   r˜   r™   Údefault_chunk_classÚmr1   Údeltarž   Úcg_chunks              r;   Ú_streamzChatSparkLLM._stream�  sË   è ø€ ô -Ðà�‰×ÑÙ19Ó:±¨AÔ$ QÕ'°Ñ:Ø×ÑØ×ÑØð	 	ô 	
ð —{‘{×,Ñ,°T×5IÑ5IÐ,ÖJˆGØ˜WÑ$ØØ˜F‘OˆEÜ3°EÐ;NÓOˆEÜ*°5Ô9ˆHÙØ×,Ñ,¬S°·±Ó-?ÀxÐ,ÔPØ‹Nñ Kùò ;ùs   ‚ C¢C´BCÚstreamc                 óÐ  — |s| j                   r! | j                  d	|||dœ|¤Ž}t        |«      S | j                  j	                  |D �cg c]  }t        |«      ‘Œ c}| j                  | j                  d«       i }i }	| j                  j                  | j                  ¬«      D ]  }
d|
v r|
d   |	d<   d|
vrŒ|
d   }Œ t        |«      }t        |¬«      g}t        ||	¬«      S c c}w )
N)r–   r—   r˜   Fr›   ÚusageÚtoken_usagerœ   r�   )ÚgenerationsÚ
llm_outputrY   )rt   r¦   r   rj   rŸ   r<   rs   r|   r    rw   rN   r#   r%   )rh   r–   r—   r˜   r§   r™   Ústream_iterr£   Ú
completionr¬   r1   r,   r«   s                r;   Ú	_generatezChatSparkLLM._generateš  s  € ñ �T—^’^Ø&˜$Ÿ,™,ð Ø!¨¸+ñØIOñˆKô (¨Ó4Ð4à�‰×ÑÙ19Ó:±¨AÔ$ QÕ'°Ñ:Ø×ÑØ×ÑØô		
ð ˆ
Øˆ
Ø—{‘{×,Ñ,°T×5IÑ5IÐ,ÖJˆGØ˜'Ñ!Ø,3°GÑ,<�
˜=Ñ)Ø˜WÑ$ØØ  ™‰Jð Kô *¨*Ó5ˆÜ%¨gÔ6Ð7ˆÜ k¸jÔIÐIùò ;s   Á	C#c                  ó   — y)Nzspark-llm-chatrY   rg   s    r;   Ú	_llm_typezChatSparkLLM._llm_typeº  s   € àr=   )NN©NNN),Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodÚboolr[   Úpropertyr   rH   ri   rj   r   Ú__annotations__r*   rb   r   rc   rd   re   rf   rs   rt   rw   Úintrx   Úfloatrz   rE   r|   r)   Úmodel_configr+   r‰   r•   r
   r   r   r	   r$   r¦   r%   r¯   r±   rY   r=   r;   rW   rW   ‘   sˆ  … ñmð^ ð 4ò ó ðð ð
˜D  c ™Nò 
ó ð
ð €FˆCÓÙ"'°¸HÔ"E€L�(˜3‘-ÓEðá#(°¸YÔ#G€M�8˜C‘=ÓGðá&+°DÀÔ&MÐ�h˜s‘mÓMðá#(°¸YÔ#G€M�8˜C‘=ÓGðá&+°DÀÔ&HÐ�h˜s‘mÓHØØ"€M�3Ó"Ø€IˆtÓØ/Ù  ¨9Ô5€O�SÓ5Ø0Ù sÔ+€K�Ó+Ø+Ø€Eˆ3ƒNØ.Ù#(¸Ô#>€L�$�s˜C�x‘.Ó>ØQáØô€Lñ ˜(Ô#Øð.¨$ð .°3ò .ó ó $ð.ñh ˜(Ô#Øð  c¨3 h¡ð °Cò ó ó $ðð: %)Ø:>ñ	à�{Ñ#ðð �t˜C‘yÑ!ðð Ð6Ñ7ð	ð
 ðð 
Ð%Ñ	&óð8 %)Ø:>Ø!%ñJà�{Ñ#ðJð �t˜C‘yÑ!ðJð Ð6Ñ7ð	Jð
 ˜‘ðJð ðJð 
óJð@ ð ˜3ò  ó ñ r=   rW   c                   óx  — e Zd ZdZ	 	 	 ddedededee   dee   dee   fd	„Zedededed
efd„«       Z		 	 dde
e   dedee   ded
df
d„Z	 	 dde
e   dedee   ded
ej                  f
d„Zdedee   d
dfd„Zdededed
dfd„Zded
dfd„Zdeded
dfd„Z	 ddededee   d
efd„Zd dee   d
eeddf   fd„Zy)!r†   z�
    Use websocket-client to call the SparkLLM interface provided by Xfyun,
    which is the iFlyTek's open platform for AI capabilities
    Nrk   rn   ro   rp   r‚   r|   c                 óò   — 	 dd l }|| _        |st        n|| _        || _        || _        |xs t        | _        t        «       | _
        dddœ| _        || _        || _        y # t        $ r t        d«      ‚w xY w)Nr   zhCould not import websocket client python package. Please install it with `pip install websocket-client`.r4   r2   rC   )Ú	websocketÚwebsocket_clientÚImportErrorrƒ   rp   rk   r|   r„   r‚   r   ÚqueueÚblocking_messagern   ro   )rh   rk   rn   ro   rp   r‚   r|   rÀ   s           r;   Ú__init__z_SparkLLMClient.__init__Å  s„   € ð	Ûà$-ˆDÔ!ñ -4•}¸ˆŒØˆŒØ(ˆÔØ(Ò<Ô,<ˆÔÜ"'£'ˆŒ
Ø,.¸Ñ DˆÔØˆŒØ$ˆ�øô ò 	ÜðIóð ð	ús   ‚A! Á!A6r-   c                 óÜ  — t        t        t        j                  «       j	                  «       «      «      }t        | «      }|j                  }|j                  }d|› d|› d|› d�}t        j                  |j                  d«      |j                  d«      t        j                  ¬«      j                  «       }t        j                  |«      j!                  d¬«      }	d|› d	|	› d
�}
t        j                  |
j                  d«      «      j!                  d¬«      }|||dœ}t#        |«      }t%        |j&                  |j                  |j                  |j(                  ||j*                  f«      }|S )zK
        Generate a request url with an api key and an api secret.
        zhost: z
date: z
GET z	 HTTP/1.1zutf-8)Ú	digestmod)Úencodingz	api_key="zQ", algorithm="hmac-sha256",         headers="host date request-line", signature="Ú")ÚauthorizationÚdateÚhost)r   r   r   ÚnowÚ	timetupler   ÚnetlocÚpathÚhmacÚnewÚencodeÚhashlibÚsha256ÚdigestÚbase64Ú	b64encodeÚdecoder   r   ÚschemeÚparamsÚfragment)rp   rn   ro   rË   Ú
parsed_urlrÌ   rÐ   Úsignature_originÚsignature_shaÚsignature_sha_base64Úauthorization_originrÊ   Úparams_dictÚencoded_paramsÚurls                  r;   Ú_create_urlz_SparkLLMClient._create_urlá  sf  € ô  ¤¤x§|¡|£~×'?Ñ'?Ó'AÓ BÓCˆô ˜gÓ&ˆ
Ø× Ñ ˆØ�‰ˆà# D 6¨°$°°v¸d¸VÀ9ÐMÐô Ÿ™Ø×Ñ˜gÓ&Ø×#Ñ# GÓ,Ü—n‘nô
÷ ‰&‹(ð	 	ô  &×/Ñ/°Ó>×EÑEÈwÐEÓWÐà!*¨7¨)ð 46Ø6JÐ5KÈ1ð NÐä×(Ñ(Ð)=×)DÑ)DÀWÓ)MÓN×UÑUØð Vó 
ˆð
 )6¸tÈTÑRˆÜ" ;Ó/ˆÜà×!Ñ!Ø×!Ñ!Ø—‘Ø×!Ñ!ØØ×#Ñ#ðó	
ˆð ˆ
r=   r–   Úuser_idrt   c                 ó¤  — | j                   j                  d«       | j                   j                  t        j	                  | j
                  | j                  | j                  «      | j                  | j                  | j                  | j                  ¬«      }||_        ||_        |€| j                  n||_        ||_        |j!                  «        y )NF)Ú
on_messageÚon_errorÚon_closeÚon_open)rÁ   ÚenableTraceÚWebSocketAppr†   rå   rp   rn   ro   rè   ré   rê   rë   r–   ræ   r|   rt   Úrun_forever)rh   r–   ræ   r|   rt   Úwss         r;   Úrunz_SparkLLMClient.run  s©   € ð 	×Ñ×)Ñ)¨%Ô0Ø×"Ñ"×/Ñ/Ü×'Ñ'Ø—‘Ø—‘Ø—‘óð
 —‘Ø—]‘]Ø—]‘]Ø—L‘Lð 0ó 

ˆð ˆŒØˆŒ
Ø/;Ð/C˜$×+Ò+ÈˆŒØ ˆŒØ
�‰Õr=   c                 óp   — t        j                  | j                  ||||f¬«      }|j                  «        |S )N)ÚtargetÚargs)Ú	threadingÚThreadrð   Ústart)rh   r–   ræ   r|   rt   Ú	ws_threads         r;   rŸ   z_SparkLLMClient.arun'  s>   € ô ×$Ñ$Ø—8‘8àØØØð	ô
ˆ	ð 	�‰ÔØÐr=   rï   Úerrorc                 ó^   — | j                   j                  d|i«       |j                  «        y )Nrø   )rÃ   ÚputÚclose)rh   rï   rø   s      r;   ré   z_SparkLLMClient.on_error:  s    € Ø�
‰
�‰˜ Ð'Ô(Ø
�‰�
r=   Úclose_status_codeÚclose_reasonc                 ór   — t         j                  d||dœi«       | j                  j                  ddi«       y )NÚlog)rü   rý   ÚdoneT)rŒ   ÚdebugrÃ   rú   )rh   rï   rü   rý   s       r;   rê   z_SparkLLMClient.on_close>  s7   € Ü�‰àØ):Ø$0ñðô	
ð 	�
‰
�‰˜ �~Õ&r=   c                 óÄ   — dddœ| _         t        j                  | j                  |j                  |j
                  |j                  ¬«      «      }|j                  |«       y )Nr4   r2   rC   )r–   ræ   r|   )rÄ   ÚjsonÚdumpsÚ
gen_paramsr–   ræ   r|   Úsend)rh   rï   rœ   s      r;   rë   z_SparkLLMClient.on_openI  sN   € Ø,.¸Ñ DˆÔÜ�z‰zØ�O‰OØŸ™¨b¯j©jÀrÇÁð ó ó
ˆð
 	�‰��r=   r,   c                 ó²  — t        j                  |«      }|d   d   }|dk7  r:| j                  j                  dd|› d|d   d   › �i«       |j	                  «        y |d   d	   }|d
   }|d   d   d   }|j
                  r$| j                  j                  d|d   d   i«       n| j                  dxx   |z  cc<   |dk(  r—|j
                  s'| j                  j                  d| j                  i«       |r2|j                  di «      j                  di «      j                  di «      ni }| j                  j                  d|i«       |j	                  «        y y )NÚheaderÚcoder   rø   zCode: z	, Error: r,   ÚpayloadÚchoicesÚstatusÚtextr1   rœ   é   r©   )r  ÚloadsrÃ   rú   rû   rt   rÄ   rD   )	rh   rï   r,   rœ   r	  r  r  r1   Ú
usage_datas	            r;   rè   z_SparkLLMClient.on_messageR  sJ  € Ü�z‰z˜'Ó"ˆØ�H‰~˜fÑ%ˆØ�1Š9Ø�J‰J�N‰NØ˜F 4 &¨	°$°x±.ÀÑ2KÐ1LÐMÐNôð �H‰H�Jà˜9‘o iÑ0ˆGØ˜XÑ&ˆFØ˜f‘o aÑ(¨Ñ3ˆGØ�|Š|Ø—
‘
—‘ ¨°©¸Ñ(:Ð;Õ<à×%Ñ% iÓ0°GÑ;Ó0Ø˜Š{Ø—|’|Ø—J‘J—N‘N F¨D×,AÑ,AÐ#BÔCñ ð —H‘H˜Y¨Ó+×/Ñ/°¸Ó<×@Ñ@ÀÈÔLàð ð
 —
‘
—‘ ¨Ð4Ô5Ø—‘•
ð r=   c                 ó²   — | j                   |dœdd| j                  iidd|iidœ}|r|d   d   j                  |«       t        j	                  d|› �«       |S )	N)rk   ÚuidÚchatÚdomainr,   r  )r  Ú	parameterr
  r  zSpark Request Parameters: )rk   r‚   ÚupdaterŒ   r  )rh   r–   ræ   r|   rœ   s        r;   r  z_SparkLLMClient.gen_paramsm  sm   € ð "&§¡°WÑ=Ø  8¨T×->Ñ->Ð"?Ð@Ø! F¨HÐ#5Ð6ñ
ˆñ Ø�Ñ˜fÑ%×,Ñ,¨\Ô:Ü�‰Ð1°$°Ð8Ô9Øˆr=   rv   c              #   óî   K  — 	 	 | j                   j                  |¬«      }d|v rt	        |d   «      ‚d|v r|–— Œ9d|v ry d|vry |–— ŒG# t         j                  $ r}t        d|› d�«      ‚d }~ww xY w­w)Nr›   z-SparkLLMClient wait LLM api response timeout z secondsrø   r©   r   rœ   )rÃ   rD   ÚEmptyÚTimeoutErrorÚConnectionError)rh   rv   r1   Ú_s       r;   r    z_SparkLLMClient.subscribe{  sš   è ø€ ØðØŸ*™*Ÿ.™.°˜.Ó9�ð
 ˜'Ñ!Ü% g¨gÑ&6Ó7Ð7Ø˜'Ñ!Ø’ØØ˜Ñ ØØ˜WÑ$ØØŠMð! øô —;‘;ò Ü"ØCÀGÀ9ÈHÐUóð ûðüs'   ‚A5…A ¡*A5ÁA2ÁA-Á-A2Á2A5r²   )NF)N)ru   )r³   r´   rµ   r¶   rH   r   rE   rÅ   Ústaticmethodrå   r
   r   r¸   rð   rô   rõ   rŸ   r   ré   r»   rê   rë   rè   r‹   r  r   r    rY   r=   r;   r†   r†   ¿  sÝ  „ ñð "&Ø&*Ø'+ñ%àð%ð ð%ð ð	%ð
 ˜#‘ð%ð ˜s‘mð%ð ˜t‘nó%ð8 ð*˜Sð *¨3ð *¸Cð *ÀCò *ó ð*ð` (,Øñà�t‘*ðð ðð ˜t‘nð	ð
 ðð 
óð: (,Øñà�t‘*ðð ðð ˜t‘nð	ð
 ðð 
×	Ñ	óð&˜3ð  x°¡}ð ¸ó ð	'˜3ð 	'°3ð 	'Àcð 	'Èdó 	'ð˜#ð  $ó ð˜Sð ¨3ð °4ó ð8 LPñØðØ'*ðØ:BÀ4¹.ðà	óñ ¨#¡ð ¸	À$ÈÈdÐBRÑ8Sô r=   r†   )Hr×   rÔ   rÑ   r  ÚloggingrÃ   rô   r   r   Útimer   Útypingr   r   r   r	   r
   r   r   r   r   Úurllib.parser   r   r   Úwsgiref.handlersr   Úlangchain_core.callbacksr   Ú*langchain_core.language_models.chat_modelsr   r   Úlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r    Ú*langchain_core.output_parsers.openai_toolsr!   r"   Úlangchain_core.outputsr#   r$   r%   Úlangchain_core.utilsr&   r'   Úlangchain_core.utils.pydanticr(   Úpydanticr)   r*   r+   Ú	getLoggerr³   rŒ   rƒ   r„   rE   r<   rH   rN   rU   rW   r†   rY   r=   r;   Ú<module>r+     s  ðÛ Û Û Û Û Û Û Ý Ý Ý ß V× VÕ Vß 8Ñ 8Ý -õ÷÷÷ ÷ ñ ÷÷ñ ÷
õ 5ß 7Ñ 7à	ˆ×	Ñ	˜8Ó	$€à6€Ø Ð ð [ð °Tó ð4 ? 7¨3°¨8Ñ#4ð  ?¸ó  ?ðF2Ø�3˜�8Ñð2Ø-1Ð2BÑ-Cð2àó2ô6k �=ô k ÷\	Mò Mr=   