classJinaEmbedding(BaseEmbedding):"""JinaAI class for embeddings. Args: model (str): Model for embedding. Defaults to `jina-embeddings-v2-base-en` """api_key:str=Field(default=None,description="The JinaAI API key.")model:str=Field(default="jina-embeddings-v2-base-en",description="The model to use when calling Jina AI API",)_session:Any=PrivateAttr()def__init__(self,model:str="jina-embeddings-v2-base-en",embed_batch_size:int=DEFAULT_EMBED_BATCH_SIZE,api_key:Optional[str]=None,callback_manager:Optional[CallbackManager]=None,**kwargs:Any,)->None:super().__init__(embed_batch_size=embed_batch_size,callback_manager=callback_manager,model=model,api_key=api_key,**kwargs,)self.api_key=get_from_param_or_env("api_key",api_key,"JINAAI_API_KEY","")self.model=modelself._session=requests.Session()self._session.headers.update({"Authorization":f"Bearer {api_key}","Accept-Encoding":"identity"})@classmethoddefclass_name(cls)->str:return"JinaAIEmbedding"def_get_query_embedding(self,query:str)->List[float]:"""Get query embedding."""returnself._get_text_embedding(query)asyncdef_aget_query_embedding(self,query:str)->List[float]:"""The asynchronous version of _get_query_embedding."""returnawaitself._aget_text_embedding(query)def_get_text_embedding(self,text:str)->List[float]:"""Get text embedding."""returnself._get_text_embeddings([text])[0]asyncdef_aget_text_embedding(self,text:str)->List[float]:"""Asynchronously get text embedding."""result=awaitself._aget_text_embeddings([text])returnresult[0]def_get_text_embeddings(self,texts:List[str])->List[List[float]]:"""Get text embeddings."""# Call Jina AI Embedding APIresp=self._session.post(# type: ignoreAPI_URL,json={"input":texts,"model":self.model}).json()if"data"notinresp:raiseRuntimeError(resp["detail"])embeddings=resp["data"]# Sort resulting embeddings by indexsorted_embeddings=sorted(embeddings,key=lambdae:e["index"])# type: ignore# Return just the embeddingsreturn[result["embedding"]forresultinsorted_embeddings]asyncdef_aget_text_embeddings(self,texts:List[str])->List[List[float]]:"""Asynchronously get text embeddings."""importaiohttpasyncwithaiohttp.ClientSession(trust_env=True)assession:headers={"Authorization":f"Bearer {self.api_key}","Accept-Encoding":"identity",}asyncwithsession.post(f"{API_URL}",json={"input":texts,"model":self.model},headers=headers,)asresponse:resp=awaitresponse.json()response.raise_for_status()embeddings=resp["data"]# Sort resulting embeddings by indexsorted_embeddings=sorted(embeddings,key=lambdae:e["index"])# type: ignore# Return just the embeddingsreturn[result["embedding"]forresultinsorted_embeddings]