
    dh0&                     *   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJrJr  S SKJr  S SKJr  S SKrS SKrS SKJr  S SKJr  S S	KJr  S S
KJrJrJrJr  \R>                  " \ 5      r! " S S5      r" " S S\\5      r# " S S\$5      r%g)    N)datetime)mktime)AnyDictListLiteralOptional)	urlencode)format_date_time)
Embeddings)secret_from_env)ndarray)	BaseModel
ConfigDictField	SecretStrc                   2    \ rS rSrSrS\S\S\SS4S jrS	rg)
Url"   zURL class for parsing the URL.hostpathschemareturnNc                 (    Xl         X l        X0l        g Nr   r   r   )selfr   r   r   s       _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/sparkllm.py__init__Url.__init__%   s    		    r   __name__
__module____qualname____firstlineno____doc__strr   __static_attributes__ r!   r   r   r   "   s&    (S  S T r!   r   c                      \ rS rSr% Sr\" S\" S5      S9r\\	S'    \" S\" SS	S
9S9r
\\   \	S'    \" S\" SS	S
9S9r\\   \	S'    \" SS
9r\\	S'    \" SS
9r\S   \	S'    \" SS9rS\\   S\S\\\\         4S jrS\\   S\\\\         4S jrS\S\\\      4S jr\ S&S\S\S\S\S\4
S jj5       r\S\S\4S  j5       rS!\S\S\\\4   4S" jr\S#\S\\    4S$ j5       r!S%r"g	)'SparkLLMTextEmbeddings,   uf  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)r;   querydomainT)populate_by_nametextsr   r   c                 N   SnSnSnU R                   (       a  U R                   R                  5       nU R                  (       a  U R                  R                  5       nU R                  (       a  U R                  R                  5       nU R	                  USUUS9n/ nU H  nSUSS./0n	U R                  X95      n
[        R                  " XjSS0S	9R                  nU R                  U5      nUb!  UR                  UR                  5       5        Mr  UR                  S
5        M     U$ )a  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methodr3   r7   messagesuser)contentrolezcontent-typezapplication/json)jsonheadersN)r2   get_secret_valuer6   r9   _assemble_ws_auth_url	_get_bodyrequestsposttext_parser_messageappendtolist)r   r?   r   r.   r3   r7   urlembed_resultrP   query_contextrG   responseres_arrs                r   _embedSparkLLMTextEmbeddings._embed   s     
&&779F((99;G  ..??AJ((!	 ) 
  D'dF*K)LMMnnV;G}}N<N+Od  **84G"##GNN$45##D)  r!   c                 8    U R                  XR                  5      $ )zPublic 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.
rY   r:   )r   r?   s     r   embed_documents&SparkLLMTextEmbeddings.embed_documents   s     {{5--00r!   rP   c                 P    U R                  U/U R                  5      nUb  US   $ S$ )zPublic 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   r\   )r   rP   results      r   embed_query"SparkLLMTextEmbeddings.embed_query   s.     dVT]]3".vay8D8r!   rC   rD   c           	         [         R                  U 5      nUR                  nUR                  n[        R
                  " 5       n[        [        UR                  5       5      5      nSR                  XXX5      n	[        R                  " UR                  S5      U	R                  S5      [        R                  S9R                  5       n
[         R"                  " U
5      R%                  SS9nSU< SS< SS	< S
U< S3	n[         R"                  " UR                  S5      5      R%                  SS9nXXUS.nU S-   ['        U5      -   $ )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
   )rC   rD   r3   r7   ur   r   rl   rh   signature_originsignature_shasignature_sha_strauthorization_originri   valuess                  r   rL   ,SparkLLMTextEmbeddings._assemble_ws_auth_url   s'    #--k:vvvvllns}} 78?FF
 g&##G,nn
 &(	 	
 #,,];BBGBT '?ART 	 (()=)D)DW)MNUU V 
 }MS 9V#444r!   c                     U R                  S5      nXS-   S  nU S US-    nUR                  S5      nUS::  a  [        SU -   5      eX$S  nUS U n[        X%U5      nU$ )Nz://   /r   zinvalid request url:)indexAssembleHeaderExceptionr   )rC   stidxr   r   edidxr   rx   s          r   rk   !SparkLLMTextEmbeddings._parse_url   sz    !!%(19;'[uqy)

3A:)*@;*NOOF|FU|F#r!   appidc           	          USSS.SU R                   SS0S.0SS	[        R                  " [        R                  " U5      R                  S
5      5      R                  5       00S.nU$ )N39769795890r   )r.   uidstatusembrf   utf8)r=   featurerE   rP   rd   )header	parameterpayload)r=   ru   rv   rI   dumpsrq   rw   )r   r   rP   bodys       r   rM    SparkLLMTextEmbeddings._get_body   sn    !&}J$++:v:NO F,,TZZ-=-D-DW-MNUUW

 r!   messagec                    [         R                  " U 5      nUS   S   nUS:w  a  [        R                  SU SU 35        g US   S   S   n[        R
                  " U5      n[        R                  " [        R                  5      nUR                  S	5      n[        R                  " XES
9n[        U5      S:  a  US S nU$ UnU$ )Nr   coder   zRequest error: z, r   r   rP   <)dtypei 
  )rI   loadsloggerwarningru   	b64decodenpr   float32newbyteorder
frombufferlen)r   datar   	text_base	text_datadtrP   arrays           r   rQ   &SparkLLMTextEmbeddings._parser_message   s     zz'"H~f%19NN_TF"TF;<Y	26:I((3I"**%B%B==5D4y4Ud L Lr!   r*   )GETrA   rA   )#r#   r$   r%   r&   r'   r   r   r2   r   __annotations__r6   r	   r9   r:   r(   r=   r   r   model_configr   floatrY   r]   ra   staticmethodrL   r   rk   dictr   r   rM   r   rQ   r)   r*   r!   r   r,   r,   ,   s   <| $(GL)  N).RV)W*M8I&  O,1'(:DI-hy)  R"GHHcH(',V'<FGO$<2 L&DI &S &Xd4;>O5P &P	1T#Y 	18De<M3N 	1
9 
9e(= 
9 TV55"%58;5NQ5	5 58 
 
 
 
s $ 4S>  	'	 r!   r,   c                   *    \ rS rSrSrS\SS4S jrSrg)r   i  z3Exception raised for errors in the header assembly.msgr   Nc                     Xl         g r   r   )r   r   s     r   r    AssembleHeaderException.__init__  s    r!   r   r"   r*   r!   r   r   r     s    =C D r!   r   )&ru   rr   ro   rI   loggingr   timer   typingr   r   r   r   r	   urllib.parser
   wsgiref.handlersr   numpyr   rN   langchain_core.embeddingsr   langchain_core.utilsr   r   pydanticr   r   r   r   	getLoggerr#   r   r   r,   	Exceptionr   r*   r!   r   <module>r      sx           5 5 " -   0  < < 
		8	$ aY
 aHi r!   