[docs]classHunyuanEmbeddings(Embeddings,BaseModel):"""Tencent Hunyuan embedding models API by Tencent. For more information, see https://cloud.tencent.com/document/product/1729 """hunyuan_secret_id:Optional[SecretStr]=Field(alias="secret_id",default=None)"""Hunyuan Secret ID"""hunyuan_secret_key:Optional[SecretStr]=Field(alias="secret_key",default=None)"""Hunyuan Secret Key"""region:Literal["ap-guangzhou","ap-beijing"]="ap-guangzhou""""The region of hunyuan service."""embedding_ctx_length:int=1024"""The max embedding context length of hunyuan embedding (defaults to 1024)."""show_progress_bar:bool=False"""Show progress bar when embedding. Default is False."""client:Any=Field(default=None,exclude=True)"""The tencentcloud client."""request_cls:Optional[Type]=Field(default=None,exclude=True)"""The request class of tencentcloud sdk."""@model_validator(mode="before")defvalidate_environment(cls,values:Dict)->Dict:"""Validate that api key and python package exists in environment."""values["hunyuan_secret_id"]=convert_to_secret_str(get_from_dict_or_env(values,"hunyuan_secret_id","HUNYUAN_SECRET_ID",))values["hunyuan_secret_key"]=convert_to_secret_str(get_from_dict_or_env(values,"hunyuan_secret_key","HUNYUAN_SECRET_KEY",))try:fromtencentcloud.common.credentialimportCredentialfromtencentcloud.common.profile.client_profileimportClientProfilefromtencentcloud.hunyuan.v20230901.hunyuan_clientimportHunyuanClientfromtencentcloud.hunyuan.v20230901.modelsimportGetEmbeddingRequestexceptImportError:raiseImportError("Could not import tencentcloud sdk python package. Please install it "'with `pip install "tencentcloud-sdk-python>=3.0.1139"`.')client_profile=ClientProfile()client_profile.httpProfile.pre_conn_pool_size=3credential=Credential(values["hunyuan_secret_id"].get_secret_value(),values["hunyuan_secret_key"].get_secret_value(),)values["request_cls"]=GetEmbeddingRequestvalues["client"]=HunyuanClient(credential,values["region"],client_profile)returnvaluesdef_embed_text(self,text:str)->List[float]:ifself.request_clsisNone:raiseAssertionError("Request class is not initialized.")request=self.request_cls()request.Input=textresponse=self.client.GetEmbedding(request)_response:Dict[str,Any]=json.loads(response.to_json_string())data:Optional[List[Dict[str,Any]]]=_response.get("Data")ifnotdata:raiseRuntimeError("Occur hunyuan embedding error: Data is empty")embedding=data[0].get("Embedding")ifnotembedding:raiseRuntimeError("Occur hunyuan embedding error: Embedding is empty")returnembedding
[docs]defembed_documents(self,texts:List[str])->List[List[float]]:"""Embed search docs."""embeddings=[]ifself.show_progress_bar:try:fromtqdmimporttqdmexceptImportErrorase:raiseImportError("Package tqdm must be installed if show_progress_bar=True. ""Please install with 'pip install tqdm' or set ""show_progress_bar=False.")frome_iter=tqdm(iterable=texts,desc="Hunyuan Embedding")else:_iter=textsfortextin_iter:embeddings.append(self.embed_query(text))returnembeddings