* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
* MindIE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include "lora/loraops_mixin.h"
#include "lora_manager.h"
namespace mindie_llm {
Status LoraOpsMixin::LoraLoad(const std::vector<LoraParamSPtr> &loraInfo, size_t dpSize)
{
if (loraInfo.size() != 1) {
return Status(Error::Code::ERROR, "The number of load loraInfo is invalid");
}
Status ret;
for (size_t i = 0; i < dpSize; ++i) {
auto loraManager = mindie_llm::LoraManager::GetInstance(i);
if (loraManager != nullptr) {
ret = loraManager->Load(loraInfo.front());
} else {
return Status(Error::Code::ERROR, "LoraManager instance for index " + std::to_string(i) + " is null");
}
}
return ret;
}
Status LoraOpsMixin::LoraUnLoad(const std::vector<LoraParamSPtr> &loraInfo, size_t dpSize)
{
if (loraInfo.size() != 1) {
return Status(Error::Code::ERROR, "The number of unload loraInfo is invalid");
}
std::string loadLoraId = loraInfo.front()->loraName;
Status ret;
for (size_t i = 0; i < dpSize; ++i) {
auto loraManager = mindie_llm::LoraManager::GetInstance(i);
if (loraManager != nullptr) {
ret = loraManager->StartToUnload(loadLoraId);
} else {
return Status(Error::Code::ERROR, "LoraManager instance for index " + std::to_string(i) + " is null");
}
}
return ret;
}
Status LoraOpsMixin::LoraGetLoaded(std::vector<LoraParamSPtr> &loraInfo, size_t dpSize)
{
Status ret;
for (size_t i = 0; i < dpSize; ++i) {
auto loraManager = mindie_llm::LoraManager::GetInstance(i);
if (loraManager != nullptr) {
ret = loraManager->GetLoadedLoras(loraInfo);
} else {
return Status(Error::Code::ERROR, "LoraManager instance for index " + std::to_string(i) + " is null");
}
}
return ret;
}
void LoraOpsMixin::InitStaticLoras(const std::vector<ModelParam> &modelParamVec, size_t dpSize)
{
for (size_t i = 0; i < dpSize; ++i) {
auto loraManager = mindie_llm::LoraManager::GetInstance(i);
if (loraManager != nullptr) {
loraManager->InitLoadedLoras(modelParamVec);
}
}
}
}