ó
    ^v(j¥+  ã                   óN  • S r SSKrSSKJs  Jr  SSKrSSKJ	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KJr  \R,                  " SS9S	\R.                  S
\	4S j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 " S S5      rg)z'Tests for embedding generation service.é    N)ÚPath)Ú	MagicMockÚpatch)ÚEmbeddingProviderÚEmbeddingServiceÚget_embedding_service)Úget_settingsT)ÚautouseÚmonkeypatchÚtmp_pathc              #   óŠ   #   • U R                  U5        [        R                  " 5         S v •  [        R                  " 5         g 7f)N)Úchdirr	   Úcache_clear)r   r   s     Ú2/home/mande/repo/quber/tests/db/test_embeddings.pyÚisolate_settingsr      s0   é € ð ×Ñ�hÔÜ×ÒÔÛ	Ü×ÒÕùs   ‚AAc                   ó$   • \ 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          r   Ú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ÖFr3   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r1   r;   Ú__static_attributes__r=   r3   r   r   r      s   † Ù/ò:õ
Gr3   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.ú5quber.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   r5   úassert %(py8)sr6   N©r   Úassert_called_once_withrK   r   r   r!   r"   r#   r$   r%   r&   r'   r(   ©r*   Úmock_init_localrO   r+   r.   r,   Ú@py_format7r9   s           r   Útest_init_with_local_providerÚ6TestEmbeddingServiceInit.test_init_with_local_provider)   óÁ   € ô #¨G¸EÑBˆà×/Ñ/Ð0HÈ%ÔPØ×ÑÐ:Ô#4×#:Ñ#:Ð:Ð#:Ñ:×:×:×:Ó:Ð×:×:×:×:×:Õ:ˆw×:×:×:Ñ:ˆw×:×:Õ:Ð×:×:×:×:×:Ô:Ô#4×:×:×:Ñ:Ô#4×:×:Õ:Ð#:×:×:×:×:×:×:Ô:r3   ú7quber.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   ©rK   útext-embedding-3-smallr   ©zL%(py2)s
{%(py2)s = %(py0)s.provider
} == %(py6)s
{%(py6)s = %(py4)s.OPENAI
}rO   r   rP   rQ   r6   N©r   rS   rK   r   r)   r!   r"   r#   r$   r%   r&   r'   r(   ©r*   Úmock_init_openairO   r+   r.   r,   rV   r9   s           r   Útest_init_with_openai_providerÚ7TestEmbeddingServiceInit.test_init_with_openai_provider1   ó½   € ô #¨HÑ5ˆà×0Ñ0Ð1IÔJØ×ÑÐ;Ô#4×#;Ñ#;Ð;Ð#;Ñ;×;×;×;Ó;Ð×;×;×;×;×;Õ;ˆw×;×;×;Ñ;ˆw×;×;Õ;Ð×;×;×;×;×;Ô;Ô#4×;×;×;Ñ;Ô#4×;×;Õ;Ð#;×;×;×;×;×;×;Ô;r3   c                 ó>   • [        SSSS9  UR                  SS5        g)z+Test initialization with custom model name.r   úcustom-modelrI   )rK   Ú
model_namerL   N©r   rS   ©r*   rU   s     r   Ú test_init_with_custom_model_nameÚ9TestEmbeddingServiceInit.test_init_with_custom_model_name9   s    € ô 	 '°nÈUÒSà×/Ñ/°ÀÕFr3   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.rI   rJ   r   rN   rO   r   rP   rQ   r6   N)r   r   r   rK   r!   r"   r#   r$   r%   r&   r'   r(   rT   s           r   Útest_init_with_provider_enumÚ5TestEmbeddingServiceInit.test_init_with_provider_enum@   s·   € ô #Ô,=×,CÑ,CÈEÑRˆà×ÑÐ:Ô#4×#:Ñ#:Ð:Ð#:Ñ:×:×:×:Ó:Ð×:×:×:×:×:Õ:ˆw×:×:×:Ñ:ˆw×:×:Õ:Ð×:×:×:×:×:Ô:Ô#4×:×:×:Ñ:Ô#4×:×:Õ:Ð#:×:×:×:×:×:×:Ô:r3   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.rG   rZ   zUnsupported provider)ÚmatchÚinvalidrI   zUnsupported provider: N)r   ÚpytestÚraisesÚ
ValueErrorr   Ú__new__rK   rL   r   r   r)   )r*   rO   s     r   Útest_init_with_invalid_providerÚ8TestEmbeddingServiceInit.test_init_with_invalid_providerG   s¹   € ô ÐJÕKÜÐPÕQä—]’]¤:Ð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÷ R÷ LÐK÷ MÕLú÷ RÕQú÷ LÕKús:   ŒC˜C²A/B;Â"CÂ*CÂ;
C	ÃCÃ
C	ÃCÃ
C+r=   N)r>   r?   r@   rA   rB   r   rW   rb   rj   rm   rv   rC   r=   r3   r   rE   rE   &   sw   † Ù4á
ÐBÓCñ;ó Dð;ñ ÐDÓEñ<ó Fð<ñ ÐBÓCñGó DðGñ ÐBÓCñ;ó Dð;õVr3   rE   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éW   z$Tests for local model functionality.rG   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   rI   rJ   rM   r   rN   rO   r   rP   rQ   r6   NrR   rT   s           r   Útest_init_local_model_cpuÚ8TestEmbeddingServiceLocalModel.test_init_local_model_cpuZ   rY   r3   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   ÚcudarJ   rM   r   )z.%(py2)s
{%(py2)s = %(py0)s.device
} == %(py5)srO   ©r   r   Úpy5úassert %(py7)sr   N)r   rS   rL   r!   r"   r#   r$   r%   r&   r'   r(   )r*   rU   rO   r+   Ú@py_assert4r,   Ú@py_format6r/   s           r   Ú$test_init_local_model_cuda_availableÚCTestEmbeddingServiceLocalModel.test_init_local_model_cuda_availableb   s�   € ô #¨G¸FÑCˆà×/Ñ/Ð0HÈ&ÔQØ�~‰~Ð' Ð' Ñ'×'×'×'Ò'ˆ~×'×'×'×'×'Õ'ˆw×'×'×'Ñ'ˆw×'×'Õ'ˆ~×'×'Ó' ×'×'×'×'×'×'Ô'r3   c                 ó>   • [        SSSS9  UR                  SS5        g)z5Test initializing local model with custom model name.r   rI   rf   )rK   rL   rg   Nrh   ri   s     r   Ú!test_init_local_model_custom_nameÚ@TestEmbeddingServiceLocalModel.test_init_local_model_custom_namej   s    € ô 	 '°%ÀNÒSà×/Ñ/°ÀÕFr3   r=   N)
r>   r?   r@   rA   rB   r   r|   r…   rˆ   rC   r=   r3   r   ry   ry   W   sV   † Ù.á
ÐBÓCñ;ó Dð;ñ ÐBÓCñ(ó Dð(ñ ÐBÓCñGó DóGr3   ry   c                   óP   • \ rS rSrSr\" S5      S 5       r\" S5      S 5       rSrg)ÚTestEmbeddingServiceOpenAIér   zTests for OpenAI functionality.rZ   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   r\   r]   r   r^   rO   r   rP   rQ   r6   Nr_   r`   s           r   Útest_init_openai_clientÚ2TestEmbeddingServiceOpenAI.test_init_openai_clientu   rd   r3   c                 ó:   • [        SSS9  UR                  S5        g)z1Test initializing OpenAI client with large model.r   ztext-embedding-3-large)rK   rg   Nrh   )r*   ra   s     r   Ú#test_init_openai_client_large_modelÚ>TestEmbeddingServiceOpenAI.test_init_openai_client_large_model}   s   € ô 	 (Ð7OÒPà×0Ñ0Ð1IÕJr3   r=   N)	r>   r?   r@   rA   rB   r   rŽ   r‘   rC   r=   r3   r   r‹   r‹   r   s;   † Ù)á
ÐDÓEñ<ó Fð<ñ ÐDÓEñKó FóKr3   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é…   zTests for embedding generation.rG   z0quber.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   rI   rJ   Útext1Útext2é    FN)ÚnpÚarrayÚreturn_valuer   ÚembedrS   ÚtestingÚassert_array_equal)r*   Úmock_embed_localrU   rO   Ú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ÕQr3   rZ   z1quber.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   r\   r›   rœ   N)rž   rŸ   r    r   ÚdictÚosÚenvironr   r¡   rS   r¢   r£   )r*   Úmock_embed_openaira   rO   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   rI   rJ   zRassert %(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s.ndarray
})
}Ú
isinstancer¥   rž   )r   Úpy1r   r   r5   N)r   r   )z-%(py2)s
{%(py2)s = %(py0)s.shape
} == %(py5)sr€   r‚   r   )r   r¡   rž   Úndarrayr±   r#   r$   r!   r%   r&   r'   r(   Úshaper"   )r*   rU   rO   r¥   r,   r.   rV   r+   rƒ   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×#×#×#×#×#×#Ô#r3   c                 óæ   • [        5       n[        R                  " SS//5      UR                  l        [        SSS9nX#l        UR                  S/SSS	9  UR                  R                  S/SSSS
9  g)z.Test embed_local calls model.encode correctly.r—   r˜   r   rI   rJ   Útesté   T)Ú
batch_sizeÚshow_progress)rº   Úshow_progress_barÚconvert_to_numpyN)	r   rž   rŸ   Úencoder    r   ÚmodelÚembed_localrS   )r*   rU   Ú
mock_modelrO   s       r   Útest_embed_local_implementationÚ9TestEmbeddingServiceEmbed.test_embed_local_implementationª   st   € ô “[ˆ
Ü)+¯ª°C¸°:°,Ó)?ˆ
×ÑÔ&ä"¨G¸EÑBˆØ"ŒØ×Ñ˜V˜H°À4ÐÑHà×Ñ×1Ñ1ØˆH °tÈdð 	2ò 	
r3   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   r\   r]   r›   rœ   )Úinputr¿   N)r   ÚdataÚ
embeddingsÚcreater    r   Úclientrg   Úembed_openairS   rž   r¢   r£   rŸ   )r*   ra   Úmock_responseÚmock_clientrO   r¥   s         r   Ú test_embed_openai_implementationÚ:TestEmbeddingServiceEmbed.test_embed_openai_implementation¸   sÊ   € ô "›ˆä  c 
Ñ+Ü  c 
Ñ+ð
ˆÔô  “kˆØ5B×Ñ×%Ñ%Ô2ä"¨HÑ5ˆØ$ŒØ5ˆÔØ×%Ñ% w°Ð&8Ó9ˆà×Ñ×%Ñ%×=Ñ=Ø˜GÐ$Ð,Dð 	>ñ 	
ô 	�
‰
×%Ñ% f¬b¯hªh¸¸c¸
ÀSÈ#ÀJÐ7OÓ.PÕQr3   r=   N)r>   r?   r@   rA   rB   r   r¦   r®   rµ   rÂ   rÎ   rC   r=   r3   r   r”   r”   …   s­   † Ù)á
ÐBÓCÙ
Ð=Ó>ñRó ?ó DðRñ ÐDÓEÙ
Ð>Ó?ñ	Ró @ó Fð	Rñ ÐBÓCñ$ó Dð$ñ ÐBÓCñ
ó Dð
ñ ÐDÓEñRó FóRr3   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.rG   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   rI   rJ   z
Test TitlezTest DescriptionzTest Title

