Просмотр исходного кода

feat: add AzureNoRemoveDotTime constant and update channel handling #1044

- Introduced a new constant `AzureNoRemoveDotTime` in `constant/azure.go` to manage model name formatting for channels created after May 10, 2025.
- Updated `distributor.go` to set `channel_create_time` in the context.
- Modified `adaptor.go` to conditionally remove dots from model names based on the channel creation time.
- Enhanced `relay_info.go` to include `ChannelCreateTime` in the `RelayInfo` struct.
- Updated English localization files to reflect changes in model name handling for new channels.
CaIon 8 месяцев назад
Родитель
Сommit
7aa54a2cd7

+ 5 - 0
constant/azure.go

@@ -0,0 +1,5 @@
+package constant
+
+import "time"
+
+var AzureNoRemoveDotTime = time.Date(2025, time.May, 10, 0, 0, 0, 0, time.UTC).Unix()

+ 1 - 0
middleware/distributor.go

@@ -213,6 +213,7 @@ func SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, mode
 	c.Set("channel_id", channel.Id)
 	c.Set("channel_name", channel.Name)
 	c.Set("channel_type", channel.Type)
+	c.Set("channel_create_time", channel.CreatedTime)
 	c.Set("channel_setting", channel.GetSetting())
 	c.Set("param_override", channel.GetParamOverride())
 	if nil != channel.OpenAIOrganization && "" != *channel.OpenAIOrganization {

+ 5 - 3
relay/channel/openai/adaptor.go

@@ -8,6 +8,7 @@ import (
 	"io"
 	"mime/multipart"
 	"net/http"
+	"net/textproto"
 	"one-api/common"
 	constant2 "one-api/constant"
 	"one-api/dto"
@@ -25,8 +26,6 @@ import (
 	"path/filepath"
 	"strings"
 
-	"net/textproto"
-
 	"github.com/gin-gonic/gin"
 )
 
@@ -93,7 +92,10 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
 		requestURL = fmt.Sprintf("%s?api-version=%s", requestURL, apiVersion)
 		task := strings.TrimPrefix(requestURL, "/v1/")
 		model_ := info.UpstreamModelName
-		model_ = strings.Replace(model_, ".", "", -1)
+		// 2025年5月10日后创建的渠道不移除.
+		if info.ChannelCreateTime < constant2.AzureNoRemoveDotTime {
+			model_ = strings.Replace(model_, ".", "", -1)
+		}
 		// https://github.com/songquanpeng/one-api/issues/67
 		requestURL = fmt.Sprintf("/openai/deployments/%s/%s", model_, task)
 		if info.RelayMode == constant.RelayModeRealtime {

+ 10 - 8
relay/common/relay_info.go

@@ -98,6 +98,7 @@ type RelayInfo struct {
 	UserQuota            int
 	RelayFormat          string
 	SendResponseCount    int
+	ChannelCreateTime    int64
 	ThinkingContentInfo
 	*ClaudeConvertInfo
 	*RerankerInfo
@@ -209,14 +210,15 @@ func GenRelayInfo(c *gin.Context) *RelayInfo {
 		OriginModelName:   c.GetString("original_model"),
 		UpstreamModelName: c.GetString("original_model"),
 		//RecodeModelName:   c.GetString("original_model"),
-		IsModelMapped:  false,
-		ApiType:        apiType,
-		ApiVersion:     c.GetString("api_version"),
-		ApiKey:         strings.TrimPrefix(c.Request.Header.Get("Authorization"), "Bearer "),
-		Organization:   c.GetString("channel_organization"),
-		ChannelSetting: channelSetting,
-		ParamOverride:  paramOverride,
-		RelayFormat:    RelayFormatOpenAI,
+		IsModelMapped:     false,
+		ApiType:           apiType,
+		ApiVersion:        c.GetString("api_version"),
+		ApiKey:            strings.TrimPrefix(c.Request.Header.Get("Authorization"), "Bearer "),
+		Organization:      c.GetString("channel_organization"),
+		ChannelSetting:    channelSetting,
+		ChannelCreateTime: c.GetInt64("channel_create_time"),
+		ParamOverride:     paramOverride,
+		RelayFormat:       RelayFormatOpenAI,
 		ThinkingContentInfo: ThinkingContentInfo{
 			IsFirstThinkingContent:  true,
 			SendLastThinkingContent: false,

+ 1 - 0
web/src/i18n/locales/en.json

@@ -493,6 +493,7 @@
   "默认": "default",
   "图片演示": "Image demo",
   "注意,系统请求的时模型名称中的点会被剔除,例如:gpt-4.1会请求为gpt-41,所以在Azure部署的时候,部署模型名称需要手动改为gpt-41": "Note that the dot in the model name requested by the system will be removed, for example: gpt-4.1 will be requested as gpt-41, so when deploying on Azure, the deployment model name needs to be manually changed to gpt-41",
+  "2025年5月10日后添加的渠道,不需要再在部署的时候移除模型名称中的\".\"": "After May 10, 2025, channels added do not need to remove the dot in the model name during deployment",
   "模型映射必须是合法的 JSON 格式!": "Model mapping must be in valid JSON format!",
   "取消无限额度": "Cancel unlimited quota",
   "取消": "Cancel",

+ 17 - 17
web/src/pages/Channel/EditChannel.js

@@ -477,24 +477,24 @@ const EditChannel = (props) => {
                   type={'warning'}
                   description={
                     <>
-                      {t('注意,系统请求的时模型名称中的点会被剔除,例如:gpt-4.1会请求为gpt-41,所以在Azure部署的时候,部署模型名称需要手动改为gpt-41')}
-                      <br />
-                      <Typography.Text
-                        style={{
-                          color: 'rgba(var(--semi-blue-5), 1)',
-                          userSelect: 'none',
-                          cursor: 'pointer',
-                        }}
-                        onClick={() => {
-                          setModalImageUrl(
-                            '/azure_model_name.png',
-                          );
-                          setIsModalOpenurl(true)
+                      {t('2025年5月10日后添加的渠道,不需要再在部署的时候移除模型名称中的"."')}
+                      {/*<br />*/}
+                      {/*<Typography.Text*/}
+                      {/*  style={{*/}
+                      {/*    color: 'rgba(var(--semi-blue-5), 1)',*/}
+                      {/*    userSelect: 'none',*/}
+                      {/*    cursor: 'pointer',*/}
+                      {/*  }}*/}
+                      {/*  onClick={() => {*/}
+                      {/*    setModalImageUrl(*/}
+                      {/*      '/azure_model_name.png',*/}
+                      {/*    );*/}
+                      {/*    setIsModalOpenurl(true)*/}
 
-                        }}
-                      >
-                        {t('查看示例')}
-                      </Typography.Text>
+                      {/*  }}*/}
+                      {/*>*/}
+                      {/*  {t('查看示例')}*/}
+                      {/*</Typography.Text>*/}
                     </>
                   }
                 ></Banner>