# coding=utf-8
"""
    @project: maxkb
    @Author：虎
    @file： openai_model_provider.py
    @date：2024/3/28 16:26
    @desc:
"""
import os

from django.utils.translation import gettext as _

from common.utils.common import get_file_content
from maxkb.conf import PROJECT_DIR
from models_provider.base_model_provider import ModelInfo, ModelTypeConst, ModelInfoManage, IModelProvider, \
    ModelProvideInfo
from models_provider.impl.regolo_model_provider.credential.embedding import RegoloEmbeddingCredential
from models_provider.impl.regolo_model_provider.credential.llm import RegoloLLMModelCredential
from models_provider.impl.regolo_model_provider.credential.tti import RegoloTextToImageModelCredential
from models_provider.impl.regolo_model_provider.model.embedding import RegoloEmbeddingModel
from models_provider.impl.regolo_model_provider.model.llm import RegoloChatModel
from models_provider.impl.regolo_model_provider.model.tti import RegoloTextToImage

openai_llm_model_credential = RegoloLLMModelCredential()
openai_tti_model_credential = RegoloTextToImageModelCredential()
model_info_list = [
    ModelInfo('Phi-4', '', ModelTypeConst.LLM,
              openai_llm_model_credential, RegoloChatModel
              ),
    ModelInfo('DeepSeek-R1-Distill-Qwen-32B', '', ModelTypeConst.LLM,
              openai_llm_model_credential,
              RegoloChatModel),
    ModelInfo('maestrale-chat-v0.4-beta', '',
              ModelTypeConst.LLM, openai_llm_model_credential,
              RegoloChatModel),
    ModelInfo('Llama-3.3-70B-Instruct',
              '',
              ModelTypeConst.LLM, openai_llm_model_credential,
              RegoloChatModel),
    ModelInfo('Llama-3.1-8B-Instruct',
              '',
              ModelTypeConst.LLM, openai_llm_model_credential,
              RegoloChatModel),
    ModelInfo('DeepSeek-Coder-6.7B-Instruct', '',
              ModelTypeConst.LLM, openai_llm_model_credential,
              RegoloChatModel)
]
open_ai_embedding_credential = RegoloEmbeddingCredential()
model_info_embedding_list = [
    ModelInfo('gte-Qwen2', '',
              ModelTypeConst.EMBEDDING, open_ai_embedding_credential,
              RegoloEmbeddingModel),
]

model_info_tti_list = [
    ModelInfo('FLUX.1-dev', '',
              ModelTypeConst.TTI, openai_tti_model_credential,
              RegoloTextToImage),
    ModelInfo('sdxl-turbo', '',
              ModelTypeConst.TTI, openai_tti_model_credential,
              RegoloTextToImage),
]
model_info_manage = (
    ModelInfoManage.builder()
    .append_model_info_list(model_info_list)
    .append_default_model_info(
        ModelInfo('gpt-3.5-turbo', _('The latest gpt-3.5-turbo, updated with OpenAI adjustments'), ModelTypeConst.LLM,
                  openai_llm_model_credential, RegoloChatModel
                  ))
    .append_model_info_list(model_info_embedding_list)
    .append_default_model_info(model_info_embedding_list[0])
    .append_model_info_list(model_info_tti_list)
    .append_default_model_info(model_info_tti_list[0])

    .build()
)


class RegoloModelProvider(IModelProvider):

    def get_model_info_manage(self):
        return model_info_manage

    def get_model_provide_info(self):
        return ModelProvideInfo(provider='model_regolo_provider', name='Regolo', icon=get_file_content(
            os.path.join(PROJECT_DIR, "apps", 'models_provider', 'impl', 'regolo_model_provider',
                         'icon',
                         'regolo_icon_svg')))
