[docs]classPineconeEmbeddings(BaseModel,Embeddings):"""PineconeEmbeddings embedding model. Example: .. code-block:: python from langchain_pinecone import PineconeEmbeddings model = PineconeEmbeddings(model="multilingual-e5-large") """# Clients_client:PineconeClient=Field(default=None,exclude=True)_async_client:aiohttp.ClientSession=Field(default=None,exclude=True)model:str"""Model to use for example 'multilingual-e5-large'."""# Configbatch_size:Optional[int]=None"""Batch size for embedding documents."""query_params:Dict=Field(default_factory=dict)"""Parameters for embedding query."""document_params:Dict=Field(default_factory=dict)"""Parameters for embedding document"""#dimension:Optional[int]=None#show_progress_bar:bool=Falsepinecone_api_key:Optional[SecretStr]=Field(default_factory=secret_from_env("PINECONE_API_KEY",error_message="Pinecone API key not found. Please set the PINECONE_API_KEY ""environment variable or pass it via `pinecone_api_key`.",),alias="api_key",)"""Pinecone API key. If not provided, will look for the PINECONE_API_KEY environment variable."""classConfig:extra="forbid"allow_population_by_field_name=True@root_validator(pre=True)defset_default_config(cls,values:dict)->dict:"""Set default configuration based on model."""default_config_map={"multilingual-e5-large":{"batch_size":96,"query_params":{"input_type":"query","truncation":"END"},"document_params":{"input_type":"passage","truncation":"END"},"dimension":1024,}}model=values.get("model")ifmodelindefault_config_map:config=default_config_map[model]forkey,valueinconfig.items():ifkeynotinvalues:values[key]=valuereturnvalues@root_validator(pre=False,skip_on_failure=True)defvalidate_environment(cls,values:dict)->dict:"""Validate that Pinecone version and credentials exist in environment."""api_key_str=values["pinecone_api_key"].get_secret_value()client=PineconeClient(api_key=api_key_str,source_tag="langchain")values["_client"]=client# initialize async clientifnotvalues.get("_async_client"):values["_async_client"]=aiohttp.ClientSession(headers={"Api-Key":api_key_str,"Content-Type":"application/json","X-Pinecone-API-Version":"2024-07",})returnvaluesdef_get_batch_iterator(self,texts:List[str])->Iterable:ifself.batch_sizeisNone:batch_size=DEFAULT_BATCH_SIZEelse:batch_size=self.batch_sizeifself.show_progress_bar:try:fromtqdm.autoimporttqdm# type: ignoreexceptImportErrorase:raiseImportError("Must have tqdm installed if `show_progress_bar` is set to True. ""Please install with `pip install tqdm`.")frome_iter=tqdm(range(0,len(texts),batch_size))else:_iter=range(0,len(texts),batch_size)return_iter