Ë
    µŒj0&  ã                   ó*  — 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	m
Z
mZmZmZ d dlmZ d dlm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  ej>                  e «      Z! G d„ d«      Z" G d„ dee«      Z# G d„ de$«      Z%y)é    N)Údatetime)Úmktime)ÚAnyÚDictÚListÚLiteralÚOptional)Ú	urlencode)Úformat_date_time)Ú
Embeddings)Úsecret_from_env)Úndarray)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrc                   ó(   — e Zd ZdZdedededdfd„Zy)ÚUrlzURL class for parsing the URL.ÚhostÚpathÚschemaÚreturnNc                 ó.   — || _         || _        || _        y ©N)r   r   r   )Úselfr   r   r   s       úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/sparkllm.pyÚ__init__zUrl.__init__%   s   € ØˆŒ	ØˆŒ	ØˆŒØó    ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   © r   r   r   r   "   s&   „ Ù(ð˜Sð ¨ð °Sð ¸Tô r   r   c                   óð  — e Zd ZU dZ ed ed«      ¬«      Zeed<   	  ed edd¬	«      ¬«      Z	e
e   ed
<   	  ed edd¬	«      ¬«      Ze
e   ed<   	  ed¬	«      Zeed<   	  ed¬	«      Zed   ed<   	  ed¬«      Zdee   dede
eee         fd„Zdee   de
eee         fd„Zdede
ee      fd„Ze	 d$dededededef
d„«       Zededefd„«       Zd ededeeef   fd!„Zed"ede
e   fd#„«       Z y)%ÚSparkLLMTextEmbeddingsu  SparkLLM embedding model integration.

    Setup:
        To use, you should have the environment variable "SPARK_APP_ID","SPARK_API_KEY"
        and "SPARK_API_SECRET" set your APP_ID, API_KEY and API_SECRET or pass it
        as a name parameter to the constructor.

        .. code-block:: bash

            export SPARK_APP_ID="your-api-id"
            export SPARK_API_KEY="your-api-key"
            export SPARK_API_SECRET="your-api-secret"

    Key init args â€” completion params:
        api_key: Optional[str]
            Automatically inferred from env var `SPARK_API_KEY` if not provided.
        app_id: Optional[str]
            Automatically inferred from env var `SPARK_APP_ID` if not provided.
        api_secret: Optional[str]
            Automatically inferred from env var `SPARK_API_SECRET` if not provided.
        base_url: Optional[str]
            Base URL path for API requests.

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

    Instantiate:

        .. code-block:: python

            from langchain_community.embeddings import SparkLLMTextEmbeddings

            embed = SparkLLMTextEmbeddings(
                api_key="...",
                app_id="...",
                api_secret="...",
                # other
            )

    Embed single text:
        .. code-block:: python

            input_text = "The meaning of life is 42"
            embed.embed_query(input_text)

        .. code-block:: python

            [-0.4912109375, 0.60595703125, 0.658203125, 0.3037109375, 0.6591796875, 0.60302734375, ...]

    Embed multiple text:
        .. code-block:: python

            input_texts = ["This is a test query1.", "This is a test query2."]
            embed.embed_documents(input_texts)

        .. code-block:: python

            [
                [-0.1962890625, 0.94677734375, 0.7998046875, -0.1971435546875, 0.445556640625, 0.54638671875, ...],
                [  -0.44970703125, 0.06585693359375, 0.7421875, -0.474609375, 0.62353515625, 1.0478515625, ...],
            ]
    Úapp_idÚSPARK_APP_ID)ÚaliasÚdefault_factoryÚspark_app_idÚapi_keyÚSPARK_API_KEYN)ÚdefaultÚspark_api_keyÚ
