feat: add video URL support in MediaContent and update token counting logic
This commit is contained in:
@@ -114,6 +114,7 @@ type MediaContent struct {
|
|||||||
ImageUrl any `json:"image_url,omitempty"`
|
ImageUrl any `json:"image_url,omitempty"`
|
||||||
InputAudio any `json:"input_audio,omitempty"`
|
InputAudio any `json:"input_audio,omitempty"`
|
||||||
File any `json:"file,omitempty"`
|
File any `json:"file,omitempty"`
|
||||||
|
VideoUrl any `json:"video_url,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MediaContent) GetImageMedia() *MessageImageUrl {
|
func (m *MediaContent) GetImageMedia() *MessageImageUrl {
|
||||||
@@ -158,11 +159,16 @@ type MessageFile struct {
|
|||||||
FileId string `json:"file_id,omitempty"`
|
FileId string `json:"file_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MessageVideoUrl struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ContentTypeText = "text"
|
ContentTypeText = "text"
|
||||||
ContentTypeImageURL = "image_url"
|
ContentTypeImageURL = "image_url"
|
||||||
ContentTypeInputAudio = "input_audio"
|
ContentTypeInputAudio = "input_audio"
|
||||||
ContentTypeFile = "file"
|
ContentTypeFile = "file"
|
||||||
|
ContentTypeVideoUrl = "video_url" // 阿里百炼视频识别
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m *Message) GetPrefix() bool {
|
func (m *Message) GetPrefix() bool {
|
||||||
@@ -346,6 +352,15 @@ func (m *Message) ParseContent() []MediaContent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case ContentTypeVideoUrl:
|
||||||
|
if videoUrl, ok := contentItem["video_url"].(string); ok {
|
||||||
|
contentList = append(contentList, MediaContent{
|
||||||
|
Type: ContentTypeVideoUrl,
|
||||||
|
VideoUrl: &MessageVideoUrl{
|
||||||
|
Url: videoUrl,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
main.go
4
main.go
@@ -80,6 +80,8 @@ func main() {
|
|||||||
// Initialize options
|
// Initialize options
|
||||||
model.InitOptionMap()
|
model.InitOptionMap()
|
||||||
|
|
||||||
|
service.InitTokenEncoders()
|
||||||
|
|
||||||
if common.RedisEnabled {
|
if common.RedisEnabled {
|
||||||
// for compatibility with old versions
|
// for compatibility with old versions
|
||||||
common.MemoryCacheEnabled = true
|
common.MemoryCacheEnabled = true
|
||||||
@@ -133,8 +135,6 @@ func main() {
|
|||||||
common.SysLog("pprof enabled")
|
common.SysLog("pprof enabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
service.InitTokenEncoders()
|
|
||||||
|
|
||||||
// Initialize HTTP server
|
// Initialize HTTP server
|
||||||
server := gin.New()
|
server := gin.New()
|
||||||
server.Use(gin.CustomRecovery(func(c *gin.Context, err any) {
|
server.Use(gin.CustomRecovery(func(c *gin.Context, err any) {
|
||||||
|
|||||||
@@ -400,6 +400,8 @@ func CountTokenMessages(info *relaycommon.RelayInfo, messages []dto.Message, mod
|
|||||||
tokenNum += 100
|
tokenNum += 100
|
||||||
} else if m.Type == dto.ContentTypeFile {
|
} else if m.Type == dto.ContentTypeFile {
|
||||||
tokenNum += 5000
|
tokenNum += 5000
|
||||||
|
} else if m.Type == dto.ContentTypeVideoUrl {
|
||||||
|
tokenNum += 5000
|
||||||
} else {
|
} else {
|
||||||
tokenNum += getTokenNum(tokenEncoder, m.Text)
|
tokenNum += getTokenNum(tokenEncoder, m.Text)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user