
    Xj                     n    d dl mZ d dlmZmZ d dlmZ  ee          Z G d d          Z	da
de	fdZdS )	    )Session)ModelModelProvider)
get_loggerc                      e Zd Z	 ddededededee         dz  f
dZ		 	 dd
ee         dededededeee         dz           fdZ
dededededee         dz  f
dZd
ee         dededededeee         dz           fdZdS )EmbeddingBackendFactoryTtextmodel_iddb	normalizereturnNc                    |                     t                                        t          j        |k                                              }|s t
                              d| d           d S |j        }|st
                              d|            d S |j        dv r| 	                    ||||          S t
                              d|j                    d S NzModel z
 not foundzProvider not found for model >   openaiopenai_compatiblezUnsupported provider protocol: )
queryr   filteridfirstloggererrorproviderprotocol%_generate_embedding_openai_compatible)selfr	   r
   r   r   modelr   s          [/lsinfo/ai/hellotax_ai/base_platform/app/services/llm/backends/embedding_backend_factory.pygenerate_embeddingz*EmbeddingBackendFactory.generate_embedding   s     &&ux8';<<BBDD 	LL6(6667774> 	LLCCCDDD4 ???==dE8U^___LLN8;LNNOOO4        texts
batch_sizec                 "   |                     t                                        t          j        |k                                              }|s1t
                              d| d           d gt          |          z  S |j        }|s0t
                              d|            d gt          |          z  S |j	        dv r| 
                    |||||          S t
                              d|j	                    d gt          |          z  S r   )r   r   r   r   r   r   r   lenr   r   ,_generate_embeddings_batch_openai_compatible)r   r!   r
   r   r"   r   r   r   s           r   generate_embeddings_batchz1EmbeddingBackendFactory.generate_embeddings_batch    s    &&ux8';<<BBDD 	'LL6(6667776CJJ&&> 	'LLCCCDDD6CJJ&& ???DDuh
I   LLN8;LNNOOO6CJJ&&r   r   r   c                    	 dd l }|j        p|j        }|s$t                              d|j                    d S ddi}|j        dk    r|j        rd|j         |d<   n9|j        dk    r|j        r|j        |d	<   n|j        d
k    r|j        r
|j        |d<   |j        p|j	        }|
                    d           d}	|                    d          5 }
|
                    |	|||d          }|                                 |                                }|d         d         d         }|cd d d            S # 1 swxY w Y   d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)Nr   $No base_url configured for provider Content-Typeapplication/jsonbearerBearer Authorizationapi_keyapi-key	x_api_key	X-API-Key//embeddingsg      >@timeoutinputr   headersjsondata	embeddingz/OpenAI-compatible embedding generation failed: )httpxbase_urldefault_base_urlr   r   r   	auth_typer.   remote_model_idcoderstripClientpostraise_for_statusr:   	Exception)r   r	   r   r   r   r=   r>   r9   
model_nameurlclientresponser;   r<   es                  r   r   z=EmbeddingBackendFactory._generate_embedding_openai_compatible8   s   	LLL(EH,EH QHKQQRRRt%'9:G!X--(2B-+GX5E+G+G((#y00X5E0%-%5	""#{22x7G2'/'7$.<%*J__S))666Cd++ !v!;;
/S/S '   ))+++}} LOK8	 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  	 	 	LLN1NNOOO44444	sB   6E BE AD9,E 9D==E  D=E 
E8E33E8c           	         	 dd l }|j        p|j        }|s5t                              d|j                    d gt          |          z  S ddi}|j        dk    r|j        rd|j         |d<   n9|j        dk    r|j        r|j        |d	<   n|j        d
k    r|j        r
|j        |d<   |j	        p|j
        }	|                    d           d}
g }|                    d          5 }t          dt          |          |          D ]y}||||z            }|                    |
|||	d          }|                                 |                                }d |d         D             }|                    |           z	 d d d            n# 1 swxY w Y   |S # t$          $ r:}t                              d|            d gt          |          z  cY d }~S d }~ww xY w)Nr   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   g      N@r4   r6   r8   c                     g | ]
}|d          S )r<    ).0items     r   
<listcomp>zXEmbeddingBackendFactory._generate_embeddings_batch_openai_compatible.<locals>.<listcomp>y   s    !M!M!M${"3!M!M!Mr   r;   z5OpenAI-compatible batch embedding generation failed: )r=   r>   r?   r   r   r   r$   r@   r.   rA   rB   rC   rD   rangerE   rF   r:   extendrG   )r   r!   r   r   r"   r   r=   r>   r9   rH   rI   all_embeddingsrJ   ibatchrK   r;   
embeddingsrL   s                      r   r%   zDEmbeddingBackendFactory._generate_embeddings_batch_openai_compatibleW   s   	'LLL  (EH,EH +QHKQQRRRvE

**%'9:G!X--(2B-+GX5E+G+G((#y00X5E0%-%5	""#{22x7G2'/'7$.<%*J__S))666CNd++ 	6vq#e**j99 6 6A!!a*n"45E%{{WUZ3X3X  +    H --///#==??D!M!MV!M!M!MJ"))*55556	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 "! 	' 	' 	'LLTQRTTUUU6CJJ&&&&&&&	'sJ   AF BF &BF F FF FF 
G#/GGG)T)r    T)__name__
__module____qualname__strintr   boollistfloatr   r&   r   r   r   r%   rO   r   r   r   r      sw        HL #&,3@D	et	   , ' 'Cy' ' 	'
 ' ' 
d5kD 	!' ' ' '0 %1>KO	et	   >''Cy'' ''  	''
 '' '' 
d5kD 	!'' '' '' '' '' ''r   r   Nr   c                  :    t           t                      a t           S )N)_embedding_factoryr   rO   r   r   get_embedding_factoryrc      s    !466r   )sqlalchemy.ormr   app.models.providerr   r   common_loggingr   rY   r   r   rb   rc   rO   r   r   <module>rg      s    " " " " " " 4 4 4 4 4 4 4 4 % % % % % %	H		
q' q' q' q' q' q' q' q'h  6      r   