api_secretÚSPARK_API_SECRETÚspark_api_secretz#https://emb-cn-huabei-1.xf-yun.com/Úbase_urlÚpara)r5   ÚqueryÚdomainT)Úpopulate_by_nameÚtextsr   r   c                 ó6  — d}d}d}| j                   r| j                   j                  «       }| j                  r| j                  j                  «       }| j                  r| j                  j                  «       }| j	                  |d||¬«      }g }|D ]„  }d|ddœgi}	| j                  ||	«      }
t        j                  ||
ddi¬	«      j                  }| j                  |«      }|� |j                  |j                  «       «       Œt|j                  d
«       Œ† |S )aD  Internal method to call Spark Embedding API and return embeddings.

        Args:
            texts: A list of texts to embed.
            host: Base URL path for API requests

        Returns:
            A list of list of floats representing the embeddings,
            or list with value None if an error occurs.
        Ú ÚPOST)Úrequest_urlÚmethodr-   r1   ÚmessagesÚuser)ÚcontentÚrolezcontent-typezapplication/json)ÚjsonÚheadersN)r,   Úget_secret_valuer0   r3   Ú_assemble_ws_auth_urlÚ	_get_bodyÚrequestsÚpostÚtextÚ_parser_messageÚappendÚtolist)r   r9   r   r(   r-   r1   ÚurlÚembed_resultrJ   Úquery_contextrA   ÚresponseÚres_arrs                r   Ú_embedzSparkLLMTextEmbeddings._embedƒ   s$  € ð ˆØˆØˆ
Ø×ÒØ×&Ñ&×7Ñ7Ó9ˆFØ×ÒØ×(Ñ(×9Ñ9Ó;ˆGØ× Ò Ø×.Ñ.×?Ñ?ÓAˆJØ×(Ñ(ØØØØ!ð	 )ó 
ˆð  ˆÛˆDØ'°dÀFÑ*KÐ)LÐMˆMØ—n‘n V¨]Ó;ˆGÜ—}‘}Ø˜'¨NÐ<NÐ+Oôç‰dð ð ×*Ñ*¨8Ó4ˆGØÐ"Ø×#Ñ# G§N¡NÓ$4Õ5à×#Ñ# DÕ)ð ð Ðr   c                 ó:   — | j                  || j                  «      S )zâPublic method to get embeddings for a list of documents.

        Args:
            texts: The list of texts to embed.

        Returns:
            A list of embeddings, one for each text, or None if an error occurs.
        ©rS   r4   )r   r9   s     r   Úembed_documentsz&SparkLLMTextEmbeddings.embed_documents«   s   € ð �{‰{˜5 $§-¡-Ó0Ð0r   rJ   c                 óN   — | j                  |g| j                  «      }|�|d   S dS )zÇPublic method to get embedding for a single query text.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text, or None if an error occurs.
        Nr   rU   )r   rJ   Úresults      r   Úembed_queryz"SparkLLMTextEmbeddings.embed_query¶   s.   € ð —‘˜d˜V T§]¡]Ó3ˆØ"Ð.ˆv�a‰yÐ8°DÐ8r   r=   r>   c           	      ó’  — t         j                  | «      }|j                  }|j                  }t	        j
                  «       }t        t        |j                  «       «      «      }dj                  ||||«      }	t        j                  |j                  d«      |	j                  d«      t        j                  ¬«      j                  «       }
