2024-08-15 13:23:07 +00:00
// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT.
package genie
import (
"fmt"
"time"
"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/libs/cmdio"
"github.com/databricks/cli/libs/flags"
"github.com/databricks/databricks-sdk-go/service/dashboards"
"github.com/spf13/cobra"
)
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var cmdOverrides [ ] func ( * cobra . Command )
func New ( ) * cobra . Command {
cmd := & cobra . Command {
Use : "genie" ,
Short : ` Genie provides a no-code experience for business users, powered by AI/BI. ` ,
Long : ` Genie provides a no - code experience for business users , powered by AI / BI .
Analysts set up spaces that business users can use to ask questions using
natural language . Genie uses data registered to Unity Catalog and requires at
least CAN USE permission on a Pro or Serverless SQL warehouse . Also ,
Databricks Assistant must be enabled . ` ,
GroupID : "dashboards" ,
Annotations : map [ string ] string {
"package" : "dashboards" ,
} ,
// This service is being previewed; hide from help output.
Hidden : true ,
}
// Add methods
cmd . AddCommand ( newCreateMessage ( ) )
cmd . AddCommand ( newExecuteMessageQuery ( ) )
cmd . AddCommand ( newGetMessage ( ) )
cmd . AddCommand ( newGetMessageQueryResult ( ) )
cmd . AddCommand ( newStartConversation ( ) )
// Apply optional overrides to this command.
for _ , fn := range cmdOverrides {
fn ( cmd )
}
return cmd
}
// start create-message command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var createMessageOverrides [ ] func (
* cobra . Command ,
* dashboards . GenieCreateConversationMessageRequest ,
)
func newCreateMessage ( ) * cobra . Command {
cmd := & cobra . Command { }
var createMessageReq dashboards . GenieCreateConversationMessageRequest
var createMessageJson flags . JsonFlag
var createMessageSkipWait bool
var createMessageTimeout time . Duration
cmd . Flags ( ) . BoolVar ( & createMessageSkipWait , "no-wait" , createMessageSkipWait , ` do not wait to reach COMPLETED state ` )
cmd . Flags ( ) . DurationVar ( & createMessageTimeout , "timeout" , 20 * time . Minute , ` maximum amount of time to reach COMPLETED state ` )
// TODO: short flags
cmd . Flags ( ) . Var ( & createMessageJson , "json" , ` either inline JSON string or @path/to/file.json with request body ` )
cmd . Use = "create-message SPACE_ID CONVERSATION_ID CONTENT"
cmd . Short = ` Create conversation message. `
cmd . Long = ` Create conversation message .
Create new message in [ conversation ] ( : method : genie / startconversation ) . The AI
response uses all previously created messages in the conversation to respond .
Arguments :
SPACE_ID : The ID associated with the Genie space where the conversation is started .
CONVERSATION_ID : The ID associated with the conversation .
CONTENT : User message content . `
cmd . Annotations = make ( map [ string ] string )
cmd . Args = func ( cmd * cobra . Command , args [ ] string ) error {
if cmd . Flags ( ) . Changed ( "json" ) {
err := root . ExactArgs ( 2 ) ( cmd , args )
if err != nil {
return fmt . Errorf ( "when --json flag is specified, provide only SPACE_ID, CONVERSATION_ID as positional arguments. Provide 'content' in your JSON input" )
}
return nil
}
check := root . ExactArgs ( 3 )
return check ( cmd , args )
}
cmd . PreRunE = root . MustWorkspaceClient
cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
ctx := cmd . Context ( )
w := root . WorkspaceClient ( ctx )
if cmd . Flags ( ) . Changed ( "json" ) {
2024-10-11 14:39:53 +00:00
diags := createMessageJson . Unmarshal ( & createMessageReq )
if diags . HasError ( ) {
return diags . Error ( )
}
if len ( diags ) > 0 {
err := cmdio . RenderDiagnosticsToErrorOut ( ctx , diags )
if err != nil {
return err
}
2024-08-15 13:23:07 +00:00
}
}
createMessageReq . SpaceId = args [ 0 ]
createMessageReq . ConversationId = args [ 1 ]
if ! cmd . Flags ( ) . Changed ( "json" ) {
createMessageReq . Content = args [ 2 ]
}
wait , err := w . Genie . CreateMessage ( ctx , createMessageReq )
if err != nil {
return err
}
if createMessageSkipWait {
return cmdio . Render ( ctx , wait . Response )
}
spinner := cmdio . Spinner ( ctx )
info , err := wait . OnProgress ( func ( i * dashboards . GenieMessage ) {
status := i . Status
statusMessage := fmt . Sprintf ( "current status: %s" , status )
spinner <- statusMessage
} ) . GetWithTimeout ( createMessageTimeout )
close ( spinner )
if err != nil {
return err
}
return cmdio . Render ( ctx , info )
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd . ValidArgsFunction = cobra . NoFileCompletions
// Apply optional overrides to this command.
for _ , fn := range createMessageOverrides {
fn ( cmd , & createMessageReq )
}
return cmd
}
// start execute-message-query command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var executeMessageQueryOverrides [ ] func (
* cobra . Command ,
* dashboards . ExecuteMessageQueryRequest ,
)
func newExecuteMessageQuery ( ) * cobra . Command {
cmd := & cobra . Command { }
var executeMessageQueryReq dashboards . ExecuteMessageQueryRequest
// TODO: short flags
cmd . Use = "execute-message-query SPACE_ID CONVERSATION_ID MESSAGE_ID"
cmd . Short = ` Execute SQL query in a conversation message. `
cmd . Long = ` Execute SQL query in a conversation message .
Execute the SQL query in the message .
Arguments :
SPACE_ID : Genie space ID
CONVERSATION_ID : Conversation ID
MESSAGE_ID : Message ID `
cmd . Annotations = make ( map [ string ] string )
cmd . Args = func ( cmd * cobra . Command , args [ ] string ) error {
check := root . ExactArgs ( 3 )
return check ( cmd , args )
}
cmd . PreRunE = root . MustWorkspaceClient
cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
ctx := cmd . Context ( )
w := root . WorkspaceClient ( ctx )
executeMessageQueryReq . SpaceId = args [ 0 ]
executeMessageQueryReq . ConversationId = args [ 1 ]
executeMessageQueryReq . MessageId = args [ 2 ]
response , err := w . Genie . ExecuteMessageQuery ( ctx , executeMessageQueryReq )
if err != nil {
return err
}
return cmdio . Render ( ctx , response )
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd . ValidArgsFunction = cobra . NoFileCompletions
// Apply optional overrides to this command.
for _ , fn := range executeMessageQueryOverrides {
fn ( cmd , & executeMessageQueryReq )
}
return cmd
}
// start get-message command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var getMessageOverrides [ ] func (
* cobra . Command ,
* dashboards . GenieGetConversationMessageRequest ,
)
func newGetMessage ( ) * cobra . Command {
cmd := & cobra . Command { }
var getMessageReq dashboards . GenieGetConversationMessageRequest
// TODO: short flags
cmd . Use = "get-message SPACE_ID CONVERSATION_ID MESSAGE_ID"
cmd . Short = ` Get conversation message. `
cmd . Long = ` Get conversation message .
Get message from conversation .
Arguments :
SPACE_ID : The ID associated with the Genie space where the target conversation is
located .
CONVERSATION_ID : The ID associated with the target conversation .
MESSAGE_ID : The ID associated with the target message from the identified
conversation . `
cmd . Annotations = make ( map [ string ] string )
cmd . Args = func ( cmd * cobra . Command , args [ ] string ) error {
check := root . ExactArgs ( 3 )
return check ( cmd , args )
}
cmd . PreRunE = root . MustWorkspaceClient
cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
ctx := cmd . Context ( )
w := root . WorkspaceClient ( ctx )
getMessageReq . SpaceId = args [ 0 ]
getMessageReq . ConversationId = args [ 1 ]
getMessageReq . MessageId = args [ 2 ]
response , err := w . Genie . GetMessage ( ctx , getMessageReq )
if err != nil {
return err
}
return cmdio . Render ( ctx , response )
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd . ValidArgsFunction = cobra . NoFileCompletions
// Apply optional overrides to this command.
for _ , fn := range getMessageOverrides {
fn ( cmd , & getMessageReq )
}
return cmd
}
// start get-message-query-result command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var getMessageQueryResultOverrides [ ] func (
* cobra . Command ,
* dashboards . GenieGetMessageQueryResultRequest ,
)
func newGetMessageQueryResult ( ) * cobra . Command {
cmd := & cobra . Command { }
var getMessageQueryResultReq dashboards . GenieGetMessageQueryResultRequest
// TODO: short flags
cmd . Use = "get-message-query-result SPACE_ID CONVERSATION_ID MESSAGE_ID"
cmd . Short = ` Get conversation message SQL query result. `
cmd . Long = ` Get conversation message SQL query result .
Get the result of SQL query if the message has a query attachment . This is
only available if a message has a query attachment and the message status is
EXECUTING_QUERY .
Arguments :
SPACE_ID : Genie space ID
CONVERSATION_ID : Conversation ID
MESSAGE_ID : Message ID `
cmd . Annotations = make ( map [ string ] string )
cmd . Args = func ( cmd * cobra . Command , args [ ] string ) error {
check := root . ExactArgs ( 3 )
return check ( cmd , args )
}
cmd . PreRunE = root . MustWorkspaceClient
cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
ctx := cmd . Context ( )
w := root . WorkspaceClient ( ctx )
getMessageQueryResultReq . SpaceId = args [ 0 ]
getMessageQueryResultReq . ConversationId = args [ 1 ]
getMessageQueryResultReq . MessageId = args [ 2 ]
response , err := w . Genie . GetMessageQueryResult ( ctx , getMessageQueryResultReq )
if err != nil {
return err
}
return cmdio . Render ( ctx , response )
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd . ValidArgsFunction = cobra . NoFileCompletions
// Apply optional overrides to this command.
for _ , fn := range getMessageQueryResultOverrides {
fn ( cmd , & getMessageQueryResultReq )
}
return cmd
}
// start start-conversation command
// Slice with functions to override default command behavior.
// Functions can be added from the `init()` function in manually curated files in this directory.
var startConversationOverrides [ ] func (
* cobra . Command ,
* dashboards . GenieStartConversationMessageRequest ,
)
func newStartConversation ( ) * cobra . Command {
cmd := & cobra . Command { }
var startConversationReq dashboards . GenieStartConversationMessageRequest
var startConversationJson flags . JsonFlag
var startConversationSkipWait bool
var startConversationTimeout time . Duration
cmd . Flags ( ) . BoolVar ( & startConversationSkipWait , "no-wait" , startConversationSkipWait , ` do not wait to reach COMPLETED state ` )
cmd . Flags ( ) . DurationVar ( & startConversationTimeout , "timeout" , 20 * time . Minute , ` maximum amount of time to reach COMPLETED state ` )
// TODO: short flags
cmd . Flags ( ) . Var ( & startConversationJson , "json" , ` either inline JSON string or @path/to/file.json with request body ` )
cmd . Use = "start-conversation SPACE_ID CONTENT"
cmd . Short = ` Start conversation. `
cmd . Long = ` Start conversation .
Start a new conversation .
Arguments :
SPACE_ID : The ID associated with the Genie space where you want to start a
conversation .
CONTENT : The text of the message that starts the conversation . `
cmd . Annotations = make ( map [ string ] string )
cmd . Args = func ( cmd * cobra . Command , args [ ] string ) error {
if cmd . Flags ( ) . Changed ( "json" ) {
err := root . ExactArgs ( 1 ) ( cmd , args )
if err != nil {
return fmt . Errorf ( "when --json flag is specified, provide only SPACE_ID as positional arguments. Provide 'content' in your JSON input" )
}
return nil
}
check := root . ExactArgs ( 2 )
return check ( cmd , args )
}
cmd . PreRunE = root . MustWorkspaceClient
cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) ( err error ) {
ctx := cmd . Context ( )
w := root . WorkspaceClient ( ctx )
if cmd . Flags ( ) . Changed ( "json" ) {
2024-10-11 14:39:53 +00:00
diags := startConversationJson . Unmarshal ( & startConversationReq )
if diags . HasError ( ) {
return diags . Error ( )
}
if len ( diags ) > 0 {
err := cmdio . RenderDiagnosticsToErrorOut ( ctx , diags )
if err != nil {
return err
}
2024-08-15 13:23:07 +00:00
}
}
startConversationReq . SpaceId = args [ 0 ]
if ! cmd . Flags ( ) . Changed ( "json" ) {
startConversationReq . Content = args [ 1 ]
}
wait , err := w . Genie . StartConversation ( ctx , startConversationReq )
if err != nil {
return err
}
if startConversationSkipWait {
return cmdio . Render ( ctx , wait . Response )
}
spinner := cmdio . Spinner ( ctx )
info , err := wait . OnProgress ( func ( i * dashboards . GenieMessage ) {
status := i . Status
statusMessage := fmt . Sprintf ( "current status: %s" , status )
spinner <- statusMessage
} ) . GetWithTimeout ( startConversationTimeout )
close ( spinner )
if err != nil {
return err
}
return cmdio . Render ( ctx , info )
}
// Disable completions since they are not applicable.
// Can be overridden by manual implementation in `override.go`.
cmd . ValidArgsFunction = cobra . NoFileCompletions
// Apply optional overrides to this command.
for _ , fn := range startConversationOverrides {
fn ( cmd , & startConversationReq )
}
return cmd
}
// end service Genie