 
from typing import Dict, List

from langchain_core.embeddings import Embeddings
from tencentcloud.common import credential
from tencentcloud.hunyuan.v20230901.hunyuan_client import HunyuanClient
from tencentcloud.hunyuan.v20230901.models import GetEmbeddingRequest

from models_provider.base_model_provider import LZKBBaseModel


class TencentEmbeddingModel(LZKBBaseModel, Embeddings):
    def embed_documents(self, texts: List[str]) -> List[List[float]]:
        return [self.embed_query(text) for text in texts]

    def embed_query(self, text: str) -> List[float]:
        request = GetEmbeddingRequest()
        request.Input = text
        res = self.client.GetEmbedding(request)
        return res.Data[0].Embedding

    def __init__(self, secret_id: str, secret_key: str, model_name: str):
        self.secret_id = secret_id
        self.secret_key = secret_key
        self.model_name = model_name
        cred = credential.Credential(
            secret_id, secret_key
        )
        self.client = HunyuanClient(cred, "")

    @staticmethod
    def new_instance(model_type: str, model_name: str, model_credential: Dict[str, str], **model_kwargs):
        return TencentEmbeddingModel(
            secret_id=model_credential.get('SecretId'),
            secret_key=model_credential.get('SecretKey'),
            model_name=model_name,
        )

    def _generate_auth_token(self):
        # Example method to generate an authentication token for the model API
        return f"{self.secret_id}:{self.secret_key}"
