[docs]classEmbeddings(ABC):def__init__(self,api_key:str,api_base_url:str,model_name:str,org_id:Optional[str]=None,**model_kwargs,):""" Initialize the Embed class with API configurations. Args: api_key (str): The API key for the API. api_base_url (str): The base URL for the API. model_name (str): The name of the embedding model. org_id (str): The organization ID if applicable. **model_kwargs: Additional keyword arguments for the model. """self.api_key=api_keyself.api_base_url=api_base_url.rstrip("/")self.model_name=model_nameself.org_id=org_idself.model_kwargs=model_kwargs# Remove /v1 suffix if presentifself.api_base_url.endswith("/v1"):self.api_base_url=self.api_base_url[:-3]
[docs]defembed(self,texts:List[SupportStr])->List[List[float]]:""" Generate embeddings for texts using unified HTTP request helper. Args: texts (List[SupportStr]): A list of SupportStr objects to generate embeddings for. Returns: List[List[float]]: A list of embeddings, where each embedding is a list of floats. """normalized_texts=[str(text)fortextintexts]payload={"input":normalized_texts,"model":self.model_name,**self.model_kwargs,}response=make_http_request(base_url=self.api_base_url,endpoint="/v1/embeddings",api_key=self.api_key,payload=payload,)return[embedding["embedding"]forembeddinginresponse["data"]]
[docs]defembed_query(self,text:SupportStr)->List[float]:""" Generate embedding for a single query text using HTTP API. Args: text (SupportStr): Query text to generate embedding for. Returns: List[float]: Embedding vector for the query text. """returnself.embed([text])[0]
[docs]defembed_documents(self,texts:List[SupportStr])->List[List[float]]:""" Generate embeddings for multiple documents using HTTP API. Args: texts (List[SupportStr]): A list of SupportStr objects to generate embeddings for. Returns: List[List[float]]: A list of embeddings, where each embedding is a list of floats. """returnself.embed(texts)
if__name__=="__main__":importargparsefromcicada.core.utilsimportcolorstring,load_config,setup_loggingparser=argparse.ArgumentParser(description="Embedding Model")parser.add_argument("--config",default="config.yaml",help="Path to the configuration YAML file")args=parser.parse_args()setup_logging()embed_config=load_config(args.config,"embed")embed=Embeddings(embed_config["api_key"],embed_config.get("api_base_url"),embed_config.get("model_name","text-embedding-3-small"),embed_config.get("org_id"),**embed_config.get("model_kwargs",{}),)classSimpleSupportStr:def__init__(self,content:str):self.content=contentdef__str__(self):returnself.contenttexts=[SimpleSupportStr("This is a test document."),SimpleSupportStr("Another test document."),]embeddings=embed.embed(texts)logger.info(colorstring(f"Generated embeddings: {embeddings}","white"))query=SimpleSupportStr("Test query")query_embedding=embed.embed_query(query)logger.info(colorstring(f"Generated query embedding: {query_embedding}","white"))