Skip to content

Function: genieChat()

genieChat(space_id, content, options?): AsyncGenerator<{ attachments?: object[]; auto_regenerate_count?: number; content: string; conversation_id: string; created_timestamp?: number; error?: { error?: string; type?: "BLOCK_MULTIPLE_EXECUTIONS_EXCEPTION" | "CHAT_COMPLETION_CLIENT_EXCEPTION" | "CHAT_COMPLETION_CLIENT_TIMEOUT_EXCEPTION" | "CHAT_COMPLETION_NETWORK_EXCEPTION" | "CONTENT_FILTER_EXCEPTION" | "CONTEXT_EXCEEDED_EXCEPTION" | "COULD_NOT_GET_MODEL_DEPLOYMENTS_EXCEPTION" | "COULD_NOT_GET_UC_SCHEMA_EXCEPTION" | "DEPLOYMENT_NOT_FOUND_EXCEPTION" | "DESCRIBE_QUERY_INVALID_SQL_ERROR" | "DESCRIBE_QUERY_TIMEOUT" | "DESCRIBE_QUERY_UNEXPECTED_FAILURE" | "EXCEEDED_MAX_TOKEN_LENGTH_EXCEPTION" | "FUNCTIONS_NOT_AVAILABLE_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_JSON_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_TYPE_EXCEPTION" | "FUNCTION_CALL_MISSING_PARAMETER_EXCEPTION" | "GENERATED_SQL_QUERY_TOO_LONG_EXCEPTION" | "GENERIC_CHAT_COMPLETION_EXCEPTION" | "GENERIC_CHAT_COMPLETION_SERVICE_EXCEPTION" | "GENERIC_SQL_EXEC_API_CALL_EXCEPTION" | "ILLEGAL_PARAMETER_DEFINITION_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_FAILED_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_ONGOING_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_UNSUPPORTED_EXCEPTION" | "INTERNAL_CATALOG_MISSING_UC_PATH_EXCEPTION" | "INTERNAL_CATALOG_PATH_OVERLAP_EXCEPTION" | "INVALID_CERTIFIED_ANSWER_FUNCTION_EXCEPTION" | "INVALID_CERTIFIED_ANSWER_IDENTIFIER_EXCEPTION" | "INVALID_CHAT_COMPLETION_ARGUMENTS_JSON_EXCEPTION" | "INVALID_CHAT_COMPLETION_JSON_EXCEPTION" | "INVALID_COMPLETION_REQUEST_EXCEPTION" | "INVALID_FUNCTION_CALL_EXCEPTION" | "INVALID_SQL_MULTIPLE_DATASET_REFERENCES_EXCEPTION" | "INVALID_SQL_MULTIPLE_STATEMENTS_EXCEPTION" | "INVALID_SQL_UNKNOWN_TABLE_EXCEPTION" | "INVALID_TABLE_IDENTIFIER_EXCEPTION" | "LOCAL_CONTEXT_EXCEEDED_EXCEPTION" | "MESSAGE_ATTACHMENT_TOO_LONG_ERROR" | "MESSAGE_CANCELLED_WHILE_EXECUTING_EXCEPTION" | "MESSAGE_DELETED_WHILE_EXECUTING_EXCEPTION" | "MESSAGE_UPDATED_WHILE_EXECUTING_EXCEPTION" | "MISSING_SQL_QUERY_EXCEPTION" | "NO_DEPLOYMENTS_AVAILABLE_TO_WORKSPACE" | "NO_QUERY_TO_VISUALIZE_EXCEPTION" | "NO_TABLES_TO_QUERY_EXCEPTION" | "RATE_LIMIT_EXCEEDED_GENERIC_EXCEPTION" | "RATE_LIMIT_EXCEEDED_SPECIFIED_WAIT_EXCEPTION" | "REPLY_PROCESS_TIMEOUT_EXCEPTION" | "RETRYABLE_PROCESSING_EXCEPTION" | "SQL_EXECUTION_EXCEPTION" | "STOP_PROCESS_DUE_TO_AUTO_REGENERATE" | "TABLES_MISSING_EXCEPTION" | "TOO_MANY_CERTIFIED_ANSWERS_EXCEPTION" | "TOO_MANY_TABLES_EXCEPTION" | "UNEXPECTED_REPLY_PROCESS_EXCEPTION" | "UNKNOWN_AI_MODEL" | "UNSUPPORTED_CONVERSATION_TYPE_EXCEPTION" | "WAREHOUSE_ACCESS_MISSING_EXCEPTION" | "WAREHOUSE_NOT_FOUND_EXCEPTION"; }; feedback?: { rating?: "NEGATIVE" | "NONE" | "POSITIVE"; }; id: string; last_updated_timestamp?: number; message_id: string; query_result?: { is_truncated?: boolean; row_count?: number; statement_id?: string; statement_id_signature?: string; }; space_id: string; status?: "ASKING_AI" | "CANCELLED" | "COMPLETED" | "EXECUTING_QUERY" | "FAILED" | "FETCHING_METADATA" | "FILTERING_CONTEXT" | "PENDING_WAREHOUSE" | "QUERY_RESULT_EXPIRED" | "SUBMITTED"; user_id?: number; }, void, void>

