diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModel.java index 6a5132b0ce..affa159e06 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModel.java @@ -16,18 +16,62 @@ package org.thingsboard.server.common.data.ai.model; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver; +import org.thingsboard.server.common.data.ai.model.chat.AmazonBedrockChatModel; +import org.thingsboard.server.common.data.ai.model.chat.AnthropicChatModel; +import org.thingsboard.server.common.data.ai.model.chat.AzureOpenAiChatModel; +import org.thingsboard.server.common.data.ai.model.chat.GitHubModelsChatModel; +import org.thingsboard.server.common.data.ai.model.chat.GoogleAiGeminiChatModel; +import org.thingsboard.server.common.data.ai.model.chat.GoogleVertexAiGeminiChatModel; +import org.thingsboard.server.common.data.ai.model.chat.MistralAiChatModel; +import org.thingsboard.server.common.data.ai.model.chat.OpenAiChatModel; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.AiProviderConfig; +import org.thingsboard.server.common.data.ai.provider.AmazonBedrockProviderConfig; +import org.thingsboard.server.common.data.ai.provider.AnthropicProviderConfig; +import org.thingsboard.server.common.data.ai.provider.AzureOpenAiProviderConfig; +import org.thingsboard.server.common.data.ai.provider.GitHubModelsProviderConfig; +import org.thingsboard.server.common.data.ai.provider.GoogleAiGeminiProviderConfig; +import org.thingsboard.server.common.data.ai.provider.GoogleVertexAiGeminiProviderConfig; +import org.thingsboard.server.common.data.ai.provider.MistralAiProviderConfig; +import org.thingsboard.server.common.data.ai.provider.OpenAiProviderConfig; @JsonTypeInfo( - use = JsonTypeInfo.Id.CUSTOM, + use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, - property = "@type" + property = "provider", + visible = true ) -@JsonTypeIdResolver(AiModelTypeIdResolver.class) +@JsonSubTypes({ + @JsonSubTypes.Type(value = OpenAiChatModel.class, name = "OPENAI"), + @JsonSubTypes.Type(value = AzureOpenAiChatModel.class, name = "AZURE_OPENAI"), + @JsonSubTypes.Type(value = GoogleAiGeminiChatModel.class, name = "GOOGLE_AI_GEMINI"), + @JsonSubTypes.Type(value = GoogleVertexAiGeminiChatModel.class, name = "GOOGLE_VERTEX_AI_GEMINI"), + @JsonSubTypes.Type(value = MistralAiChatModel.class, name = "MISTRAL_AI"), + @JsonSubTypes.Type(value = AnthropicChatModel.class, name = "ANTHROPIC"), + @JsonSubTypes.Type(value = AmazonBedrockChatModel.class, name = "AMAZON_BEDROCK"), + @JsonSubTypes.Type(value = GitHubModelsChatModel.class, name = "GITHUB_MODELS") +}) public interface AiModel { + AiProvider provider(); + + @JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.EXTERNAL_PROPERTY, + property = "provider" + ) + @JsonSubTypes({ + @JsonSubTypes.Type(value = OpenAiProviderConfig.class, name = "OPENAI"), + @JsonSubTypes.Type(value = AzureOpenAiProviderConfig.class, name = "AZURE_OPENAI"), + @JsonSubTypes.Type(value = GoogleAiGeminiProviderConfig.class, name = "GOOGLE_AI_GEMINI"), + @JsonSubTypes.Type(value = GoogleVertexAiGeminiProviderConfig.class, name = "GOOGLE_VERTEX_AI_GEMINI"), + @JsonSubTypes.Type(value = MistralAiProviderConfig.class, name = "MISTRAL_AI"), + @JsonSubTypes.Type(value = AnthropicProviderConfig.class, name = "ANTHROPIC"), + @JsonSubTypes.Type(value = AmazonBedrockProviderConfig.class, name = "AMAZON_BEDROCK"), + @JsonSubTypes.Type(value = GitHubModelsProviderConfig.class, name = "GITHUB_MODELS") + }) AiProviderConfig providerConfig(); @JsonProperty("modelType") diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModelTypeIdResolver.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModelTypeIdResolver.java deleted file mode 100644 index 96a5a70390..0000000000 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/AiModelTypeIdResolver.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Copyright © 2016-2025 The Thingsboard 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. - */ -package org.thingsboard.server.common.data.ai.model; - -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.DatabindContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase; -import org.thingsboard.server.common.data.ai.model.chat.AmazonBedrockChatModel; -import org.thingsboard.server.common.data.ai.model.chat.AnthropicChatModel; -import org.thingsboard.server.common.data.ai.model.chat.GitHubModelsChatModel; -import org.thingsboard.server.common.data.ai.model.chat.GoogleAiGeminiChatModel; -import org.thingsboard.server.common.data.ai.model.chat.GoogleVertexAiGeminiChatModel; -import org.thingsboard.server.common.data.ai.model.chat.MistralAiChatModel; -import org.thingsboard.server.common.data.ai.model.chat.OpenAiChatModel; -import org.thingsboard.server.common.data.ai.provider.AiProvider; - -import java.util.Map; - -public final class AiModelTypeIdResolver extends TypeIdResolverBase { - - private static final Map> typeIdToModelClass = Map.ofEntries( - // OpenAI models - Map.entry("OPENAI::o4-mini", OpenAiChatModel.class), - // Map.entry("OPENAI::o3-pro", OpenAiChatModel.class); // needs verification with Gov ID :) - // Map.entry("OPENAI::o3", OpenAiChatModel.class); // needs verification with Gov ID :) - Map.entry("OPENAI::o3-mini", OpenAiChatModel.class), - // Map.entry("OPENAI::o1-pro", OpenAiChatModel.class); // LC4j sends requests to v1/chat/completions, but o1-pro is only supported in v1/responses - Map.entry("OPENAI::o1", OpenAiChatModel.class), - Map.entry("OPENAI::gpt-4.1", OpenAiChatModel.class), - Map.entry("OPENAI::gpt-4.1-mini", OpenAiChatModel.class), - Map.entry("OPENAI::gpt-4.1-nano", OpenAiChatModel.class), - Map.entry("OPENAI::gpt-4o", OpenAiChatModel.class), - Map.entry("OPENAI::gpt-4o-mini", OpenAiChatModel.class), - - // Google AI Gemini models - Map.entry("GOOGLE_AI_GEMINI::gemini-2.5-pro", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-2.5-flash", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-2.0-flash", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-2.0-flash-lite", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-1.5-pro", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-1.5-flash", GoogleAiGeminiChatModel.class), - Map.entry("GOOGLE_AI_GEMINI::gemini-1.5-flash-8b", GoogleAiGeminiChatModel.class), - - // Google Vertex AI Gemini models - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-2.5-pro", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-2.5-flash", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-2.0-flash", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-2.0-flash-lite", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-1.5-pro", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-1.5-flash", GoogleVertexAiGeminiChatModel.class), - Map.entry("GOOGLE_VERTEX_AI_GEMINI::gemini-1.5-flash-8b", GoogleVertexAiGeminiChatModel.class), - - // Mistral AI models - Map.entry("MISTRAL_AI::magistral-medium-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::magistral-small-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::mistral-large-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::mistral-medium-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::mistral-small-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::pixtral-large-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::ministral-8b-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::ministral-3b-latest", MistralAiChatModel.class), - Map.entry("MISTRAL_AI::open-mistral-nemo", MistralAiChatModel.class), - - // Anthropic models - Map.entry("ANTHROPIC::claude-opus-4-0", AnthropicChatModel.class), - Map.entry("ANTHROPIC::claude-sonnet-4-0", AnthropicChatModel.class), - Map.entry("ANTHROPIC::claude-3-7-sonnet-latest", AnthropicChatModel.class), - Map.entry("ANTHROPIC::claude-3-5-sonnet-latest", AnthropicChatModel.class), - Map.entry("ANTHROPIC::claude-3-5-haiku-latest", AnthropicChatModel.class), - Map.entry("ANTHROPIC::claude-3-opus-latest", AnthropicChatModel.class), - - // Amazon Bedrock models - Map.entry("AMAZON_BEDROCK::amazon.nova-lite-v1:0", AmazonBedrockChatModel.class), - - // GitHub Models models - Map.entry("GITHUB_MODELS::gpt-4o", GitHubModelsChatModel.class) - ); - - private static final String PROVIDER_MODEL_SEPARATOR = "::"; - - private JavaType baseType; - - @Override - public void init(JavaType baseType) { - this.baseType = baseType; - } - - @Override - public String idFromValue(Object value) { - return generateId((AiModel) value); - } - - @Override - public String idFromValueAndType(Object value, Class suggestedType) { - return generateId((AiModel) value); - } - - @Override - public JavaType typeFromId(DatabindContext context, String id) { - Class modelClass = typeIdToModelClass.get(id); - if (modelClass != null) { // known model - return context.constructSpecializedType(baseType, modelClass); - } - - String[] parts = id.split(PROVIDER_MODEL_SEPARATOR, 2); - if (parts.length != 2) { - throw new IllegalArgumentException("Invalid model type ID format: " + id + ". Expected format: PROVIDER::MODEL_ID"); - } - - String providerName = parts[0]; - - // Check if the provider exists - AiProvider provider; - try { - provider = AiProvider.valueOf(providerName); - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("Unknown AI provider: " + providerName); - } - - // Provider is valid but model is unknown - fallback to default model class - modelClass = provider.getDefaultModelClass(); - - return context.constructSpecializedType(baseType, modelClass); - } - - @Override - public JsonTypeInfo.Id getMechanism() { - return JsonTypeInfo.Id.CUSTOM; - } - - private static String generateId(AiModel model) { - String provider = model.providerConfig().provider().name(); - String modelId = model.modelConfig().modelId(); - return provider + PROVIDER_MODEL_SEPARATOR + modelId; - } - -} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java index 422f646f8f..7d380a0dfd 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.AmazonBedrockProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record AmazonBedrockChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.AMAZON_BEDROCK; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java index 3258229372..cdfb4842be 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.AnthropicProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record AnthropicChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.ANTHROPIC; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java index 2e783d26d1..a70ac7329b 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.AzureOpenAiProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record AzureOpenAiChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.AZURE_OPENAI; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java index cc981cc5c5..a3ad41ff3c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java @@ -18,16 +18,22 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; -import org.thingsboard.server.common.data.ai.provider.GithubModelsProviderConfig; +import org.thingsboard.server.common.data.ai.provider.AiProvider; +import org.thingsboard.server.common.data.ai.provider.GitHubModelsProviderConfig; import java.util.List; public record GitHubModelsChatModel( AiModelType modelType, - GithubModelsProviderConfig providerConfig, + GitHubModelsProviderConfig providerConfig, @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.GITHUB_MODELS; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java index e5fba391b0..6dce59e248 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.GoogleAiGeminiProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record GoogleAiGeminiChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.GOOGLE_AI_GEMINI; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java index f0e5834d54..f921b977d9 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.GoogleVertexAiGeminiProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record GoogleVertexAiGeminiChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.GOOGLE_VERTEX_AI_GEMINI; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java index ac1d644dcc..a1fce27ff7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.MistralAiProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record MistralAiChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.MISTRAL_AI; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java index 8a5556b309..a6cb659d6c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java @@ -18,6 +18,7 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; +import org.thingsboard.server.common.data.ai.provider.AiProvider; import org.thingsboard.server.common.data.ai.provider.OpenAiProviderConfig; import java.util.List; @@ -28,6 +29,11 @@ public record OpenAiChatModel( @With Config modelConfig ) implements AiChatModel { + @Override + public AiProvider provider() { + return AiProvider.OPENAI; + } + @With public record Config( String modelId, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AiProviderConfig.java index 04ca775f7f..bd32c88efb 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AiProviderConfig.java @@ -15,30 +15,8 @@ */ package org.thingsboard.server.common.data.ai.provider; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - property = "provider" -) -@JsonSubTypes({ - @JsonSubTypes.Type(value = OpenAiProviderConfig.class, name = "OPENAI"), - @JsonSubTypes.Type(value = AzureOpenAiProviderConfig.class, name = "AZURE_OPENAI"), - @JsonSubTypes.Type(value = GoogleAiGeminiProviderConfig.class, name = "GOOGLE_AI_GEMINI"), - @JsonSubTypes.Type(value = GoogleVertexAiGeminiProviderConfig.class, name = "GOOGLE_VERTEX_AI_GEMINI"), - @JsonSubTypes.Type(value = MistralAiProviderConfig.class, name = "MISTRAL_AI"), - @JsonSubTypes.Type(value = AnthropicProviderConfig.class, name = "ANTHROPIC"), - @JsonSubTypes.Type(value = AmazonBedrockProviderConfig.class, name = "AMAZON_BEDROCK"), - @JsonSubTypes.Type(value = GithubModelsProviderConfig.class, name = "GITHUB_MODELS") -}) public sealed interface AiProviderConfig permits OpenAiProviderConfig, AzureOpenAiProviderConfig, GoogleAiGeminiProviderConfig, GoogleVertexAiGeminiProviderConfig, MistralAiProviderConfig, AnthropicProviderConfig, - AmazonBedrockProviderConfig, GithubModelsProviderConfig { - - AiProvider provider(); - -} + AmazonBedrockProviderConfig, GitHubModelsProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AmazonBedrockProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AmazonBedrockProviderConfig.java index 7ecb0bcdb4..866e25c803 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AmazonBedrockProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AmazonBedrockProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record AmazonBedrockProviderConfig(String region, String accessKeyId, String secretAccessKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.AMAZON_BEDROCK; - } - -} +public record AmazonBedrockProviderConfig(String region, String accessKeyId, String secretAccessKey) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AnthropicProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AnthropicProviderConfig.java index 91ef41a072..de48120bda 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AnthropicProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AnthropicProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record AnthropicProviderConfig(String apiKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.ANTHROPIC; - } - -} +public record AnthropicProviderConfig(String apiKey) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AzureOpenAiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AzureOpenAiProviderConfig.java index 0b948eabab..8bebafe117 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AzureOpenAiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/AzureOpenAiProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record AzureOpenAiProviderConfig(String apiKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.AZURE_OPENAI; - } - -} +public record AzureOpenAiProviderConfig(String apiKey) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GithubModelsProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GitHubModelsProviderConfig.java similarity index 77% rename from common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GithubModelsProviderConfig.java rename to common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GitHubModelsProviderConfig.java index afbac79dd1..278fd9544a 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GithubModelsProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GitHubModelsProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record GithubModelsProviderConfig(String personalAccessToken) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.GITHUB_MODELS; - } - -} +public record GitHubModelsProviderConfig(String personalAccessToken) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleAiGeminiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleAiGeminiProviderConfig.java index 35def6f0f5..668d98dc71 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleAiGeminiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleAiGeminiProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record GoogleAiGeminiProviderConfig(String apiKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.GOOGLE_AI_GEMINI; - } - -} +public record GoogleAiGeminiProviderConfig(String apiKey) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleVertexAiGeminiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleVertexAiGeminiProviderConfig.java index e714b7d371..dad3200e9e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleVertexAiGeminiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/GoogleVertexAiGeminiProviderConfig.java @@ -20,11 +20,4 @@ public record GoogleVertexAiGeminiProviderConfig( String projectId, String location, String serviceAccountKey -) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.GOOGLE_VERTEX_AI_GEMINI; - } - -} +) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/MistralAiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/MistralAiProviderConfig.java index 29c251b3cd..45417bbcd2 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/MistralAiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/MistralAiProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record MistralAiProviderConfig(String apiKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.MISTRAL_AI; - } - -} +public record MistralAiProviderConfig(String apiKey) implements AiProviderConfig {} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/OpenAiProviderConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/OpenAiProviderConfig.java index 6c069276d5..c943517175 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/OpenAiProviderConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/provider/OpenAiProviderConfig.java @@ -15,11 +15,4 @@ */ package org.thingsboard.server.common.data.ai.provider; -public record OpenAiProviderConfig(String apiKey) implements AiProviderConfig { - - @Override - public AiProvider provider() { - return AiProvider.OPENAI; - } - -} +public record OpenAiProviderConfig(String apiKey) implements AiProviderConfig {}