t!        j"                  |
«      j%                  d¬«      }d|›dd›dd	›d
|›d�	}t!        j"                  |j                  d«      «      j%                  d¬«      }|||dœ}| dz   t'        |«      z   S )Nz host: {}
date: {}
{} {} HTTP/1.1úutf-8)Ú	digestmod)Úencodingz	api_key="z", algorithm="zhmac-sha256z", headers="zhost date request-linez", signature="Ú")r   ÚdateÚauthorizationÚ?)r'   Ú
_parse_urlr   r   r   Únowr   r   Ú	timetupleÚformatÚhmacÚnewÚencodeÚhashlibÚsha256ÚdigestÚbase64Ú	b64encodeÚdecoder
   )r=   r>   r-   r1   Úur   r   rc   r_   Úsignature_originÚsignature_shaÚsignature_sha_strÚauthorization_originr`   Úvaluess                  r   rF   z,SparkLLMTextEmbeddings._assemble_ws_auth_urlÂ   s-  € ô #×-Ñ-¨kÓ:ˆØ�v‰vˆØ�v‰vˆÜ�l‰l‹nˆÜ¤ s§}¡}£Ó 7Ó8ˆØ?×FÑFØ�$˜ ó
Ðô Ÿ™Ø×Ñ˜gÓ&Ø×#Ñ# GÓ,Ü—n‘nô
÷ ‰&‹(ð	 	ô
 #×,Ñ,¨]Ó;×BÑBÈGÐBÓTÑò šÒ'?ÒARðTð 	ô ×(Ñ(Ð)=×)DÑ)DÀWÓ)MÓN×UÑUØð Vó 
ˆð ¨¸}ÑMˆà˜SÑ ¤9¨VÓ#4Ñ4Ð4r   c                 ó¾   — | j                  d«      }| |dz   d  }| d |dz    }|j                  d«      }|dk  rt        d| z   «      ‚||d  }|d | }t        |||«      }|S )Nz://é   Ú/r   zinvalid request url:)ÚindexÚAssembleHeaderExceptionr   )r=   Ústidxr   r   Úedidxr   ro   s          r   rb   z!SparkLLMTextEmbeddings._parse_urlß   s€   € à×!Ñ! %Ó(ˆØ˜5 1™9˜;Ð'ˆØ˜[˜u q™yÐ)ˆØ—
‘
˜3“ˆØ�AŠ:Ü)Ð*@À;Ñ*NÓOÐOØ�E�Fˆ|ˆØ�F�Uˆ|ˆÜ��d˜FÓ#ˆØˆr   Úappidc           	      óÊ   — |dddœd| j                   ddidœidd	t        j                  t        j                  |«      j                  d
«      «      j                  «       iidœ}|S )NÚ39769795890rv   )r(   ÚuidÚstatusÚembr]   Úutf8)r7   Úfeaturer?   rJ   r[   )ÚheaderÚ	parameterÚpayload)r7   rl   rm   rC   Údumpsrh   rn   )r   r|   rJ   Úbodys       r   rG   z SparkLLMTextEmbeddings._get_bodyì   sn   € à!&¨}ÈÑJà $§+¡+¸:ÀvÐ:NÑOðð ØœF×,Ñ,¬T¯Z©Z¸Ó-=×-DÑ-DÀWÓ-MÓN×UÑUÓWððñ

ˆð ˆr   Úmessagec                 ó†  — t        j                  | «      }|d   d   }|dk7  rt        j                  d|› d|› �«       y |d   d   d   }t	        j
                  |«      }t        j                  t        j                  «      }|j                  d	«      }t        j                  ||¬
«      }t        |«      dkD  r|d d }|S |}|S )Nr„   Úcoder   zRequest error: z, r†   rƒ   rJ   Ú<)Údtypei 
  )rC   ÚloadsÚloggerÚwarningrl   Ú	b64decodeÚnpr�   Úfloat32ÚnewbyteorderÚ
frombufferÚlen)r‰   Údatar‹   Ú	text_baseÚ	text_dataÚdtrJ   Úarrays           r   rK   z&SparkLLMTextEmbeddings._parser_messageú   sÀ   € ô �z‰z˜'Ó"ˆØ�H‰~˜fÑ%ˆØ�1Š9Ü�N‰N˜_¨T¨F°"°T°FÐ;Ô<Øà˜Y™¨	Ñ2°6Ñ:ˆIÜ×(Ñ(¨Ó3ˆIÜ—‘œ"Ÿ*™*Ó%ˆBØ—‘ Ó%ˆBÜ—=‘= °"Ô5ˆDÜ�4‹y˜4ÒØ˜U˜d˜�ð ˆLð �ØˆLr   )ÚGETr;   r;   )!r    r!   r"   r#   r   r   r,   r   Ú__annotations__r0   r	   r3   r4   r$   r7   r   r   Úmodel_configr   ÚfloatrS   rV   rY   ÚstaticmethodrF   r   rb   Údictr   r   rG   r   rK   r%   r   r   r'   r'   ,   sÔ  … ñ<ñ| $Ø©¸Ó(Gô€L�)ó ð NÙ).Ø©¸ÐRVÔ)Wô*€M�8˜IÑ&ó ð OÙ,1ØÙ'Ð(:ÀDÔIô-Ð�h˜yÑ)ó ð RÙÐ"GÔH€HˆcÓHØ(Ù',°VÔ'<€FˆG�OÑ$Ó<ð2ñ Øô€Lð&˜D ™Ið &¨Sð &°X¸dÀ4ÈÁ;Ñ>OÑ5Pó &ðP	1 T¨#¡Yð 	1°8¸DÀÀeÁÑ<MÑ3Nó 	1ð
9 ð 
9¨°°e±Ñ(=ó 
9ð àTVñ5Øð5Ø"%ð5Ø8;ð5ØNQð5à	ò5ó ð5ð8 ð
 ð 
¨ò 
ó ð
ð˜sð ¨$ð °4¸¸S¸±>ó ð ðØðà	�'Ñ	òó ñr   r'   c                   ó    — e Zd ZdZdeddfd„Zy)ry   z3Exception raised for errors in the header assembly.Úmsgr   Nc                 ó   — || _         y r   )r‰   )r   r£   s     r   r   z AssembleHeaderException.__init__  s	   € Øˆ�r   r   r%   r   r   ry   ry     s   „ Ù=ð˜Cð  Dô r   ry   )&rl   ri   rf   rC   Úloggingr   Útimer   Útypingr   r   r   r   r	   Úurllib.parser
   Úwsgiref.handlersr   Únumpyr’   rH   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   r   Úpydanticr   r   r   r   Ú	getLoggerr    r�   r   r'   Ú	Exceptionry   r%   r   r   Ú<module>r°      sz   ðÛ Û Û Û Û Ý Ý ß 5Õ 5Ý "Ý -ã Û Ý 0õõ ß <Ó <ð 
ˆ×	Ñ	˜8Ó	$€÷ñ ôa˜Y¨
ô aôH˜iõ r   