One turn against a Genie space, yielded as a stream of GenieMessage snapshots.

Turn lifecycle:

  • No options.conversationId: open a new conversation via client.genie.startConversation. The opened conversation id surfaces on every yielded GenieMessage (.conversation_id) so the caller can thread it into a follow-up call.
  • With options.conversationId: append to that conversation via client.genie.createMessage.
  • In both cases, after the create/start the driver polls client.genie.getMessage every options.pollIntervalMs (default 500ms) until the message reaches a terminal status, then yields the terminal snapshot and returns.

Cancellation: a single internal AbortController covers the whole turn. options.context is tied into that controller so an external abort tears down every in-flight SDK call AND the inter-poll sleep. Breaking out of the for await does the same via the try / finally.

string

string

GenieChatOptions

AsyncGenerator<{ attachments?: object[]; auto_regenerate_count?: number; content: string; conversation_id: string; created_timestamp?: number; error?: { error?: string; type?: "BLOCK_MULTIPLE_EXECUTIONS_EXCEPTION" | "CHAT_COMPLETION_CLIENT_EXCEPTION" | "CHAT_COMPLETION_CLIENT_TIMEOUT_EXCEPTION" | "CHAT_COMPLETION_NETWORK_EXCEPTION" | "CONTENT_FILTER_EXCEPTION" | "CONTEXT_EXCEEDED_EXCEPTION" | "COULD_NOT_GET_MODEL_DEPLOYMENTS_EXCEPTION" | "COULD_NOT_GET_UC_SCHEMA_EXCEPTION" | "DEPLOYMENT_NOT_FOUND_EXCEPTION" | "DESCRIBE_QUERY_INVALID_SQL_ERROR" | "DESCRIBE_QUERY_TIMEOUT" | "DESCRIBE_QUERY_UNEXPECTED_FAILURE" | "EXCEEDED_MAX_TOKEN_LENGTH_EXCEPTION" | "FUNCTIONS_NOT_AVAILABLE_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_JSON_EXCEPTION" | "FUNCTION_ARGUMENTS_INVALID_TYPE_EXCEPTION" | "FUNCTION_CALL_MISSING_PARAMETER_EXCEPTION" | "GENERATED_SQL_QUERY_TOO_LONG_EXCEPTION" | "GENERIC_CHAT_COMPLETION_EXCEPTION" | "GENERIC_CHAT_COMPLETION_SERVICE_EXCEPTION" | "GENERIC_SQL_EXEC_API_CALL_EXCEPTION" | "ILLEGAL_PARAMETER_DEFINITION_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_FAILED_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_ONGOING_EXCEPTION" | "INTERNAL_CATALOG_ASSET_CREATION_UNSUPPORTED_EXCEPTION" | "INTERNAL_CATALOG_MISSING_UC_PATH_EXCEPTION" | "INTERNAL_CATALOG_PATH_OVERLAP_EXCEPTION" | "INVALID_CERTIFIED_ANSWER_FUNCTION_EXCEPTION" | "INVALID_CERTIFIED_ANSWER_IDENTIFIER_EXCEPTION" | "INVALID_CHAT_COMPLETION_ARGUMENTS_JSON_EXCEPTION" | "INVALID_CHAT_COMPLETION_JSON_EXCEPTION" | "INVALID_COMPLETION_REQUEST_EXCEPTION" | "INVALID_FUNCTION_CALL_EXCEPTION" | "INVALID_SQL_MULTIPLE_DATASET_REFERENCES_EXCEPTION" | "INVALID_SQL_MULTIPLE_STATEMENTS_EXCEPTION" | "INVALID_SQL_UNKNOWN_TABLE_EXCEPTION" | "INVALID_TABLE_IDENTIFIER_EXCEPTION" | "LOCAL_CONTEXT_EXCEEDED_EXCEPTION" | "MESSAGE_ATTACHMENT_TOO_LONG_ERROR" | "MESSAGE_CANCELLED_WHILE_EXECUTING_EXCEPTION" | "MESSAGE_DELETED_WHILE_EXECUTING_EXCEPTION" | "MESSAGE_UPDATED_WHILE_EXECUTING_EXCEPTION" | "MISSING_SQL_QUERY_EXCEPTION" | "NO_DEPLOYMENTS_AVAILABLE_TO_WORKSPACE" | "NO_QUERY_TO_VISUALIZE_EXCEPTION" | "NO_TABLES_TO_QUERY_EXCEPTION" | "RATE_LIMIT_EXCEEDED_GENERIC_EXCEPTION" | "RATE_LIMIT_EXCEEDED_SPECIFIED_WAIT_EXCEPTION" | "REPLY_PROCESS_TIMEOUT_EXCEPTION" | "RETRYABLE_PROCESSING_EXCEPTION" | "SQL_EXECUTION_EXCEPTION" | "STOP_PROCESS_DUE_TO_AUTO_REGENERATE" | "TABLES_MISSING_EXCEPTION" | "TOO_MANY_CERTIFIED_ANSWERS_EXCEPTION" | "TOO_MANY_TABLES_EXCEPTION" | "UNEXPECTED_REPLY_PROCESS_EXCEPTION" | "UNKNOWN_AI_MODEL" | "UNSUPPORTED_CONVERSATION_TYPE_EXCEPTION" | "WAREHOUSE_ACCESS_MISSING_EXCEPTION" | "WAREHOUSE_NOT_FOUND_EXCEPTION"; }; feedback?: { rating?: "NEGATIVE" | "NONE" | "POSITIVE"; }; id: string; last_updated_timestamp?: number; message_id: string; query_result?: { is_truncated?: boolean; row_count?: number; statement_id?: string; statement_id_signature?: string; }; space_id: string; status?: "ASKING_AI" | "CANCELLED" | "COMPLETED" | "EXECUTING_QUERY" | "FAILED" | "FETCHING_METADATA" | "FILTERING_CONTEXT" | "PENDING_WAREHOUSE" | "QUERY_RESULT_EXPIRED" | "SUBMITTED"; user_id?: number; }, void, void>

// Single turn.
for await (const m of genieChat(spaceId, "Top 5 stores?")) {
render(m);
}
// Multi-turn: caller threads the conversation id.
let conversationId: string | undefined;
for (const question of questions) {
for await (const m of genieChat(spaceId, question, { conversationId })) {
conversationId = m.conversation_id ?? conversationId;
render(m);
}
}