Spaces:
Running
Running
| // Copyright 2025 The ODML Authors. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| namespace litert::lm { | |
| using ::litert::BufferRef; | |
| using ::litert::Model; | |
| // static | |
| absl::StatusOr<std::unique_ptr<ModelResources>> ModelResourcesTask::Create( | |
| std::unique_ptr<ModelAssetBundleResources> model_asset_bundle_resources) { | |
| auto model_resources = absl::WrapUnique( | |
| new ModelResourcesTask(std::move(model_asset_bundle_resources))); | |
| return model_resources; | |
| } | |
| absl::StatusOr<absl::string_view> ModelResourcesTask::GetTFLiteModelBuffer( | |
| ModelType model_type) { | |
| std::string model_file = litert::lm::ModelTypeToString(model_type); | |
| return model_asset_bundle_resources_->GetFile(model_file); | |
| }; | |
| absl::StatusOr<const litert::Model*> ModelResourcesTask::GetTFLiteModel( | |
| ModelType model_type) { | |
| auto it = model_map_.find(model_type); | |
| if (it != model_map_.end()) { | |
| return it->second.get(); | |
| } | |
| std::string model_file = litert::lm::ModelTypeToString(model_type); | |
| auto buffer = model_asset_bundle_resources_->GetFile(model_file); | |
| if (!buffer.ok()) { | |
| return absl::NotFoundError(absl::StrCat(ModelTypeToString(model_type), | |
| " not found in the model.")); | |
| } | |
| ABSL_LOG(INFO) << "litert model size: " << buffer->size(); | |
| auto buffer_ref = BufferRef<uint8_t>(buffer->data(), buffer->size()); | |
| LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromBuffer(buffer_ref)); | |
| model_map_[model_type] = std::make_unique<Model>(std::move(model)); | |
| return model_map_[model_type].get(); | |
| } | |
| absl::StatusOr<std::unique_ptr<Tokenizer>> ModelResourcesTask::GetTokenizer() { | |
| ASSIGN_OR_RETURN(auto string_view, | |
| model_asset_bundle_resources_->GetFile("TOKENIZER_MODEL")); | |
| return SentencePieceTokenizer::CreateFromBuffer(string_view); | |
| } | |
| absl::StatusOr<const proto::LlmMetadata*> ModelResourcesTask::GetLlmMetadata() { | |
| if (llm_metadata_ == nullptr) { | |
| ASSIGN_OR_RETURN(auto string_view, | |
| model_asset_bundle_resources_->GetFile("METADATA")); | |
| ASSIGN_OR_RETURN(auto llm_metadata, | |
| ExtractOrConvertLlmMetadata(string_view)); | |
| llm_metadata_ = | |
| std::make_unique<proto::LlmMetadata>(std::move(llm_metadata)); | |
| ABSL_LOG(INFO) << "The llm metadata: " << llm_metadata_->DebugString(); | |
| } | |
| return llm_metadata_.get(); | |
| }; | |
| } // namespace litert::lm | |