mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-19 14:11:04 +08:00
Go CLI: refactor (#16299)
``` RAGFlow(api/default)> list dataset 'e93ab2c04ad111f1b17438a74640adcc' documents; Total: 1 RAGFlow(api/default)> list datasets; RAGFlow(api/default)> list chats; Total: 2 RAGFlow(api/default)> list agents; Total: 1 RAGFlow(api/default)> list searches; Total: 1 RAGFlow(api/default)> list keys; +----------------------------------+---------------+----------------------------------+-----------------------------------------------------+---------------+ | beta | create_time | tenant_id | token | update_time | +----------------------------------+---------------+----------------------------------+-----------------------------------------------------+---------------+ | GKsLEdSUkl76gJz1k_4fJpSQRIlWsiki | 1782285917523 | 2ba4881420fa11f19e9c38a74640adcc | ragflow-JgnarFSCUiV99oOvvMDei7ZzZg1cVlqGd1AMHrHeKE4 | 1782285917523 | +----------------------------------+---------------+----------------------------------+-----------------------------------------------------+---------------+ RAGFlow(api/default)> create key; SUCCESS RAGFlow(api/default)> drop key 'ragflow-aA4R7AuUD158yh2LDh7IDBiqwOKFDKeTwUSQSLVdPdM'; SUCCESS ``` --------- Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
@@ -17,8 +17,8 @@ func tokenTypeDescription(t int, tok Token) string {
|
||||
}
|
||||
|
||||
// Command parsers
|
||||
func (p *Parser) parseLogout() (*Command, error) {
|
||||
cmd := NewCommand("logout")
|
||||
func (p *Parser) parseAPILogout() (*Command, error) {
|
||||
cmd := NewCommand("api_logout")
|
||||
p.nextToken()
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
@@ -27,8 +27,8 @@ func (p *Parser) parseLogout() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseLoginUser() (*Command, error) {
|
||||
cmd := NewCommand("login_user")
|
||||
func (p *Parser) parseAPILoginUser() (*Command, error) {
|
||||
cmd := NewCommand("api_login_user")
|
||||
|
||||
p.nextToken() // consume LOGIN
|
||||
if p.curToken.Type != TokenUser {
|
||||
@@ -46,7 +46,8 @@ func (p *Parser) parseLoginUser() (*Command, error) {
|
||||
// Optional: PASSWORD 'password'
|
||||
if p.curToken.Type == TokenPassword {
|
||||
p.nextToken()
|
||||
password, err := p.parseQuotedString()
|
||||
var password string
|
||||
password, err = p.parseQuotedString()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -62,8 +63,8 @@ func (p *Parser) parseLoginUser() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parsePingServer() (*Command, error) {
|
||||
cmd := NewCommand("ping_server")
|
||||
func (p *Parser) parseAPIPingServer() (*Command, error) {
|
||||
cmd := NewCommand("api_ping_server")
|
||||
p.nextToken()
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
@@ -72,8 +73,8 @@ func (p *Parser) parsePingServer() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseRegisterCommand() (*Command, error) {
|
||||
cmd := NewCommand("register_user")
|
||||
func (p *Parser) parseAPIRegisterCommand() (*Command, error) {
|
||||
cmd := NewCommand("api_register_user")
|
||||
|
||||
if err := p.expectPeek(TokenUser); err != nil {
|
||||
return nil, err
|
||||
@@ -119,42 +120,28 @@ func (p *Parser) parseRegisterCommand() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
// LIST CONFIGS;
|
||||
// LIST PROVIDER 'provider_name' MODELS;
|
||||
// LIST PROVIDER 'provider_name' INSTANCE 'instance_name' MODELS
|
||||
// LIST MODELS;
|
||||
func (p *Parser) parseListCommand() (*Command, error) {
|
||||
func (p *Parser) parseAPIListCommands() (*Command, error) {
|
||||
p.nextToken() // consume LIST
|
||||
|
||||
switch p.curToken.Type {
|
||||
case TokenVars:
|
||||
p.nextToken()
|
||||
// Semicolon is optional for SHOW TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return NewCommand("list_variables"), nil
|
||||
case TokenConfigs:
|
||||
p.nextToken()
|
||||
// Semicolon is optional for SHOW TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return NewCommand("list_configs"), nil
|
||||
case TokenEnvs:
|
||||
p.nextToken()
|
||||
// Semicolon is optional for SHOW TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return NewCommand("list_environments"), nil
|
||||
return p.parseAPIListConfigs()
|
||||
case TokenDatasets:
|
||||
return p.parseListDatasets()
|
||||
case TokenDocuments:
|
||||
return p.parseListDatasetDocuments()
|
||||
return p.parseAPIListDatasets()
|
||||
case TokenDataset:
|
||||
return p.parseAPIListDatasetDocuments()
|
||||
case TokenAgents:
|
||||
return p.parseListAgents()
|
||||
case TokenTokens:
|
||||
return p.parseListTokens()
|
||||
return p.parseAPIListAgents()
|
||||
case TokenChats:
|
||||
return p.parseAPIListChats()
|
||||
case TokenSearches:
|
||||
return p.parseAPIListSearches()
|
||||
case TokenKeys:
|
||||
return p.parseAPIListAPIKeys()
|
||||
case TokenModel:
|
||||
return p.parseListModelProviders()
|
||||
case TokenSupported:
|
||||
@@ -171,13 +158,6 @@ func (p *Parser) parseListCommand() (*Command, error) {
|
||||
return p.parseListDefaultModels()
|
||||
case TokenAvailable:
|
||||
return p.parseListAvailableProviders()
|
||||
case TokenChats:
|
||||
p.nextToken()
|
||||
// Semicolon is optional for SHOW TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return NewCommand("list_user_chats"), nil
|
||||
case TokenFiles:
|
||||
return p.parseListFiles()
|
||||
case TokenQuotedString:
|
||||
@@ -189,8 +169,19 @@ func (p *Parser) parseListCommand() (*Command, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Parser) parseListDatasets() (*Command, error) {
|
||||
cmd := NewCommand("list_datasets")
|
||||
// LIST CONFIGS;
|
||||
func (p *Parser) parseAPIListConfigs() (*Command, error) {
|
||||
p.nextToken()
|
||||
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return NewCommand("api_list_configs"), nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseAPIListDatasets() (*Command, error) {
|
||||
cmd := NewCommand("api_list_datasets")
|
||||
p.nextToken() // consume DATASETS
|
||||
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
@@ -200,13 +191,9 @@ func (p *Parser) parseListDatasets() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseListDatasetDocuments() (*Command, error) {
|
||||
p.nextToken() // consume DOCUMENTS
|
||||
|
||||
if p.curToken.Type != TokenFrom {
|
||||
return nil, fmt.Errorf("expected FROM")
|
||||
}
|
||||
p.nextToken()
|
||||
// LIST DATASET 'dataset_name' DOCUMENTS;
|
||||
func (p *Parser) parseAPIListDatasetDocuments() (*Command, error) {
|
||||
p.nextToken() // consume DATASET
|
||||
|
||||
datasetID, err := p.parseQuotedString()
|
||||
if err != nil {
|
||||
@@ -214,17 +201,53 @@ func (p *Parser) parseListDatasetDocuments() (*Command, error) {
|
||||
}
|
||||
p.nextToken()
|
||||
|
||||
cmd := NewCommand("list_dataset_documents")
|
||||
if p.curToken.Type != TokenDocuments {
|
||||
return nil, fmt.Errorf("expected DOCUMENTS")
|
||||
}
|
||||
|
||||
cmd := NewCommand("api_list_dataset_documents")
|
||||
cmd.Params["dataset_id"] = datasetID
|
||||
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseAPIListAgents() (*Command, error) {
|
||||
p.nextToken() // consume AGENTS
|
||||
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
|
||||
return NewCommand("api_list_agents"), nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseAPIListChats() (*Command, error) {
|
||||
p.nextToken() // consume CHATS
|
||||
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
|
||||
return NewCommand("api_list_chats"), nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseAPIListSearches() (*Command, error) {
|
||||
p.nextToken() // consume SEARCHES
|
||||
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
|
||||
return NewCommand("api_list_searches"), nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseGetMetadata() (*Command, error) {
|
||||
p.nextToken() // consume METADATA
|
||||
|
||||
@@ -273,38 +296,10 @@ func (p *Parser) parseGetMetadata() (*Command, error) {
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseListAgents() (*Command, error) {
|
||||
p.nextToken() // consume AGENTS
|
||||
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
return NewCommand("list_user_agents"), nil
|
||||
}
|
||||
|
||||
if p.curToken.Type != TokenOf {
|
||||
return nil, fmt.Errorf("expected OF")
|
||||
}
|
||||
p.nextToken()
|
||||
|
||||
userName, err := p.parseQuotedString()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cmd := NewCommand("list_agents")
|
||||
cmd.Params["user_name"] = userName
|
||||
|
||||
p.nextToken()
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
return cmd, nil
|
||||
}
|
||||
|
||||
func (p *Parser) parseListTokens() (*Command, error) {
|
||||
p.nextToken() // consume TOKENS
|
||||
cmd := NewCommand("list_tokens")
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
func (p *Parser) parseAPIListAPIKeys() (*Command, error) {
|
||||
p.nextToken() // consume KEYS
|
||||
cmd := NewCommand("api_list_api_keys")
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
@@ -567,8 +562,8 @@ func (p *Parser) parseCreateCommand() (*Command, error) {
|
||||
return p.parseCreateDataset()
|
||||
case TokenChat:
|
||||
return p.parseCreateChat()
|
||||
case TokenToken:
|
||||
return p.parseCreateToken()
|
||||
case TokenKey:
|
||||
return p.parseAPICreateKey()
|
||||
case TokenChunkStore:
|
||||
return p.parseCreateChunkStore()
|
||||
case TokenMetadata:
|
||||
@@ -596,15 +591,15 @@ func (p *Parser) parseAddCommand() (*Command, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Parser) parseCreateToken() (*Command, error) {
|
||||
p.nextToken() // consume TOKEN
|
||||
func (p *Parser) parseAPICreateKey() (*Command, error) {
|
||||
p.nextToken() // consume KEY
|
||||
|
||||
// Semicolon is optional for UNSET TOKEN
|
||||
// Semicolon is optional for UNSET KEY
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
}
|
||||
|
||||
return NewCommand("create_token"), nil
|
||||
return NewCommand("api_create_api_key"), nil
|
||||
}
|
||||
|
||||
// Internal CLI for GO
|
||||
@@ -1213,8 +1208,8 @@ func (p *Parser) parseDropCommand() (*Command, error) {
|
||||
return p.parseDropDataset()
|
||||
case TokenChat:
|
||||
return p.parseDropChat()
|
||||
case TokenToken:
|
||||
return p.parseDropToken()
|
||||
case TokenKey:
|
||||
return p.parseAPIDeleteAPIKey()
|
||||
case TokenChunkStore:
|
||||
return p.parseDropChunkStore()
|
||||
case TokenMetadata:
|
||||
@@ -1262,30 +1257,18 @@ func (p *Parser) parseRemoveCommand() (*Command, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Parser) parseDropToken() (*Command, error) {
|
||||
p.nextToken() // consume TOKEN
|
||||
func (p *Parser) parseAPIDeleteAPIKey() (*Command, error) {
|
||||
p.nextToken() // consume KEY
|
||||
|
||||
tokenValue, err := p.parseQuotedString()
|
||||
apiKey, err := p.parseQuotedString()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
p.nextToken()
|
||||
if p.curToken.Type != TokenOf {
|
||||
return nil, fmt.Errorf("expected OF")
|
||||
}
|
||||
p.nextToken()
|
||||
|
||||
userName, err := p.parseQuotedString()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cmd := NewCommand("api_delete_api_key")
|
||||
cmd.Params["api_key"] = apiKey
|
||||
|
||||
cmd := NewCommand("drop_token")
|
||||
cmd.Params["token"] = tokenValue
|
||||
cmd.Params["user_name"] = userName
|
||||
|
||||
p.nextToken()
|
||||
// Semicolon is optional
|
||||
if p.curToken.Type == TokenSemicolon {
|
||||
p.nextToken()
|
||||
@@ -3647,7 +3630,7 @@ func (p *Parser) parseBenchmarkCommand() (*Command, error) {
|
||||
func (p *Parser) parseUserStatement() (*Command, error) {
|
||||
switch p.curToken.Type {
|
||||
case TokenPing:
|
||||
return p.parsePingServer()
|
||||
return p.parseAPIPingServer()
|
||||
case TokenDelete:
|
||||
return p.parseDeleteCommand()
|
||||
case TokenShow:
|
||||
@@ -3663,7 +3646,7 @@ func (p *Parser) parseUserStatement() (*Command, error) {
|
||||
case TokenReset:
|
||||
return p.parseResetCommand()
|
||||
case TokenList:
|
||||
return p.parseListCommand()
|
||||
return p.parseAPIListCommands()
|
||||
case TokenParse:
|
||||
return p.parseParseCommand()
|
||||
case TokenImport:
|
||||
|
||||
Reference in New Issue
Block a user