Go CLI: list provider instance models, sync and list provider (#16311)

### What problem does this PR solve?

```
RAGFlow(api/default)> list provider 'zhipu-ai' instance 'test' models sync;
+------------+---------------+------------+-------------+------------------+---------------------------------------------+
| dimensions | max_dimension | max_tokens | model_types | name             | thinking                                    |
+------------+---------------+------------+-------------+------------------+---------------------------------------------+
|            |               | 128000     | [chat]      | glm-4.5@z-ai     | map[clear_thinking:true default_value:true] |
|            |               | 128000     | [chat]      | glm-4.5-air@z-ai | map[clear_thinking:true default_value:true] |
|            |               | 202752     | [chat]      | glm-4.6@z-ai     | map[clear_thinking:true default_value:true] |
|            |               | 202752     | [chat]      | glm-4.7@z-ai     | map[clear_thinking:true default_value:true] |
|            |               | 202752     | [chat]      | glm-5@z-ai       | map[clear_thinking:true default_value:true] |
|            |               | 200000     | [chat]      | glm-5-turbo@z-ai | map[clear_thinking:true default_value:true] |
|            |               | 202752     | [chat]      | glm-5.1@z-ai     | map[clear_thinking:true default_value:true] |
|            |               |            | [chat]      | glm-5.2@z-ai     |                                             |
+------------+---------------+------------+-------------+------------------+---------------------------------------------+

RAGFlow(api/default)> list provider 'zhipu-ai' instance 'test' models;

RAGFlow(api/default)> list dataset 'aaa' ingestion tasks;

RAGFlow(api/default)> list dataset '0abe79f9423311f1ad8d38a74640adcc' documents;

```

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-06-25 10:01:21 +08:00
committed by GitHub
parent 5b0b86c276
commit 7ef4a4a06a
4 changed files with 71 additions and 55 deletions

View File

@@ -133,7 +133,7 @@ func (p *Parser) parseAPIListCommands() (*Command, error) {
case TokenDatasets:
return p.parseAPIListDatasets()
case TokenDataset:
return p.parseAPIListDatasetDocuments()
return p.parseAPIListDatasetCommands()
case TokenAgents:
return p.parseAPIListAgents()
case TokenChats:
@@ -150,12 +150,10 @@ func (p *Parser) parseAPIListCommands() (*Command, error) {
return p.parseAPIListProviders()
case TokenProvider:
return p.parseAPIListProviderCommands()
case TokenInstances:
return p.parseListInstances()
case TokenIngestion:
return p.parseUserListIngestionTasks()
return p.parseAPIListIngestionTasks()
case TokenDefault:
return p.parseListDefaultModels()
return p.parseAPIListDefaultModels()
case TokenAvailable:
return p.parseAPIListAvailableProviders()
case TokenFiles:
@@ -192,7 +190,7 @@ func (p *Parser) parseAPIListDatasets() (*Command, error) {
}
// LIST DATASET 'dataset_name' DOCUMENTS;
func (p *Parser) parseAPIListDatasetDocuments() (*Command, error) {
func (p *Parser) parseAPIListDatasetCommands() (*Command, error) {
p.nextToken() // consume DATASET
datasetID, err := p.parseQuotedString()
@@ -201,17 +199,58 @@ func (p *Parser) parseAPIListDatasetDocuments() (*Command, error) {
}
p.nextToken()
if p.curToken.Type != TokenDocuments {
return nil, fmt.Errorf("expected DOCUMENTS")
switch p.curToken.Type {
case TokenDocuments:
return p.parseAPIListDatasetDocuments(datasetID)
case TokenFiles:
return p.parseAPIListDatasetFiles(datasetID)
case TokenIngestion:
return p.parseAPIListDatasetIngestionTasks(datasetID)
default:
return nil, fmt.Errorf("unknown LIST target: %s", p.curToken.Value)
}
}
func (p *Parser) parseAPIListDatasetDocuments(datasetID string) (*Command, error) {
p.nextToken() // consume DOCUMENTS
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd := NewCommand("api_list_dataset_documents")
cmd.Params["dataset_id"] = datasetID
return cmd, nil
}
// Semicolon is optional for UNSET TOKEN
func (p *Parser) parseAPIListDatasetFiles(datasetName string) (*Command, error) {
p.nextToken() // consume FILES
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd := NewCommand("api_list_dataset_files")
cmd.Params["dataset_name"] = datasetName
return cmd, nil
}
func (p *Parser) parseAPIListDatasetIngestionTasks(datasetName string) (*Command, error) {
p.nextToken() // consume INGESTION
if p.curToken.Type != TokenTasks {
return nil, fmt.Errorf("expected TASKS")
}
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd := NewCommand("api_list_ingestion_tasks")
cmd.Params["dataset_name"] = datasetName
return cmd, nil
}
@@ -313,7 +352,7 @@ func (p *Parser) parseAPIListProviders() (*Command, error) {
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("list_providers"), nil
return NewCommand("api_list_providers"), nil
}
// LIST PROVIDER 'provider_name' INSTANCES
@@ -350,6 +389,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) {
p.nextToken() // consume INSTANCE
@@ -364,17 +404,21 @@ func (p *Parser) parseListProviderInstanceModels(providerName string) (*Command,
}
p.nextToken()
cmd := NewCommand("api_list_provider_instance_models")
if p.curToken.Type == TokenSync {
cmd = NewCommand("api_list_provider_instance_models_sync")
}
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
cmd := NewCommand("api_list_provider_instance_models")
cmd.Params["provider_name"] = providerName
cmd.Params["instance_name"] = instanceName
return cmd, nil
}
func (p *Parser) parseListDefaultModels() (*Command, error) {
func (p *Parser) parseAPIListDefaultModels() (*Command, error) {
p.nextToken() // consume DEFAULT
if p.curToken.Type != TokenModels {
return nil, fmt.Errorf("expected MODELS")
@@ -384,7 +428,7 @@ func (p *Parser) parseListDefaultModels() (*Command, error) {
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return NewCommand("list_user_default_models"), nil
return NewCommand("api_list_default_models"), nil
}
func (p *Parser) parseAPIListAvailableProviders() (*Command, error) {
@@ -1595,31 +1639,6 @@ optionsLoop:
return cmd, nil
}
// parseListInstances parses LIST INSTANCES FROM PROVIDER <name> command
func (p *Parser) parseListInstances() (*Command, error) {
p.nextToken() // consume INSTANCES
if p.curToken.Type != TokenFrom {
return nil, fmt.Errorf("expected FROM")
}
p.nextToken()
providerName, err := p.parseQuotedString()
if err != nil {
return nil, fmt.Errorf("expected provider name after FROM PROVIDER: %w", err)
}
cmd := NewCommand("list_provider_instances")
cmd.Params["provider_name"] = providerName
p.nextToken()
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()
}
return cmd, nil
}
// parseShowInstance parses SHOW INSTANCE <name> FROM PROVIDER <name> command
func (p *Parser) parseShowInstance() (*Command, error) {
p.nextToken() // consume INSTANCE
@@ -4198,7 +4217,7 @@ func (p *Parser) parseUserStopIngestion() (*Command, error) {
return cmd, nil
}
func (p *Parser) parseUserListIngestionTasks() (*Command, error) {
func (p *Parser) parseAPIListIngestionTasks() (*Command, error) {
p.nextToken() // consume Ingestion
if p.curToken.Type != TokenTasks {
@@ -4206,7 +4225,7 @@ func (p *Parser) parseUserListIngestionTasks() (*Command, error) {
}
p.nextToken() // consume TASKS
cmd := NewCommand("user_list_ingestion_tasks")
cmd := NewCommand("api_list_ingestion_tasks")
if p.curToken.Type == TokenFrom {
p.nextToken()