From 4ac0c49f80761ca240f549a5d9ed0ac99458b86d Mon Sep 17 00:00:00 2001 From: bhenndricks <84850445+bhenndricks@users.noreply.github.com> Date: Fri, 11 Oct 2024 02:23:52 -0400 Subject: [PATCH] Updates (#178) * Apex-RAG This lab is in production for testing purposes. * update * updts * Update manifest.json * Update apex.md * Update apex.md * Update apex.md * updates * Update ask.md * Update tables.md * updts * updts * . * TEST * Update download.md * Update download.md * f * . * Update apex-app.md * updates * Update download.md * updates * updates * Delete setup.md * Update download.md * updates * updates * Update setup.md * Update setup.md * Update download.md * UPDATES * updates * Update introduction.md * updates * Update setup.md * Update to: * Updates * Updates Formatting * Updates from Kevin and Ramon @klazarz @ramonamagadan18 * updates * Delete ai-vector-search-apex-adb directory * update * Update download.md * Image Update * Updates * Update ask.md * Updated ACL configuration * Update download.md * Update download.md * General Updates * Update tables.md * Date Changes * Update tables.md --------- Co-authored-by: Ana-Maria COMAN <157381084+anacoman11@users.noreply.github.com> --- .../apex-app/apex-app.md | 4 +- .../apex-app/images/urlpathprefix.png | Bin 38153 -> 29526 bytes ai-vector-search-apex-adb/apex/apex.md | 3 +- ai-vector-search-apex-adb/ask/ask.md | 7 +- .../download/download.md | 65 ++++++++++++++++-- ai-vector-search-apex-adb/setup/setup.md | 28 +++++--- ai-vector-search-apex-adb/tables/tables.md | 8 +-- 7 files changed, 88 insertions(+), 27 deletions(-) diff --git a/ai-vector-search-apex-adb/apex-app/apex-app.md b/ai-vector-search-apex-adb/apex-app/apex-app.md index 57f3e2c..f287a3b 100644 --- a/ai-vector-search-apex-adb/apex-app/apex-app.md +++ b/ai-vector-search-apex-adb/apex-app/apex-app.md @@ -46,7 +46,7 @@ Here we will be doing some repetitive work but it will be pretty easy. So we wil ![alt text](images/editremoteserver.png) 2. Edit the remote server and plug in the pre-authenticated request URL. 3. Grab the pre-authenticated request URL from your bucket and plug it into the box where it says endpoint URL. Ensure it is in the format `https://objectstorage.us-ashburn-1.oraclecloud.com/p/-j_vl5Rra_FHPSt1Qx6lVjOdguVRDOjRdqZI/n/xyz`. Make sure the URL cuts off at the point where it mentions your tenancy (e.g., `xyz`). Click **Save Changes**. -![alt text](/images/urlpathprefix.png) +![alt text](images/urlpathprefix.png) 4. Open the same editing page again, copy the static identifier, and paste it into the name of this REST data source. The name should reflect what the static identifier has. Click **Save Changes**. 5. The rest of the URL: `/b/apex_file_storage/o/` will be used to plug into the URL path prefix underneath the base URL. 6. Ensure the URL format cuts off at the tenancy point. @@ -85,6 +85,8 @@ You may now [proceed to the next lab](#next). ## Acknowledgements + * **Authors** - Blake Hendricks, Vijay Balebail, Milton Wan * **Contributors** - Manoj Sundar, Rajeev Rumale + * **Last Updated By/Date** - July 2024 diff --git a/ai-vector-search-apex-adb/apex-app/images/urlpathprefix.png b/ai-vector-search-apex-adb/apex-app/images/urlpathprefix.png index 4e33f7f890a8d379716e5ec3d50747720d7acc82..6592e8b5d6af452d96119a3594e5c3139deceda1 100644 GIT binary patch literal 29526 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

$oyGfo^aOAJg0@ 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 R^q?fpd)nFEsoLRU;y?d2|CRs% diff --git a/ai-vector-search-apex-adb/apex/apex.md b/ai-vector-search-apex-adb/apex/apex.md index 0f8975e..6b64a58 100644 --- a/ai-vector-search-apex-adb/apex/apex.md +++ b/ai-vector-search-apex-adb/apex/apex.md @@ -57,6 +57,5 @@ You may now [proceed to the next lab](#next). ## Acknowledgements -* **Authors** - Blake Hendricks, Monoj Sundar, Vijay Balebail, Milton Wan -* **Contributors** - Rajeev Rumale +* **Authors** - Blake Hendricks, Milton Wan * **Last Updated By/Date** - July 2024 \ No newline at end of file diff --git a/ai-vector-search-apex-adb/ask/ask.md b/ai-vector-search-apex-adb/ask/ask.md index 9457ff6..2f9f9fe 100644 --- a/ai-vector-search-apex-adb/ask/ask.md +++ b/ai-vector-search-apex-adb/ask/ask.md @@ -123,7 +123,8 @@ END; DECLARE: This section is used to declare the variable result_clob, which will hold the response from the LLM. BEGIN: Marks the beginning of the executable part of the PL/SQL block. -result_clob := admin.generate_text_response2(:P3_QUESTION,:P3_ID,7) calls the generate_text_response2 function. It passes three parameters: + +result\_clob := admin.generate\_text\_response2(:P3\_QUESTION,:P3\_ID,7) calls the generate\_text\_response2 function. It passes three parameters: 1. :P3_QUESTION - The question entered by the user. 2. :P3_ID - The ID of the document selected by the user. @@ -133,7 +134,9 @@ Finally assign the result of the function to the APEX page item :P3_ANSWER. If t ## Summary -In this workshop we showcased an AI RAG application using Oracle APEX, Oracle Autonomous Database 23ai with AI Vector Search, and the Oracle Cloud Object Storage. These products and services are important building blocks for many AI solutions. + +In this workshop we showcased an AI RAG application using Oracle APEX, Oracle Autonomous Database 23ai with AI Vector Search, and the Oracle Cloud Object Storage. These products and services are important building blocks for many AI solutions. + ## Acknowledgements diff --git a/ai-vector-search-apex-adb/download/download.md b/ai-vector-search-apex-adb/download/download.md index 1ebcd96..71254cf 100644 --- a/ai-vector-search-apex-adb/download/download.md +++ b/ai-vector-search-apex-adb/download/download.md @@ -71,9 +71,9 @@ Before we dive into the procedure, make sure you have the following: 15. Select BYOL license type. 16. Click Create Autonomous Database. - ![](./images/provision-atp-7.png) - Your console will show that ATP is provisioning. This will take about 2 or 3 minutes to complete. + + Your console will show that ADW is provisioning. This will take about 2 or 3 minutes to complete. You can check the status of the provisioning in the Work Request. @@ -107,6 +107,7 @@ From ADMIN user, run the following to ensure your database user has the necessar CREATE USER VECTOR identified by ; GRANT CONNECT to VECTOR; +GRANT CREATE SESSION to VECTOR; GRANT RESOURCE to VECTOR; GRANT DB_DEVELOPER_ROLE to VECTOR; GRANT EXECUTE ON DBMS_CLOUD TO VECTOR; @@ -117,6 +118,50 @@ GRANT EXECUTE ON DBMS_CLOUD_AI TO VECTOR; ``` +Enable the Rest Access for the Vector User: + +```sql + +-- REST ENABLE +BEGIN + ORDS_ADMIN.ENABLE_SCHEMA( + p_enabled => TRUE, + p_schema => 'VECTOR', + p_url_mapping_type => 'BASE_PATH', + p_url_mapping_pattern => 'vector', + p_auto_rest_auth=> FALSE + ); + -- ENABLE DATA SHARING + C##ADP$SERVICE.DBMS_SHARE.ENABLE_SCHEMA( + SCHEMA_NAME => 'VECTOR', + ENABLED => TRUE + ); + commit; +END; +/ + +``` + + +Last, but not least, we need to create an ACL for making sure that package DBMS_VECTOR_CHAIN (which does a direct callout to internet from PL/SQL without going through APEX webservices packages) works as intended. You can run this as admin: + +```sql + +BEGIN + + DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( + host => 'specific_host_or_ip', -- Restrict to a specific host or IP range so it is not wide open. You can use '*' if you want it open to any connection. + ace => xs$ace_type(privilege_list => xs$name_list('connect'), + principal_name => 'specific_user_or_role', -- Restrict to a specific user or role. For example, "Public" + principal_type => xs_acl.ptype_db) + ); + +END; + +/ + +``` + ## Task 5: Option 1 - Create the credential for ADB to access OCI GenAI Service ### OCI GenAI Service @@ -166,7 +211,9 @@ end; / ``` -## Task 6: Option 2 - Create the credential for ADB to access OpenAI + +## Task 5: Option 2 - Create the credential for ADB to access OpenAI + ### OpenAI @@ -188,9 +235,11 @@ end; ``` -## Task 7: Download ONNX embedding models Using `DBMS\_CLOUD.GET\_OBJECTS` -Now log in as VECTOR or ``, use the `DBMS\_CLOUD.GET\_OBJECTS` procedure to download the ONNX embedding model files from the Oracle Object Storage bucket into Oracle ADB. You will download two different models. +## Task 6: Download ONNX embedding models Using `DBMS_CLOUD.GET_OBJECTS` + +Now log in as VECTOR or ``, use the `DBMS_CLOUD.GET_OBJECTS` procedure to download the ONNX embedding model files from the Oracle Object Storage bucket into Oracle ADB. You will download two different models. + Run to create the staging directory. @@ -238,7 +287,9 @@ END; ``` -## Task 8: Verify the File in Oracle ADB + +## Task 7: Verify the File in Oracle ADB + After downloading the file, you can verify its existence in Oracle ADB by listing the contents of the directory. @@ -297,4 +348,4 @@ You may now [proceed to the next lab](#next). ## Acknowledgements * **Authors** - Blake Hendricks, Vijay Balebail, Milton Wan -* **Last Updated By/Date** - July 2024 +* **Last Updated By/Date** - Blake Hendricks, October 2024 diff --git a/ai-vector-search-apex-adb/setup/setup.md b/ai-vector-search-apex-adb/setup/setup.md index 58452e5..ca74a50 100644 --- a/ai-vector-search-apex-adb/setup/setup.md +++ b/ai-vector-search-apex-adb/setup/setup.md @@ -33,7 +33,7 @@ By completing this lab, you will achieve the following objectives: * **Generate a Pre-Authenticated Request (PAR) for secure bucket access.** * You will create a PAR to enable secure and temporary access to your storage bucket without requiring further authentication. -### Task 1: Create an OCI Compartment +## Task 1: Create an OCI Compartment 1. Click the hamburger icon (≡) at the top left corner of the page. @@ -50,7 +50,8 @@ By completing this lab, you will achieve the following objectives: 5. Click Create to complete the process. 6. Save the compartment OCID for later use. - ![compartment save](/images/compartmentsave.png) +![alt text](images/compartmentsave.png) + The members of the ProdObjectManagers group will require the ability to list the buckets in the compartment and manage any objects in these buckets. @@ -60,7 +61,8 @@ By completing this lab, you will achieve the following objectives: 8. Click Create to complete the process. ![Policies](/images/policyconfiguration.png) -### Task 2: Create policy to enable access to OCI GenAI + +## Task 2: Create policy to enable access to OCI GenAI Oracle's GenAI service is an LLM service from Oracle Cloud Infrastructure (OCI). The GenAI service provides access to several LLMs that you can pick from. @@ -91,14 +93,16 @@ Compartment: select your own compartment Note: This policy allows any database in the specified compartment to access OCI Generative AI service. In a production environment, ensure your policy's scope is minimally inclusive. -### Task 3: Save User OCID and Create API Keys + +## Task 3: Save User OCID and Create API Keys + 1. Click the profile icon in the top right of your OCI page, and click My Profile. - ![Users](/images/userprofile.png) + ![alt text](images/userprofile.png) 2. Save the user OCID for later use. - ![alt text](/images/ocidsave.png) +![alt text](images/ocidsave.png) -### Task 4: Create OCI API Key +## Task 4: Create OCI API Key 1. Select API KEYS under the resources section and add api key. ![alt text](images/addapikey.png) @@ -109,14 +113,16 @@ Note: This policy allows any database in the specified compartment to access OCI ![alt text](images/saveconfig.png) 5. Go ahead and close the tab after you have saved the contents. -### Task 5: Grab Your Parent Tenancy OCID +## Task 5: Grab Your Parent Tenancy OCID 1. Type tenancies in the OCI search bar, click the result, and then the tenancy name. ![alt text](images/tenancysearch.png) 2. Copy the tenancy OCID and save it in a separate document for later use. ![alt text](images/copytenancyid.png) -### Task 6: Create a Bucket + +## Task 6: Create a Bucket + In Oracle Object Storage, a bucket is a container for storing objects. To access a bucket through the Oracle Cloud Infrastructure REST APIs, complete the following identity management tasks using the Oracle Cloud Infrastructure console and an account that has administrative rights within the tenancy (the root compartment). @@ -133,7 +139,7 @@ In Oracle Object Storage, a bucket is a container for storing objects. To access 5. Click Create Bucket to complete the process. 6. To prepare for the successful creation and discovery of the WSM data profile later, upload a dummy file to the `apex_file_storage` bucket now using the Oracle Cloud Infrastructure console. -### Task 7: Create a Pre-Authenticated Request (PAR) +## Task 7: Create a Pre-Authenticated Request (PAR) 1. Click Create Pre-Auth Request on the resources section from the newly created bucket. ![alt text](images/createpreauth.png) @@ -151,4 +157,4 @@ You may now [proceed to the next lab](#next). ## Acknowledgements * **Authors** - Blake Hendricks, Milton Wan -* **Last Updated By/Date** - July 2024 +* **Last Updated By/Date** - Blake Hendricks, October 2024 diff --git a/ai-vector-search-apex-adb/tables/tables.md b/ai-vector-search-apex-adb/tables/tables.md index e275518..1c2c597 100644 --- a/ai-vector-search-apex-adb/tables/tables.md +++ b/ai-vector-search-apex-adb/tables/tables.md @@ -224,7 +224,7 @@ BEGIN "provider": "openai", "credential_name": "OPENAI_CRED", "url": "https://api.openai.com/v1/chat/completions", - "model": "gpt-3.5-turbo-16k", + "model": "gpt-4o-mini", "max_tokens": 2000, "temperature": 1.0 }'; @@ -245,7 +245,7 @@ END; ``` -## Task 3: Option 2 OCI GenAI Service - Create function to generate response using OCI GenAI LLM +## Task 3: Option 2 IS NOT AVAILABLE AT THE MOMENT. PLEASE USE OPTION 1. The LLM involves processing both the user question and relevant text excerpts to generate responses tailored specifically to the provided context. It's essential to note that the nature of the response is contingent upon the question and the LLM utilized. @@ -318,7 +318,7 @@ BEGIN "provider":"ocigenai", "credential_name": "GENAI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/generateText", - "model": "cohere.command", + "model": "cohere.command-r-16k", "inferenceRequest": { "maxTokens": 2000, "temperature": 1 @@ -405,4 +405,4 @@ You may now [proceed to the next lab](#next). ## Acknowledgements * **Authors** - Vijay Balebail, Milton Wan, Blake Hendricks -* **Last Updated By/Date** - Milton Wan, July 2024 +* **Last Updated By/Date** - Blake Hendricks, October 2024