Test DescriptionN)rž   rŸ   r    r   Úembed_table_metadatarS   r¢   r£   )r*   Ú
mock_embedrU   rO   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ÕHr3   r=   N)r>   r?   r@   rA   rB   r   r×   rC   r=   r3   r   rÑ   rÑ   Î   s.   † Ù0á
ÐBÓCÙ
Ð7Ó8ñ
Ió 9ó Dó
Ir3   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   r   rJ   ©r   rª   r«   r¬   r   rS   )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   rI   ©ÚEMBEDDING_PROVIDERÚEMBEDDING_DEVICETrÝ   NrJ   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   r   rä   TrÝ   r   rI   rJ   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ë   r=   N)
r>   r?   r@   rA   rB   r   rá   ré   rí   rC   r=   r3   r   rÚ   rÚ   à   sW   † Ù;á
Ð1Ó2ñTó 3ðTñ Ð1Ó2ñTó 3ðTñ Ð1Ó2ñTó 3óTr3   rÚ   ) rB   Úbuiltinsr#   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter!   r«   Úpathlibr   Úunittest.mockr   r   Únumpyrž   rr   Úquber.db.embeddingsr   r   r   Úquber.settingsr	   ÚfixtureÚMonkeyPatchr   r   rE   ry   r‹   r”   rÑ   rÚ   r=   r3   r   Ú<module>rú      s­   ðÙ -ç  „ ƒ	Ý ß *ã Û ç ZÑ ZÝ 'ð ‡‚˜Ñð &×"4Ñ"4ð Àó ó ð÷Gñ G÷.Vñ .V÷bGñ G÷6Kñ K÷&FRñ FR÷RIñ I÷$Tò Tr3   