Add extra field to model instance (#14203)

### What problem does this PR solve?

Now each model support region with different URL

### Type of change

- [x] New Feature (non-breaking change which adds functionality)

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-04-20 15:31:12 +08:00
committed by GitHub
parent 939933649a
commit af2ed416a7
22 changed files with 398 additions and 550 deletions

View File

@@ -1597,49 +1597,48 @@ func (p *Parser) parseSetVariable() (*Command, error) {
func (p *Parser) parseSetDefault() (*Command, error) {
p.nextToken() // consume DEFAULT
var modelType, modelProvider, modelInstance, modelName string
var modelType, compositeModelName string
var err error
switch p.curToken.Type {
case TokenLLM:
case TokenChat:
modelType = "chat"
case TokenVLM:
modelType = "image2text"
case TokenVision:
modelType = "vision"
case TokenEmbedding:
modelType = "embedding"
case TokenReranker:
case TokenRerank:
modelType = "rerank"
case TokenASR:
modelType = "asr"
case TokenTTS:
modelType = "tts"
case TokenOCR:
modelType = "ocr"
default:
return nil, fmt.Errorf("unknown model type: %s", p.curToken.Value)
}
p.nextToken() // pass model type
p.nextToken()
modelProvider, err = p.parseQuotedString()
if p.curToken.Type != TokenModel {
return nil, fmt.Errorf("expected MODEL")
}
p.nextToken() // pass MODEL
// Format: 'provider/instance/model' or just 'message'
if p.curToken.Type != TokenQuotedString {
return nil, fmt.Errorf("expected quoted string with format provider/instance/model")
}
compositeModelName, err = p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
modelInstance, err = p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
modelName, err = p.parseQuotedString()
if err != nil {
return nil, err
}
cmd := NewCommand("set_default_model")
cmd.Params["model_type"] = modelType
cmd.Params["model_provider"] = modelProvider
cmd.Params["model_instance"] = modelInstance
cmd.Params["model_name"] = modelName
cmd.Params["composite_model_name"] = compositeModelName
p.nextToken()
// Semicolon is optional for UNSET TOKEN
@@ -1717,26 +1716,33 @@ func (p *Parser) parseResetCommand() (*Command, error) {
var modelType string
switch p.curToken.Type {
case TokenLLM:
modelType = "llm_id"
case TokenVLM:
modelType = "img2txt_id"
case TokenChat:
modelType = "chat"
case TokenVision:
modelType = "vision"
case TokenEmbedding:
modelType = "embd_id"
case TokenReranker:
modelType = "reranker_id"
modelType = "embedding"
case TokenRerank:
modelType = "rerank"
case TokenASR:
modelType = "asr_id"
modelType = "asr"
case TokenTTS:
modelType = "tts_id"
modelType = "tts"
case TokenOCR:
modelType = "ocr"
default:
return nil, fmt.Errorf("unknown model type: %s", p.curToken.Value)
}
cmd := NewCommand("reset_default_model")
cmd.Params["model_type"] = modelType
p.nextToken()
if p.curToken.Type != TokenModel {
return nil, fmt.Errorf("expected MODEL")
}
p.nextToken() // pass MODEL
// Semicolon is optional for UNSET TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
@@ -2144,7 +2150,7 @@ func (p *Parser) parseDisableCommand() (*Command, error) {
func (p *Parser) parseChatCommand() (*Command, error) {
p.nextToken() // consume CHAT
var modelName string
var compositeModelName string
var message string
// Check if we have a quoted string that looks like a model identifier (contains two slashes)
@@ -2156,7 +2162,7 @@ func (p *Parser) parseChatCommand() (*Command, error) {
slashCount := strings.Count(firstArg, "/")
if slashCount == 2 {
// This is likely a model identifier, expect another quoted string for message
modelName = firstArg
compositeModelName = firstArg
p.nextToken()
// After model name, expect message
@@ -2184,8 +2190,8 @@ func (p *Parser) parseChatCommand() (*Command, error) {
}
cmd := NewCommand("chat_to_model")
if modelName != "" {
cmd.Params["model_name"] = modelName
if compositeModelName != "" {
cmd.Params["composite_model_name"] = compositeModelName
}
cmd.Params["message"] = message
cmd.Params["reasoning"] = false
@@ -2213,7 +2219,7 @@ func (p *Parser) parseUseCommand() (*Command, error) {
p.nextToken() // consume MODEL
// Parse model identifier in format 'provider/instance/model'
modelIdentifier, err := p.parseQuotedString()
compositeModelName, err := p.parseQuotedString()
if err != nil {
return nil, fmt.Errorf("expected model identifier in format 'provider/instance/model': %w", err)
}
@@ -2225,7 +2231,7 @@ func (p *Parser) parseUseCommand() (*Command, error) {
}
cmd := NewCommand("use_model")
cmd.Params["model_identifier"] = modelIdentifier
cmd.Params["composite_model_name"] = compositeModelName
return cmd, nil
}