Ë
    lQêjJ  ã                   ó¬   — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZmZ d dlmZmZ d dl mZ d	gZd
ee   fd„Z G d„ d«      Zy)é    N)ÚListÚAnyÚCallableÚDict)ÚValidationError)Ú	MagicMockÚcreate_autospec)Úvalidate_config_schemaÚload_schemaÚget_available_schemas)Úknown_embedding_functionsÚ sparse_known_embedding_functions)Ú	DocumentsÚ
Embeddings)ÚMonkeyPatchÚchroma_langchainÚreturnc                  ó`   — t        j                  «       D � cg c]  } | t        vr| ‘Œ c} S c c} w )z(Get all embedding function names to test)r   ÚkeysÚSKIP_EMBEDDING_FUNCTIONS)Únames    úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/utils/test_embedding_function_schemas.pyÚget_embedding_function_namesr      s6   € ô .×2Ñ2Ó4öàØÔ/Ñ/ò 	òð ùò s   —+c            	       ó¬  — e Zd ZdZej
                  j                  d e«       «      dede	e
gef   deddfd„«       Zdd„Zed	edefd
„«       Zdd„Zdeeef   deeef   fd„Zdeeef   defd„Zdedefd„Zdededdfd„Zdedededefd„Zej
                  j                  d e«       «      dede	e
gef   deddfd„«       Zde	e
gef   deddfd„Zy)ÚTestEmbeddingFunctionSchemasz)Test class for embedding function schemasÚef_nameÚmock_embeddingsÚmock_common_depsr   Nc                 óŽ  ‡— t         |   }t        |d¬«      Št         |dg«      ¬«      }|‰_        |dk(  r2ddlm}m} d|j                  j                  d	|d
œ‰j                  _
        |j                  |dˆfd„«        |«       }|j                  «       }	|j                  |	«      }
|
j                  «       }|	|k(  s
J d|› �«       ‚y)z/Test embedding function configuration roundtripT)ÚinstanceÚtest©Úreturn_valueúchroma-cloud-qwenr   )ÚChromaCloudQwenEmbeddingModelÚ&CHROMA_CLOUD_QWEN_DEFAULT_INSTRUCTIONSÚCHROMA_API_KEYÚ
nl_to_code)Úapi_key_env_varÚmodelÚtaskÚinstructionsÚ__new__c                 ó   •— ‰S )N© )ÚclsÚargsÚkwargsÚmock_efs      €r   ú<lambda>zWTestEmbeddingFunctionSchemas.test_embedding_function_config_roundtrip.<locals>.<lambda>D   s   ø€ ¸g€ ó    z)Configs don't match after recreation for N)r   r	   r   Ú__call__ÚGchromadb.utils.embedding_functions.chroma_cloud_qwen_embedding_functionr%   r&   ÚQWEN3_EMBEDDING_0p6BÚvalueÚ
get_configr#   ÚsetattrÚbuild_from_config)Úselfr   r   r   Úef_classÚ	mock_callr%   r&   Úef_instanceÚconfigÚnew_instanceÚ
new_configr3   s               @r   Ú(test_embedding_function_config_roundtripzETestEmbeddingFunctionSchemas.test_embedding_function_config_roundtrip#   sæ   ø€ ô -¨WÑ5ˆô " (°TÔ:ˆô ©?¸F¸8Ó+DÔEˆ	Ø$ˆÔð Ð)Ò)÷ð $4Ø6×KÑK×QÑQØ$Ø Fñ	/ˆG×ÑÔ+ð 	× Ñ Ø�iÓ!Eô	
ñ
 “jˆð ×'Ñ'Ó)ˆð  ×1Ñ1°&Ó9ˆØ!×,Ñ,Ó.ˆ
ð �jÒ ð	Aà6°w°iÐ@ó	AÙ r5   c                 ó€  — t        «       D ]¥  }t        |«      }d|vrŒi }|d   D ]>  }|d   |   }t        |d   t        «      r|d   d   n|d   }| j	                  |«      ||<   Œ@ |d   D ]C  }|j                  «       }||= t        j                  t        «      5  t        ||«       ddd«       ŒE Œ§ y# 1 sw Y   ŒRxY w)z)Test that schemas enforce required fieldsÚrequiredÚ
propertiesÚtyper   N)
r   r   Ú
isinstanceÚlistÚ_get_dummy_valueÚcopyÚpytestÚraisesr   r
   ©r=   Úschema_nameÚschemarA   ÚfieldÚfield_schemaÚ
field_typeÚtest_configs           r   Útest_schema_required_fieldsz8TestEmbeddingFunctionSchemas.test_schema_required_fieldsV   sú   € ä0Ó2ò 	EˆKÜ  Ó-ˆFØ Ñ'Øð ˆFØ 
Ñ+ò B�Ø% lÑ3°EÑ:�ô " ,¨vÑ"6¼Ô=ð ! Ñ(¨Ò+à% fÑ-ð ð
 !%× 5Ñ 5°jÓ A��u’ðBð   
Ñ+ò E�Ø$Ÿk™k›m�Ø Ð&Ü—]‘]¤?Ó3ñ EÜ*¨;¸ÔD÷Eð EñEñ#	E÷(Eð Eús   ÂB4Â4B=rT   c                 ó8   — ddddi g dœ}|j                  | d«      S )z(Get a dummy value for a given field typeÚdummyr   g        F)ÚstringÚintegerÚnumberÚbooleanÚobjectÚarray)Úget)rT   Útype_maps     r   rK   z-TestEmbeddingFunctionSchemas._get_dummy_valueo   s0   € ð ØØØØØñ
ˆð �|‰|˜J¨Ó0Ð0r5   c                 ó˜  — t        «       D ]±  }t        |«      }i }d|v rF|d   D ]>  }|d   |   }t        |d   t        «      r|d   d   n|d   }| j	                  |«      ||<   Œ@ |j                  «       }d|d<   |j                  dd«      d	u sŒ„t        j                  t        «      5  t        ||«       d
d
d
«       Œ³ y
# 1 sw Y   Œ¾xY w)z.Test that schemas reject additional propertiesrF   rG   rH   r   r9   Úadditional_propertyÚadditionalPropertiesTFN)r   r   rI   rJ   rK   rL   r_   rM   rN   r   r
   rO   s           r   Ú!test_schema_additional_propertiesz>TestEmbeddingFunctionSchemas.test_schema_additional_properties|   sú   € ä0Ó2ò 	EˆKÜ  Ó-ˆFØˆFð ˜VÑ#Ø# JÑ/ò F�EØ#)¨,Ñ#7¸Ñ#>�Lô & l°6Ñ&:¼DÔAð % VÑ,¨QÒ/à)¨&Ñ1ð ð
 %)×$9Ñ$9¸*Ó$E�F˜5’MðFð !Ÿ+™+›-ˆKØ18ˆKÐ-Ñ.ð �z‰zÐ0°$Ó7¸5Ò@Ü—]‘]¤?Ó3ñ EÜ*¨;¸ÔD÷Eð Eñ+	E÷*Eð Eús   Â(C Ã C		rQ   c                 óv   — i }d|v r2d|v r.|d   D ]&  }||d   v sŒ|d   |   }| j                  |«      ||<   Œ( |S )zACreate a valid config from a schema by filling in required fieldsrF   rG   )Ú_get_value_from_field_schema)r=   rQ   rA   rR   rS   s        r   Ú _create_valid_config_from_schemaz=TestEmbeddingFunctionSchemas._create_valid_config_from_schema–   se   € ð "$ˆà˜Ñ L°FÑ$:Ø 
Ñ+ò T�Ø˜F <Ñ0Ò0Ø#)¨,Ñ#7¸Ñ#>�LØ$(×$EÑ$EÀlÓ$S�F˜5’MðTð
 ˆr5   rS   c                 óv  — d|v r|d   d   S |j                  d«      }|€yt        |t        «      r!|D �cg c]
  }|dk7  sŒ	|‘Œ }}|r|d   n|d   }|dk(  rGi }d|v r;|j                  dg «      }|D ]$  }||d   v sŒ| j                  |d   |   «      ||<   Œ& |r|S i S |d	k(  rg S | j	                  |«      S c c}w )
z%Get a valid value from a field schemaÚenumr   rH   rX   Únullr]   rG   rF   r^   )r_   rI   rJ   rf   rK   )r=   rS   rT   ÚtÚnon_null_typesÚnested_configÚnested_requiredÚprops           r   rf   z9TestEmbeddingFunctionSchemas._get_value_from_field_schema¤   s  € ð �\Ñ!Ø Ñ'¨Ñ*Ð*ð "×%Ñ% fÓ-ˆ
ØÐØä�j¤$Ô'à)3ÖC A°q¸F³{šaÐCˆNÐCÙ.<˜¨Ò*À*ÈQÁ-ˆJà˜Ò!àˆMØ˜|Ñ+Ø".×"2Ñ"2°:¸rÓ"B�Ø+ò �DØ˜|¨LÑ9Ò9Ø.2×.OÑ.OØ(¨Ñ6°tÑ<ó/˜ dÒ+ðñ
 %2�=Ð9°rÐ9à˜Ò àˆIð ×$Ñ$ ZÓ0Ð0ùò) Ds   µ
B6Á B6r>   c                 ó„   — 	 ddi}	 |j                  |«       y# t        t        t        f$ r Y yw xY w# t        $ r Y yw xY w)zJCheck if validate_config actually validates (not just base implementation)Ú__invalid_test_config__TF)Úvalidate_configr   Ú
ValueErrorÚFileNotFoundErrorÚ	Exception)r=   r>   Úinvalid_configs      r   Ú_has_custom_validationz3TestEmbeddingFunctionSchemas._has_custom_validationÇ   sT   € ð	à7¸Ð>ˆNðØ×(Ñ(¨Ô8àøÜ#¤ZÔ1BÐCò áðûô ò 	áð	ús    ‚3 ‡ ™0­3 ¯0°3 ³	?¾?c                 óþ   — i 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"œ¥}||v r|j                  ||   d#«       |dk(  r%|j                  d$d%«       |j                  d&d'«       y(y())zHSet up environment variables needed for embedding function instantiationÚcohereÚCHROMA_COHERE_API_KEYÚopenaiÚCHROMA_OPENAI_API_KEYÚhuggingfaceÚCHROMA_HUGGINGFACE_API_KEYÚhuggingface_serverÚgoogle_palmÚCHROMA_GOOGLE_PALM_API_KEYÚgoogle_genaiÚGEMINI_API_KEYÚgoogle_generative_aiÚgoogle_vertexÚCHROMA_GOOGLE_VERTEX_API_KEYÚjinaÚCHROMA_JINA_API_KEYÚmistralÚMISTRAL_API_KEYÚmorphÚMORPH_API_KEYÚvoyageaiÚCHROMA_VOYAGE_API_KEYÚcloudflare_workers_aiÚCHROMA_CLOUDFLARE_API_KEYÚtogether_aiÚCHROMA_TOGETHER_AI_API_KEYÚbasetenÚCHROMA_BASETEN_API_KEYÚroboflowÚCHROMA_ROBOFLOW_API_KEYÚamazon_bedrockÚAWS_ACCESS_KEY_IDr'   )r$   zchroma-cloud-spladeútest-api-keyÚAWS_SECRET_ACCESS_KEYztest-secret-keyÚ
AWS_REGIONú	us-east-1N)Úsetenv)r=   r   r   Úapi_key_env_varss       r   Ú_setup_env_vars_for_efz3TestEmbeddingFunctionSchemas._setup_env_vars_for_ef×   sB  € ð

ØÐ-ð
àÐ-ð
ð Ð7ð
ð !Ð">ð	
ð
 Ð7ð
ð Ð,ð
ð #Ð$4ð
ð Ð;ð
ð Ð)ð
ð Ð(ð
ð �_ð
ð Ð/ð
ð $Ð%@ð
ð Ð7ð
ð Ð/ð
ð  Ð1ð!
ð" Ð1ð#
ð$ "2à#3ò)
Ðð0 Ð&Ñ&Ø×#Ñ#Ð$4°WÑ$=¸~ÔNð Ð&Ò&Ø×#Ñ#Ð$;Ð=NÔOØ×#Ñ# L°+Õ>ð 'r5   c                 ó,  — | j                  ||«       ddl}t        «       }t        «       }t        «       }t        «       }t        «       }	t        «       }
t        «       }t        «       }t        «       }t        «       }d|_        d|_        t        «       |j
                  _        ||_        ||
_        t        «       }t        «       |j                  _        ||	_	        |	|_
        t        «       |_        t        «       }t        «       |_        t        t        «       ¬«      |_        ||_        t        «       }||_        t        «       |_        t        «       }t        g d¢¬«      g|j                  j"                  j$                  j                  _        ||_        |||||t        «       ||	|
||dœ}|j+                  «       D ]"  \  }}|j-                  |j.                  ||«       Œ$ |dk(  r
 |d	d
¬«      S |dk(  r
 |dd¬«      S |dk(  r|
j                  d¬«      } ||d¬«      S |dk(  r	 |d¬«      S |dk(  r
 |dd¬«      S |dk(  r	 |d¬«      S |dk(  r |«       S |dk(  rdd lm}  ||j4                  d!¬"«      S 	  |«       S # t6        $ r  |d	¬#«      cY S w xY w)$z=Create an embedding function instance, handling special casesr   Nrœ   r"   )gš™™™™™¹?gš™™™™™É?g333333Ó?)Ú	embedding)ÚPILz	PIL.ImageÚgooglezgoogle.generativeaizgoogle.genaizgoogle.genai.typesÚvertexaizvertexai.language_modelsÚboto3r‡   Ú	mistralair�   z
test-modelztest-account-id)Ú
model_nameÚ
account_idr“   r™   zhttps://test.api.baseten.co)Úapi_keyÚapi_baser—   )Úregion_namezamazon.titan-embed-text-v1)Úsessionr§   r   zhttp://localhost:8080)Úurlr…   ztest-projectzus-central1)Ú
project_idÚregionr‰   zmistral-embed)r*   r•   r$   )r%   r(   )r*   r+   )r§   )rŸ   Úsysr   r«   Úprofile_nameÚclientr#   ÚSessionÚfrom_pretrainedÚTextEmbeddingModelÚlanguage_modelsÚinitÚ	configureÚGenerativeModelÚgenerativeaiÚgenaiÚClientÚ
embeddingsÚcreateÚdataÚMistralÚitemsÚsetitemÚmodulesr7   r%   r8   ru   )r=   r   r>   r   r°   Úmock_pilÚmock_pil_imageÚmock_google_genaiÚmock_vertexaiÚmock_vertexai_lmÚ
mock_boto3Ú	mock_jinaÚmock_mistralaiÚmock_boto3_sessionÚmock_session_instanceÚmock_text_embedding_modelÚmock_googleÚmock_google_genai_newÚmock_mistral_clientÚmodules_to_mockÚmodule_nameÚmock_moduleÚmock_sessionr%   s                           r   Ú_create_ef_instancez0TestEmbeddingFunctionSchemas._create_ef_instanceü   sÊ  € ð
 	×#Ñ# GÐ-=Ô>ó 	ô “;ˆÜ"›ˆÜ%›KÐÜ!›ˆÜ$›;ÐÜ“[ˆ
Ü“Kˆ	Ü"›ˆô '›[ÐÜ )£ÐØ,7ÐÔ)Ø-1ÐÔ*Ü4=³KÐ×$Ñ$Ô1Ø*?ÐÔ'Ø/ˆ
Ôô %.£KÐ!ÜAJÃÐ!×1Ñ1Ô>Ø.GÐÔ+Ø(8ˆÔ%Ü&›[ˆÔô  “kˆÜ&/£kÐÔ#Ü,5Ä9Ã;Ô,OÐÔ)Ø#4ˆÔ Ü )£ÐØ1ˆÔô %›;ˆ	Ôô (›kÐä¢Ô0ðP
Ð×(Ñ(×3Ñ3×:Ñ:×GÑGÔLð "5ˆÔð Ø'Ø!Ø#4Ø1Ü"+£+Ø%Ø(8ØØØ'ñ
ˆð )8×(=Ñ(=Ó(?ò 	LÑ$ˆK˜Ø×$Ñ$ S§[¡[°+¸{ÕKð	Lð Ð-Ò-ÙØ'Ø,ôð ð ˜	Ò!áØ&Ø6ôð ð Ð(Ò(ð &×-Ñ-¸+Ð-ÓFˆLÙØ$Ø7ôð ð Ð,Ò,ÙÐ 7Ô8Ð8Ø˜Ò'Ù ~¸mÔLÐLØ˜	Ò!Ù /Ô2Ð2Ø˜
Ò"Ù“:ÐØÐ+Ò+õñ Ø3×HÑHØ!ôð ð9Ù“zÐ!øÜò 9á¨<Ô8Ò8ð9ús   É7I> É>JÊJc                 óz  — t         |   }t        |d«      st        j                  |› d�«       t	        t        |dd«      «      st        j                  |› d�«       | j                  |«      st        j                  |› d�«       	 | j                  |||«      }t         |dg«      ¬«      }|j                  d	|«       |j                  «       }|j                  «       D �	�
ci c]  \  }	}
|
€Œ	|	|
“Œ }}	}
|j                  |«       y# t        $ r$}t        j                  |› d|› �«       Y d}~Œ–d}~ww xY wc c}
}	w )
zVTest that validate_config works correctly with actual configs from embedding functionsrr   z% does not have validate_config methodNz  validate_config is not callablez9 uses base validate_config implementation (no validation)zB requires arguments that we cannot provide without external deps: r!   r"   r6   )r   ÚhasattrrM   ÚskipÚcallableÚgetattrrw   rÖ   ru   r   r;   r:   rÁ   rr   )r=   r   r   r   r>   r@   Úer?   rA   ÚkÚvs              r   Ú test_validate_config_with_schemaz=TestEmbeddingFunctionSchemas.test_validate_config_with_schemaq  s=  € ô -¨WÑ5ˆô �xÐ!2Ô3Ü�K‰K˜7˜)Ð#HÐIÔJô œ Ð*;¸TÓBÔCÜ�K‰K˜7˜)Ð#CÐDÔEð ×*Ñ*¨8Ô4Ü�K‰KØ�)ÐTÐUôð	Ø×2Ñ2°7¸HÐFVÓWˆKô ©?¸F¸8Ó+DÔEˆ	Ø× Ñ  ¨j¸)ÔDð ×'Ñ'Ó)ˆð $*§<¡<£>×C™4˜1˜a°Q±]�!�Q‘$ÐCˆÑCð 	× Ñ  Õ(øô# ò 	Ü�K‰KØ�)Ð]Ð^_Ð]`Ða÷ñ ûð	üó Ds$   ÂD Ã"
D7Ã-D7Ä	D4ÄD/Ä/D4c                 óÔ  — t        j                  «       D ]¼  \  }}t        |d«      sŒt        t	        |dd«      «      sŒ*| j                  |«      sŒ<	 | j                  |||«      }t         |dg«      ¬«      }|j                  |d|«       |j                  «       }|j                  «       D ��	ci c]  \  }}	|	€Œ	||	“Œ }}}	|j                  |«       Œ¾ y# t        $ r Y ŒËw xY wc c}	}w )zGTest validate_config for sparse embedding functions with actual configsrr   Nr!   r"   r6   )r   rÁ   rØ   rÚ   rÛ   rw   rÖ   ru   r   r;   r:   rr   )
r=   r   r   r   r>   r@   r?   rA   rÝ   rÞ   s
             r   Ú/test_validate_config_sparse_embedding_functionszLTestEmbeddingFunctionSchemas.test_validate_config_sparse_embedding_functions   sý   € ô "B×!GÑ!GÓ!Iò "	-ÑˆG�Xä˜8Ð%6Ô7Øô œG HÐ.?ÀÓFÔGØð ×.Ñ.¨xÔ8ØðØ"×6Ñ6Ø˜XÐ'7ó�ô "©À¸xÓ/HÔIˆIØ×$Ñ$ [°*¸iÔHð !×+Ñ+Ó-ˆFð (.§|¡|£~×G™t˜q !¸¹�a˜‘dÐGˆFÑGð ×$Ñ$ VÕ,ñE"	-øô& ò Ùðüó Hs   ÁCÂ.
C$Â9C$Ã	C!Ã C!)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rM   ÚmarkÚparametrizer   Ústrr   r   r   r   rD   rV   Ústaticmethodr   rK   rd   r   rg   rf   Úboolrw   rŸ   rÖ   rß   rá   r/   r5   r   r   r       s»  „ Ù3à‡[�[×Ñ˜YÑ(DÓ(FÓGð0Aàð0Að " 9 +¨zÐ"9Ñ:ð0Að &ð	0Að
 
ò0Aó Hð0AódEð2 ð
1 Sð 
1¨Sò 
1ó ð
1óEð4Ø˜3 ˜8‘nðà	ˆc�3ˆh‰óð!1¸¸cÀ3¸h¹ð !1ÈCó !1ðF¨sð °tó ð #?Øð#?Ø.9ð#?à	ó#?ðJs9Øðs9Ø&)ðs9Ø=Hðs9à	ós9ðj ‡[�[×Ñ˜YÑ(DÓ(FÓGð,)àð,)ð " 9 +¨zÐ"9Ñ:ð,)ð &ð	,)ð
 
ò,)ó Hð,)ð\(-à! 9 +¨zÐ"9Ñ:ð(-ð &ð(-ð 
ô	(-r5   r   )rM   Útypingr   r   r   r   Ú
jsonschemar   Úunittest.mockr   r	   Ú*chromadb.utils.embedding_functions.schemasr
   r   r   Ú"chromadb.utils.embedding_functionsr   r   Úchromadb.api.typesr   r   r   r   rè   r   r   r/   r5   r   ú<module>rñ      sT   ðÛ ß ,Ó ,Ý &ß 4÷ñ ÷
÷ 5Ý ð ðÐ ð
 d¨3¡ió ÷h-ò h-r5   