ó
    –Vèh*  ã                   óê   • S r SSKrSSKJs  Jr  SSKrSSKJ	r	J
r
  SSKrSSKrSSKJrJrJr   " S S5      r " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S5      r " S S5      rg)z'Tests for embedding generation service.é    N)Ú	MagicMockÚpatch)ÚEmbeddingProviderÚEmbeddingServiceÚget_embedding_servicec                   ó$   • \ rS rSrSrS rS rSrg)ÚTestEmbeddingProvideré   z%Tests for the EmbeddingProvider enum.c                 ó  • [         R                  oR                  nSo2U:H  oD(       d×  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pC[         R                  oR                  nS	o2U:H  oD(       d×  [        R                  " SU4S
X#45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pCg)z0Test that EmbeddingProvider has expected values.Úlocal©ú==)zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.LOCAL
}.value
} == %(py7)sr   )Úpy0Úpy2Úpy4Úpy7zassert %(py9)sÚpy9NÚopenai)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OPENAI
}.value
} == %(py7)s)r   ÚLOCALÚvalueÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚOPENAI)ÚselfÚ@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10s          Ú&/workspace/tests/db/test_embeddings.pyÚtest_embedding_provider_valuesÚ4TestEmbeddingProvider.test_embedding_provider_values   s  € ä ×&Ñ&Ð7×,Ñ,Ð7°Ð7°Ñ7×7×7×7Ò7Ð,×7×7×7×7×7Õ7Ô ×7×7×7Ñ7Ô ×7×7Õ7Ð&×7×7Ó7Ð,×7×7Ó7°×7×7×7×7×7×7Õ7Ü ×'Ñ'Ð9×-Ñ-Ð9°Ð9°Ñ9×9×9×9Ò9Ð-×9×9×9×9×9Õ9Ô ×9×9×9Ñ9Ô ×9×9Õ9Ð'×9×9Ó9Ð-×9×9Ó9°×9×9×9×9×9×9Ö9ó    c                 óh  • Sn[        U5      n[         R                  o2U:H  oD(       Gd*  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pCS	n[        U5      n[         R                  o2U:H  oD(       Gd*  [        R                  " SU4S
X#45      S[        R
                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=pCg)z,Test creating EmbeddingProvider from string.r   r   )zK%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py8)s
{%(py8)s = %(py6)s.LOCAL
}r   )r   r   r   Úpy6Úpy8zassert %(py10)sÚpy10Nr   )zL%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py8)s
{%(py8)s = %(py6)s.OPENAI
})r   r   r   r   r   r   r   r   r   r   r   )r    r!   r"   Ú@py_assert7r$   Ú@py_format9Ú@py_format11s          r'   Ú#test_embedding_provider_from_stringÚ9TestEmbeddingProvider.test_embedding_provider_from_string   sf  € à!(ÐDÔ  Ó)ÐDÔ->×-DÑ-DÐDÐ-DÑD×D×D×DÓDÐ)×D×D×D×D×DÕDÔ ×D×D×DÑDÔ ×D×DÕD ×D×DÓDÐ)×D×D×D×D×DÔDÔ->×D×D×DÑDÔ->×D×DÕDÐ-D×D×D×D×D×D×DÕDØ!)ÐFÔ  Ó*ÐFÔ.?×.FÑ.FÐFÐ.FÑF×F×F×FÓFÐ*×F×F×F×F×FÕFÔ ×F×F×FÑFÔ ×F×FÕF ×F×FÓFÐ*×F×F×F×F×FÔFÔ.?×F×F×FÑFÔ.?×F×FÕFÐ.F×F×F×F×F×F×FÖFr*   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   r2   Ú__static_attributes__r4   r*   r'   r	   r	      s   † Ù/ò:õ
Gr*   r	   c                   óŽ   • \ rS rSrSr\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r	S	 r
S
rg)ÚTestEmbeddingServiceInité   z*Tests for EmbeddingService initialization.ú6quber.db.embeddings.EmbeddingService._init_local_modelc                 ó®  • [        SSS9nUR                  SS5        UR                  n[        R                  oCU:H  oU(       Gd  [
        R                  " SU4SX445      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S	.-  nS
SU0-  n[        [
        R                  " U5      5      eS=n=pTg)z(Test initialization with local provider.r   Úcpu©ÚproviderÚdeviceúBAAI/bge-large-en-v1.5r   ©zK%(py2)s
{%(py2)s = %(py0)s.provider
} == %(py6)s
{%(py6)s = %(py4)s.LOCAL
}Úservicer   ©r   r   r   r,   úassert %(py8)sr-   N©r   Úassert_called_once_withrB   r   r   r   r   r   r   r   r   r   r   ©r    Úmock_init_localrF   r!   r$   r"   Ú@py_format7r0   s           r'   Útest_init_with_local_providerÚ6TestEmbeddingServiceInit.test_init_with_local_provider   óÁ   € ô #¨G¸EÑBˆà×/Ñ/Ð0HÈ%ÔPØ×ÑÐ:Ô#4×#:Ñ#:Ð:Ð#:Ñ:×:×:×:Ó:Ð×:×:×:×:×:Õ:ˆw×:×:×:Ñ:ˆw×:×:Õ:Ð×:×:×:×:×:Ô:Ô#4×:×:×:Ñ:Ô#4×:×:Õ:Ð#:×:×:×:×:×:×:Ô:r*   ú8quber.db.embeddings.EmbeddingService._init_openai_clientc                 óª  • [        SS9nUR                  S5        UR                  n[        R                  oCU:H  oU(       Gd  [
        R                  " SU4SX445      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  nS	S
U0-  n[        [
        R                  " U5      5      eS=n=pTg)z)Test initialization with OpenAI provider.r   ©rB   útext-embedding-3-smallr   ©zL%(py2)s
{%(py2)s = %(py0)s.provider
} == %(py6)s
{%(py6)s = %(py4)s.OPENAI
}rF   r   rG   rH   r-   N©r   rJ   rB   r   r   r   r   r   r   r   r   r   r   ©r    Úmock_init_openairF   r!   r$   r"   rM   r0   s           r'   Útest_init_with_openai_providerÚ7TestEmbeddingServiceInit.test_init_with_openai_provider%   ó½   € ô #¨HÑ5ˆà×0Ñ0Ð1IÔJØ×ÑÐ;Ô#4×#;Ñ#;Ð;Ð#;Ñ;×;×;×;Ó;Ð×;×;×;×;×;Õ;ˆw×;×;×;Ñ;ˆw×;×;Õ;Ð×;×;×;×;×;Ô;Ô#4×;×;×;Ñ;Ô#4×;×;Õ;Ð#;×;×;×;×;×;×;Ô;r*   c                 ó>   • [        SSSS9nUR                  SS5        g)z+Test initialization with custom model name.r   úcustom-modelr@   )rB   Ú
model_namerC   N©r   rJ   ©r    rL   rF   s      r'   Ú test_init_with_custom_model_nameÚ9TestEmbeddingServiceInit.test_init_with_custom_model_name-   s#   € ô #¨GÀÐW\Ñ]ˆà×/Ñ/°ÀÕFr*   c                 ó¦  • [        [        R                  SS9nUR                  n[        R                  oCU:H  oU(       Gd  [        R
                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pTg
)z0Test initialization with EmbeddingProvider enum.r@   rA   r   rE   rF   r   rG   rH   r-   N)r   r   r   rB   r   r   r   r   r   r   r   r   rK   s           r'   Útest_init_with_provider_enumÚ5TestEmbeddingServiceInit.test_init_with_provider_enum4   s·   € ô #Ô,=×,CÑ,CÈEÑRˆà×ÑÐ:Ô#4×#:Ñ#:Ð:Ð#:Ñ:×:×:×:Ó:Ð×:×:×:×:×:Õ:ˆw×:×:×:Ñ:ˆw×:×:Õ:Ð×:×:×:×:×:Ô:Ô#4×:×:×:Ñ:Ô#4×:×:Õ:Ð#:×:×:×:×:×:×:Ô:r*   c                 óÜ  • [        S5         [        S5         [        R                  " [        SS9   [        R
                  " [        5      nSUl        SUl        UR                  [        R                  [        R                  4;  a  [        SUR                   35      e SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)	z7Test initialization with invalid provider raises error.r>   rQ   zUnsupported provider)ÚmatchÚinvalidr@   zUnsupported provider: N)r   ÚpytestÚraisesÚ
ValueErrorr   Ú__new__rB   rC   r   r   r   )r    rF   s     r'   Útest_init_with_invalid_providerÚ8TestEmbeddingServiceInit.test_init_with_invalid_provider;   s¹   € ô ÐKÕLÜÐQÕRä—]’]¤:Ð5KÓLä.×6Ò6Ô7GÓH�GØ'0�GÔ$Ø%*�G”Nà×'Ñ'Ô0A×0GÑ0GÔIZ×IaÑIaÐ/bÓbÜ(Ð+AÀ'×BRÑBRÐASÐ)TÓUÐUð c÷ M÷ S÷ MÐL÷ MÕLú÷ SÕRú÷ MÕLús:   ŒC˜C²A/B;Â"CÂ*CÂ;
C	ÃCÃ
C	ÃCÃ
C+r4   N)r5   r6   r7   r8   r9   r   rN   rY   ra   rd   rm   r:   r4   r*   r'   r<   r<      sw   † Ù4á
ÐCÓDñ;ó Eð;ñ ÐEÓFñ<ó Gð<ñ ÐCÓDñGó EðGñ ÐCÓDñ;ó Eð;õVr*   r<   c                   ól   • \ rS rSrSr\" S5      S 5       r\" S5      S 5       r\" S5      S 5       rSr	g)	ÚTestEmbeddingServiceLocalModeléK   z$Tests for local model functionality.r>   c                 ó®  • [        SSS9nUR                  SS5        UR                  n[        R                  oCU:H  oU(       Gd  [
        R                  " SU4SX445      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S	.-  nS
SU0-  n[        [
        R                  " U5      5      eS=n=pTg)z%Test initializing local model on CPU.r   r@   rA   rD   r   rE   rF   r   rG   rH   r-   NrI   rK   s           r'   Útest_init_local_model_cpuÚ8TestEmbeddingServiceLocalModel.test_init_local_model_cpuN   rP   r*   c                 óê  • [        SSS9nUR                  SS5        UR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTg)z(Test initializing local model with CUDA.r   ÚcudarA   rD   r   )z.%(py2)s
{%(py2)s = %(py0)s.device
} == %(py5)srF   ©r   r   Úpy5úassert %(py7)sr   N)r   rJ   rC   r   r   r   r   r   r   r   r   )r    rL   rF   r!   Ú@py_assert4r"   Ú@py_format6r%   s           r'   Ú$test_init_local_model_cuda_availableÚCTestEmbeddingServiceLocalModel.test_init_local_model_cuda_availableV   s�   € ô #¨G¸FÑCˆà×/Ñ/Ð0HÈ&ÔQØ�~‰~Ð' Ð' Ñ'×'×'×'Ò'ˆ~×'×'×'×'×'Õ'ˆw×'×'×'Ñ'ˆw×'×'Õ'ˆ~×'×'Ó' ×'×'×'×'×'×'Ô'r*   c                 ó>   • [        SSSS9nUR                  SS5        g)z5Test initializing local model with custom model name.r   r@   r]   )rB   rC   r^   Nr_   r`   s      r'   Ú!test_init_local_model_custom_nameÚ@TestEmbeddingServiceLocalModel.test_init_local_model_custom_name^   s"   € ô #¨G¸EÈnÑ]ˆà×/Ñ/°ÀÕFr*   r4   N)
r5   r6   r7   r8   r9   r   rs   r|   r   r:   r4   r*   r'   rp   rp   K   sV   † Ù.á
ÐCÓDñ;ó Eð;ñ ÐCÓDñ(ó Eð(ñ ÐCÓDñGó EóGr*   rp   c                   óP   • \ rS rSrSr\" S5      S 5       r\" S5      S 5       rSrg)ÚTestEmbeddingServiceOpenAIéf   zTests for OpenAI functionality.rQ   c                 óª  • [        SS9nUR                  S5        UR                  n[        R                  oCU:H  oU(       Gd  [
        R                  " SU4SX445      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  nS	S
U0-  n[        [
        R                  " U5      5      eS=n=pTg)z Test initializing OpenAI client.r   rS   rT   r   rU   rF   r   rG   rH   r-   NrV   rW   s           r'   Útest_init_openai_clientÚ2TestEmbeddingServiceOpenAI.test_init_openai_clienti   r[   r*   c                 ó:   • [        SSS9nUR                  S5        g)z1Test initializing OpenAI client with large model.r   ztext-embedding-3-large)rB   r^   Nr_   )r    rX   rF   s      r'   Ú#test_init_openai_client_large_modelÚ>TestEmbeddingServiceOpenAI.test_init_openai_client_large_modelq   s    € ô #¨HÐAYÑZˆà×0Ñ0Ð1IÕJr*   r4   N)	r5   r6   r7   r8   r9   r   r…   rˆ   r:   r4   r*   r'   r‚   r‚   f   s;   † Ù)á
ÐEÓFñ<ó Gð<ñ ÐEÓFñKó GóKr*   r‚   c                   óÐ   • \ rS rSrSr\" S5      \" S5      S 5       5       r\" S5      \" S5      S 5       5       r\" S5      S	 5       r\" S5      S
 5       r	\" S5      S 5       r
Srg)ÚTestEmbeddingServiceEmbedéy   zTests for embedding generation.r>   z1quber.db.embeddings.EmbeddingService._embed_localc                 ó  • [         R                  " SS/SS//5      Ul        [        SSS9nUR	                  SS	/5      nUR                  SS	/S
S5        [         R                  R                  U[         R                  " SS/SS//5      5        g)z#Test embedding with local provider.çš™™™™™¹?çš™™™™™É?ç333333Ó?çš™™™™™Ù?r   r@   rA   Útext1Útext2é    FN)ÚnpÚarrayÚreturn_valuer   ÚembedrJ   ÚtestingÚassert_array_equal)r    Úmock_embed_localrL   rF   Úresults        r'   Útest_embed_localÚ*TestEmbeddingServiceEmbed.test_embed_local|   sƒ   € ô )+¯ª°3¸°*¸sÀC¸jÐ1IÓ(JÐÔ%ä"¨G¸EÑBˆØ—‘ ¨Ð1Ó2ˆà×0Ñ0°'¸7Ð1CÀRÈÔOÜ
�
‰
×%Ñ% f¬b¯hªh¸¸c¸
ÀSÈ#ÀJÐ7OÓ.PÕQr*   rQ   z2quber.db.embeddings.EmbeddingService._embed_openaic                 óš  • [         R                  " SS/SS//5      Ul        [        R                  " [
        R                  SS05         [        SS9nUR                  S	S
/5      nSSS5        UR                  S	S
/5        [         R                  R                  W[         R                  " SS/SS//5      5        g! , (       d  f       N\= f)z$Test embedding with OpenAI provider.rŽ   r�   r�   r‘   ÚOPENAI_API_KEYztest-keyr   rS   r’   r“   N)r•   r–   r—   r   ÚdictÚosÚenvironr   r˜   rJ   r™   rš   )r    Úmock_embed_openairX   rF   rœ   s        r'   Útest_embed_openaiÚ+TestEmbeddingServiceEmbed.test_embed_openaiˆ   s§   € ô *,¯ª°C¸°:ÀÀS¸zÐ2JÓ)KÐÔ&ä�ZŠZœŸ
™
Ð%5°zÐ$BÕCÜ&°Ñ9ˆGØ—]‘] G¨WÐ#5Ó6ˆF÷ Dð 	×1Ñ1°7¸GÐ2DÔEÜ
�
‰
×%Ñ% f¬b¯hªh¸¸c¸
ÀSÈ#ÀJÐ7OÓ.PÕQ÷ DÕCús   Á	B<Â<
C
c                 ó²  • [        SSS9nUR                  / 5      n[        R                  n[	        X45      oU(       Gd@  SS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS	=pEUR                  nS
o‡U:H  oD(       dº  [        R                  " SU4SXx45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS	=n=pHg	)z.Test embedding empty list returns empty array.r   r@   rA   zRassert %(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s.ndarray
})
}Ú
isinstancerœ   r•   )r   Úpy1r   r   r,   N)r   r   )z-%(py2)s
{%(py2)s = %(py0)s.shape
} == %(py5)srw   ry   r   )r   r˜   r•   Úndarrayr¨   r   r   r   r   r   r   r   Úshaper   )r    rL   rF   rœ   r"   r$   rM   r!   rz   r{   r%   s              r'   Útest_embed_empty_listÚ/TestEmbeddingServiceEmbed.test_embed_empty_list•   s3  € ô #¨G¸EÑBˆØ—‘˜rÓ"ˆä"$§*¡*Ð-Œz˜&Ó-Ð-Ö-×-×-×-×-×-Ñ-Œz×-×-×-Ñ-Œz×-×-×-×-×-Ö-˜&×-×-×-Ñ-˜&×-×-×-×-×-Ö-¤"×-×-×-Ñ-¤"×-×-Õ- *×-×-Ó-Ð-×-×-×-×-×-Ò-Ø�|‰|Ð#˜tÐ#˜tÑ#×#×#×#Ò#ˆ|×#×#×#×#×#Õ#ˆv×#×#×#Ñ#ˆv×#×#Õ#ˆ|×#×#Ó#˜t×#×#×#×#×#×#Ô#r*   c                 óæ   • [        5       n[        R                  " SS//5      UR                  l        [        SSS9nX#l        UR                  S/SSS	9nUR                  R                  S/SSSS
9  g)z/Test _embed_local calls model.encode correctly.rŽ   r�   r   r@   rA   Útesté   T)Ú
batch_sizeÚshow_progress)r±   Úshow_progress_barÚconvert_to_numpyN)	r   r•   r–   Úencoder—   r   ÚmodelÚ_embed_localrJ   )r    rL   Ú
mock_modelrF   rœ   s        r'   Útest_embed_local_implementationÚ9TestEmbeddingServiceEmbed.test_embed_local_implementationž   sv   € ô “[ˆ
Ü)+¯ª°C¸°:°,Ó)?ˆ
×ÑÔ&ä"¨G¸EÑBˆØ"ŒØ×%Ñ% v h¸2ÈTÐ%ÐRˆà×Ñ×1Ñ1ØˆH °tÈdð 	2ò 	
r*   c                 ó¨  • [        5       n[        SS/S9[        SS/S9/Ul        [        5       nX#R                  R                  l        [        SS9nX4l        SUl        UR                  S	S
/5      nUR                  R                  R                  S	S
/SS9  [        R                  R                  U[        R                  " SS/SS//5      5        g)z.Test _embed_openai calls OpenAI API correctly.rŽ   r�   )Ú	embeddingr�   r‘   r   rS   rT   r’   r“   )Úinputr¶   N)r   ÚdataÚ
embeddingsÚcreater—   r   Úclientr^   Ú_embed_openairJ   r•   r™   rš   r–   )r    rX   Úmock_responseÚmock_clientrF   rœ   s         r'   Ú test_embed_openai_implementationÚ:TestEmbeddingServiceEmbed.test_embed_openai_implementation¬   sÊ   € ô "›ˆä  c 
Ñ+Ü  c 
Ñ+ð
ˆÔô  “kˆØ5B×Ñ×%Ñ%Ô2ä"¨HÑ5ˆØ$ŒØ5ˆÔØ×&Ñ&¨°Ð'9Ó:ˆà×Ñ×%Ñ%×=Ñ=Ø˜GÐ$Ð,Dð 	>ñ 	
ô 	�
‰
×%Ñ% f¬b¯hªh¸¸c¸
ÀSÈ#ÀJÐ7OÓ.PÕQr*   r4   N)r5   r6   r7   r8   r9   r   r�   r¥   r¬   r¹   rÅ   r:   r4   r*   r'   r‹   r‹   y   s®   † Ù)á
ÐCÓDÙ
Ð>Ó?ñRó @ó EðRñ ÐEÓFÙ
Ð?Ó@ñ	Ró Aó Gð	Rñ ÐCÓDñ$ó Eð$ñ ÐCÓDñ
ó Eð
ñ ÐEÓFñRó GóRr*   r‹   c                   óJ   • \ rS rSrSr\" S5      \" S5      S 5       5       rSrg)Ú!TestEmbeddingServiceTableMetadataéÂ   z&Tests for embed_table_metadata method.r>   z*quber.db.embeddings.EmbeddingService.embedc                 ó  • [         R                  " / SQ/5      Ul        [        SSS9nUR	                  SS5      nSnUR                  U/5        [         R                  R                  U[         R                  " / SQ5      5        g)	zTest embedding table metadata.)rŽ   r�   r�   r   r@   rA   z
Test TitlezTest DescriptionzTest Title

Test DescriptionN)r•   r–   r—   r   Úembed_table_metadatarJ   r™   rš   )r    Ú
mock_embedrL   rF   rœ   Úexpected_texts         r'   Útest_embed_table_metadataÚ;TestEmbeddingServiceTableMetadata.test_embed_table_metadataÅ   sk   € ô #%§(¢(ªOÐ+<Ó"=ˆ
Ôä"¨G¸EÑBˆØ×-Ñ-¨lÐ<NÓOˆð 9ˆØ×*Ñ*¨M¨?Ô;Ü
�
‰
×%Ñ% f¬b¯hªh²Ó.GÕHr*   r4   N)r5   r6   r7   r8   r9   r   rÎ   r:   r4   r*   r'   rÈ   rÈ   Â   s.   † Ù0á
ÐCÓDÙ
Ð7Ó8ñ
Ió 9ó Eó
Ir*   rÈ   c                   ól   • \ rS rSrSr\" S5      S 5       r\" S5      S 5       r\" S5      S 5       rSr	g)	ÚTestGetEmbeddingServiceéÔ   z1Tests for get_embedding_service factory function.z$quber.db.embeddings.EmbeddingServicec                 ó´   • [         R                  " [        R                  0 SS9   [	        5         SSS5        UR                  SSS9  g! , (       d  f       N= f)z!Test factory with default values.T©ÚclearNr   rv   rA   ©r   r¡   r¢   r£   r   rJ   )r    Úmock_service_classs     r'   Ú#test_get_embedding_service_defaultsÚ;TestGetEmbeddingService.test_get_embedding_service_defaults×   sA   € ô �ZŠZœŸ
™
 B¨dÓ3Ü!Ô#÷ 4ð 	×2Ñ2¸GÈFÐ2ÒS÷ 4Õ3ús   ¥A	Á	
Ac                 ó¾   • SSS.n[         R                  " [        R                  USS9   [	        5         SSS5        UR                  SSS9  g! , (       d  f       N= f)z.Test factory reads from environment variables.r   r@   ©ÚEMBEDDING_PROVIDERÚEMBEDDING_DEVICETrÔ   NrA   rÖ   ©r    r×   Úenv_varss      r'   Ú#test_get_embedding_service_from_envÚ;TestGetEmbeddingService.test_get_embedding_service_from_envß   sK   € ð +3ÈÑNˆä�ZŠZœŸ
™
 H°DÓ9Ü!Ô#÷ :ð 	×2Ñ2¸HÈUÐ2ÒS÷ :Õ9úó   ªAÁ
Ac                 ó¾   • SSS.n[         R                  " [        R                  USS9   [	        SSS9  S	S	S	5        UR                  SSS9  g	! , (       d  f       N= f)
z&Test factory with override parameters.r   rv   rÛ   TrÔ   r   r@   rA   NrÖ   rÞ   s      r'   Ú#test_get_embedding_service_overrideÚ;TestGetEmbeddingService.test_get_embedding_service_overrideé   sO   € ð +2ÀvÑNˆä�ZŠZœŸ
™
 H°DÓ9Ü!¨8¸EÒB÷ :ð 	×2Ñ2¸HÈUÐ2ÒS÷	 :Õ9úrâ   r4   N)
r5   r6   r7   r8   r9   r   rØ   rà   rä   r:   r4   r*   r'   rÑ   rÑ   Ô   sW   † Ù;á
Ð1Ó2ñTó 3ðTñ Ð1Ó2ñTó 3ðTñ Ð1Ó2ñTó 3óTr*   rÑ   )r9   Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   r¢   Úunittest.mockr   r   Únumpyr•   ri   Úquber.db.embeddingsr   r   r   r	   r<   rp   r‚   r‹   rÈ   rÑ   r4   r*   r'   Ú<module>rí      sv   ðÙ -ç  „ ƒ	ß *ã Û ç ZÑ Z÷Gñ G÷.Vñ .V÷bGñ G÷6Kñ K÷&FRñ FR÷RIñ I÷$Tò Tr*   