mrs_plugin/scripts/default_heatwave_endpoints/heatwave_rest_service_1.0.0.sql (180 lines of code) (raw):
/*
* Copyright (c) 2025, Oracle and/or its affiliates.
*/
CREATE OR REPLACE REST SERVICE /HeatWave/v1
OPTIONS {
"http": {
"allowedOrigin": "auto"
},
"headers": {
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Requested-With, Origin, X-Auth-Token",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Credentials": "true"
},
"passthroughDbUser": true
}
ADD AUTH APP 'MySQL'
PUBLISHED;
CREATE OR REPLACE REST SCHEMA /ml ON SERVICE /HeatWave/v1
FROM `sys`;
CREATE OR REPLACE REST FUNCTION /generate
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_GENERATE FORCE
PARAMETERS HeatWaveV1MlGenerateParams {
input: input @IN @DATATYPE("LONGTEXT"),
options: options @IN @DATATYPE("JSON")
}
RESULT HeatWaveV1MlGenerateResult {
result: result @DATATYPE("JSON")
}
OPTIONS {
"sqlQuery": {"timeout":120000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST PROCEDURE /rag
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_RAG FORCE
PARAMETERS HeatWaveV1MlRagParams {
input: input @IN @DATATYPE("LONGTEXT"),
output: output @OUT @DATATYPE("JSON"),
options: options @IN @DATATYPE("JSON")
}
OPTIONS {
"sqlQuery": {"timeout":120000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST FUNCTION /embed
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_EMBED_ROW FORCE
PARAMETERS HeatWaveV1MlEmbedRowParams {
input: input @IN @DATATYPE("LONGTEXT"),
options: options @IN @DATATYPE("JSON")
}
RESULT HeatWaveV1MlEmbedRowResult {
result: result @DATATYPE("vector")
}
OPTIONS {
"sqlQuery": {"timeout":60000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;
-- with progress tracking
CREATE OR REPLACE REST PROCEDURE /chat
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.HEATWAVE_CHAT FORCE
PARAMETERS HeatWavev1HeatwaveChatParams {
query: query @IN @DATATYPE("LONGTEXT"),
options: chat_options @INOUT @DATATYPE("JSON")
}
OPTIONS {
"sqlQuery": {"timeout":180000},
"mysqlTask": {
"driver": "router",
"eventSchema": "ML_SCHEMA_$username",
"statusDataJsonSchema": {"details":"object", "lastUpdate":"string"},
"userVariables": ["chat_options"]
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST PROCEDURE /train
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_TRAIN FORCE
PARAMETERS HeatWaveV1MlTrainParams {
tableName: table_name @IN @DATATYPE("VARCHAR(255)"),
targetColumnName: target_column_name @IN @DATATYPE("VARCHAR(64)"),
options: options @IN @DATATYPE("JSON"),
modelHandle: model_handle @INOUT @DATATYPE("VARCHAR(255)")
}
OPTIONS {
"sqlQuery": {"timeout":28800000},
"mysqlTask": {
"driver": "router",
"monitoringSql": [
"SELECT QEXEC_TEXT INTO @status FROM performance_schema.rpd_query_stats WHERE QUERY_TEXT = 'ML_TRAIN' AND CONNECTION_ID = @task_connection_id ORDER BY query_id DESC LIMIT 1;",
"CALL mysql_tasks.add_task_log(@task_id, JSON_UNQUOTE(JSON_EXTRACT(@status, '$.status')), JSON_OBJECT('lastUpdate', NOW(), 'details', CAST(IF(@status IS NULL, '{}', JSON_EXTRACT(@status, '$.details')) AS JSON)), IF(@status IS NULL, 0, JSON_EXTRACT(@status, '$.completionPercentage')), 'RUNNING');"
],
"eventSchema": "ML_SCHEMA_$username",
"statusDataJsonSchema": {"details":"object", "lastUpdate":"string"}
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST FUNCTION /predict
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_PREDICT_ROW FORCE
PARAMETERS HeatWaveV1MlPredictRowParams {
input: input @IN @DATATYPE("JSON"),
modelHandle: model_handle @IN @DATATYPE("VARCHAR(255)"),
options: options @IN @DATATYPE("JSON")
}
RESULT HeatWaveV1MlPredictRowResult {
result: result @DATATYPE("json")
}
OPTIONS {
"sqlQuery": {"timeout":60000},
"mysqlTask": {
"driver": "router",
"monitoringSql": [
"SELECT QEXEC_TEXT INTO @status FROM performance_schema.rpd_query_stats WHERE QUERY_TEXT = 'ML_MODEL_UNLOAD' AND AND CONNECTION_ID = @task_connection_id ORDER BY query_id DESC LIMIT 1;",
"CALL mysql_tasks.add_task_log(@task_id, JSON_UNQUOTE(JSON_EXTRACT(@status, '$.status')), JSON_OBJECT('lastUpdate', NOW(6)), IF(@status IS NULL, 0, JSON_EXTRACT(@status, '$.completionPercentage')), 'RUNNING');"
],
"eventSchema": "ML_SCHEMA_$username",
"statusDataJsonSchema": {"details":"object", "lastUpdate":"string"}
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST PROCEDURE /score
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_SCORE FORCE
PARAMETERS HeatWaveV1MlScoreParams {
tableName: table_name @IN @DATATYPE("VARCHAR(255)"),
targetColumnName: target_column_name @IN @DATATYPE("VARCHAR(64)"),
modelHandle: model_handle @IN @DATATYPE("VARCHAR(255)"),
metric: metric @IN @DATATYPE("VARCHAR(255)"),
score: score @OUT @DATATYPE("FLOAT"),
options: options @IN @DATATYPE("JSON")
}
OPTIONS {
"sqlQuery": {"timeout":60000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST PROCEDURE /explainModel
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_EXPLAIN FORCE
PARAMETERS HeatWaveV1MlExplainParams {
tableName: table_name @IN @DATATYPE("VARCHAR(255)"),
targetColumnName: target_column_name @IN @DATATYPE("VARCHAR(64)"),
modelHandle: model_handle @IN @DATATYPE("VARCHAR(255)"),
options: options @IN @DATATYPE("JSON")
}
OPTIONS {
"sqlQuery": {"timeout":60000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;
CREATE OR REPLACE REST FUNCTION /explainPrediction
ON SERVICE /HeatWave/v1 SCHEMA /ml
AS sys.ML_EXPLAIN_ROW FORCE
PARAMETERS HeatWaveV1MlExplainRowParams {
input: input @IN @DATATYPE("JSON"),
modelHandle: model_handle @IN @DATATYPE("VARCHAR(255)"),
options: options @IN @DATATYPE("JSON")
}
RESULT HeatWaveV1MlExplainRowResult {
result: result @DATATYPE("json")
}
OPTIONS {
"sqlQuery": {"timeout":60000},
"mysqlTask": {
"driver": "router"
}
}
AUTHENTICATION REQUIRED;