diff --git a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/en-us.json b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/en-us.json index b100b2796f59afc6155a8b6bf693620887473821..560fffd3c13a2afa7331a92cb168b49443196ac8 100644 --- a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/en-us.json +++ b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/en-us.json @@ -1096,7 +1096,7 @@ "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.modelServiceProvider": "Provider", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.serviceProviderName": "Service Provider Name", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.AliyunBailian": "Alibaba Cloud Bailian", - "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "You can select a model service provider that is compatible with the OpenAI API format, and register for an API Key and API calling address. Providers include Alibaba Cloud Bailian (Mainland China), ModelStudio (Singapore), OpenAI, OpenRouter, Silicon Intelligence, and other similar vendors.", + "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "You can select a model service provider that is compatible with the OpenAI API format, and register for an API Key and API calling address. Providers include Alibaba Cloud Bailian (Mainland China), ModelStudio (Singapore), OpenAI, OrcaRouter, OpenRouter, Silicon Intelligence, and other similar vendors.", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterServiceProviderName": "Please enter service provider name", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterYourServiceProviderName": "Enter your service provider name", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.goToAliyunBailian": "Go to Alibaba Cloud Bailian to get", diff --git a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/ja-jp.json b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/ja-jp.json index 069d629b5663a18c979c9d5009b142fa59a32b09..86e85f5dba4284fd91ea87f033adcd6da497703e 100644 --- a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/ja-jp.json +++ b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/ja-jp.json @@ -1095,7 +1095,7 @@ "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.howToGetModelServiceApi": "モデルサービスAPIをどのように取得しますか?", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.modelServiceProvider": "モデルサービスプロバイダー", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.AliyunBailian": "阿里云百錬", - "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "OpenAI API形式に準拠したモデルサービスプロバイダーを選択できます。API KeyとAPI呼び出しアドレスを登録してください。例:阿里云百錬(中国本土)、ModelStudio(シンガポール)、OpenAI、OpenRouter、硅基智能およびその他の同タイプのベンダーです。", + "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "OpenAI API形式に準拠したモデルサービスプロバイダーを選択できます。API KeyとAPI呼び出しアドレスを登録してください。例:阿里云百錬(中国本土)、ModelStudio(シンガポール)、OpenAI、OrcaRouter、OpenRouter、硅基智能およびその他の同タイプのベンダーです。", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.serviceProviderName": "サービスプロバイダー名", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterServiceProviderName": "サービスプロバイダー名を入力してください", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterYourServiceProviderName": "あなたのサービスプロバイダー名を入力してください", diff --git a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/zh-cn.json b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/zh-cn.json index 0684c364ae73e5f5b75cc17653898b685ab68c8d..bb1b54cc64b637ac4de3d0edd71dbd90254949cb 100644 --- a/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/zh-cn.json +++ b/spring-ai-alibaba-admin/frontend/packages/main/src/i18n/locales/zh-cn.json @@ -1095,7 +1095,7 @@ "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.howToGetModelServiceApi": "如何获取模型服务API?", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.modelServiceProvider": "模型服务供应商", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.AliyunBailian": "阿里云百炼", - "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "您可以选择符合OpenAI API格式的模型服务供应商,注册API Key及API调用地址,如阿里云百炼(中国大陆)、ModelStudio(新加坡)、OpenAI、OpenRouter、硅基智能及其他同类型厂商。", + "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription": "您可以选择符合OpenAI API格式的模型服务供应商,注册API Key及API调用地址,如阿里云百炼(中国大陆)、ModelStudio(新加坡)、OpenAI、OrcaRouter、OpenRouter、硅基智能及其他同类型厂商。", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.serviceProviderName": "服务商名称", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterServiceProviderName": "请输入服务商名称", "main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.enterYourServiceProviderName": "输入您的服务商名称", diff --git a/spring-ai-alibaba-admin/frontend/packages/main/src/pages/Setting/utils/index.ts b/spring-ai-alibaba-admin/frontend/packages/main/src/pages/Setting/utils/index.ts index 1ba4bb705bec29aa9a8ce71826cafaacdf7d2463..09e5dabb5115ee787e2e2b844ac0e60f40ac84ca 100644 --- a/spring-ai-alibaba-admin/frontend/packages/main/src/pages/Setting/utils/index.ts +++ b/spring-ai-alibaba-admin/frontend/packages/main/src/pages/Setting/utils/index.ts @@ -22,10 +22,11 @@ export const API_KEY_TIP_SECTIONS = [ }, { text: 'OpenAI', url: 'https://openai.com/api/' }, { text: 'OpenRouter', url: 'https://openrouter.ai/' }, + { text: 'OrcaRouter', url: 'https://www.orcarouter.ai/' }, ], description: $i18n.get({ id: 'main.pages.Setting.ModelService.components.ModelServiceProviderModal.index.providerNameDescription', - dm: '您可以选择符合OpenAI API格式的模型服务供应商,注册API Key及API调用地址,如阿里云百炼(中国大陆)、ModelStudio(新加坡)、OpenAI、OpenRouter、硅基智能及其他同类型厂商。', + dm: '您可以选择符合OpenAI API格式的模型服务供应商,注册API Key及API调用地址,如阿里云百炼(中国大陆)、ModelStudio(新加坡)、OpenAI、OrcaRouter、OpenRouter、硅基智能及其他同类型厂商。', }), }, ]; diff --git a/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/base/service/impl/AccountServiceImpl.java b/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/base/service/impl/AccountServiceImpl.java index 981ff1b70249ca160fafbaade3f984da20b414fe..80d81d447002337c2a7d170a55e9f923786a4fe7 100644 --- a/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/base/service/impl/AccountServiceImpl.java +++ b/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/base/service/impl/AccountServiceImpl.java @@ -292,6 +292,33 @@ public class AccountServiceImpl extends ServiceImpl orcaRouterModels = Arrays + .asList(createModelConfig("orcarouter/auto", "orcarouter/auto", "llm", "chat", null)); + + for (ModelConfigInfo model : orcaRouterModels) { + model.setProvider("OrcaRouter"); + model.setSource("preset"); + model.setEnable(true); + modelManager.addModel(model); + } } private ModelConfigInfo createModelConfig(String modelId, String name, String type, String mode, diff --git a/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/model/llm/impl/OrcaRouterProvider.java b/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/model/llm/impl/OrcaRouterProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..0bc54195b7686e50d4eeefd06cc95069c0d888f2 --- /dev/null +++ b/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-core/src/main/java/com/alibaba/cloud/ai/studio/core/model/llm/impl/OrcaRouterProvider.java @@ -0,0 +1,80 @@ +/* + * Copyright 2024-2026 the original author or 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 + * + * https://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 com.alibaba.cloud.ai.studio.core.model.llm.impl; + +import com.alibaba.cloud.ai.studio.runtime.domain.model.CredentialSpec; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Provider implementation for OrcaRouter LLM service + */ +@Component("OrcaRouterProvider") +public class OrcaRouterProvider extends OpenAIProvider { + + /** + * Returns the provider code + */ + @Override + public String getCode() { + return "OrcaRouter"; + } + + /** + * Returns the provider name + */ + @Override + public String getName() { + return "OrcaRouter"; + } + + /** + * Returns the provider description + */ + @Override + public String getDescription() { + return "OrcaRouter 兼容 OpenAI 的 LLM 路由网关"; + } + + /** + * Returns the default provider endpoint + */ + @Override + public String getEndpoint() { + return "https://api.orcarouter.ai/v1"; + } + + /** + * Returns the credential specifications required for authentication + * @return List of credential specifications + */ + @Override + public List getCredentialSpecs() { + return List.of( + new CredentialSpec().setCode("api_key") + .setDisplayName("API Key") + .setDescription("OrcaRouter API key required to authenticate with the remote model service") + .setPlaceHolder("Enter OrcaRouter API key") + .setSensitive(true), + new CredentialSpec().setCode("endpoint") + .setDisplayName("Endpoint") + .setDescription("Endpoint required to call the OrcaRouter model service") + .setPlaceHolder("Enter endpoint") + .setSensitive(false)); + } + +}