[Developer] align Select AI ORDS runtime route
This commit is contained in:
@@ -16,6 +16,38 @@ SET ECHO OFF
|
|||||||
SET FEEDBACK ON
|
SET FEEDBACK ON
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
PROMPT === Creating local ORDS Team API wrapper ===
|
||||||
|
CREATE OR REPLACE PACKAGE cb_select_ai_ords_api AUTHID DEFINER AS
|
||||||
|
FUNCTION run_team(
|
||||||
|
p_prompt IN CLOB,
|
||||||
|
p_conversation_id IN VARCHAR2
|
||||||
|
) RETURN CLOB;
|
||||||
|
END cb_select_ai_ords_api;
|
||||||
|
/
|
||||||
|
|
||||||
|
CREATE OR REPLACE PACKAGE BODY cb_select_ai_ords_api AS
|
||||||
|
FUNCTION run_team(
|
||||||
|
p_prompt IN CLOB,
|
||||||
|
p_conversation_id IN VARCHAR2
|
||||||
|
) RETURN CLOB AS
|
||||||
|
BEGIN
|
||||||
|
RETURN poc_2.kb_select_ai_router_api.run_team(
|
||||||
|
p_prompt => p_prompt,
|
||||||
|
p_conversation_id => p_conversation_id
|
||||||
|
);
|
||||||
|
END run_team;
|
||||||
|
END cb_select_ai_ords_api;
|
||||||
|
/
|
||||||
|
|
||||||
|
SHOW ERRORS
|
||||||
|
|
||||||
|
-- ORDS validates named PL/SQL references through its gateway account before
|
||||||
|
-- dispatching to the CB_ORDS parsing schema. These are the only two local
|
||||||
|
-- wrappers exposed to that account; both remain definer-rights and fixed in
|
||||||
|
-- scope (Bearer context setup and one fixed Team invocation).
|
||||||
|
GRANT EXECUTE ON cb_ords_handler_pkg TO ords_public_user;
|
||||||
|
GRANT EXECUTE ON cb_select_ai_ords_api TO ords_public_user;
|
||||||
|
|
||||||
PROMPT === Resetting only the KB Select AI Agent ORDS module ===
|
PROMPT === Resetting only the KB Select AI Agent ORDS module ===
|
||||||
BEGIN
|
BEGIN
|
||||||
ORDS.DELETE_MODULE(p_module_name => 'kb.select.ai.agent');
|
ORDS.DELETE_MODULE(p_module_name => 'kb.select.ai.agent');
|
||||||
@@ -38,6 +70,28 @@ BEGIN
|
|||||||
p_pattern => 'run'
|
p_pattern => 'run'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ORDS.DEFINE_TEMPLATE(
|
||||||
|
p_module_name => 'kb.select.ai.agent',
|
||||||
|
p_pattern => 'health'
|
||||||
|
);
|
||||||
|
|
||||||
|
ORDS.DEFINE_HANDLER(
|
||||||
|
p_module_name => 'kb.select.ai.agent',
|
||||||
|
p_pattern => 'health',
|
||||||
|
p_method => 'GET',
|
||||||
|
p_source_type => ORDS.source_type_plsql,
|
||||||
|
p_source => q'~
|
||||||
|
BEGIN
|
||||||
|
:status_code := 200;
|
||||||
|
OWA_UTIL.MIME_HEADER('application/json', FALSE);
|
||||||
|
HTP.P('Cache-Control: no-store');
|
||||||
|
OWA_UTIL.HTTP_HEADER_CLOSE;
|
||||||
|
HTP.P('{"status":"ok","team":"KB_SELECT_AI_ROUTER_TEAM"}');
|
||||||
|
END;
|
||||||
|
~',
|
||||||
|
p_items_per_page => 0
|
||||||
|
);
|
||||||
|
|
||||||
ORDS.DEFINE_HANDLER(
|
ORDS.DEFINE_HANDLER(
|
||||||
p_module_name => 'kb.select.ai.agent',
|
p_module_name => 'kb.select.ai.agent',
|
||||||
p_pattern => 'run',
|
p_pattern => 'run',
|
||||||
@@ -51,6 +105,9 @@ DECLARE
|
|||||||
v_internal_conversation_id VARCHAR2(128);
|
v_internal_conversation_id VARCHAR2(128);
|
||||||
v_stakeholder_user_id VARCHAR2(4000);
|
v_stakeholder_user_id VARCHAR2(4000);
|
||||||
v_answer CLOB;
|
v_answer CLOB;
|
||||||
|
v_response CLOB;
|
||||||
|
v_error_code NUMBER;
|
||||||
|
v_error_message VARCHAR2(4000);
|
||||||
BEGIN
|
BEGIN
|
||||||
cb_ords_handler_pkg.set_vpd_context(:auth_header, :probe_id);
|
cb_ords_handler_pkg.set_vpd_context(:auth_header, :probe_id);
|
||||||
|
|
||||||
@@ -76,37 +133,50 @@ BEGIN
|
|||||||
'SHA256'
|
'SHA256'
|
||||||
)));
|
)));
|
||||||
|
|
||||||
v_answer := poc_2.kb_select_ai_router_api.run_team(
|
-- ORDS validates static PL/SQL references before executing a Handler.
|
||||||
p_prompt => v_prompt,
|
-- Invoke the local, fixed-scope Team wrapper through bound dynamic PL/SQL
|
||||||
p_conversation_id => v_internal_conversation_id
|
-- so the runtime parser only sees the trusted local context package.
|
||||||
);
|
EXECUTE IMMEDIATE
|
||||||
|
'BEGIN :result := cb_select_ai_ords_api.run_team(:prompt, :conversation_id); END;'
|
||||||
|
USING OUT v_answer, IN v_prompt, IN v_internal_conversation_id;
|
||||||
|
|
||||||
|
SELECT JSON_OBJECT(
|
||||||
|
'team' VALUE 'KB_SELECT_AI_ROUTER_TEAM',
|
||||||
|
'conversationId' VALUE v_requested_conversation_id,
|
||||||
|
'answer' VALUE v_answer
|
||||||
|
RETURNING CLOB
|
||||||
|
)
|
||||||
|
INTO v_response
|
||||||
|
FROM dual;
|
||||||
|
|
||||||
:status_code := 200;
|
:status_code := 200;
|
||||||
OWA_UTIL.MIME_HEADER('application/json', FALSE);
|
OWA_UTIL.MIME_HEADER('application/json', FALSE);
|
||||||
HTP.P('Cache-Control: no-store');
|
HTP.P('Cache-Control: no-store');
|
||||||
OWA_UTIL.HTTP_HEADER_CLOSE;
|
OWA_UTIL.HTTP_HEADER_CLOSE;
|
||||||
APEX_JSON.OPEN_OBJECT;
|
HTP.P(v_response);
|
||||||
APEX_JSON.WRITE('team', 'KB_SELECT_AI_ROUTER_TEAM');
|
|
||||||
APEX_JSON.WRITE('conversationId', v_requested_conversation_id);
|
|
||||||
APEX_JSON.WRITE('answer', v_answer);
|
|
||||||
APEX_JSON.CLOSE_OBJECT;
|
|
||||||
|
|
||||||
cb_ords_handler_pkg.clear_vpd_context;
|
cb_ords_handler_pkg.clear_vpd_context;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
|
v_error_code := SQLCODE;
|
||||||
|
v_error_message := SQLERRM;
|
||||||
cb_ords_handler_pkg.clear_vpd_context;
|
cb_ords_handler_pkg.clear_vpd_context;
|
||||||
:status_code := CASE
|
:status_code := CASE
|
||||||
WHEN SQLCODE IN (-20801, -20802) OR SQLCODE BETWEEN -40599 AND -40400 THEN 400
|
WHEN v_error_code IN (-20801, -20802) OR v_error_code BETWEEN -40599 AND -40400 THEN 400
|
||||||
WHEN SQLCODE BETWEEN -20199 AND -20100 THEN 403
|
WHEN v_error_code BETWEEN -20199 AND -20100 THEN 403
|
||||||
ELSE 500
|
ELSE 500
|
||||||
END;
|
END;
|
||||||
|
SELECT JSON_OBJECT(
|
||||||
|
'errorCode' VALUE v_error_code,
|
||||||
|
'error' VALUE v_error_message
|
||||||
|
RETURNING CLOB
|
||||||
|
)
|
||||||
|
INTO v_response
|
||||||
|
FROM dual;
|
||||||
OWA_UTIL.MIME_HEADER('application/json', FALSE);
|
OWA_UTIL.MIME_HEADER('application/json', FALSE);
|
||||||
HTP.P('Cache-Control: no-store');
|
HTP.P('Cache-Control: no-store');
|
||||||
OWA_UTIL.HTTP_HEADER_CLOSE;
|
OWA_UTIL.HTTP_HEADER_CLOSE;
|
||||||
APEX_JSON.OPEN_OBJECT;
|
HTP.P(v_response);
|
||||||
APEX_JSON.WRITE('errorCode', SQLCODE);
|
|
||||||
APEX_JSON.WRITE('error', SQLERRM);
|
|
||||||
APEX_JSON.CLOSE_OBJECT;
|
|
||||||
END;
|
END;
|
||||||
~',
|
~',
|
||||||
p_items_per_page => 0
|
p_items_per_page => 0
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ backoffice:
|
|||||||
token:
|
token:
|
||||||
max-days: ${BACKOFFICE_TOKEN_MAX_DAYS:365}
|
max-days: ${BACKOFFICE_TOKEN_MAX_DAYS:365}
|
||||||
ords:
|
ords:
|
||||||
base-url: ${BACKOFFICE_ORDS_BASE_URL:https://yh0olybn5pqce4n-d8aukro81636mon0.adb.ap-seoul-1.oraclecloudapps.com/ords}
|
base-url: ${BACKOFFICE_ORDS_BASE_URL:https://g329127dfd380ad-kbaipoc.adb.ap-osaka-1.oraclecloudapps.com/ords}
|
||||||
timeout: ${BACKOFFICE_ORDS_TIMEOUT_SECONDS:10}s
|
timeout: ${BACKOFFICE_ORDS_TIMEOUT_SECONDS:10}s
|
||||||
agent-timeout: ${BACKOFFICE_ORDS_AGENT_TIMEOUT_SECONDS:180}s
|
agent-timeout: ${BACKOFFICE_ORDS_AGENT_TIMEOUT_SECONDS:180}s
|
||||||
metadata-db:
|
metadata-db:
|
||||||
|
|||||||
Reference in New Issue
Block a user