Go CLI: fix list provider instance tasks (#16345)

This commit is contained in:
Jin Hai
2026-06-25 15:49:31 +08:00
committed by GitHub
parent 3f3a2ece3d
commit edfa9be67f
6 changed files with 183 additions and 234 deletions

View File

@@ -142,10 +142,6 @@ func (p *Parser) parseAPIListCommands() (*Command, error) {
return p.parseAPIListSearches()
case TokenKeys:
return p.parseAPIListAPIKeys()
case TokenSupported:
return p.parseListModelsOfProvider()
case TokenModels:
return p.parseListModelsOfProvider()
case TokenProviders:
return p.parseAPIListProviders()
case TokenProvider:
@@ -156,12 +152,8 @@ func (p *Parser) parseAPIListCommands() (*Command, error) {
return p.parseAPIListDefaultModels()
case TokenAvailable:
return p.parseAPIListAvailableProviders()
case TokenFiles:
return p.parseListFiles()
case TokenQuotedString:
return p.parseListQuotedStringCommand()
case TokenAPI:
return p.parseListApiCommand()
return p.parseAPIListAPIServers()
default:
return nil, fmt.Errorf("unknown LIST target: %s", p.curToken.Value)
}
@@ -345,7 +337,7 @@ func (p *Parser) parseAPIListAPIKeys() (*Command, error) {
return cmd, nil
}
// parseAPIListProviders parses LIST PROVIDERS command
// LIST PROVIDERS
func (p *Parser) parseAPIListProviders() (*Command, error) {
p.nextToken() // consume PROVIDERS
// Semicolon is optional
@@ -369,7 +361,9 @@ func (p *Parser) parseAPIListProviderCommands() (*Command, error) {
case TokenInstances:
return p.parseListProviderInstances(providerName)
case TokenInstance:
return p.parseListProviderInstanceModels(providerName)
return p.parseListProviderInstanceCommands(providerName)
case TokenModels:
return p.parseListProviderModels(providerName)
default:
return nil, fmt.Errorf("unknown LIST target: %s", p.curToken.Value)
}
@@ -390,7 +384,7 @@ func (p *Parser) parseListProviderInstances(providerName string) (*Command, erro
// LIST PROVIDER 'provider_name' INSTANCE 'instance_name' MODELS
// LIST PROVIDER 'provider_name' INSTANCE 'instance_name' MODELS SYNC, get model list by API from remote server
func (p *Parser) parseListProviderInstanceModels(providerName string) (*Command, error) {
func (p *Parser) parseListProviderInstanceCommands(providerName string) (*Command, error) {
p.nextToken() // consume INSTANCE
instanceName, err := p.parseQuotedString()
@@ -399,6 +393,20 @@ func (p *Parser) parseListProviderInstanceModels(providerName string) (*Command,
}
p.nextToken()
switch p.curToken.Type {
case TokenModels:
return p.parseListProviderInstanceModels(providerName, instanceName)
case TokenTasks:
return p.parseListProviderInstanceTasks(providerName, instanceName)
default:
return nil, fmt.Errorf("unknown LIST target: %s", p.curToken.Value)
}
}
func (p *Parser) parseListProviderInstanceModels(providerName, instanceName string) (*Command, error) {
p.nextToken() // consume MODELS
if p.curToken.Type != TokenModels {
return nil, fmt.Errorf("expected MODELS")
}
@@ -418,6 +426,33 @@ func (p *Parser) parseListProviderInstanceModels(providerName string) (*Command,
return cmd, nil
}
func (p *Parser) parseListProviderInstanceTasks(providerName, instanceName string) (*Command, error) {
p.nextToken() // consume TASKS
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd := NewCommand("api_list_provider_instance_tasks")
cmd.Params["provider_name"] = providerName
cmd.Params["instance_name"] = instanceName
return cmd, nil
}
func (p *Parser) parseListProviderModels(providerName string) (*Command, error) {
p.nextToken() // consume MODELS
cmd := NewCommand("api_list_provider_models")
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd.Params["provider_name"] = providerName
return cmd, nil
}
func (p *Parser) parseAPIListDefaultModels() (*Command, error) {
p.nextToken() // consume DEFAULT
if p.curToken.Type != TokenModels {
@@ -441,50 +476,6 @@ func (p *Parser) parseAPIListAvailableProviders() (*Command, error) {
return NewCommand("api_list_available_providers"), nil
}
func (p *Parser) parseListFiles() (*Command, error) {
p.nextToken() // consume FILES
if p.curToken.Type != TokenOf {
return nil, fmt.Errorf("expected OF")
}
p.nextToken()
if p.curToken.Type != TokenDataset {
return nil, fmt.Errorf("expected DATASET")
}
p.nextToken()
datasetName, err := p.parseQuotedString()
if err != nil {
return nil, err
}
cmd := NewCommand("list_user_dataset_files")
cmd.Params["dataset_name"] = datasetName
p.nextToken()
// Semicolon is optional for UNSET TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
func (p *Parser) parseListQuotedStringCommand() (*Command, error) {
str, err := p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken() // consume str
switch p.curToken.Type {
case TokenTasks:
p.nextToken() // consume TASKS
cmd := NewCommand("list_tasks_user_command")
cmd.Params["composite_instance_name"] = str
return cmd, nil
default:
return nil, fmt.Errorf("unknown command: %s", str)
}
}
func (p *Parser) parseShowQuotedStringCommand() (*Command, error) {
str, err := p.parseQuotedString()
if err != nil {
@@ -517,27 +508,17 @@ func (p *Parser) parseShowQuotedStringCommand() (*Command, error) {
}
}
func (p *Parser) parseShowCommand() (*Command, error) {
func (p *Parser) parseAPIShowCommands() (*Command, error) {
p.nextToken() // consume SHOW
switch p.curToken.Type {
case TokenVersion:
p.nextToken()
// Semicolon is optional for SHOW TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("show_version"), nil
case TokenToken:
p.nextToken()
// Semicolon is optional for SHOW TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("show_token"), nil
return p.parseAPIShowVersion()
case TokenKey:
return p.parseAPIShowKey()
case TokenCurrent:
p.nextToken()
// Semicolon is optional for SHOW TOKEN
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
@@ -565,6 +546,26 @@ func (p *Parser) parseShowCommand() (*Command, error) {
}
}
func (p *Parser) parseAPIShowVersion() (*Command, error) {
p.nextToken() // consume VERSION
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("api_show_version"), nil
}
func (p *Parser) parseAPIShowKey() (*Command, error) {
p.nextToken() // consume KEY
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("api_show_api_key"), nil
}
func (p *Parser) parseShowVariable() (*Command, error) {
p.nextToken() // consume VAR
varName, err := p.parseIdentifier()
@@ -2487,105 +2488,6 @@ func (p *Parser) parseRetrieveCommand() (*Command, error) {
return cmd, nil
}
func (p *Parser) parseListModelsOfProvider() (*Command, error) {
if p.curToken.Type == TokenSupported {
// List supported models
p.nextToken()
cmd := NewCommand("list_supported_models")
if p.curToken.Type != TokenModels {
return nil, fmt.Errorf("expected MODELS")
}
p.nextToken()
if p.curToken.Type != TokenFrom {
return nil, fmt.Errorf("expected FROM")
}
p.nextToken()
if p.curToken.Type != TokenQuotedString {
return nil, fmt.Errorf("expected quoted string for provider name")
}
firstName, err := p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
if p.curToken.Type != TokenQuotedString {
return nil, fmt.Errorf("expected quoted string for instance name")
}
secondName, err := p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
cmd.Params["provider_name"] = firstName
cmd.Params["instance_name"] = secondName
// Semicolon is optional for UNSET TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
if p.curToken.Type != TokenModels {
return nil, fmt.Errorf("expected MODELS")
}
p.nextToken()
if p.curToken.Type != TokenFrom {
// LIST MODELS
cmd := NewCommand("list_all_models")
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
p.nextToken()
// Parse first quoted string (could be instance_name or provider_name)
firstName, err := p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
// Check if there's a second quoted string (provider_name)
// If so, format is: LIST MODELS FROM <instance_name> <provider_name>
// If not, format is: LIST MODELS FROM <provider_name>
if p.curToken.Type == TokenQuotedString {
var instanceName string
// Two arguments: instance_name and provider_name
instanceName, err = p.parseQuotedString()
if err != nil {
return nil, err
}
cmd := NewCommand("list_instance_models")
cmd.Params["instance_name"] = instanceName
cmd.Params["provider_name"] = firstName
p.nextToken()
// Semicolon is optional for UNSET TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
// Only one argument: provider_name
cmd := NewCommand("list_provider_models")
cmd.Params["provider_name"] = firstName
// Semicolon is optional for UNSET TOKEN
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
func (p *Parser) parseEnableCommand() (*Command, error) {
p.nextToken() // consume ENABLE
@@ -3677,7 +3579,7 @@ func (p *Parser) parseUserStatement() (*Command, error) {
case TokenDelete:
return p.parseDeleteCommand()
case TokenShow:
return p.parseShowCommand()
return p.parseAPIShowCommands()
case TokenCreate:
return p.parseCreateCommand()
case TokenDrop:
@@ -4299,17 +4201,14 @@ func (p *Parser) parseUserShowAPI() (*Command, error) {
return cmd, nil
}
func (p *Parser) parseListApiCommand() (*Command, error) {
func (p *Parser) parseAPIListAPIServers() (*Command, error) {
p.nextToken() // consume API
var cmd *Command
switch p.curToken.Type {
case TokenServer:
p.nextToken()
cmd = NewCommand("list_api_server")
p.nextToken()
cmd = NewCommand("api_list_api_servers")
default:
return nil, fmt.Errorf("expected SERVER after API")
}