diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/ai-answers.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/ai-answers.md
new file mode 100644
index 000000000..e997ce536
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/ai-answers.md
@@ -0,0 +1,146 @@
+# Code with AI Vector Search step-by-step
+
+## Introduction
+
+In this coding challenge, you’ll focus on **AI Vector Search**. Your mission is to implement a key update to change the way similarities are calculated, improving the accuracy of predictions.
+
+At SeerEquites, the data science team has been using Cosine similarity to assess similarities between customer profiles and predict loan risks. While effective in some contexts, the team recently realized that Cosine similarity wasn’t capturing the full picture of their customers financial profiles.
+
+**Why switch to Euclidean distance?**
+
+Cosine similarity is great when you care about the pattern or direction of someone’s data — not how big or small the numbers are. But in finance, the actual size of the numbers often matters a lot.
+
+Let’s say you’re comparing two customers based on their debt, income, and credit usage. These numbers matter significantly, and big differences can indicate very different levels of risk.
+
+Here’s an example:
+
+* Both customers have the same debt-to-income ratio of 2:1.
+
+* But one earns $20,000 a year, while the other earns $200,000.
+
+Cosine similarity would say these customers are quite similar, because their ratios follow the same pattern. But that’s misleading — the person earning $20,000 is much riskier.
+
+That’s where Euclidean distance comes in. Unlike Cosine similarity, Euclidean distance looks at the actual difference in the numbers. In this case, it would correctly flag that these customers are not similar in a meaningful way, since the scale of their incomes is vastly different.
+
+In finance, where decisions are often made based on key figures like income, debt, and credit usage, Euclidean distance is often a better tool. It takes the size of the numbers into account, which is crucial for making accurate risk predictions.
+
+In this lab, you’ll update the code to switch the similarity measure from Cosine to Euclidean. This change will improve the system’s ability to assess loan risks more accurately, providing more reliable insights for decision-making.
+
+This is your opportunity to sharpen your skills, explore the power of AI-driven search, and make a meaningful impact on a application. Let’s get started!
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+* Enhance your understanding of AI Vector Search by applying it to a developer coding challenge.
+* Gain hands-on experience with integrating AI Vector Search and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+## Task 1: Challenge Requirements
+
+Based on the data scientists' evaluation, the company has decided to switch from using Cosine similarity to Euclidean distance. This change aims to enhance the system’s ability to assess loan risks more accurately, ultimately providing more reliable insights to support better decision-making.
+
+Follow the prompts below to update the code based on the new company standard.
+
+## Task 2: Launch the Application
+
+1. Select the **Launcher** tab and open the **terminal**
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+ $
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 3: View the current AI chat bot return variables using Cosine
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed.
+
+ 
+
+3. Ask the following question to the AI Chat bot.
+
+ ````text
+
+ What about a 4th loan?
+
+ ````
+
+ Note how the return variables are shown:
+
+ 
+
+## Task 4: Modify the Customers.py File
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. Update the Customers.py file to make the necessary changes in the code at lines 845 and 846
+
+ 
+
+4. Save the Customers.py file.
+
+ 
+
+## Task 5: View results in the Loan application
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed.
+
+ 
+
+3. Ask the following question to the AI Chat bot.
+
+ ````text
+
+ What about a 4th loan?
+
+````
+4. View the new prompt return from the AI chat bot
+
+ 
+
+
+
+**Congratulations, you have successfully completed the AI Vector Search Challenge!** By switching to Euclidean distance, SeerEquites ensures more precise loan risk evaluations and improves the overall effectiveness of their loan management system.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/272-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/272-code.png
new file mode 100644
index 000000000..6a59a5921
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/272-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-1.png
new file mode 100644
index 000000000..384ac08a8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-2.png
new file mode 100644
index 000000000..a62c75c17
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-3.png
new file mode 100644
index 000000000..f9dd71a6c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-4.png
new file mode 100644
index 000000000..a46c3d094
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3-to-5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/353-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/353-code.png
new file mode 100644
index 000000000..0a3ba18b3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/353-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/362-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/362-code.png
new file mode 100644
index 000000000..830c19c1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/362-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/370-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/370-code.png
new file mode 100644
index 000000000..59b285860
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/370-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/378-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/378-code.png
new file mode 100644
index 000000000..170cb4d59
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/378-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/395-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/395-code.png
new file mode 100644
index 000000000..3301378b0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/395-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-1.png
new file mode 100644
index 000000000..c869c2d60
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-2.png
new file mode 100644
index 000000000..91e3e5d37
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-3.png
new file mode 100644
index 000000000..36ea976e8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-4.png
new file mode 100644
index 000000000..8a824ce84
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/3to5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/406-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/406-code.png
new file mode 100644
index 000000000..bc639405a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/406-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-vector-diagram.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-vector-diagram.png
new file mode 100644
index 000000000..a23ee595e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/ai-vector-diagram.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/cosine-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/cosine-ai.png
new file mode 100644
index 000000000..87372fe8f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/cosine-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2-ai.png
new file mode 100644
index 000000000..6bb3041e7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2.png
new file mode 100644
index 000000000..ff1a08ea6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/euclidean-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-dropdown.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-dropdown.png
new file mode 100644
index 000000000..9c724df26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-dropdown.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-exercise.png
new file mode 100644
index 000000000..9d3fb5692
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/graph-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith-5-ai.png
new file mode 100644
index 000000000..d09040ac2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith.png
new file mode 100644
index 000000000..02892f848
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-ai.png
new file mode 100644
index 000000000..1273ce0ec
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-graph.png
new file mode 100644
index 000000000..adfae9423
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods.png
new file mode 100644
index 000000000..cba8dbfc8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/login.png
new file mode 100644
index 000000000..d34ea2de5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-answers/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-exercise.md
new file mode 100644
index 000000000..ac6dfe3ca
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-exercise.md
@@ -0,0 +1,153 @@
+# Code with AI Vector Search
+
+## Introduction
+
+**Welcome to the Code with AI Vector Search Challenge!**
+
+In this coding challenge, you’ll focus on **AI Vector Search**. Your mission is to implement a key update to change the way similarities are calculated, improving the accuracy of predictions.
+
+At SeerEquites, the data science team has been using Cosine similarity to assess similarities between customer profiles and predict loan risks. While effective in some contexts, the team recently realized that Cosine similarity wasn’t capturing the full picture of their customers financial profiles.
+
+**Why switch to Euclidean distance?**
+
+Cosine similarity is great when you care about the pattern or direction of someone’s data — not how big or small the numbers are. But in finance, the actual size of the numbers often matters a lot.
+
+Let’s say you’re comparing two customers based on their debt, income, and credit usage. These numbers matter significantly, and big differences can indicate very different levels of risk.
+
+Here’s an example:
+
+* Both customers have the same debt-to-income ratio of 2:1.
+
+* But one earns $20,000 a year, while the other earns $200,000.
+
+Cosine similarity would say these customers are quite similar, because their ratios follow the same pattern. But that’s misleading — the person earning $20,000 is much riskier.
+
+That’s where Euclidean distance comes in. Unlike Cosine similarity, Euclidean distance looks at the actual difference in the numbers. In this case, it would correctly flag that these customers are not similar in a meaningful way, since the scale of their incomes is vastly different.
+
+In finance, where decisions are often made based on key figures like income, debt, and credit usage, Euclidean distance is often a better tool. It takes the size of the numbers into account, which is crucial for making accurate risk predictions.
+
+In this lab, you’ll update the code to switch the similarity measure from Cosine to Euclidean. This change will improve the system’s ability to assess loan risks more accurately, providing more reliable insights for decision-making.
+
+This is your opportunity to sharpen your skills, explore the power of AI-driven search, and make a meaningful impact on a application. Let’s get started!
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Lab 5b Step-by-step: Code with AI Vector Search for step-by-step instructions.
+
+Good luck, and enjoy the process!
+
+Estimated Time: 30 minutes
+
+
+### Objectives
+In this lab, you will:
+* Enhance your understanding of AI Vector Search by applying it to a developer coding challenge.
+* Gain hands-on experience with fine-tuning and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+## Task 1: Challenge Requirements
+
+Based on the data scientists' evaluation, the company has decided to switch from using Cosine similarity to Euclidean distance. This change aims to enhance the system’s ability to assess loan risks more accurately, ultimately providing more reliable insights to support better decision-making.
+
+Follow the prompts below to update the code based on the new company standard.
+
+## Task 2: Launch the Application
+
+1. Select the **Launcher** tab and open the **terminal**
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+ $
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 3: View the current AI chat bot return variables using Cosine
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed.
+
+ 
+
+3. Ask the following question to the AI Chat bot.
+
+ ````text
+
+ What about a 4th loan?
+
+ ````
+
+ Note how the return variables are shown:
+
+ 
+
+## Task 4: Modify the Customers.py File
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. Update the Customers.py file to make the necessary changes in the code at lines 845 and 846
+
+ 
+
+4. Save the Customers.py file.
+
+ 
+
+## Task 5: View results in the Loan application
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed.
+
+ 
+
+3. Ask the following question to the AI Chat bot.
+
+ ````text
+
+ What about a 4th loan?
+
+ ````
+4. View the new prompt return from the AI chat bot
+
+ 
+
+
+**Congratulations, you have successfully completed the AI Vector Search Challenge!** By switching to Euclidean distance, SeerEquites ensures more precise loan risk evaluations and improves the overall effectiveness of their loan management system.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge-answers.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge-answers.md
new file mode 100644
index 000000000..1baacc9b3
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge-answers.md
@@ -0,0 +1,351 @@
+# Coding Challenge - AI Vector Search - Guided
+
+## **Introduction**
+
+**Welcome to the Code with AI Vector Search Challenge!**
+
+In this lab, you will use Oracle Database 23ai to build a loan matching feature for a financial application. By implementing similarity search, you will match user queries to loan descriptions based on meaning—**not just keywords**.
+
+
+
+At SeerEquites, the data science team is building a loan recommendation system that goes beyond keyword matching. They are using AI Vector Search to understand meaning in loan descriptions—for example, linking "Affordable Housing Loan" to "Low-Income Home Loan." In this lab, you will complete their Similarity Search feature using Oracle Database 23ai, which converts text into embeddings and uses cosine similarity to find conceptually similar loans.
+
+**Why AI Vector Search?**
+
+Unlike keyword search, AI Vector Search captures meaning. For example, 'Military Veteran Loan' and 'Veteran Home Loan' use different words but express similar ideas. Oracle Database 23ai converts loan descriptions into vectors, compares their meanings, and ranks results by similarity for more accurate recommendations.
+
+Good luck, and enjoy the process. Let’s get coding!
+
+Estimated Time: 30 minutes
+
+To get things started we invite you to watch this video and see the lab in action:
+
+ [](videohub:1_iu6875ja:medium)
+
+### Objective:
+
+In this lab, you will:
+
+- Connect to Oracle Database 23ai and set up the environment.
+- Vectorize loan data from the `MOCK_LOAN_DATA` table into `LOAN_CHUNK`.
+- Verify the data was vectorized.
+- Run a similarity search to find the top 5 loans matching a user’s query.
+
+### Prerequisites:
+
+This lab assumes you have:
+
+- An Oracle Cloud account.
+- Basic knowledge of Python and SQL.
+- Completed Lab 1: Run the Demo.
+- Completed Lab 2: Connect to Development Environment.
+- Completed Lab 3: Coding Basics on Oracle Database 23ai.
+- Completed Lab 4: Step by step: Implement RAG with Oracle Database 23ai.
+
+>💡 **Note:** You can download the code and run this lab on your own time here: [AI Vector Search Code](https://objectstorage.us-ashburn-1.oraclecloud.com/p/yiZgIeQQptaFaDMHUQ_623UuChmv1jf_9dCj10wwgjmsQitUMb5QP7mPv1Z1med8/n/c4u04/b/gen-ai/o/ai_vector_search_code)
+
+## Task 1: Challenge requirements
+
+The data science team at SeerEquites has provided a Jupyter Notebook called `ai_vector_search_challenge.ipynb` with four key code cells. The notebook will:
+
+- **Connect to the database and import the necessary libraries and drivers.**
+- **Vectorize the `loan_type` column from the `MOCK_LOAN_DATA` table into the `LOAN_CHUNK` table.**
+- **Verify the vectorized data by displaying an output.**
+- **Implement a Similarity Search to match a user's query to loans.**
+
+## Task 2: Create a new Jupyter Notebook
+
+All of the coding examples will be executed in a new Jupyter Notebook.
+
+1. Open a new **Jupyter Notebook** by clicking on **Python(ipykernel)** notebook.
+
+ 
+
+
+## Task 3: Connect to the database using Python
+
+1. Run the first cell(Environment Setup and Database Connection) to ensure the database connection, python driver and necessary libraries work.
+
+ ```python
+
+ import os
+ import json
+ import oracledb
+ import oci
+ from dotenv import load_dotenv #Load environment variables from .env file
+
+ # load the environment variables from the .env file
+ load_dotenv()
+
+ #Retrieve the database credentials from environment variables
+ username = os.getenv("USERNAME")
+ password = os.getenv("DBPASSWORD")
+ dsn = os.getenv("DBCONNECTION")
+
+ # Attempting to connect to our Oracle database
+ try:
+ connection = oracledb.connect(user=username, password=password, dsn=dsn)
+ print("Connection successful!")
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ # Create a cursor object to execute SQL commands
+ cursor = connection.cursor()
+
+ ```
+
+ You should see the expected output:
+
+ ```text
+ Connection successful!
+ ```
+
+
+## Task 3: Vectorizing the loan data
+
+The second cell vectorizes loan descriptions from the `MOCK_LOAN_DATA` table, storing them as embeddings in the `LOAN_CHUNK` table. This is the first step in enabling similarity search, as vectors allow the database to compare meanings, not just words.
+
+1. Create a new cell and copy the following code into it:
+
+ ```python
+
+ # function to vectorize the loan data
+ def vectorize_loan_data():
+ with connection.cursor() as cursor:
+ #clear existing loan chunks to avoid duplicates
+ cursor.execute("DELETE FROM LOAN_CHUNK WHERE CHUNK_ID >= 1000")
+
+ #insert loan_type data into LOAN_CHUNK with vector embeddings
+ cursor.execute("""
+ INSERT INTO LOAN_CHUNK (CUSTOMER_ID, CHUNK_ID, CHUNK_TEXT, CHUNK_VECTOR)
+ SELECT
+ TO_CHAR(loan_id),
+ 1000 + loan_id,
+ loan_type,
+ DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING(
+ loan_type,
+ JSON('{"provider":"database", "model":"DEMO_MODEL", "dimensions":384}')
+ )
+ FROM MOCK_LOAN_DATA
+ """)
+ connection.commit()
+ print("Vectorized 'loan_data' from 'MOCK_LOAN_DATA' and stored in 'LOAN_CHUNK'.")
+ vectorize_loan_data()
+
+ ```
+
+2. Let's review the code:
+
+ - Defines a function `vectorize_loan_data()`.
+
+ - Clears existing data in `LOAN_CHUNK` where `CHUNK_ID` >= 1000 to avoid duplicates.
+
+ 
+
+ - Uses `DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING` to convert each `loan_type` into a 384-dimensional vector using the `DEMO_MODEL`.
+
+ 
+
+ - Inserts the vectors, along with `CUSTOMER_ID`, `CHUNK_ID`, and `CHUNK_TEXT`, into the `LOAN_CHUNK` table.
+
+ 
+
+ - Commits the changes and prints a confirmation.
+
+ 
+
+ **Highlight**: The `DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING` function transforms text into numerical vectors. The DBMS parameter **{"provider":"database", "model":"DEMO_MODEL", "dimensions":384}** instructs the database to use a database-provided model to generate 384-dimensional embeddings—this means you do not have to use external embedding models. Embedding happens at the database level and is therefore more secure than using external embedding models.
+
+3. Run the cell. Your expected output should be:
+ ```
+ Vectorized 'loan_data' from 'MOCK_LOAN_DATA' and stored in 'LOAN_CHUNK'.
+ ```
+ - **This means the loan descriptions are now vectors, ready for similarity search.**
+
+
+## Task 4: Verify the vectorized data
+
+The third code block checks that the vectorization worked by querying the first three entries in LOAN_CHUNK. This lets you see the stored loan data, ensuring it’s ready for the next step.
+
+1. Create a new cell and copy and paste the following code into it:
+
+ ```python
+
+ # Fetch sample data from LOAN_CHUNK
+ cursor.execute("""
+ SELECT CUSTOMER_ID, CHUNK_ID, CHUNK_TEXT
+ FROM LOAN_CHUNK
+ WHERE CHUNK_ID >= 1000
+ FETCH FIRST 3 ROWS ONLY
+ """)
+
+ # Fetch all query results into a list
+ results = cursor.fetchall()
+ print("Sample data in LOAN_CHUNK:")
+
+ # Iterate though results and print each row
+ for row in results:
+ print(f"- Loan ID: {row[0]}, Chunk ID: {row[1]}, Text: {row[2]}")
+
+ ```
+
+
+2. Let's review the code:
+
+ - SQL query is executed to select `CUSTOMER_ID`, `CHUNK_ID`, and `CHUNK_TEXT` from `LOAN_CHUNK` where `CHUNK_ID` >= 1000, limited to 3 rows.
+
+ 
+
+ - We fetch the results and print them in a readable format.
+
+ 
+
+ **Key Concept:** This step confirms that `loan_type` values from `MOCK_LOAN_DATA` were successfully stored as `CHUNK_TEXT` in `LOAN_CHUNK`, alongside their identifiers.
+
+3. Let's go ahead and run the cell. should expect to see an output similar to:
+
+ ```text
+ Sample data in LOAN_CHUNK:
+ - Loan ID: 28, CHUNK ID: 1028, Text: Affordable housing zone loan (1% interest, max income $100k)
+ - Loan ID: 29, CHUNK ID: 1029, Text: Construction loan for new builds
+ - Loan ID: 30, Chunk ID: 1030, Text: Stated income loan (for self-employed)
+ ```
+
+
+## Task 5: Implement similarity search
+
+The fourth code block ties it all together. It lets users enter a loan description and find the top five similar loans using AI Vector Search. This is where Oracle Database 23ai shows its strength.
+
+1. Create a new cell and copy and paste the following code block into it
+
+ ```python
+
+ def looking_for_similar_loans(query):
+ # Generate vector embeddings for users query
+ cursor.execute("""
+ SElECT DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING(
+ :query,
+ JSON('{"provider":"database", "model":"DEMO_MODEL", "dimensions":384}'))
+ """, {'query':query})
+
+ # Fetch embedding result
+ query_embedding = cursor.fetchone()[0]
+
+ # Perform vector search and join with MOCK_LOAN_DATA
+ cursor.execute("""
+ SELECT
+ m.loan_id,
+ m.loan_provider_name,
+ m.loan_type,
+ m.interest_rate
+ FROM LOAN_CHUNK lc
+ JOIN MOCK_LOAN_DATA m ON TO_CHAR(m.loan_id) = lc.CUSTOMER_ID
+ WHERE lc.CHUNK_VECTOR IS NOT NULL
+ AND lc.CHUNK_ID >= 1000
+ ORDER BY VECTOR_DISTANCE(lc.CHUNK_VECTOR, :embedding, Cosine)
+ FETCH FIRST 5 ROWS ONLY
+ """, {'embedding': query_embedding})
+
+ # Fetch the top 5 similar loans
+ similar_loans = cursor.fetchall()
+
+ # Prints header with query
+ print(f"Top 5 similar loans for query: '{query}'")
+
+ # Iterate thorugh results and print each loan
+ for loan in similar_loans:
+ print(f"Loan ID: {loan[0]}, Provider: {loan[1]}, Type: {loan[2]}, Interest Rate: {loan[3]}%")
+
+ # Prompt user for a loan description
+ query = input("Enter a loan type to search for (ex., 'First time home owner loan'): ")
+
+ # check if query is provided
+ if query:
+ looking_for_similar_loans(query) # this will run our similarity search
+ else:
+ print("Please enter a query.")
+
+ ```
+
+2. Let's take a look at what's happening in this cell:
+
+ - The function `looking_for_similar_loans(query)` is defined.
+
+ - We vectorize the user’s query using **`DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING`**, just like in Task 3.
+
+ 
+
+ - We perform a SQL query that:
+
+ - Joins **`LOAN_CHUNK`** and **`MOCK_LOAN_DATA`** to get loan details.
+ - Filters for non-null vectors and CHUNK_ID >= 1000.
+ - Orders the results by **`VECTOR_DISTANCE`** using cosine similarity to find the closest matches.
+ - Limits the results to display the top 5 loans.
+
+ 
+
+ - The results are printed to display **Loan IDs**, **Providers**, **Types**, and **Interest Rates**.
+
+ 
+
+ - The user is prompted to enter a query and runs the search.
+
+ 
+
+ **Key Concept**: The **`VECTOR_DISTANCE`** function computes cosine similarity between the query vector and stored vectors in `LOAN_CHUNK`. Using the Cosine algorithm you can measure how closely two vectors align in direction. Try replacing cosine with Euclidean, dot product, or Manhattan distance to compare results.
+
+3. Run the cell, then enter a sample query when prompted, ex. "First Time Home Owner Loan."
+
+ 
+
+ Expected Output:
+
+ ```text
+ Enter a loan type to search for (ex., 'First time home owner loan'):
+
+ Military Veteran
+
+ Top 5 similar loans for query: 'Military Veteran'
+
+ Loan ID: 50, Provider: provider1, Type: Military Veteran loan (0% down, military only), Interest Rate: 4.75%
+
+ Loan ID: 26, Provider: provider5, Type: Military Veteran loan (0% down, military only), Interest Rate: 3.47%
+
+ Loan ID: 55, Provider: provider6, Type: RenoMilitary Veterantion loan, Interest Rate: 5.82%
+
+ Loan ID: 59, Provider: provider3, Type: RenoMilitary Veterantion loan, Interest Rate: 5.98%
+
+ Loan ID: 22, Provider: provider1, Type: Jumbo loan for high-Military Veteranlue properties, Interest Rate: 5.07%
+ ```
+
+ (**Note**: Results may vary.)
+
+ - This shows the top 5 loans that are most similar in meaning to your query, even if the exact words differ.
+
+4. Want to keep exploring? Try:
+ - Entering different queries, like "Veteran Loan" or "Low-Income Housing," to see how results change.
+ - Change Cosine to Euclidean, Dot, Manhattan or any of the other vector similarities and see how the results vary.
+
+**Congratulations, you have successfully completed the AI Vector Search Challenge!**
+
+You have successfully:
+
+- Connected to Oracle Database 23ai.
+- Vectorized loan descriptions into embeddings.
+- Verified the stored data.
+- Built a Similarity Search to match user queries to loans.
+
+By completing this challenge, you’ve seen how Oracle 23ai AI Vector Search transforms text into vectors and finds meaningful matches.
+
+## Learn More
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+* [Oracle Database 23ai Vector Search](https://www.oracle.com/database/ai-vector-search/)
+* [Oracle Ai Vector Search User's Guide](https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/ai-vector-search-users-guide.pdf)
+
+
+## Acknowledgements
+* **Authors** - Francis Regalado, Database Product Manager
+* **Contributors** - Kamryn Vinson, Linda Foinding, Kevin Lazarz
+* **Last Updated By/Date** - Francis Regalado, April 2025
+
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge.md
new file mode 100644
index 000000000..0343da4ff
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/ai-vector-search-challenge.md
@@ -0,0 +1,364 @@
+# Coding Challenge - AI Vector Search
+
+## **Introduction**
+
+**Welcome to the Code with AI Vector Search Challenge!**
+
+This lab guides you through building a loan matching feature for a financial app using Similarity Search in Oracle Database 23ai. You will fix and complete a Jupyter Notebook to implement AI Vector Search, enabling the app to find loan offers that closely match user profiles based on vector similarity.
+
+
+
+At SeerEquites, the data science team is building a smarter loan recommendation system using vector similarity. They started implementing a feature that vectorizes loan descriptions and matches them to user queries—**but the code is incomplete**. ❗Key sections are marked (**"CHANGES GO HERE"**) and it is up to you to finish the job and make the feature work.❗
+
+**Why AI Vector Search?**
+
+Keyword searches often miss context. For example, "Affordable Housing Loan" and "Low-Income Home Loan" mean similar things but use different terms. AI Vector Search solves this by converting text into vectors (embeddings) that capture meaning. With Oracle Database 23ai, you will use similarity search to match user queries to loan descriptions based on semantics, not just keywords. If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Lab 5b Step-by-step: Code with AI Vector Search for step-by-step instructions.
+
+Good luck, and enjoy the process. Let’s get coding!
+
+Estimated Time: 45 minutes
+
+To get things started we invite you to watch this video and see the lab in action:
+
+ [](videohub:1_iu6875ja:medium)
+
+### Objective:
+
+In this lab, you will:
+
+- Vectorize loan data from the `MOCK_LOAN_DATA` table into `LOAN_CHUNK` table.
+- Verify the data was vectorized.
+- Implement a similarity search to find the top 5 matching loans based on a user’s query.
+
+### Prerequisites:
+
+This lab assumes you have:
+
+- An Oracle Cloud account.
+- Basic knowledge of Python and SQL.
+- Completed Lab 1: Run the Demo.
+- Completed Lab 2: Connect to Development Environment.
+- Completed Lab 3: Coding Basics on Oracle Database 23ai.
+- Completed Lab 4: Step by step: Implement RAG with Oracle Database 23ai.
+
+>💡 **Note:** You can download the code and run this lab on your own time here: [AI Vector Search Code](https://objectstorage.us-ashburn-1.oraclecloud.com/p/yiZgIeQQptaFaDMHUQ_623UuChmv1jf_9dCj10wwgjmsQitUMb5QP7mPv1Z1med8/n/c4u04/b/gen-ai/o/ai_vector_search_code)
+
+## Task 1: Challenge requirements
+
+The data science team at SeerEquites has provided a Jupyter notebook called `ai_vector_search_challenge.ipynb` with four key code cells. The first cell sets up the environment, but the next three cells which are responsible for vectorizing data, verifiying it and performing similarity search contain errors marked as ❗**"CHANGES GO HERE"**❗. Your job is to fix these cells in order to make the feature work. The notebook will:
+
+- **Connect to the database and import the necessary libraries and drivers.**
+- **Vectorize the `loan_type` column from the `MOCK_LOAN_DATA` table into the `LOAN_CHUNK` table.**
+- **Verify the vectorized data by displaying an output.**
+- **Implement a Similarity Search to match a user's query to loans.**
+
+
+## Task 2: Create a new Jupyter Notebook
+
+All of the coding examples will be executed in a new Jupyter Notebook.
+
+1. Open a new **Jupyter Notebook** by clicking on **Python(ipykernel)** notebook.
+
+ 
+
+
+## Task 3: Connect to the database
+
+1. Copy the following code block into an empty cell and execute it.
+
+ ```python
+
+ import os
+ import json
+ import oracledb
+ import oci
+ from dotenv import load_dotenv
+
+ # load the environment variables from the .env file
+ load_dotenv()
+
+ # Retrieve the database credentials from environment variables
+ username = os.getenv("USERNAME")
+ password = os.getenv("DBPASSWORD")
+ dsn = os.getenv("DBCONNECTION")
+
+ # Attempting to connect to our Oracle database
+ try:
+ connection = oracledb.connect(user=username, password=password, dsn=dsn)
+ print("Connection successful!")
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ # Create a cursor object to execute SQL commands
+ cursor = connection.cursor()
+
+ ```
+
+ You should see the expected output:
+
+ ```text
+ Connection successful!
+ ```
+
+## Task 4: Vectorizing loan data
+
+The second function, `vectorize_loan_data()`, converts loan descriptions into vectors and stores them in the `LOAN_CHUNK` table.It's suppose to:
+
+- Clear existing data in `LOAN_CHUNK` where `CHUNK_ID >= 1000`.
+- Insert each `loan_type` from `MOCK_LOAN_DATA` into `LOAN_CHUNK` with a vector embedding.
+- Commit the changes.
+
+However, the SQL `INSERT` statement has missing code where the vector is generated.
+
+
+1. Copy and paste the following code block into an empty cell
+
+ ```python
+
+ # function to vectorize the loan data
+ def vectorize_loan_data():
+ with connection.cursor() as cursor:
+ # clear existing loan chunks to avoid duplicates
+ cursor.execute("DELETE FROM LOAN_CHUNK WHERE CHUNK_ID >= 1000")
+
+ # insert loan_type data into LOAN_CHUNK with vector embeddings
+ cursor.execute("""
+ INSERT INTO LOAN_CHUNK (CUSTOMER_ID, CHUNK_ID, CHUNK_TEXT, CHUNK_VECTOR)
+ SELECT
+ TO_CHAR(loan_id),
+ 1000 + loan_id,
+ loan_type,
+ (CHANGES GO HERE) (
+ loan_type,
+ (CHANGES GO HERE)
+ )
+ FROM MOCK_LOAN_DATA
+ """)
+ connection.commit()
+ print("Vectorized 'loan_data' from 'MOCK_LOAN_DATA' and stored in 'LOAN_CHUNK'.")
+ vectorize_loan_data()
+
+ ```
+
+2. ❗Look for the lines with **(CHANGES GO HERE)** inside the `INSERT statement:❗
+
+ 
+
+3. Replace the placeholders to generate a 384-dimensional vector for `loan_type`. You'll need a function that converts text to embeddings using the `DEMO_MODEL` provided by the database.
+
+
+ >**Hint:** Oracle Database 23ai has a utility called DBMS\_VECTOR\_CHAIN package to create embeddings. The function takes the text(loan_type) and a JSON configuration specifying the model name and the dimensions. Check Lab 4 for clues on how to use it.
+
+
+4. Run the cell after making the changes. Your expected output should be:
+
+ ```text
+ Vectorized loan_data from MOCK_LOAN_DATA and stored in LOAN_CHUNK.
+ ```
+
+## Task 5: Verify the vectorized data
+
+The third function verifies vectorization by querying the `LOAN_CHUNK` table for the first three entries (`CHUNK_ID >= 1000`). It should return `CUSTOMER_ID`, `CHUNK_ID`, and `CHUNK_TEXT`(the loan type). ❗The SQL query is incomplete and contains several **"CHANGES GO HERE"** placeholders that you need to fix.❗
+
+1. Create a new cell and paste the following code into it:
+
+ ```python
+
+ # Fetch sample data from LOAN_CHUNK
+ cursor.execute("""
+ SELECT (CHANGES GO HERE)
+ FROM (CHANGES GO HERE)
+ WHERE (CHANGES GO HERE) >= 1000
+ FETCH FIRST 3 ROWS ONLY
+ """)
+
+ # Fetch all query results into a list
+ results = cursor.fetchall()
+ print("Sample data in (CHANGES GO HERE):")
+
+ # Iterate though results and print each row
+ for row in results:
+ print(f"- (CHANGES GO HERE): {row[0]}, (CHANGES GO HERE): {row[1]}, (CHANGES GO HERE): {row[2]}")
+
+ ```
+
+ Note the placeholders that you need to fill in.
+
+ 
+
+2. Check the cursor.executed SQL query first:
+
+ - Select the columns `CUSTOMER_ID`, `CHUNK_ID`, and `CHUNK_TEXT`.
+ - Specify the table `LOAN_CHUNK`.
+ - Set the condition filter `CHUNK_ID >= 1000`.
+
+3. Next, update the print statement below the query to match the columns you selected:
+
+ 
+
+ Replace the placeholders with meaningful labels like `Loan ID`, `Chunk ID`, and `Text`.
+
+4. Once all the changes have been made, Run the cell. You should expect to see an output similar to:
+
+ ```text
+ Sample data in LOAN_CHUNK:
+ - Loan ID: 28, CHUNK ID: 1028, Text: Affordable housing zone loan (1% interest, max income $100k)
+ - Loan ID: 29, CHUNK ID: 1029, Text: Construction loan for new builds
+ - Loan ID: 30, Chunk ID: 1030, Text: Stated income loan (for self-employed)
+ ```
+
+## Task 6: Implement similarity search
+
+The fourth code block is the core of the challenge: letting users enter a loan description and retrieve the top 5 most similar loans. The function looking\_for_similar\_loans(query) should:
+
+- Convert the user’s input into a vector.
+
+- Search the `LOAN_CHUNK` table for similar vectors using cosine distance (you can also try Euclidean or dot product).
+
+- Join the results with `MOCK_LOAN_DATA` to fetch full loan details.
+
+- Display the top matches clearly.
+
+- ❗The cell has two incomplete SQL queries with **"CHANGES GO HERE"**.❗
+
+1. Create a new cell and paste the following code into it.
+
+ ```python
+
+ def looking_for_similar_loans(query):
+ # Generate vector embeddings for users query
+ cursor.execute("""
+ SElECT (CHANGES GO HERE)(
+ :query,
+ JSON('{"provider":"database", "model":"DEMO_MODEL", "dimensions":384}')
+ )
+ """, {'query':query})
+
+ # Fetch embedding result
+ query_embedding = cursor.fetchone()[0]
+
+ # Perform vector search and join with MOCK_LOAN_DATA
+ cursor.execute("""
+ SELECT
+ m.loan_id,
+ m.loan_provider_name,
+ m.loan_type,
+ m.interest_rate
+ FROM (CHANGES GO HERE) lc
+ JOIN (CHANGES GO HERE) m ON TO_CHAR(m.loan_id) = lc.CUSTOMER_ID
+ WHERE lc.(CHANGES GO HERE) IS NOT NULL
+ AND lc.CHUNK_ID >= 1000
+ ORDER BY (CHANGES GO HERE)(lc.(CHANGES GO HERE), :embedding, (CHANGES GO HERE))
+ FETCH FIRST 5 ROWS ONLY
+ """, {'embedding': query_embedding})
+
+ # Fetch the top 5 similar loans
+ similar_loans = cursor.fetchall()
+
+ # Prints header with query
+ print(f"Top 5 similar loans for query: '{query}'")
+
+ # Iterate thorugh results and print each loan
+ for loan in similar_loans:
+ print(f"Loan ID: {loan[0]}, Provider: {loan[1]}, Type: {loan[2]}, Interest Rate: {loan[3]}%")
+
+ # Prompt user for a loan description
+ query = input("Enter a loan type to search for (ex., 'First time home owner loan'): ")
+
+ # check if query is provided
+ if query:
+ looking_for_similar_loans(query) # this will run our similarity search
+ else:
+ print("Please enter a query.")
+
+ ```
+
+2. Find the first query that vectorizes the user's query:
+
+ ```sql
+ cursor.execute("""
+ SElECT (CHANGES GO HERE)(
+ :query,
+ (CHANGES GO HERE)
+ )
+ """, {'query':query})
+ ```
+
+ >**Hint:** Replace the placeholder with the vectorization function from Task 4 to convert the query text into a vector.
+
+3. Find the second query for the similarity search:
+
+ ```sql
+ SELECT
+ m.loan_id,
+ m.loan_provider_name,
+ m.loan_type,
+ m.interest_rate
+ FROM (CHANGES GO HERE) lc
+ JOIN (CHANGES GO HERE) m ON TO_CHAR(m.loan_id) = lc.CUSTOMER_ID
+ WHERE lc.(CHANGES GO HERE) IS NOT NULL
+ AND lc.CHUNK_ID >= 1000
+ ORDER BY (CHANGES GO HERE)(lc.(CHANGES GO HERE), :embedding, (CHANGES GO HERE))
+ FETCH FIRST 5 ROWS ONLY
+ ```
+
+ 
+
+ Fill in the placeholders to:
+ - Specify the tables `LOAN_CHUNK` and `MOCK_LOAN_DATA`.
+ - Check that the vector column isn't null.
+ - Use a function to compute cosine distance between the stored vectors and the query's embedding.
+ - Identify the vector column in `LOAN_CHUNK`.
+
+ >**Hint:** Oracle Database 23ai provides a **`VECTOR_DISTANCE`** function to compare vectors. You need to specify the vector column in LOAN_CHUNK, the query’s embedding (bound as :embedding), and the distance metric (COSINE). Look at the WHERE and ORDER BY clauses to understand what’s being filtered and sorted.
+
+4. Once you updated the query enter a sample query when prompted, ex. "First Time Home Owner Loan."
+
+ 
+
+ Expected Output:
+
+ ```text
+ Enter a loan type to search for (ex., 'First time home owner loan'):
+
+ Military Veteran
+
+ Top 5 similar loans for query: 'Military Veteran'
+
+ Loan ID: 50, Provider: provider1, Type: Military Veteran loan (0% down, military only), Interest Rate: 4.75%
+
+ Loan ID: 26, Provider: provider5, Type: Military Veteran loan (0% down, military only), Interest Rate: 3.47%
+
+ Loan ID: 55, Provider: provider6, Type: RenoMilitary Veterantion loan, Interest Rate: 5.82%
+
+ Loan ID: 59, Provider: provider3, Type: RenoMilitary Veterantion loan, Interest Rate: 5.98%
+
+ Loan ID: 22, Provider: provider1, Type: Jumbo loan for high-Military Veteranlue properties, Interest Rate: 5.07%
+ ```
+
+ (**Note:** Results may vary.)
+
+
+**Congratulations, you have successfully completed the AI Vector Search Challenge!**
+
+You have successfully:
+
+- Connected to Oracle Database 23ai.
+- Vectorized loan descriptions into embeddings.
+- Verified the stored data.
+- Built a Similarity Search to match user queries to loans.
+
+Fixing the code allowed SeerEquites to recommend loans based on meaning, not keywords, using AI Vector Search in Oracle Database 23ai. You learned to generate embeddings, query vectors, and integrate AI with SQL—skills you can apply to other projects.
+
+## Learn More
+
+- [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+- [Oracle Database 23ai Vector Search](https://www.oracle.com/database/ai-vector-search/)
+- [Oracle Ai Vector Search User's Guide](https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/ai-vector-search-users-guide.pdf)
+
+
+## Acknowledgements
+
+- **Authors** - Francis Regalado, Database Product Manager
+- **Contributors** - Linda Foinding, Kamryn Vinson, Kevin Lazarz
+- **Last Updated By/Date** - Francis Regalado, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-vector-diagram.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-vector-diagram.png
new file mode 100644
index 000000000..a23ee595e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/ai-vector-diagram.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-streamlit.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-streamlit.png
new file mode 100644
index 000000000..33010d468
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-streamlit.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/connection-successful.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/connection-successful.png
new file mode 100644
index 000000000..4f544f222
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/connection-successful.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/cosine-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/cosine-ai.png
new file mode 100644
index 000000000..87372fe8f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/cosine-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2-ai.png
new file mode 100644
index 000000000..6bb3041e7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2.png
new file mode 100644
index 000000000..ff1a08ea6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/euclidean-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/first-cell.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/first-cell.png
new file mode 100644
index 000000000..2da960fd0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/first-cell.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-answer.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-answer.png
new file mode 100644
index 000000000..8fc30d6a7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-answer.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-print.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-print.png
new file mode 100644
index 000000000..a6757ae20
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-print.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-query.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-query.png
new file mode 100644
index 000000000..3405e63a5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-query.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-sql.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-sql.png
new file mode 100644
index 000000000..7320a17bc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-sql.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-vectorize.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-vectorize.png
new file mode 100644
index 000000000..ee7e0922d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell-vectorize.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell.png
new file mode 100644
index 000000000..5cee23874
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-cell.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-select.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-select.png
new file mode 100644
index 000000000..b4bdaf0d8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/fourth-select.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/introduction-landing.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/introduction-landing.png
new file mode 100644
index 000000000..e9c767758
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/introduction-landing.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith-5-ai.png
new file mode 100644
index 000000000..d09040ac2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith.png
new file mode 100644
index 000000000..02892f848
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/login.png
new file mode 100644
index 000000000..d34ea2de5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-new-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-new-notebook.png
new file mode 100644
index 000000000..3749eb039
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-new-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-notebook.png
new file mode 100644
index 000000000..1af87ff49
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-terminal.png
new file mode 100644
index 000000000..30e21a9a4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/result.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/result.png
new file mode 100644
index 000000000..76ed48483
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/result.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/search-type.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/search-type.png
new file mode 100644
index 000000000..917b91cab
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/search-type.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-answer.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-answer.png
new file mode 100644
index 000000000..83cc0e5de
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-answer.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-clear.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-clear.png
new file mode 100644
index 000000000..c60601da2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-clear.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-commit.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-commit.png
new file mode 100644
index 000000000..db00c775e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-commit.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-embedding.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-embedding.png
new file mode 100644
index 000000000..a30f8b90e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-embedding.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-insert.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-insert.png
new file mode 100644
index 000000000..8b788999a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/second-cell-insert.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/similarity-search.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/similarity-search.png
new file mode 100644
index 000000000..69653ae9c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/similarity-search.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-answer.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-answer.png
new file mode 100644
index 000000000..88a2835fb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-answer.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-print.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-print.png
new file mode 100644
index 000000000..a204c0402
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-print.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-sql.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-sql.png
new file mode 100644
index 000000000..49bf4b707
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell-sql.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell.png
new file mode 100644
index 000000000..7a747532f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-cell.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-print.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-print.png
new file mode 100644
index 000000000..89d746174
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-print.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-run.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-run.png
new file mode 100644
index 000000000..eae517329
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-run.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-select.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-select.png
new file mode 100644
index 000000000..f40dde71c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/third-select.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vector-search-block.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vector-search-block.png
new file mode 100644
index 000000000..5d6b750b5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vector-search-block.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-loan-data.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-loan-data.png
new file mode 100644
index 000000000..5b9fa6423
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-loan-data.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-output.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-output.png
new file mode 100644
index 000000000..756528033
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/ai-exercise/images/vectorize-output.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/app-architecture.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/app-architecture.md
new file mode 100644
index 000000000..0ac5630a4
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/app-architecture.md
@@ -0,0 +1,72 @@
+# Architecture & Workshop Features
+
+## Introduction
+
+In this lab, you will explore the architecture behind the workshop that supports the tasks you will perform. We also have a closer look at all the features of the Oracle Database 23ai that were used to build the workshop and the demo application.
+
+Estimated Lab Time: 15 minutes
+
+## Physical Architecture
+
+The SeerEquities loan application runs in an **Oracle Cloud Infrastructure (OCI)** Region, with its application layer in a public subnet inside a **Virtual Cloud Network (VCN)**.
+
+
+
+### Architecture Breakdown
+
+- The Application Tier VCN includes:
+
+ - An Internet Gateway for outbound traffic
+
+ - A Service Gateway for access to Oracle Cloud services
+
+ - A Dynamic Routing Gateway (DRG) to connect to the Oracle Services Network
+
+ - A VM in the public subnet runs two containers, including:
+
+ - Open-source Python library for the Loan Approval Demo
+
+ - JupterLab as a browser-based development environment
+
+- The Application Subnet connects to the Oracle Services Network via the Service Gateway, enabling access to:
+
+ - Autonomous Database Serverless
+
+ - OCI Generative AI Services
+
+This architecture provides strong connectivity, scalability, and integration with Oracle cloud-native services to support efficient loan processing and approval.
+
+## Oracle Database 23ai features used in the demo app and in this workshop
+
+
+
+
+### **JSON Duality View**
+
+JSON Relational Duality in Oracle Database 23ai bridges the gap between relational and document data models. It gives developers the flexibility of JSON with the efficiency and power of relational storage. This eliminates the trade-offs of choosing one model over the other.
+
+At the core of this capability is the JSON Relational Duality View, which lets applications read and write JSON while the data remains stored in relational tables.
+
+A key feature that should be highlighted is the ability to connect the database using Mongo DB syntax. This allows developers to interact with collections and documents using a familiar syntax.
+
+**Where is it used**: We implemented JSON Duality View in the demo app and in this workshop. All data you can view in the dashboard of the demo app is query from JSON Duality Views. In Lab 3, you learn how to interact with JSON Duality View using Oracle's Python driver. But you also learn how to use Oracle's Mongo API to query JSON Duality Views using Mongo DB syntax.
+
+### **AI Vector Search**
+
+Oracle AI Vector Search, a feature of Oracle Database 23ai, enables fast, efficient searches over AI-generated vectors stored in the database. It supports multiple indexing strategies and scales to large datasets. With it, Large Language Models (LLMs) can query private business data using natural language, returning more accurate, context-aware results. Developers can also add semantic search to new or existing applications with minimal effort. A **unique feature** of Oracle Database 23ai is its capability to host ONNX models and deploy them as a database function. This feature allows you to host ONNX models and deploy them as a database function, enabling seamless integration with Oracle Database 23ai.
+
+**Where is it used**: AI Vector Search is a key feature of the demo app and is also a topic in Lab 4 and Lab 5. In Lab 4, you use AI Vector Search to implement a RAG process, while in Lab 5, you specifically implement similarity search.
+
+### **Property Graph**
+
+Oracle Database 23ai supports property graphs, which model relationships using vertices and edges mapped to existing tables, external tables, materialized views, or synonyms. These graphs store metadata—not the actual data—which remains in the underlying objects. You use SQL/PGQ to query and interact with them.
+
+Property graphs simplify working with connected data, such as identifying influencers, predicting trends, or discovering relationships through pattern matching, by offering a more intuitive and efficient way to model and query complex networks.
+
+**Where is it used**: We implemented property graphs in the demo part of this workshop. Loan approval officers can use it to identify potential alternative loans for their customers.
+
+
+## Acknowledgements
+* **Authors** - Kamryn Vinson, Linda Foinding, Francis Regalado
+* **Contributors** - Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/logical.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/logical.png
new file mode 100644
index 000000000..ff693fa61
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/logical.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/physical-architecture.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/physical-architecture.png
new file mode 100644
index 000000000..402f3519b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/app-architecture/images/physical-architecture.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build.md
new file mode 100644
index 000000000..c0db7b1b0
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build.md
@@ -0,0 +1,492 @@
+# Step by step: Implement RAG with Oracle Database 23ai
+
+## Introduction
+
+In this lab, you build a complete loan approval engine with Oracle Database 23ai and OCI Generative AI. Connect to the database, explore order and image data, and invoke a large language model to generate personalized loan decisions and policy explanations. Building on earlier exercises, you’ll apply Python to deliver a fully integrated, AI-powered finance loan application.
+
+This lab uses some of the basic coding samples you created in lab 3, such as cursor.execute and more.
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+* Build the complete loan approval application as seen in lab 1
+* Use OCI Generative AI to generate contextual loan recommendations
+* Use Python to connect to an Oracle Database 23ai instance and run queries
+* Explore customer data and extract relevant information
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle Cloud account
+* Completed lab 1: Run the demo
+* Completed lab 2: Connect to the Development Environment
+
+
+## Task 1: Build the application in Jupyter Notebook
+
+>💡**Note**: Review Lab 2: Connect to the Development Environment for instructions on accessing JupyterLab.
+
+1. You should see a terminal pop up once you are logged in.
+
+ 
+
+
+2. Navigate to the `dbinit` directory by running the following command.
+
+ ```bash
+
+ cd dbinit
+
+ ```
+
+ 
+
+3. Copy and run the following command to create tables in the database. There will be a lot of output. You should see the following output once complete.
+
+ ```bash
+
+ ./shell_script.sh
+
+ ```
+
+ 
+
+ 
+
+## Task 2: Connect to Database
+
+1. Click the **+** sign on the top left to open the Launcher.
+
+ 
+
+2. Open a new notebook.
+
+ 
+
+3. Copy the following code block into an empty cell in your notebook. This code block imports the `oracledb` Python driver and other libraries.
+
+ ```python
+
+ import os
+ import json
+ import oracledb
+ import pandas as pd
+ import oci
+ import numpy as np
+ import re
+ from dotenv import load_dotenv
+ from PyPDF2 import PdfReader
+
+ load_dotenv()
+
+ username = os.getenv("USERNAME")
+ password = os.getenv("DBPASSWORD")
+ dsn = os.getenv("DBCONNECTION")
+
+ try:
+ connection = oracledb.connect(user=username, password=password, dsn=dsn)
+ print("Connection successful!")
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ cursor = connection.cursor()
+
+ ```
+
+4. Run the code block to connect to the database.
+
+ 
+
+## Task 3: Create a Function to retrieve data from the database.
+
+You will query customer data from the `clients_dv` JSON duality view, which combines data from CUSTOMERS, LOAN_APPLICATIONS, and related tables. This task will:
+
+- **Define a Function**: Create a reusable function `fetch_customer_data` to query the database by customer ID, extracting the JSON data for a specific customer.
+
+- **Use an Example**: Fetch data for customer `1000` (James Smith) to demonstrate the process.
+
+- **Display the Results**: Format the retrieved data into a pandas DataFrame for a clear, tabular presentation, showing key details like name, income, credit score, and total debt.
+
+1. Copy and paste the code below into the new notebook.
+
+ ```python
+
+def fetch_customer_data(customer_id):
+ cursor.execute("SELECT data FROM clients_dv WHERE JSON_VALUE(data, '$._id') = :customer_id", {'customer_id': customer_id})
+ result = cursor.fetchone()
+ return json.loads(result[0]) if result and isinstance(result[0], str) else result[0] if result else None
+
+selected_customer_id = "CUST_1000"
+customer_json = fetch_customer_data(selected_customer_id)
+
+if customer_json:
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ print(f"Customer: {customer_json['firstName']} {customer_json['lastName']}")
+ print(f"Loan Status: {loan_app['loanStatus']}")
+
+ desired_fields = [
+ ("Customer ID", selected_customer_id),
+ ("Application ID", loan_app.get("applicationId", "")),
+ ("First Name", customer_json.get("firstName", "")),
+ ("Last Name", customer_json.get("lastName", "")),
+ ("City", customer_json.get("city", "")),
+ ("State", customer_json.get("state", "")),
+ ("Zip code", customer_json.get("zipCode", "")),
+ ("Age", customer_json.get("age", 0)),
+ ("Income", customer_json.get("income", 0)),
+ ("Credit score", loan_app.get("creditScore", 600)),
+ ("Requested loan amount", loan_app.get("requestedLoanAmount", 0)),
+ ("Total Debt", loan_app.get("totalDebt", 0)),
+ ("Loan status", loan_app.get("loanStatus", "Pending Review"))
+ ]
+ df_customer_details = pd.DataFrame({field_name: [field_value] for field_name, field_value in desired_fields})
+ display(df_customer_details)
+else:
+ print("No data found for customer ID:", selected_customer_id)
+
+ ```
+
+2. Click the "Run" button to see James Smith’s profile. The output will include a brief summary (name and loan status) followed by a detailed table. If no data is found for the specified ID, a message will indicate this, helping you debug potential issues like an incorrect ID or empty database. The output will display a DataFrame containing the customer details for the selected customer ID.
+
+ 
+
+
+If you completed Lab 1: Run the Demo earlier, this is what gets printed out when the loan officer clicks on the customer 1000. You just built it, well done!
+
+## Task 4: Create a function to generate recommendations for the customer
+
+In a new cell, define a function `generate_recommendations` to generate loan recommendations.
+
+With customer profiles in place, you will use OCI Generative AI to generate personalized loan recommendations.
+
+Here’s what we’ll do:
+- **Fetch Mock Loan Data**: Retrieve all mock loan data and combine them with customer data.
+- **Build a Prompt**: Construct a structured prompt that combines the customer’s profile with loan requests instructing the LLM to evaluate and recommend a loan (APPROVE, REQUEST INFO, DENY) based solely on this data.
+- **Use OCI Generative AI**: Send the prompt to the `meta.llama-3.2-90b-vision-instruct` model via OCI’s inference client, which will process the input and generate a response.
+- **Format the Output**: Display the recommendations with styled headers and lists, covering evaluation, top picks, and explanations—making it easy to read and understand.
+
+1. Copy and paste the code in a new cell:
+
+ ```python
+
+ # Fetch Mock Loan Data
+cursor.execute("SELECT loan_id, loan_provider_name, loan_type, interest_rate, origination_fee, time_to_close, credit_score, debt_to_income_ratio, income, down_payment_percent, is_first_time_home_buyer FROM MOCK_LOAN_DATA")
+df_mock_loans = pd.DataFrame(cursor.fetchall(), columns=["LOAN_ID", "LOAN_PROVIDER_NAME", "LOAN_TYPE", "INTEREST_RATE", "ORIGINATION_FEE", "TIME_TO_CLOSE", "CREDIT_SCORE", "DEBT_TO_INCOME_RATIO", "INCOME", "DOWN_PAYMENT_PERCENT", "IS_FIRST_TIME_HOME_BUYER"])
+
+# Generate Recommendations
+def generate_recommendations(customer_id, customer_json, df_mock_loans):
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ available_loans_text = "\n".join([f"{loan['LOAN_ID']}: {loan['LOAN_TYPE']} | {loan['INTEREST_RATE']}% interest | Credit Score: {loan['CREDIT_SCORE']} | DTI: {loan['DEBT_TO_INCOME_RATIO']}" for loan in df_mock_loans.to_dict(orient='records')])
+ customer_profile_text = "\n".join([f"- {key.replace('_', ' ').title()}: {value}" for key, value in {**customer_json, **loan_app}.items() if key not in ["embedding_vector", "ai_response_vector", "chunk_vector"]])
+
+ prompt = f"""[INST] <>You are a Loan Approver AI. Use only the provided context to evaluate the applicant’s profile and recommend loans. Format results as plain text with numbered sections (1. Comprehensive Evaluation, 2. Top 3 Loan Recommendations, 3. Recommendations Explanations, 4. Final Suggestion). Use newlines between sections.> [/INST]
+ [INST]Available Loan Options:\n{available_loans_text}\nApplicant's Full Profile:\n{customer_profile_text}\nTasks:\n1. Comprehensive Evaluation\n2. Top 3 Loan Recommendations\n3. Recommendations Explanations\n4. Final Suggestion"""
+
+ print("Generating AI response...")
+ print(" ")
+
+ genai_client = oci.generative_ai_inference.GenerativeAiInferenceClient(config=oci.config.from_file(os.getenv("OCI_CONFIG_PATH", "~/.oci/config")), service_endpoint=os.getenv("ENDPOINT"))
+ chat_detail = oci.generative_ai_inference.models.ChatDetails(
+ compartment_id=os.getenv("COMPARTMENT_OCID"),
+ chat_request=oci.generative_ai_inference.models.GenericChatRequest(messages=[oci.generative_ai_inference.models.UserMessage(content=[oci.generative_ai_inference.models.TextContent(text=prompt)])], temperature=0.0, top_p=1.00),
+ serving_mode=oci.generative_ai_inference.models.OnDemandServingMode(model_id="meta.llama-3.2-90b-vision-instruct")
+ )
+ chat_response = genai_client.chat(chat_detail)
+ recommendations = chat_response.data.chat_response.choices[0].message.content[0].text
+
+ return recommendations
+
+recommendations = generate_recommendations(selected_customer_id, customer_json, df_mock_loans)
+print(recommendations)
+
+ ```
+
+2. Click the "Run" button to execute the code. Note that this will take time to run. Be patient, you will get the recommendations from the LLM shortly.
+
+ 
+
+3. Review the output. In the demo, this is where you selected the "Navigate to Decisions" button as the Approval Officer. You just used AI to get recommendations for the approval officer which would have taken them hours to do, congratulations!
+
+ >*Note:* Your result may be different due to non-deterministic character of generative AI.
+
+ 
+
+## Task 5: Chunk & Store the Recommendations
+
+In this section we will be chunking and storing the recommendations.
+
+- We delete prior chunks for this customer.
+- We use `VECTOR_CHUNKS` to insert the chunks.
+- The chunks will be inserted into `LOAN_CHUNK` with unique `CHUNK_ID` = (`size + chunk_offset`).
+- We display a data frame summary to show the chunks.
+
+1. Copy the following code and run it in a new cell:
+
+ ```python
+
+ # Clean any prior chunks for this customer
+cursor.execute("DELETE FROM LOAN_CHUNK WHERE CUSTOMER_ID = :cust_id", {'cust_id': selected_customer_id})
+connection.commit()
+
+# Choose your chunk sizes (add more like 200, 500 if you want)
+chunk_sizes = [50] # e.g., [50, 200, 500]
+
+# Insert chunks using VECTOR_CHUNKS. Make CHUNK_ID unique by (size + chunk_offset).
+for size in chunk_sizes:
+ insert_sql = f"""
+ INSERT INTO LOAN_CHUNK (CUSTOMER_ID, CHUNK_ID, CHUNK_TEXT)
+ SELECT :cust_id,
+ :chunk_size + vc.chunk_offset,
+ vc.chunk_text
+ FROM (SELECT :rec_text AS txt FROM dual) s,
+ VECTOR_CHUNKS(
+ dbms_vector_chain.utl_to_text(s.txt)
+ BY words
+ MAX {size}
+ OVERLAP 0
+ SPLIT BY sentence
+ LANGUAGE american
+ NORMALIZE all
+ ) vc
+ """
+ cursor.execute(
+ insert_sql,
+ {'cust_id': selected_customer_id, 'chunk_size': size, 'rec_text': recommendations}
+ )
+
+# Fetch chunks for preview
+cursor.execute("""
+ SELECT CHUNK_ID, CHUNK_TEXT
+ FROM LOAN_CHUNK
+ WHERE CUSTOMER_ID = :cust_id
+ ORDER BY CHUNK_ID
+""", {'cust_id': selected_customer_id})
+rows = cursor.fetchall()
+
+# Build a compact dataframe
+def _lob_to_str(v): return v.read() if isinstance(v, oracledb.LOB) else v
+
+items = []
+for cid, ctext in rows:
+ txt = _lob_to_str(ctext) or ""
+ items.append({
+ "CHUNK_ID": cid,
+ "Chars": len(txt),
+ "Words": len(txt.split()),
+ "Preview": (txt[:160] + "…") if len(txt) > 160 else txt
+ })
+
+df_chunks = pd.DataFrame(items).sort_values("CHUNK_ID")
+connection.commit()
+print(f"✅ Task 5 complete: recommendation chunked for customer {selected_customer_id} (sizes: {chunk_sizes}).")
+display(df_chunks)
+
+ ```
+
+2. Execute the code in a new cell.
+
+ 
+
+3. Review the output to see the top recommendations.
+
+ 
+
+## Task 6: Create a function to create embeddings - Use Oracle Database 23ai to create vector data
+
+To handle follow-up questions, you will enhance the system with an AI Guru powered by Oracle 23ai’s Vector Search and Retrieval-Augmented Generation (RAG). The AI Guru will be able to answer questions about the loan application and provide recommendations based on the data.
+
+Before answering questions, we need to prepare the data by vectoring the recommendations. This step:
+
+ - **Stores Recommendations**: Inserts the full recommendation text (from previous cell) as a single chunk if not already present.
+
+ - **Generates Embeddings**: This is a new feature in Oracle Database 23ai that allows you to create embeddings directly within the database, eliminating the need for external tools or APIs. The `dbms_vector_chain.utl_to_embedding` function takes the recommendation text as input and returns an embedding vector.
+
+ - **Stores Embeddings**: Inserts the generated embedding vector into a table called `LOAN_CHUNKS`.
+
+1. Run and review the code in a new cell:
+
+ ```python
+
+ # Create Embeddings for Loan Chunks ----
+cursor.execute("""
+ UPDATE LOAN_CHUNK
+ SET CHUNK_VECTOR = dbms_vector_chain.utl_to_embedding(
+ CHUNK_TEXT,
+ JSON('{"provider":"database","model":"DEMO_MODEL","dimensions":384}')
+ )
+ WHERE CUSTOMER_ID = :cust_id
+""", {'cust_id': selected_customer_id})
+connection.commit()
+print("✅ Task 6 complete: embedded vectors for LOAN_CHUNK rows.")
+
+ ```
+
+2. Click the "Run" button to execute the code and review the output.
+
+ 
+
+## Task 7: Implement RAG with Oracle Database 23ai's Vector Search
+
+Now that the recommendations are vectorized, we can process a user’s question:
+
+``` What 4th loan would James qualify for?```
+
+This step:
+
+ - **Vectorizes the question**: Embeds the question using `DEMO_MODEL` via `dbms_vector_chain.utl_to_embedding`.
+ - **Performs AI Vector Search**: Retrieve the relevant recommendation text from `LOAN_CHUNKS` table. Then find the most relevant recommendations using similarity search.
+ - **Use RAG**: Combines the customer profile, policy rules using the retrieved recommendation context.
+
+1. Review
+
+ ```python
+
+ question = "What 4th loan would James qualify for?"
+
+def vectorize_question(q):
+ cursor.execute("""
+ SELECT dbms_vector_chain.utl_to_embedding(
+ :q,
+ JSON('{"provider":"database","model":"DEMO_MODEL","dimensions":384}')
+ ) FROM DUAL
+ """, {'q': q})
+ return cursor.fetchone()[0]
+
+print("Processing your question using AI Vector Search across chunked recommendations...")
+
+try:
+ q_vec = vectorize_question(question)
+
+ # Retrieve top recommendation chunks (across all sizes) for this customer
+ cursor.execute("""
+ SELECT CHUNK_ID, CHUNK_TEXT
+ FROM LOAN_CHUNK
+ WHERE CUSTOMER_ID = :cust_id
+ AND CHUNK_VECTOR IS NOT NULL
+ ORDER BY VECTOR_DISTANCE(CHUNK_VECTOR, :qv, COSINE)
+ FETCH FIRST 4 ROWS ONLY
+ """, {'cust_id': selected_customer_id, 'qv': q_vec})
+ retrieved = [
+ (r[0], r[1].read() if isinstance(r[1], oracledb.LOB) else r[1])
+ for r in cursor.fetchall()
+ ]
+
+ if not retrieved:
+ # Fallback to full text as one chunk
+ retrieved = [(0, recommendations)]
+
+ # Prepare clean context for the LLM
+ cleaned = [re.sub(r'[^\w\s\d.,\-\'"]', ' ', t).strip() for _, t in retrieved]
+ docs_as_one_string = "\n=========\n".join(cleaned) + "\n=========\n"
+
+ # Rebuild available loans + customer profile (same structures used earlier)
+ available_loans_text = "\n".join(
+ [f"{loan['LOAN_ID']}: {loan['LOAN_TYPE']} | {loan['INTEREST_RATE']}% interest | "
+ f"Credit Score: {loan['CREDIT_SCORE']} | DTI: {loan['DEBT_TO_INCOME_RATIO']} | "
+ f"Origination Fee: ${loan['ORIGINATION_FEE']} | Time to Close: {loan['TIME_TO_CLOSE']} days"
+ for loan in df_mock_loans.to_dict(orient='records')]
+ )
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ customer_profile_text = "\n".join(
+ [f"- {k.replace('_',' ').title()}: {v}"
+ for k, v in {**customer_json, **loan_app}.items()
+ if k not in ["embedding_vector","ai_response_vector","chunk_vector"]]
+ )
+
+ rag_prompt = f"""\
+[INST] <>
+You are AI Loan Guru. Use only the provided context to answer. Do not mention sources outside of the provided context.
+ Do NOT provide warnings, disclaimers, or exceed the specified response length.
+ Keep under 300 words. Be specific and actionable. Have the ability to respond in Spanish, French, Italian, German, and Portuguese if asked.
+<> [/INST]
+[INST]
+Question: "{question}"
+
+# Context (top chunks from prior AI recommendations):
+{docs_as_one_string}
+
+# Available Loan Options:
+{available_loans_text}
+
+# Applicant Profile:
+{customer_profile_text}
+
+Tasks:
+1) Provide a direct answer to the question.
+2) Briefly justify based on profile + loan options.
+[/INST]"""
+
+ print("Generating AI response...")
+
+ genai_client = oci.generative_ai_inference.GenerativeAiInferenceClient(
+ config=oci.config.from_file(os.getenv("OCI_CONFIG_PATH","~/.oci/config")),
+ service_endpoint=os.getenv("ENDPOINT")
+ )
+ chat_detail = oci.generative_ai_inference.models.ChatDetails(
+ compartment_id=os.getenv("COMPARTMENT_OCID"),
+ chat_request=oci.generative_ai_inference.models.GenericChatRequest(
+ messages=[oci.generative_ai_inference.models.UserMessage(
+ content=[oci.generative_ai_inference.models.TextContent(text=rag_prompt)]
+ )],
+ temperature=0.0,
+ top_p=0.90
+ ),
+ serving_mode=oci.generative_ai_inference.models.OnDemandServingMode(
+ model_id="meta.llama-3.2-90b-vision-instruct"
+ )
+ )
+ chat_response = genai_client.chat(chat_detail)
+ ai_response = chat_response.data.chat_response.choices[0].message.content[0].text
+ ai_response = re.sub(r'[^\w\s\d.,\-\'"]', ' ', ai_response)
+
+ print("\n🤖 AI Loan Guru Response:")
+ print(ai_response)
+
+ # Print which chunks were retrieved (for transparency/debug)
+ print("\n📑 Retrieved Chunks Used in Response:")
+ for cid, text in retrieved:
+ preview = text[:140].replace("\n", " ") + ("..." if len(text) > 140 else "")
+ print(f"[Chunk {cid}] : {preview}")
+
+except Exception as e:
+ print(f"RAG flow error: {e}")
+
+ ```
+
+2. Click the "Run" button to execute the code.
+
+ 
+
+3. Review the result.
+
+ >*Note:* Your result may be different due to non-deterministic character of generative AI.
+
+ 
+
+## Summary
+
+Congratulations! You implemented a RAG process in Oracle Database 23ai using Python.
+
+To summarize:
+
+* You created a function to connect to Oracle Database 23ai using the Oracle Python driver `oracledb`.
+* You created a function to retrieve customer data.
+* You created a function to connect to OCI Generative AI and create a first recommendation.
+* You created a function to create embeddings of the customer data using Oracle Database 23ai.
+* And finally, you implemented a RAG process in Oracle Database 23ai using Python.
+
+Congratulations, you completed the lab!
+
+You may now proceed to the next lab.
+
+## Learn More
+
+* [Code with Python](https://www.oracle.com/developer/python-developers/)
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Francis Regalado
+* **Contributors** - Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, September 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_2.0.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_2.0.md
new file mode 100644
index 000000000..fb4aac144
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_2.0.md
@@ -0,0 +1,443 @@
+# Step by step: Implement RAG with Oracle Database 23ai
+
+## Introduction
+
+At SeerEquities, the data team is building a GenAI-powered loan assistant to support faster, more accurate loan approvals. The goal: reduce manual effort by using **retrieval-augmented generation (RAG)** and **LLMs** directly inside a governed Oracle Database 23ai environment.
+
+In this lab, you'll build that assistant from the ground up.
+
+You’ll connect to Oracle Database 23ai, explore customer data, use Oracle’s built-in embedding tools to vectorize content, and query it using AI Vector Search. Finally, you’ll feed results into a **Generative AI model from OCI** to generate contextual recommendations.
+
+> 💡 Everything runs securely inside the database—no need to move data to external tools or vector stores. Only the enriched context is provided securely to OCI Generative AI services.
+
+Estimated Time: 30 minutes
+
+To get things started we invite you to watch this video and see the lab in action:
+
+ [](videohub:1_joogeiaj:medium)
+
+
+### Objectives
+
+- Build a complete RAG workflow using Python and Oracle Database 23ai
+- Connect to the database, prepare customer and loan data
+- Use `dbms_vector_chain` to create embeddings
+- Perform similarity search using `VECTOR_DISTANCE()`
+- Generate contextual loan recommendations using OCI Generative AI
+
+### Prerequisites
+
+This lab assumes you have:
+
+- Oracle Cloud account
+- Completed:
+ - Connect to the Development Environment: Environment Setup
+ - Coding Basics on Oracle Database 23ai: Coding Basics
+
+
+## Task 1: Launch a Jupyter Notebook
+
+>💡**Note**: Review **Connect to the Development Environment** for instructions on accessing JupyterLab.
+
+1. Click the blue **+** to open the Launcher
+
+ 
+
+
+2. Select **Python (ipykernel)** to open a new notebook
+
+ 
+
+
+## Task 2: Connect to Oracle Database 23ai
+
+1. Copy the following code block into an empty cell in your notebook. This code block imports the `oracledb` Python driver and other libraries.
+
+ ```python
+
+ import os
+ import json
+ import oracledb
+ import pandas as pd
+ import oci
+ import numpy as np
+ import re
+ from dotenv import load_dotenv
+ from PyPDF2 import PdfReader
+
+ load_dotenv()
+
+ username = os.getenv("USERNAME")
+ password = os.getenv("DBPASSWORD")
+ dsn = os.getenv("DBCONNECTION")
+
+ try:
+ connection = oracledb.connect(user=username, password=password, dsn=dsn)
+ print("Connection successful!")
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ cursor = connection.cursor()
+
+ ```
+
+2. Run the code block to connect to the database.
+
+ 
+
+
+## Task 3: Create database tables
+
+1. Run the following cell to create your tables and populate them with sample data:
+
+ ```python
+
+ exec(open("db_setup.py").read())
+
+ ```
+
+ 
+
+
+## Task 4: Fetch and display a customer profile
+
+With the database ready, you will query customer data from the clients_dv JSON duality view. This view merges data from `CLIENTS`, `LOAN_APPLICATIONS`, and `CLIENT_DEBT` into a single JSON object, streamlining access to related records for AI-driven analysis.
+
+- **Define a Function**: Create a reusable function `fetch_customer_data` to query the database by customer ID, extracting the JSON data for a specific customer.
+- **Use an Example**: Fetch data for customer `CUST_1000` (James Smith) to demonstrate the process.
+- **Display the Results**: Format the retrieved data into a pandas DataFrame for a clear, tabular presentation, showing key details like name, income, credit score, and total debt.
+
+1. Run the code below to see James Smith’s profile. The output will include a brief summary (name and loan status) followed by a detailed table. If no data is found for the specified ID, a message will indicate this, helping you debug potential issues like an incorrect ID or empty database.
+
+ ```python
+
+ def fetch_customer_data(customer_id):
+ cursor.execute("SELECT data FROM clients_dv WHERE JSON_VALUE(data, '$._id') = :customer_id", {'customer_id': customer_id})
+ result = cursor.fetchone()
+ return json.loads(result[0]) if result and isinstance(result[0], str) else result[0] if result else None
+
+ selected_customer_id = "CUST_1000"
+ customer_json = fetch_customer_data(selected_customer_id)
+
+ if customer_json:
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ print(f"Customer: {customer_json['firstName']} {customer_json['lastName']}")
+ print(f"Loan Status: {loan_app['loanStatus']}")
+
+ desired_fields = [
+ ("Customer ID", selected_customer_id),
+ ("Application ID", loan_app.get("applicationId", "")),
+ ("First Name", customer_json.get("firstName", "")),
+ ("Last Name", customer_json.get("lastName", "")),
+ ("City", customer_json.get("city", "")),
+ ("State", customer_json.get("state", "")),
+ ("Zip code", customer_json.get("zipCode", "")),
+ ("Age", customer_json.get("age", 0)),
+ ("Income", customer_json.get("income", 0)),
+ ("Credit score", loan_app.get("creditScore", 600)),
+ ("Requested loan amount", loan_app.get("requestedLoanAmount", 0)),
+ ("Total Debt", loan_app.get("totalDebt", 0)),
+ ("Loan status", loan_app.get("loanStatus", "Pending Review"))
+ ]
+ df_customer_details = pd.DataFrame({field_name: [field_value] for field_name, field_value in desired_fields})
+ display(df_customer_details)
+ else:
+ print("No data found for customer ID:", selected_customer_id)
+
+ ```
+2. Click the "Run" button to execute the code.
+
+3. The output will display a DataFrame containing the customer details for the selected customer ID.
+
+ 
+
+If you completed Lab 1: Run the Demo earlier, this is what gets printed out when the Loan Officer clicks on CUST 1000. You just built it, well done!
+
+
+## Task 5: Create a function to generate recommendations for the customer
+
+With customer profiles in place, you will use OCI Generative AI to generate personalized loan recommendations. This step combines customer data with available loan options, allowing the LLM to suggest loans that match the customer’s credit score, income, and debt profile.
+
+Here’s what we’ll do:
+- **Fetch Loan Options**: Retrieve all loans from `MOCK_LOAN_DATA`, including details like interest rates, credit score requirements, and loan types.
+- **Build a Prompt**: Construct a structured prompt that combines the customer’s profile with available loans, instructing the LLM to evaluate and recommend based solely on this data.
+- **Use OCI Generative AI**: Send the prompt to the `meta.llama-3.2-90b-vision-instruct` model via OCI’s inference client, which will process the input and generate a response.
+- **Format the Output**: Display the recommendations in HTML with styled headers and lists, covering evaluation, top picks, and explanations—making it easy to read and understand.
+
+
+1. Review and review the code in a new cell:
+
+ ```python
+
+ # Fetch Mock Loan Data
+ cursor.execute("SELECT loan_id, loan_provider_name, loan_type, interest_rate, origination_fee, time_to_close, credit_score, debt_to_income_ratio, income, down_payment_percent, is_first_time_home_buyer FROM MOCK_LOAN_DATA")
+ df_mock_loans = pd.DataFrame(cursor.fetchall(), columns=["LOAN_ID", "LOAN_PROVIDER_NAME", "LOAN_TYPE", "INTEREST_RATE", "ORIGINATION_FEE", "TIME_TO_CLOSE", "CREDIT_SCORE", "DEBT_TO_INCOME_RATIO", "INCOME", "DOWN_PAYMENT_PERCENT", "IS_FIRST_TIME_HOME_BUYER"])
+
+ # Generate Recommendations
+ def generate_recommendations(customer_id, customer_json, df_mock_loans):
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ available_loans_text = "\n".join([f"{loan['LOAN_ID']}: {loan['LOAN_TYPE']} | {loan['INTEREST_RATE']}% interest | Credit Score: {loan['CREDIT_SCORE']} | DTI: {loan['DEBT_TO_INCOME_RATIO']}" for loan in df_mock_loans.to_dict(orient='records')])
+ customer_profile_text = "\n".join([f"- {key.replace('_', ' ').title()}: {value}" for key, value in {**customer_json, **loan_app}.items() if key not in ["embedding_vector", "ai_response_vector", "chunk_vector"]])
+
+ prompt = f"""[INST] <>You are a Loan Approver AI. Use only the provided context to evaluate the applicant’s profile and recommend loans. Format results as plain text with numbered sections (1. Comprehensive Evaluation, 2. Top 3 Loan Recommendations, 3. Recommendations Explanations, 4. Final Suggestion). Use newlines between sections.> [/INST]
+ [INST]Available Loan Options:\n{available_loans_text}\nApplicant's Full Profile:\n{customer_profile_text}\nTasks:\n1. Comprehensive Evaluation\n2. Top 3 Loan Recommendations\n3. Recommendations Explanations\n4. Final Suggestion"""
+
+ print("Generating AI response...")
+ print(" ")
+
+ genai_client = oci.generative_ai_inference.GenerativeAiInferenceClient(config=oci.config.from_file(os.getenv("OCI_CONFIG_PATH", "~/.oci/config")), service_endpoint=os.getenv("ENDPOINT"))
+ chat_detail = oci.generative_ai_inference.models.ChatDetails(
+ compartment_id=os.getenv("COMPARTMENT_OCID"),
+ chat_request=oci.generative_ai_inference.models.GenericChatRequest(messages=[oci.generative_ai_inference.models.UserMessage(content=[oci.generative_ai_inference.models.TextContent(text=prompt)])], temperature=0.0, top_p=1.00),
+ serving_mode=oci.generative_ai_inference.models.OnDemandServingMode(model_id="meta.llama-3.2-90b-vision-instruct")
+ )
+ chat_response = genai_client.chat(chat_detail)
+ recommendations = chat_response.data.chat_response.choices[0].message.content[0].text
+
+ return recommendations
+
+ recommendations = generate_recommendations(selected_customer_id, customer_json, df_mock_loans)
+ print(recommendations)
+
+ ```
+2. Click the "Run" button to execute the code. Note that this will take time to run. Be patient, you will get loan recommendations from the LLM shortly.
+
+3. Review the output. In the demo, this is where you selected the "Navigate to Decisions" button as the Loan Officer. You just used AI to get recommendations for the loan officer which would have taken her hours to do, congratulations!
+
+>Note: Your result may be different. This is because of generative AI and the model's ability to generate new content based on your input. The output may contain different recommendations or suggestions.
+
+
+
+
+## Task 6: Create a function to create embeddings - Use Oracle Database 23ai to create vector data
+
+To handle follow-up questions, you will enhance the system with an AI Loan Guru powered by Oracle 23ai’s Vector Search and Retrieval-Augmented Generation (RAG). The AI Loan Guru will be able to answer questions about the loan application and provide recommendations based on the data.
+
+Before answering questions, we need to prepare the data by vectoring the loan recommendations. This step:
+
+ - **Stores Recommendations**: Inserts the full recommendation text (from previous cell) as a single chunk if not already present.
+
+ - **Generates Embeddings**: This is a new feature in Oracle Database 23ai that allows you to create embeddings directly within the database, eliminating the need for external tools or APIs. The `dbms_vector_chain.utl_to_embedding` function takes the recommendation text as input and returns an embedding vector.
+
+ - **Stores Embeddings**: Inserts the generated embedding vector into a table called `LOAN_CHUNK`.
+
+1. Run and review the code in a new cell:
+
+ ```python
+
+ # Vectorize the full AI recommendations
+ try:
+ with connection.cursor() as cursor:
+ # Clear existing entries for this customer
+ cursor.execute("DELETE FROM LOAN_CHUNK WHERE CUSTOMER_ID = :customer_id", {'customer_id': selected_customer_id})
+ # Store full AI recommendations from Cell 10
+ cursor.execute("""
+ INSERT INTO LOAN_CHUNK (CUSTOMER_ID, CHUNK_ID, CHUNK_TEXT)
+ VALUES (:customer_id, 0, :chunk_text)
+ """, {
+ 'customer_id': selected_customer_id,
+ 'chunk_text': recommendations # Using 'recommendations' from Cell 10
+ })
+ # Vectorize using dbms_vector_chain
+ cursor.execute("""
+ UPDATE LOAN_CHUNK
+ SET CHUNK_VECTOR = dbms_vector_chain.utl_to_embedding(
+ :chunk_text,
+ JSON('{"provider": "database", "model": "DEMO_MODEL", "dimensions": 384}')
+ )
+ WHERE CUSTOMER_ID = :customer_id AND CHUNK_ID = 0
+ """, {'customer_id': selected_customer_id, 'chunk_text': recommendations})
+ connection.commit()
+ print("Vector embeddings generated for AI recommendations.")
+ except oracledb.DatabaseError as e:
+ print(f"Failed to generate vector embeddings for AI recommendations: {e}")
+
+ ```
+2. Click the "Run" button to execute the code.
+
+3. Review the output.
+
+ 
+
+## Task 7: Implement RAG with Oracle Database 23ai's Vector Search
+
+Now that the recommendations are vectorized, we can process a user’s question:
+
+ ```What’s the best loan for a first-time home buyer?```
+
+ This step:
+
+ - **Vectorizes the question**: Embeds the question using `DEMO_MODEL` via `dbms_vector_chain.utl_to_embedding`.
+ - **Performs AI Vector Search**: Finds the most relevant using similarity search.
+ - **Use RAG**: Combines the customer profile, loan options, and relevant chunk into a prompt for OCI Generative AI, producing a concise answer. Here you implement the RAG process.
+
+1. Review and run the following code in a new cell.
+
+ ```python
+
+ question = "What 4th loan would James qualify for?"
+
+ if question:
+ print("Processing your question using AI Vector Search across all available data...")
+
+ relevant_chunks = []
+
+ try:
+ # Generate embedding for user question using dbms_vector_chain
+ with connection.cursor() as cursor:
+ cursor.execute("""
+ SELECT dbms_vector_chain.utl_to_embedding(
+ :question,
+ JSON('{"provider": "database", "model": "DEMO_MODEL", "dimensions": 384}')
+ ) FROM DUAL
+ """, {'question': question})
+ question_embedding = cursor.fetchone()[0]
+
+ # Perform AI Vector Search for the most relevant chunk
+ cursor.execute("""
+ SELECT CHUNK_TEXT
+ FROM LOAN_CHUNK
+ WHERE CUSTOMER_ID = :customer_id AND CHUNK_ID = 0
+ AND CHUNK_VECTOR IS NOT NULL
+ ORDER BY VECTOR_DISTANCE(CHUNK_VECTOR, :embedding, COSINE)
+ FETCH FIRST 1 ROW ONLY
+ """, {'customer_id': selected_customer_id, 'embedding': question_embedding})
+ results = cursor.fetchall()
+ # Convert LOB to string using read()
+ relevant_chunks = [row[0].read() if isinstance(row[0], oracledb.LOB) else row[0] for row in results]
+
+ if not relevant_chunks:
+ print("No relevant chunks found via vector search. Using existing recommendations instead.")
+ relevant_chunks = [recommendations] # Fallback to full recommendations
+
+ except oracledb.DatabaseError as e:
+ print(f"Vector search failed: {e}")
+ relevant_chunks = [recommendations] # Fallback
+
+ # Combine available chunks with AI recommendations
+ all_relevant_chunks = relevant_chunks
+
+ if not all_relevant_chunks:
+ print("No relevant information found for the provided question.")
+ else:
+ # Clean and format text for readability
+ cleaned_chunks = []
+ for chunk in all_relevant_chunks:
+ cleaned_chunk = re.sub(r'[^\w\s\d.,\-\'"]', ' ', chunk) # Remove special characters
+ cleaned_chunk = re.sub(r'\s+', ' ', cleaned_chunk).strip() # Normalize whitespace
+ cleaned_chunks.append(cleaned_chunk)
+ docs_as_one_string = "\n=========\n".join(cleaned_chunks)
+
+ # Retrieve available loan options from Mock Loan Data
+ available_loans_text = "\n".join(
+ [f"{loan['LOAN_ID']}: {loan['LOAN_TYPE']} | {loan['INTEREST_RATE']}% interest | "
+ f"Credit Score: {loan['CREDIT_SCORE']} | DTI: {loan['DEBT_TO_INCOME_RATIO']} | "
+ f"Origination Fee: ${loan['ORIGINATION_FEE']} | Time to Close: {loan['TIME_TO_CLOSE']} days"
+ for loan in df_mock_loans.to_dict(orient="records")]
+ )
+
+ # Fetch fresh customer profile from customer_json
+ loan_app = customer_json.get("loanApplications", [{}])[0]
+ customer_profile_text = "\n".join(
+ [f"- {key.replace('_', ' ').title()}: {value}" for key, value in {**customer_json, **loan_app}.items()
+ if key not in ["embedding_vector", "ai_response_vector", "chunk_vector"]]
+ )
+
+ prompt = f"""\
+ [INST] <>
+ You are AI Loan Guru, a specialized AI assistant at a brokerage firm. Use only the provided context to answer the question.
+ Your role is to evaluate an applicant’s full financial and personal profile, provide precise answers,
+ and offer insights while considering the firm's overall risk and best interests.
+ ALWAYS respond as if you have the knowledge yourself. Ensure all numerical values (e.g., income, interest rates) are formatted clearly with commas and proper spacing (e.g., 85,393, not 85,393whichisbelow).
+ Keep the response under 300 words and format as plain text.
+ <> [/INST]
+
+ [INST]
+ Loan Officer's Question: "{question}"
+
+ ====
+
+ # Provided Context:
+ {docs_as_one_string}
+
+ # Available Loan Options:
+ {available_loans_text}
+
+ # Applicant's Full Profile:
+ {customer_profile_text}
+
+ ====
+
+ # Your Tasks:
+ 1. Provide a direct answer to the question asked, using the context and data.
+ 2. Maintain business rules: Avoid First Time Home Owner loans if debt type is 'Mortgage'; prioritize Opportunity Zone loans (1% interest, max income $100k) if eligible (income < $100k, zip_code 48201); only recommend Military Veteran loans if veteran = 'Yes'.
+ 3. Explain how the answer aligns with the applicant’s profile and eligibility.
+
+ Answer (Maximum 300 words, concise and professional):
+ [/INST]
+ """
+
+ print("Generating AI response...")
+
+ genai_client = oci.generative_ai_inference.GenerativeAiInferenceClient(config=oci.config.from_file(os.getenv("OCI_CONFIG_PATH", "~/.oci/config")), service_endpoint=os.getenv("ENDPOINT"))
+ chat_detail = oci.generative_ai_inference.models.ChatDetails(
+ compartment_id=os.getenv("COMPARTMENT_OCID"),
+ chat_request=oci.generative_ai_inference.models.GenericChatRequest(
+ messages=[oci.generative_ai_inference.models.UserMessage(content=[oci.generative_ai_inference.models.TextContent(text=prompt)])],
+ temperature=0.0,
+ top_p=0.90
+ ),
+ serving_mode=oci.generative_ai_inference.models.OnDemandServingMode(model_id="meta.llama-3.2-90b-vision-instruct")
+ )
+
+ try:
+ chat_response = genai_client.chat(chat_detail)
+ ai_response = chat_response.data.chat_response.choices[0].message.content[0].text
+
+ # Post-process AI response to ensure no garbled text
+ ai_response = re.sub(r'[^\w\s\d.,\-\'"]', ' ', ai_response) # Remove special characters
+ ai_response = re.sub(r'(\d+)([a-zA-Z])', r'\1 \2', ai_response) # Separate numbers from letters
+ ai_response = re.sub(r'\b(\d{3,})\b(?!\s*[,.\-])', r'\1,', ai_response) # Ensure large numbers have commas
+ ai_response = re.sub(r',(?=\d{3}\b)', '', ai_response) # Remove extra commas
+
+ print("\n🤖 AI Loan Guru Response:")
+ print(ai_response)
+ except Exception as e:
+ print(f"Error connecting to OCI Gen AI: {e}")
+
+ ```
+
+2. Click the "Run" button to execute the code.
+
+3. Review the result.
+
+ >*Note:* Your result may be different due to non-deterministic character of generative AI.
+
+ 
+
+## Conclusion
+
+Congratulations! You implemented a RAG process in Oracle Database 23ai using Python.
+
+To summarize:
+
+In this lab, you built the foundation of the SeerEquities GenAI Loan Assistant:
+
+✅ Pulled customer data from JSON Duality Views
+✅ Used Oracle Database 23ai to create and search vector embeddings
+✅ Queried embedded chunks using AI Vector Search
+✅ Generated and refined answers using OCI Generative AI
+
+This RAG workflow now powers contextual conversations between loan officers and the system—with no external vector store or duplicated pipeline.
+
+You may now proceed to the next lab.
+
+## Learn More
+
+* [Code with Python](https://www.oracle.com/developer/python-developers/)
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Francis Regalado Database Product Manager
+* **Contributors** - Kevin Lazarz, Linda Foinding, Kamryn Vinson
+* **Last Updated By/Date** - Francis Regalado, June 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_backup.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_backup.md
new file mode 100644
index 000000000..13779cd9f
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/build_backup.md
@@ -0,0 +1,148 @@
+# Code Snippets and Highlights for Building the Application
+
+## Introduction
+
+In this lab, you will learn how to **build a generative AI-powered loan recommendation system using Oracle Database and OCI Generative AI**. This application will act as a flexible template that can be adapted to a wide range of use cases. Oracle Database 23Ai will function as the vector data, where you'll store important context for the model to use when generating responses. This approach allows you to create a robust system that retrieves relevant data and combines it with the power of generative AI to deliver accurate, up-to-date answers based on your specific business needs.
+
+Estimated Time: 20 minutes
+
+### Objectives
+
+By the end of this hands-on session, you will have established a connection to an Oracle Database, fetched and explored customer data, processed relevant information, and utilized a Large Language Model (LLM) to generate personalized loan recommendations based on detailed customer profiles. This system integrates cutting-edge AI capabilities with robust database technology to deliver tailored financial solutions.
+
+Throughout this section we will be leveraging a Jupyter Notebook to explore building parts of the application. If you are unfamiliar with notebooks here are a few tips to get started:
+
+• Instructions and code will be mixed together, each having their own blocks. You can use the run button on the code to see it execute. If you accidentally hit run on any instructions it will just move to the next block so don't worry.
+• When running a code block it will switch from either a [ ] or a [1] (a number inside) to a [*]. When you see the one with a * that means its running. Wait till it switches to a number before moving on.
+• If you see any warnings, don't worry, they are probably just letting you know that things are changing, depreciating and you should look at updating to the latest standards. You don't need to do anything.
+
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+
+## Task 1: Login to Jupyter
+
+This task will have you login to the Jupyter environment and run specific notebooks for this lab.
+
+1. If you have already logged into the Jupyter environment skip to step 5, otherwise open "View Login Info" section of your workshop.
+
+2. Copy the Jupyter Notebook Password and click the Jupyter Notebook URL.
+
+3. Paste the Jupyter Notebook password you copied in the previous step into the password field.
+
+4. After a successful login, you will see the Jupyter Notebook's landing page.
+
+
+## Task 2: Launch the Application
+
+1. Select the **Launcher** tab and open the **terminal**
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+ $
+ ./run.sh
+
+ ````
+
+The following section includes a hands-on exercise for building parts of the application using a Jupyter notebook.
+You will also be able to review important parts of the python code below.
+
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 3: How to Connect to the Database
+
+**Code Highlight: Connect to the Database**
+
+This section sets up a secure connection to an Oracle database by importing necessary libraries and loading environment variables from a .env file. The get\_db\_connection function retrieves the database username, password, and connection string, then uses the oracledb library to establish a connection.
+
+ 
+
+## Task 4 Build a GenAI application with Oracle AI Vector Search
+
+**About Oracle AI Vector Search**
+
+Oracle AI Vector Search is a feature of Oracle Database 23ai that enables efficient searching of AI-generated vectors stored in the database. It supports fast search using various indexing strategies and can handle massive amounts of vector data. This makes it possible for Large Language Models (LLMs) to query private business data using a natural language interface, helping them provide more accurate and relevant results. Additionally, AI Vector Search allows developers to easily add semantic search capabilities to both new and existing applications.
+
+**Code Highlight: Onnx Model**
+
+1. First, we load an ONNX machine learning model, which we use for generating vector embeddings in our app. It starts by checking if the model already exists in the database; if not, it creates a directory, downloads the model file from object storage, and uses dbms\_vector to load it, replacing any old version if needed.
+
+ 
+
+**Code Highlight: Prompt for the AI**
+
+2. Next, we craft a detailed prompt for our RAG—system, directing the AI to step into the shoes of a Loan Approver, relying solely on the data we feed it. It’s tasked with analyzing an applicant’s financial profile against our loan portfolio and business rules, focusing on just the provided context, ignoring any prior knowledge, which ensures our loan suggestions are relevant, without relying on external or outdated information.
+
+ 
+
+**Code Highlight: Communicating with GenAI**
+
+**About Generative artificial intelligence (AI)**
+
+Generative AI excels at creating text responses based on large language models (LLMs) where the AI is trained on a massive number of data points. The generated text is often easy to read and provides detailed responses that are broadly applicable to the questions asked of the software, often called prompts.
+
+3. Now, this is how we communicate with OCI’s Generative AI service by pulling in configuration details like the compartment ID and endpoint from environment variables and a config file. The code sets up the structure for a chat request, embedding our prompt into a user message, enabling AI loan recommendations within the app.
+
+ 
+
+**Code Highlight: Embed the Question and Vector Search**
+
+4. Finally, we dive into AI vector search. First, we generates an embedding for a user’s question using Oracle’s dbms\_vector\_chain and our DEMO\_MODEL. Then, it performs an AI vector search in the LOAN_CHUNK table, comparing stored recommendations vector embeddings to the question’s embedding with cosine distance, and pulls back the most relevant text chunk, with a limit of one row.
+
+ 
+
+## Task 5 How to incorporate Property Graph into the application
+
+**About Property Graph**
+
+In Oracle Database 23ai we can create property graphs inside the database. These property graphs allow us to map the vertices and edges to new or existing tables, external tables, materialized views or synonyms to these objects inside the database. The property graphs are stored as metadata inside the database meaning they don't store the actual data. Rather, the data is still stored in the underlying objects and we use the SQL/PQG syntax to interact with the property graphs.
+
+Property graphs make the process of working with interconnected data, like identifying influencers in a social network, predicting trends and customer behavior, discovering relationships based on pattern matching and more by providing a more natural and efficient way to model and query them.
+
+**Code Highlight: Graph Query**
+
+1. Here, we define a query for our LOANS_GRAPH property graph, which connects clients to their loan applications and potential loan options via a customer ID. It extracts critical details—like credit scores, debt-to-income ratios, and loan types—by traversing the graph’s vertices and edges.
+
+ 
+
+**Code Highlight: Creating The Property Graph**
+
+2. The graph structure enables complex queries and visualizations in the app, supporting decision-making by mapping interconnections between customer data and loan options. This SQL block creates our loans\_graph property graph , setting up vertices for clients, loan applications, and mock loan data with all their key properties. It also defines edges—like client\_to\_application and CLIENTS\_TO\_LOAN to link these entities, establishing relationships that we can query and explore.
+
+ 
+
+## Task 6 How to incorporate JSON Transform into the application
+
+**About JSON Duality View**
+
+JSON Relational Duality is a landmark capability in Oracle Database 23ai, providing game-changing flexibility and simplicity for Oracle Database developers. This feature overcomes the historical challenges developers have faced when building applications using the relational or document models.
+
+JSON Relational Duality helps to converge the benefits of both document and relational worlds. Developers now get the flexibility and data access benefits of the JSON document model, plus the storage efficiency and power of the relational model. The new feature enabling this functionality is JSON Relational Duality View
+
+**Code Highlight: JSON Transform**
+
+This section dynamically updates customer data in our clients\_dv table by building a flexible JSON\_TRANSFORM query based on a list of transformation statements. It constructs the query by joining those statements—like setting new field values—then applies them to the JSON data for a specific customer, identified by their ID, as long as a loan application exists."
+
+
+
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Otis Barr, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/23ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/23ai.png
new file mode 100644
index 000000000..c9d91565d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/23ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/access.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/access.png
new file mode 100644
index 000000000..67d0f079c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/access.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/adb-available.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/adb-available.png
new file mode 100644
index 000000000..83c42c2f8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/adb-available.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/app-home.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/app-home.png
new file mode 100644
index 000000000..9892728e1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/app-home.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/atp.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/atp.png
new file mode 100644
index 000000000..09736ee76
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/atp.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-streamlit.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-streamlit.png
new file mode 100644
index 000000000..33010d468
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-streamlit.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-1.png
new file mode 100644
index 000000000..6ba9b90b8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-2.png
new file mode 100644
index 000000000..01a6ccbdf
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-3.png
new file mode 100644
index 000000000..7d8a46504
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-4.png
new file mode 100644
index 000000000..21af6948c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-5.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-5.png
new file mode 100644
index 000000000..ac81e25d9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-5.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-6.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-6.png
new file mode 100644
index 000000000..bff8b9b5e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-6.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-7.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-7.png
new file mode 100644
index 000000000..327343eb8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-7.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-8.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-8.png
new file mode 100644
index 000000000..0c94f1b5a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/code-highlight-8.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connect-to-db.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connect-to-db.png
new file mode 100644
index 000000000..1dfbf76c2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connect-to-db.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connectto-db.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connectto-db.png
new file mode 100644
index 000000000..c87b8650b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/connectto-db.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb.png
new file mode 100644
index 000000000..224b16bc2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb2.png
new file mode 100644
index 000000000..20fe1a66e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-adb2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-tables.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-tables.png
new file mode 100644
index 000000000..d0961e04e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-tables.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-vector.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-vector.png
new file mode 100644
index 000000000..e429fd2ca
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/create-vector.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dbinit.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dbinit.png
new file mode 100644
index 000000000..20b3bb2c2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dbinit.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/demo-db.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/demo-db.png
new file mode 100644
index 000000000..b7bad922b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/demo-db.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/fetch-customer.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/fetch-customer.png
new file mode 100644
index 000000000..e26559026
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/fetch-customer.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-notebook.png
new file mode 100644
index 000000000..23e7200ce
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/jupyter-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task3.png
new file mode 100644
index 000000000..46a3971e7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task4.png
new file mode 100644
index 000000000..d0443b123
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/lab4task4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/launcher.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/launcher.png
new file mode 100644
index 000000000..025514b6e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/launcher.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/loan-recommendation.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/loan-recommendation.png
new file mode 100644
index 000000000..b3a7c8a90
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/loan-recommendation.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/logical.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/logical.png
new file mode 100644
index 000000000..465a4d554
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/logical.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/login.png
new file mode 100644
index 000000000..93ca6436b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-launcher.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-launcher.png
new file mode 100644
index 000000000..9b2b6ebdb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-launcher.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-new-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-new-notebook.png
new file mode 100644
index 000000000..7624ffa22
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-new-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-notebook.png
new file mode 100644
index 000000000..76c241f56
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal copy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal copy.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal copy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/oracle-database.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/oracle-database.png
new file mode 100644
index 000000000..642d0dbfc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/oracle-database.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/password.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/password.png
new file mode 100644
index 000000000..e770db461
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/password.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/physical.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/physical.png
new file mode 100644
index 000000000..a9183a5a3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/physical.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/provisioning.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/provisioning.png
new file mode 100644
index 000000000..a04507757
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/provisioning.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/rag.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/rag.png
new file mode 100644
index 000000000..bb359451f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/rag.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/run-script.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/run-script.png
new file mode 100644
index 000000000..1892833f1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/run-script.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/shell-script.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/shell-script.png
new file mode 100644
index 000000000..a1069bc45
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/shell-script.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/start-demo.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/start-demo.png
new file mode 100644
index 000000000..904ada64a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/start-demo.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task4recommendations.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task4recommendations.png
new file mode 100644
index 000000000..f4149263e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task4recommendations.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task5.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task5.png
new file mode 100644
index 000000000..cbdb751e9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task5.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task6.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task6.png
new file mode 100644
index 000000000..87c5e221e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task6.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7.png
new file mode 100644
index 000000000..91db730c6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7results.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7results.png
new file mode 100644
index 000000000..bbdb848d9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/task7results.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/terminal.png
new file mode 100644
index 000000000..8636461a9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/workshop_notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/workshop_notebook.png
new file mode 100644
index 000000000..f3706f232
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/workshop_notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/yask5recs.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/yask5recs.png
new file mode 100644
index 000000000..022f4dabb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/build/images/yask5recs.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/clean-up.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/clean-up.md
new file mode 100644
index 000000000..e3c537e46
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/clean-up.md
@@ -0,0 +1,92 @@
+# Title of the Lab
+
+## Introduction
+
+*Describe the lab in one or two sentences, for example:* This lab walks you through the steps to ...
+
+Estimated Lab Time: -- minutes
+
+### About (Optional)
+Enter background information here about the technology/feature or product used in this lab - no need to repeat what you covered in the introduction. Keep this section fairly concise. If you find yourself needing more than two sections/paragraphs, please utilize the "Learn More" section.
+
+### Objectives
+
+*List objectives for this lab using the format below*
+
+In this lab, you will:
+* Stop application
+* Stop database
+* Drop compute
+
+### Prerequisites (Optional)
+
+*List the prerequisites for this lab using the format below. Fill in whatever knowledge, accounts, etc. is necessary to complete the lab. Do NOT list each previous lab as a prerequisite.*
+
+This lab assumes you have:
+* An Oracle Cloud account
+* All previous labs successfully completed
+
+
+*This is the "fold" - below items are collapsed by default*
+
+## Task 1: Concise Task Description
+
+(optional) Task 1 opening paragraph.
+
+1. Step 1
+
+ 
+
+2. Step 2
+
+ 
+
+4. Example with inline navigation icon  click **Navigation**.
+
+5. Example with bold **text**.
+
+ If you add another paragraph, add 3 spaces before the line.
+
+## Task 2: Concise Task Description
+
+1. Step 1 - tables sample
+
+ Use tables sparingly:
+
+ | Column 1 | Column 2 | Column 3 |
+ | --- | --- | --- |
+ | 1 | Some text or a link | More text |
+ | 2 |Some text or a link | More text |
+ | 3 | Some text or a link | More text |
+
+2. You can also include bulleted lists - make sure to indent 4 spaces:
+
+ - List item 1
+ - List item 2
+
+3. Code examples
+
+ ```
+ Adding code examples
+ Indentation is important for the code example to appear inside the step
+ Multiple lines of code
+ Enclose the text you want to copy in .
+ ```
+
+4. Code examples that include variables
+
+ ```
+ ssh -i
+ ```
+
+## Learn More
+
+*(optional - include links to docs, white papers, blogs, etc)*
+
+* [URL text 1](http://docs.oracle.com)
+* [URL text 2](http://docs.oracle.com)
+
+## Acknowledgements
+* **Author** -
+* **Contributors** - -- optional
+* **Last Updated By/Date** -
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample1.png
new file mode 100644
index 000000000..2d9ad4738
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample2.png
new file mode 100644
index 000000000..145c9d39c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/clean-up/images/sample2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/cloud-login.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/cloud-login.md
new file mode 100644
index 000000000..93e74a7ba
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/cloud-login.md
@@ -0,0 +1,51 @@
+# Get started
+
+## Introduction
+
+In this lab, we will show you where you can find the login information and how to log in to the **SeerEquities Loan Management application**.
+
+Estimated Time: 5 minutes
+
+### Objectives
+
+- Log-in to the application
+- Locate your LiveLabs Sandbox reservations
+
+## Task 1: View Login Information
+
+Right above the workshop instructions you can find two information:
+
+a. **View Login Info:** You can find credentials and other information to access the LiveLabs Sandbox
+
+b. **Time Remaining:** This shows you the remaining time before your access to the LiveLabs Sandbox expires. Please note: You may be able to extend the reservation time.
+
+
+
+## Task 2: Login to the Demo
+
+1. To access the demo environment, click **View Login Info** in the top left corner of the page. Click the **Start the Demo** link.
+
+ 
+
+2. Enter in a username, select the **Loan Officer** role, and click **Login**.
+
+ 
+
+3. Welcome to the SeerEquities Loan Management application! Congratulations, you are now connected to the demo environment. You can now execute the different tasks and steps for the LiveLabs workshop.
+
+ 
+
+
+## Task 3: Find your LiveLabs Sandbox reservations
+
+If you close your browser, and you want to launch your workshop again, open [livelabs.oracle.com](https://livelabs.oracle.com), login using your Oracle account, and click on **My Reservations**. You can find here a complete history of all LiveLabs workshops you signed up for. Click on **Launch Workshop** to start a workshop with an existing LiveLabs Sandbox environment.
+
+
+
+You may now **proceed to the next lab**.
+
+## Acknowledgements
+
+- **Created By/Date** - Kamryn Vinson
+- **Contributor** - Linda Foinding
+- **Last Updated By/Date** - Linda Foinding, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/app-home.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/app-home.png
new file mode 100644
index 000000000..6cf6ab118
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/app-home.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/demo-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/demo-env.png
new file mode 100644
index 000000000..3d5401336
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/demo-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/ll-reservations.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/ll-reservations.png
new file mode 100644
index 000000000..2e7150140
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/ll-reservations.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/login.png
new file mode 100644
index 000000000..0acc1ff72
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/start-demo.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/start-demo.png
new file mode 100644
index 000000000..2be9a0f28
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/start-demo.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/view-login-info.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/view-login-info.png
new file mode 100644
index 000000000..2bcf29e82
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/cloud-login/images/view-login-info.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/codingbasics.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/codingbasics.md
new file mode 100644
index 000000000..c539ca421
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/codingbasics.md
@@ -0,0 +1,498 @@
+# Coding Basics on Oracle Database 23ai
+
+## Introduction
+
+
+At Seer Holdings, developers are building a next-generation loan approval system that needs to combine enterprise-grade data governance with modern AI capabilities. But before GenAI or vector search can be applied, one thing must be true:
+
+👉 The data must be in the right shape — accessible, trustworthy, and programmable.
+
+In this lab, you’ll act as a developer on the Seer Holdings data team. Your job is to build the foundational logic that powers the application’s intelligence layer. That means:
+
+- Creating and querying relational tables that represent real loan and customer data using Python
+- Converting that data into **JSON documents** using **JSON Duality Views**
+- Using **MongoDB-style syntax** via Oracle’s Mongo API to interact with the same data — without needing to duplicate or move it
+
+These capabilities make Oracle Database 23ai a **developer-friendly**, **multi-model platform**. You’ll write less glue code, eliminate data movement, and stay focused on the real task: powering intelligent loan workflows.
+
+> 💡 Everything you implement here becomes the data foundation for Retrieval-Augmented Generation (RAG) and AI Vector Search in upcoming labs.
+
+Estimated Time: 30 minutes
+
+To get things started we invite you to watch this video and see the lab in action:
+
+ [](videohub:1_v685fi7r:medium)
+
+### Objectives
+
+- Connect to Oracle Database 23ai using Python
+- Create and query relational data
+- Use JSON Duality Views to work with relational tables as JSON
+- Query and update the same data using MongoDB-style syntax
+
+### Prerequisites
+
+This lab assumes you have:
+
+- An Oracle account with LiveLabs access
+- Completion of **Lab 1: Connect to the Development Environment**
+- Basic familiarity with Python and SQL
+
+
+## Task 1: Create a new Jupyter Notebook
+
+All of the coding examples will be executed in a new Jupyter Notebook.
+
+1. In **JupyterLab**, click the blue **+** to open the Launcher
+2. Start a new **Python (ipykernel)** notebook
+
+ 
+
+## Task 2: Connect to the database using Python
+
+In this first task, you will connect to an Oracle Database 23ai instance using Oracle's Python driver, `oracledb`. `oracledb` is available in PyPi (`pip install oracledb`) and supports in its latest version all of the advanced features of the Oracle Database, including JSON and VECTOR.
+
+1. In the newly created Jupyter Notebook, copy and paste the following code block into an empty cell. This code block imports the `oracledb` Python driver and other libraries that help us to securely read credentials from the environment variables.
+
+ ```python
+
+ import os
+ from dotenv import load_dotenv
+ import oracledb
+
+ load_dotenv()
+
+ username = os.getenv("USERNAME")
+ password = os.getenv("DBPASSWORD")
+ dsn = os.getenv("DBCONNECTION")
+
+ try:
+ connection = oracledb.connect(user=username, password=password, dsn=dsn)
+ print("Connection successful!")
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ cursor = connection.cursor()
+
+ ```
+
+2. Execute the cell by entering **shift + enter** or clicking on the play button.
+
+3. You should see a message that says "Connection successful!" in your notebook. If you do not, check the credentials and try again.
+
+ 
+
+>**Note:** The last line, `cursor = connection.cursor()`, creates a cursor object from the established Oracle database connection. A cursor acts as a control structure that enables the execution of SQL queries and retrieval of results from the database. It is essential for sending SQL commands, fetching data, and iterating through query results. We will be using the cursor object in later steps of this lab. The object persists in the notebook session, so you can use it in subsequent cells without re-establishing the connection.
+
+## Task 3: Create tables and insert data
+
+Now, that we have established a connection, we can start creating our tables and inserting some sample data. We will create two sample tables (`orders` and `customers`) in our database. We will also insert some sample data into these tables.
+
+1. In a new cell, enter the following code to create the `orders_demo` table and insert some sample data:
+
+ ```python
+
+ # Create a table to hold orders and insert some data
+ try:
+ with connection.cursor() as cursor:
+ cursor.execute("""
+ drop table if exists orders_demo
+ """)
+ cursor.execute("""
+ create table if not exists orders_demo
+ (id number generated by default on null as identity,
+ product_id number,
+ order_date timestamp,
+ customer_id number,
+ total_value number(6,2),
+ order_shipped boolean,
+ warranty interval year to month)""")
+ cursor.execute("""
+ insert into orders_demo (product_id, order_date, customer_id, total_value, order_shipped, warranty)
+ values
+ (12, systimestamp, 100001, 10.23, true, interval '2-0' year to month),
+ (234, systimestamp, 223223, 1200.00, false, interval '1-6' year to month),
+ (57, systimestamp, 238121, 110.1, True, interval '5-0' year to month),
+ (2, systimestamp, 78993, 20.50, null, interval '0-6' year to month)
+ """)
+ connection.commit()
+ print("Success!")
+ except oracledb.DatabaseError as e:
+ print(f"Error: {e}")
+
+ ```
+
+2. Let's now create some code that allows us to query our table.
+
+ ```python
+
+ def query_orders():
+ with connection.cursor() as cursor:
+ cursor.execute("select * from orders_demo")
+ rows = cursor.fetchall()
+ for row in rows:
+ print(row)
+
+ query_orders()
+
+ ```
+
+>**Note:** We are creating a function called `query_orders()` that will allow us to query our table. We can use the same function in one of the following tasks
+
+3. Run your code (**shift+enter**) and see what happens. You should get a list of all the orders in our table.
+
+ 
+
+4. Next, let's add another table `customers_demo` with some sample data. Copy & paste the following code in a **new cell** and run it.
+
+ ```python
+
+ # Create a table to hold customers and insert some data
+ try:
+ with connection.cursor() as cursor:
+ cursor.execute("""
+ drop table if exists customers_demo
+ """)
+ cursor.execute("""
+ create table if not exists customers_demo (
+ id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
+ first_name VARCHAR2(100),
+ last_name VARCHAR2(100),
+ email VARCHAR2(320),
+ address VARCHAR2(80),
+ phone_number VARCHAR2(20))
+ """)
+ cursor.execute("""
+ insert into customers_demo (id, first_name, last_name, email, address, phone_number)
+ values
+ (100001, 'Dan', 'Thompson', 'dt7889@gmail.com', '10 smith street', '34454-1667'),
+ (223223, 'John', 'Smith', 'jsmith@hotmail.com', 'the grove', '28902'),
+ (238121, 'Janet', 'White', 'jw123@gmail.com', 'apartment 256, 120 east street', '18092-7980'),
+ (78993, 'Sue', 'Gray', 'sue_gray@testmail.com', '2345 main street', '34454')
+ """)
+ connection.commit()
+ print("Success!")
+ except oracledb.DatabaseError as e:
+ print(f"Error: {e}")
+
+ ```
+
+5. As before, we want to create a function that allows us to query our new table. We will use a function called `query_customer`. Copy & paste the following code into a **new cell** and execute it.
+
+ ```python
+
+ def query_customers():
+ with connection.cursor() as cursor:
+ cursor.execute("select * from customers_demo")
+ rows = cursor.fetchall()
+ for row in rows:
+ print(row)
+ query_customers()
+
+ ```
+
+ 
+
+### **Task Summary**
+
+Congratulations! You successfully created two new tables with sample data using Python and Oracle Database.
+
+You also created a function that allows you to query your new table which we will use in some of the following tasks
+
+## Task 4: Create a JSON Duality View
+
+Next, we want to explore how we can use a **JSON Duality View** to query our new table. A JSON Duality View allows us to interact with data as JSON objects, i.e., data is stored as documents. Unlike a regular view, we can also update data in a JSON Duality View. Any updates will be reflected in our original relational tables. We will create a JSON Duality View using our newly created tables `customers_demo` and `orders_demo`.
+
+1. Before we create the **JSON Duality View**, we need to add some **constraints** to our new tables. Copy & paste the following code into a **new cell** and run it.
+
+ ```python
+
+ # Create required constraints to prepare JSON Duality View
+ try:
+ with connection.cursor() as cursor:
+ cursor.execute("""
+ alter table customers_demo add (constraint customers_pk primary key (id))
+ """)
+ cursor.execute("""
+ alter table orders_demo add (constraint orders_pk primary key (id))
+ """)
+ cursor.execute("""
+ alter table orders_demo add (constraint orders_fk FOREIGN KEY (customer_id) REFERENCES customers_demo (id))
+ """)
+ connection.commit()
+ print("All constraints created.")
+ except oracledb.DatabaseError as e:
+ print(f"Error: {e}")
+
+ ```
+
+ 
+
+2. Now we can create our **JSON Duality View**. Copy the following code into a new cell and run it.
+
+ ```python
+
+ # Create JSON Duality View
+ try:
+ with connection.cursor() as cursor:
+ cursor.execute("""
+ drop view if exists customers_dv
+ """)
+ cursor.execute("""
+ CREATE or REPLACE JSON RELATIONAL DUALITY VIEW customers_dv AS
+ customers_demo @insert @update @delete
+ {_id : id
+ FirstName : first_name
+ LastName : last_name
+ Email : email
+ Address : address
+ Phone : phone_number
+ orders : orders_demo @insert @update @delete
+ [ {OrderID : id
+ ProductID : product_id
+ OrderDate : order_date
+ TotalValue : total_value
+ OrderShipped : order_shipped
+ } ]
+ }
+ """)
+ connection.commit()
+ print("JSON Duality View created")
+ except oracledb.DatabaseError as e:
+ print(f"Error: {e}")
+
+ ```
+
+ 
+
+>💡 **JSON Duality Views** automatically maps relational columns to JSON documents (and vice versa) in the same table, letting you store data in a traditional schema but also access it as if it were a JSON object. So even though you’ve coded a JSON view in Python, you can switch over to standard SQL queries without duplicating data or maintaining extra structures. Super cool!
+
+3. Let's create a new function that allows us to query our new JSON Duality View. This time however, we will enhance our function to allow using input parameters. Instead of retrieving all rows, we want to write a function that returns only a specific row based on the first name of a customer. Copy the following code into a new cell and run it.
+
+ ```python
+
+ import json
+
+ def query_dv(first_name):
+ with connection.cursor() as cursor:
+ query = """
+ SELECT * FROM customers_dv c
+ WHERE JSON_EXISTS(c.data, '$[*]?(@.FirstName == $first_name)' PASSING :first_name AS "first_name")
+ """
+ cursor.execute(query, {"first_name": first_name})
+ rows = cursor.fetchall()
+ for row in rows:
+ raw_json = row[0]
+ try:
+ print(json.dumps(raw_json, default=str, indent=4))
+ except Exception as e:
+ print(f"Error formatting JSON: {e}")
+ print(raw_json)
+
+ query_dv("Dan")
+
+ ```
+
+ 
+
+ You notice that our code has some significant changes. We are now passing a parameter into our query, and we are also formatting the output of our query. Let's have a closer look:
+
+ 🔴 **`import json`** - This is a Python module that allows us to work with JSON. Remember: JSON Duality Views present data in document format, i.e., JSON.
+
+ 🔴 **`query_dv(first_name)`** - This is a function that takes in a parameter and returns the result of our query. We are passing in `first_name` as a parameter, which we can use to filter our results.
+
+ 🔴 **`...WHERE JSON_EXISTS...`** - This is an Oracle Database 23ai function called `JSON_EXISTS`, which allows us to check if a specific key exists in a JSON object. In this case, we are checking if the `first_name` key exists in our JSON document. Essentially, `JSON_EXISTS` function allows use to use SQL syntax to check if a key exists in a JSON object.
+
+ 🔴 **`json.dumps(raw_json, default=str, indent=4)`** - This is a Python function that formats our output. We are passing in the `raw_json` variable as an argument and formatting it with the `default=str` parameter.
+
+ 🔴 **`query_dv("Dan")`** - Here we are calling our query function again, but this time passing in the string `"Dan"` as a parameter. This will return all rows where `first_name` is equal to `"Dan"`. The result is displayed in JSON format.
+
+>**Note:** Notice that our output is a nicely formatted document that now not only includes our customer data but also all orders for that customer.
+
+## Task 5: Connect to the database using pymongo
+
+Next, we will connect to our database and query the data using a the Python driver `pymongo`. That way we can interact with Oracle Database 23ai using Mongo API which allows us to use the same syntax as MongoDB. We will also learn how to update our database using `pymongo` in a following task.
+
+1. Copy & paste the following code into a new cell and run it.
+
+ ```python
+
+ from pymongo import MongoClient
+
+ def mongo_connect():
+ try:
+ client = MongoClient(
+ os.getenv("MONGODBAPI")
+ )
+ db = client["admin"]
+ print("Connected using MongoAPI!")
+ return db
+ except Exception as e:
+ print(f"Connection failed: {e}")
+
+ mongo_connect()
+
+ ```
+
+ 
+
+
+## Task 6: Query data using Oracle's Mongo API
+
+Now, that we have established a connection to Oracle Database 23ai via Mongo API, let's try to query the database using MongoDB syntax. Let's write a function that will help us do this.
+
+1. Copy & paste the following code into a new cell and run it.
+
+ ```python
+
+ def get_mongo(first_name):
+ col = mongo_connect().CUSTOMERS_DV
+ mongo_data = col.find_one({"FirstName": first_name})
+ return mongo_data
+
+ get_mongo("Dan")
+
+ ```
+
+ 
+
+ As you can see, the result matches that of the SQL query (`query_dv()`), though the MongoDB syntax requires significantly less code.
+
+## Task 7: Update data using Oracle's Mongo API
+
+Next, let's update some data in our database using MongoDB syntax. Let's write a function that will help us do this.
+
+1. We want to change the email address of our customer "Dan" to "dant@aol.com". Copy & paste the following code into a **new cell** and run it.
+
+ ```python
+
+ def update_mongo():
+ col = mongo_connect().CUSTOMERS_DV
+ col.update_one({"FirstName": "Dan"}, {"$set": {"Email": "dant@aol.com"}})
+ return
+
+ update_mongo()
+
+ ```
+
+2. Now, let's run our function from task 5 to see if the data was actually updated. Copy the following code into a new cell and run it.
+
+ ```python
+
+ get_mongo("Dan")
+
+ ```
+
+ And indeed, we can see that the email address has been updated.
+
+
+ 
+
+
+3. What if we want to do something more complex, for example updating a nested field? For example, let's say we want to change TotalValue field. Copy the following code into a new cell and run it.
+
+ ```python
+
+ def update_mongo_order():
+ col = mongo_connect().CUSTOMERS_DV
+ col.update_one(
+ {
+ "FirstName": "Dan",
+ "orders.OrderID": 1.0
+ },
+ {
+ "$set":{"orders.$.TotalValue": 100}
+ }
+ )
+ return
+ update_mongo_order()
+
+ ```
+
+4. Let's check what happened by running a query on the JSON Duality view. Copy the following code into a new cell and run it.
+
+ ```python
+
+ get_mongo("Dan")
+
+ ```
+
+ 
+
+ You should see that the TotalValue field has been updated from 10.23 to 100.0.
+
+## Task 8: Query relational tables to verify updates made through JSON Duality View
+
+The final step in our basic coding tour with Python and the Oracle Database 23ai is to query the two relational tables we created earlier. We just updated the JSON Duality view, so let's run a query on it to see if the changes were reflected. Remember that we created two functions in the beginning of this lab: `query_customers()` and `query_orders()`. Let's use these functions to get our data from MongoDB and update it with the new email address.
+
+1. First, run the ``query_customers()` function in a new cell
+
+ ```python
+
+ query_customers()
+
+ ```
+
+ 
+
+ You can see that also in the relational `customers_demo` table, the email address has been updated.
+
+2. Next, run the `query_orders()` function in a new cell.
+
+ ```python
+
+ query_orders()
+
+ ```
+
+ 
+
+ You can see that also in the relational `orders_demo` table, the total value has been updated.
+
+3. Finally, let's create a new function that allows us to see both tables at once, i.e., we want to join `customers` and `orders` tables together. The function should also allow us to filter by the first name of the customer. Furthermore, the result should be nicely formatted in a table including column headers. We need to create a new cell with the following code:
+
+ ```python
+
+ import pandas as pd
+
+ def query_customers_with_orders(first_name):
+ with connection.cursor() as cursor:
+ query = """
+ SELECT *
+ FROM customers_demo c
+ JOIN orders_demo o ON c.id = o.customer_id
+ WHERE c.first_name = :first_name
+ """
+ cursor.execute(query, {"first_name": first_name})
+ rows = cursor.fetchall()
+ column_names = [desc[0] for desc in cursor.description]
+ df = pd.DataFrame(rows, columns=column_names)
+ return df
+
+ df = query_customers_with_orders("Dan")
+ df.head()
+
+ ```
+
+ 
+
+ As you can see we included some new features in our function. Let's have a closer look:
+
+ 🔴 **`import pandas as pd`** - This is a Python module that allows us to work with Pandas DataFrames. We will be using this module to format our output.
+
+ 🔴 **` column_names`** - This is a list of column names returned by our query which is a list of strings included in the cursor object returned by our query.
+
+ 🔴 **`df.head()`** - This is a method that returns that returns the result of the query including the column names.
+
+## Conclusion
+
+As a developer at Seer Holdings, you've just built the foundation for a GenAI-powered loan approval system. We learned how to use Python and Oracle's Python driver `oracledb` to interact with Oracle Database 23ai's new features. You learned how to user the `cursor` object to execute SQL queries. Using the `cursor` object, you created a **JSON Duality View** and you even used some JSON functions to query documents using SQL syntax. Then, you also learned how to connect to the database using `pymongo` and retrieve data from a table in the database using **MongoDB syntax**. You created functions to update the **JSON Duality View** and you learned how these updates are also reflected in the underlying relational database tables.
+
+This architecture eliminates the need for duplicating data across platforms and simplifies how developers build AI-ready applications. Whether you're calling SQL, working with JSON, or speaking Mongo, you're always working with a single source of truth inside the Oracle Database.
+
+In the next lab, you'll build on this foundation to implement Retrieval-Augmented Generation (RAG), create vector embeddings, and generate personalized loan recommendations with Oracle 23ai and OCI Generative AI.
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Kevin Lazarz
+* **Contributors** - Francis Regalado, Kamryn Vinson
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/click-streamlit.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/click-streamlit.png
new file mode 100644
index 000000000..33010d468
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/click-streamlit.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/connect.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/connect.png
new file mode 100644
index 000000000..3e585f753
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/connect.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/constraints.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/constraints.png
new file mode 100644
index 000000000..8b5c70086
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/constraints.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/dv.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/dv.png
new file mode 100644
index 000000000..996691f5f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/dv.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/join.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/join.png
new file mode 100644
index 000000000..eb5af50de
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/join.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-connect.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-connect.png
new file mode 100644
index 000000000..a75859922
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-connect.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query.png
new file mode 100644
index 000000000..c854fc6e1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query2.png
new file mode 100644
index 000000000..30b239cfe
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-query2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-update.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-update.png
new file mode 100644
index 000000000..abfc4a27a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/mongo-update.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/open-new-notebook.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/open-new-notebook.png
new file mode 100644
index 000000000..3749eb039
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/open-new-notebook.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-cust-update.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-cust-update.png
new file mode 100644
index 000000000..ad0224191
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-cust-update.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-customers.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-customers.png
new file mode 100644
index 000000000..52334a529
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-customers.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-dv.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-dv.png
new file mode 100644
index 000000000..67e1c99bc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-dv.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders-update.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders-update.png
new file mode 100644
index 000000000..b26e667b7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders-update.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders.png
new file mode 100644
index 000000000..c7dc88468
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/query-orders.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task3.png
new file mode 100644
index 000000000..c4e61c473
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task4-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task4-1.png
new file mode 100644
index 000000000..0c42fe0a7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task4-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task6.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task6.png
new file mode 100644
index 000000000..849f93bf0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task6.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-1.png
new file mode 100644
index 000000000..866ca127b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-2.png
new file mode 100644
index 000000000..6b4841f3f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-3.png
new file mode 100644
index 000000000..73a9b40bd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task7-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8-last.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8-last.png
new file mode 100644
index 000000000..807a70646
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8-last.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.2.png
new file mode 100644
index 000000000..e29d7cd2e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.png
new file mode 100644
index 000000000..e8507166f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/codingbasics/images/task8.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/connect-to-env.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/connect-to-env.md
new file mode 100644
index 000000000..44796e30e
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/connect-to-env.md
@@ -0,0 +1,80 @@
+# Connect to the Development Environment
+
+## Introduction
+
+In this short lab, you’ll launch the JupyterLab-based development environment used throughout the workshop. JupyterLab runs entirely in your browser and allows you to write and test Python code that interacts directly with Oracle Database 23ai.
+
+This is the same environment used by the SeerEquities data team to build the AI loan assistant.
+
+> 💡 You only need to complete this once. In the next labs, you'll jump straight into hands-on coding. Remember to come back to this lab in case you need you closed the browser window and need to access JupyterLab again.
+
+
+Estimated Time: 5 minutes
+
+To get things started we invite you to watch this video and see the lab in action:
+
+ [](videohub:1_t121gz5o:medium)
+
+### Objective
+
+- Access the JupyterLab environment
+- Log in using provided credentials
+- Get familiar with basic Jupyter features
+
+## Task 1: Login to JupyterLab
+
+1. In the top left of your lab page, click **View Login Info**.
+2. Copy the **Development IDE Login Password**.
+3. Click the **Start Development IDE** link.
+
+ 
+
+4. Paste in the password and click **Login**.
+
+ 
+
+You’re now in the development environment.
+
+## Task 2: Explore JupyterLab
+
+JupyterLab is where you’ll write, run, and test Python code that connects to Oracle Database 23ai. Here are the key parts:
+
+**File browser (1):** Use this panel to open notebooks, scripts, and other files. Right-click for actions like rename or delete.
+
+
+**Launcher:** From here, you can start:
+- **Python notebooks (2)** for running code
+- **Terminals (3)** ** for command-line tasks
+
+
+
+## Task 3: Working with Jupyter Notebooks
+
+You’ll use notebooks for every lab in this workshop. Each notebook is made up of **cells**:
+
+- **Markdown cells** hold instructions and explanations
+- **Code cells** contain executable Python
+
+To run a code cell:
+- Press **Shift + Enter**
+- Or click the **Run** button in the toolbar
+
+While a cell is running, you’ll see `[*]`. When it finishes, it changes to a number like `[3]`.
+
+
+
+> 🛠 If a cell throws an error, double-check the code or rerun the previous steps.
+
+
+## Conclusion
+
+You’ve now logged into the cloud-based development environment where all coding will take place.
+
+✅ You can access JupyterLab in your browser
+✅ You understand how to open and run notebooks
+✅ You’re ready to start interacting with Oracle Database 23ai
+
+## Acknowledgements
+* **Author** - Kamryn Vinson
+* **Contributors** - Linda Foinding, Francis Regalado, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/block.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/block.png
new file mode 100644
index 000000000..4f7f68297
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/block.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/dev-env.png
new file mode 100644
index 000000000..1e0837ad7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter.png
new file mode 100644
index 000000000..29b0703dc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/connect-to-env/images/jupyter.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/graph-answers.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/graph-answers.md
new file mode 100644
index 000000000..fb7068d4f
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/graph-answers.md
@@ -0,0 +1,349 @@
+# Code with Property Graph step-by-step
+
+## Introduction
+
+In this lab, you’ll dive into a coding challenge focused on Graph to enhance the SeerEquites Loan Management application.
+
+At SeerEquities, loan officers are always looking for ways to improve their decision-making processes.
+
+A loan officer has been tasked with evaluating a client’s eligibility for a mortgage. She needs to consider a number of factors, including the client’s credit score and their debt-to-income ratio. However, she often finds herself manually cross-referencing multiple charts and data tables to understand how these two factors interact, which is both time-consuming and prone to error.
+
+Her manager suggests that adding a graph to the decision page would make the process far more efficient. The graph would map loan options based on credit score on one axis and debt-to-income ratio on the other, allowing the loan officer to quickly see which loans are available for the client at a glance. This addition would save time, reduce complexity, and make it easier to identify the best loan options based on the client’s unique financial situation.
+
+The loan officers at SeerEquities believe that this new graph will not only speed up their decision-making but also improve accuracy and clarity when presenting loan options to clients.
+
+This is your opportunity to sharpen your skills with Oracle Graph and help create a solution that truly improves the way loan officers make decisions.
+
+Estimated Time: 60 minutes
+
+### Objectives
+
+In this lab, you will:
+* Enhance your understanding of Graph by applying it to a real-world developer coding challenge.
+* Gain hands-on experience with Graph and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+
+## Task 1: Challenge Requirements
+
+The loan officer needs to visualize additional data points in the decision-making process. Specifically, they want to display an additional graph that shows two key metrics: required credit score on one axis and debt-to-income ratio on the other.
+
+1. Update the Decision.py file to add functionality for an additional graph that displays the following metrics: Required Credit Score and Debt-to-Income Ratio (%). The graph should display scatter plots similar to the example provided below, Required Credit Score and Debt-to-Income Ratio (%) are plotted:
+
+ 
+
+2. Implement a dropdown that allows the user to select the new graph view.
+
+ 
+
+## Task 2: Modify the Decision.py File
+
+1. Click **Pages**.
+
+ 
+
+2. Select **Decision.py**.
+
+ 
+
+3. Copy the following code block and paste it at line 259 in the Decision.py file.
+
+ ````
+
+# --- Graph Visualization in Collapsible Section ---
+# Create a collapsible section in the Streamlit app with a magnifying glass icon and label for the dot plot
+with st.expander("🔍 View Dot Plot: Credit Score vs. Debt-to-Income Ratio", expanded=False):
+ # Start a try block to catch any errors that might occur during graph creation
+ try:
+ # **Set up the Graph
+ # Call the function to connect to the Oracle database
+ conn = get_db_connection()
+ # Check if the database connection was successful
+ if conn:
+ # Create a cursor object to execute SQL queries on the database
+ cursor = conn.cursor()
+
+
+ # Execute the graph query, passing the customer_id as a parameter
+ cursor.execute(graph_query, {'customer_id': customer_id})
+ # Fetch all the rows returned by the query
+ rs = cursor.fetchall()
+
+ # **Convert to Pandas DataFrame for Visualization**
+ # Get the column names from the query result description
+ column_names = [desc[0] for desc in cursor.description]
+ # Create a Pandas DataFrame from the query results with the column names
+ result_df = pd.DataFrame(rs, columns=column_names)
+
+ # Check if the DataFrame has any data (i.e., is not empty)
+ if not result_df.empty:
+ # Add a subheader in the Streamlit app to label the graph
+ st.subheader("Just Out Of Reach Loans for Customer")
+ # Create a new Matplotlib figure with a size of 12 inches wide by 8 inches tall
+ plt.figure(figsize=(12, 8))
+
+ # Color based on action needed (no legend)
+ # Initialize an empty list to store colors for each data point
+ colors = []
+ # Loop through each action needed in the DataFrame
+ for action in result_df['ACTION_NEEDED']:
+ # Check if the action is missing or empty
+ if pd.isna(action) or not action:
+ # If action is missing, use gray color for the point
+ colors.append('gray')
+ # Check if the action involves increasing the credit score
+ elif 'credit score' in action.lower():
+ # Use blue color for credit score-related actions
+ colors.append('blue')
+ # Check if the action involves debt-to-income ratio (DTI)
+ elif 'debt-to-income' in action.lower() or 'dti' in action.lower():
+ # Use red color for DTI-related actions
+ colors.append('red')
+ # Check if the action involves employment length
+ elif 'employment length' in action.lower():
+ # Use green color for employment length-related actions
+ colors.append('green')
+ # If action doesn’t match any known type, use gray color
+ else:
+ colors.append('gray')
+
+ # Scatter plot
+ # Create a scatter plot with DTI on the x-axis and required credit score on the y-axis
+ plt.scatter(
+ result_df[], # X-axis data: debt-to-income ratio from the DataFrame
+ result_df[], # Y-axis data: required credit score from the DataFrame
+ alpha=0.7, # Set transparency of points to 70% for better visibility
+ edgecolors=colors, # Set the edge colors of points based on action needed
+ linewidths=1.5, # Set the thickness of the point edges to 1.5
+ s=250 # Set the size of the scatter points to 250
+ )
+
+ # Set the label for the x-axis to "Debt-to-Income Ratio (%)"
+ plt.xlabel()
+ # Set the label for the y-axis to "Required Credit Score"
+ plt.ylabel()
+ # Set the title of the plot, including the customer ID
+ plt.title()
+
+ # Adjust x-axis limits based on DTI
+ # Calculate the minimum DTI value and subtract 5 for a buffer
+ min_dti = result_df[].min() - 5
+ # Calculate the maximum DTI value and add 5 for a buffer
+ max_dti = result_df[].max() + 5
+ # Set the x-axis limits to the calculated min and max DTI values
+ plt.xlim(min_dti, max_dti)
+
+ # Adjust y-axis limits based on required credit score
+ # Calculate the minimum credit score and subtract 20 for a buffer
+ min_credit = result_df[].min() - 20
+ # Calculate the maximum credit score and add 20 for a buffer
+ max_credit = result_df[].max() + 20
+ # Set the y-axis limits to the calculated min and max credit scores
+ plt.ylim(min_credit, max_credit)
+
+ # Annotate each point with Loan ID and Action Needed (manual positioning)
+ # Loop through each row in the DataFrame with an index
+ for i, row in result_df.iterrows():
+ # Get the action needed text, or use a default if it’s missing
+ action_text = row['ACTION_NEEDED'] if pd.notna(row['ACTION_NEEDED']) else "No action specified"
+ # If the action text is too long (over 39 characters), shorten it and add "..."
+ if len(action_text) > 39:
+ action_text = action_text[:36] + "..."
+ # Set the vertical offset for the annotation: 50 above for even indices, -50 below for odd
+ v_offset = 50 if i % 2 == 0 else -50
+ # Get the y-position of the point (required credit score)
+ y_pos = row[]
+ # Set the height of the annotation box for boundary checking
+ annotation_height = 50
+ # If the annotation would go above the max y-limit, move it below the point
+ if y_pos + v_offset + annotation_height > max_credit:
+ v_offset = -50 - annotation_height
+ # If the annotation would go below the min y-limit, move it above the point
+ elif y_pos + v_offset - annotation_height < min_credit:
+ v_offset = 50 + annotation_height
+ # Add an annotation to the point with loan details
+ plt.annotate(
+ f"Loan ID: {row['LOAN_ID']}\nDTI: {row[]}%\nReq. Credit: {row[]}\nAction: {action_text}", # Text to display
+ (row[], row[]), # Position of the point
+ textcoords="offset points", # Use offset points for positioning
+ xytext=(0, v_offset), # Offset the text by v_offset vertically
+ ha='center', # Center-align the text horizontally
+ fontsize=8, # Set the font size to 8
+ alpha=0.9 # Set the transparency of the text to 90%
+ )
+
+ ````
+ 
+
+4. Copy the graph query below. Paste the graph query in at line 272.
+ ````
+
+ # Define the SQL query to fetch data from the LOANS_GRAPH property graph
+ graph_query = """
+ SELECT * FROM GRAPH_TABLE (LOANS_GRAPH
+ MATCH (v IS CLIENTS) -[e1 IS client_to_application]-> (v1 IS LOAN_APPLICATIONS),
+ (v) -[e IS CLIENTS_TO_LOAN]-> (v2 IS MOCK_LOAN_DATA)
+ WHERE v.customer_id = :customer_id
+ COLUMNS (
+ v.customer_id AS customer_id,
+ v.credit_score AS customer_credit_score,
+ v2.credit_score AS required_credit_score,
+ v2.debt_to_income_ratio AS debt_to_income_ratio,
+ v1.total_debt AS total_debt,
+ v.income AS customer_income,
+ e.id AS edge_id,
+ e.action_needed AS action_needed,
+ v2.loan_id AS loan_id,
+ v2.income AS required_income,
+ v2.loan_type AS loan_type,
+ v2.time_to_close AS time_to_close
+ )
+ )
+ """
+
+ ````
+ 
+
+Edit the part of the script that edits the scatter plot. Change the X and Y axis of the graph to reflect the "DEBT\_TO\_INCOME\_RATIO" and "REQUIRED\_CREDIT\_SCRORE" requested by the loan officer
+
+5. Paste 'DEBT\_TO\_INCOME_RATIO' in the empty bracket at line 340 and 'REQUIRED\_CREDIT\_SCORE' in the empty bracket at line 341.
+
+ ````
+
+ 'DEBT_TO_INCOME_RATIO'
+
+ ````
+
+ ````
+
+ 'REQUIRED_CREDIT_SCORE'
+
+ ````
+ 
+
+6. Paste 'Debt-to-Income Ratio (%)' in the empty parentheses at line 349.
+
+ ````
+
+ 'Debt-to-Income Ratio (%)'
+
+ ````
+
+7. Paste 'Required Credit Score' in the empty parentheses at line 351.
+
+ ````
+
+ 'Required Credit Score'
+
+ ````
+
+8. Paste f'Loans Just Out of Reach for Customer ID {customer_id}' in the empty parentheses at line 353.
+
+ ````
+
+ f'Loans Just Out of Reach for Customer ID {customer_id}'
+
+ ````
+
+ 
+
+ 9. Paste 'DEBT\_TO\_INCOME\_RATIO' in the empty brackets at lines 357 and 359.
+
+ ````
+
+ 'DEBT_TO_INCOME_RATIO'
+
+ ````
+
+ 
+
+10. Paste 'REQUIRED\_CREDIT\_SCORE' in the empty brackets at lines 365 and 367.
+
+ ````
+
+ 'REQUIRED_CREDIT_SCORE'
+
+ ````
+
+ 
+
+11. Paste 'REQUIRED\_CREDIT\_SCORE' in the empty brackets at line 382.
+
+ ````
+
+ 'REQUIRED_CREDIT_SCORE'
+
+ ````
+
+ 
+
+12. Paste 'DEBT\_TO\_INCOME\_RATIO' and 'REQUIRED\_CREDIT\_SCORE' in the empty brackets at lines 393 and 394.
+
+ ````
+
+ 'DEBT_TO_INCOME_RATIO'
+
+ ````
+ ````
+
+ 'REQUIRED_CREDIT_SCORE'
+
+ ````
+ 
+
+13. Save the Decision.py file.
+
+ 
+
+## Task 3: Launch the Application
+
+1. Open the terminal.
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 4: View the Results
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Woods**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed. Click the **Navigate To Decisions** button.
+
+ 
+
+3. Expand the drop down to view the newly added graph.
+
+ 
+
+**Congratulations, you have successfully completed the Property Graph Challenge!** You have updated the Decision.py file to add functionality for an additional graph that displays the following metrics: Required Credit Score and Debt-to-Income Ratio (%).
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Author** - Kamryn Vinson
+* **Contributors** - Linda Foinding, Francis Regalado, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/259-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/259-code.png
new file mode 100644
index 000000000..f34ffb5c1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/259-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/272-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/272-code.png
new file mode 100644
index 000000000..202e7a998
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/272-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-1.png
new file mode 100644
index 000000000..384ac08a8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-2.png
new file mode 100644
index 000000000..a62c75c17
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-3.png
new file mode 100644
index 000000000..f9dd71a6c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-4.png
new file mode 100644
index 000000000..a46c3d094
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/3-to-5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/340-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/340-code.png
new file mode 100644
index 000000000..f67bb70bd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/340-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/349-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/349-code.png
new file mode 100644
index 000000000..010c17e62
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/349-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/353-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/353-code.png
new file mode 100644
index 000000000..0a3ba18b3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/353-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/357-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/357-code.png
new file mode 100644
index 000000000..fdb9732f4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/357-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/362-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/362-code.png
new file mode 100644
index 000000000..830c19c1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/362-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/365-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/365-code.png
new file mode 100644
index 000000000..ebfd74d3f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/365-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/370-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/370-code.png
new file mode 100644
index 000000000..59b285860
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/370-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/378-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/378-code.png
new file mode 100644
index 000000000..170cb4d59
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/378-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/382-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/382-code.png
new file mode 100644
index 000000000..228148643
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/382-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/393-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/393-code.png
new file mode 100644
index 000000000..bafdb7e8e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/393-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/395-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/395-code.png
new file mode 100644
index 000000000..3301378b0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/395-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/406-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/406-code.png
new file mode 100644
index 000000000..bc639405a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/406-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-url.png
new file mode 100644
index 000000000..6b899c244
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/dev-env.png
new file mode 100644
index 000000000..c94ae3c8c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-dropdown.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-dropdown.png
new file mode 100644
index 000000000..9c724df26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-dropdown.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-exercise.png
new file mode 100644
index 000000000..9d3fb5692
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/graph-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith-5-ai.png
new file mode 100644
index 000000000..98082ba13
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith.png
new file mode 100644
index 000000000..176e4090e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-ai.png
new file mode 100644
index 000000000..1273ce0ec
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-decision.png
new file mode 100644
index 000000000..671c26b18
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-graph.png
new file mode 100644
index 000000000..a1f87d2dd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods.png
new file mode 100644
index 000000000..18423309d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/login.png
new file mode 100644
index 000000000..0acc1ff72
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-answers/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/graph-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/graph-exercise.md
new file mode 100644
index 000000000..e8f5d2f53
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/graph-exercise.md
@@ -0,0 +1,122 @@
+# Code with Property Graph
+
+## Introduction
+
+**Welcome to the Code Property Graph Challenge!**
+
+In this lab, you’ll dive into a coding challenge focused on Graph to enhance the SeerEquites Loan Management application.
+
+At SeerEquities, loan officers are always looking for ways to improve their decision-making processes.
+
+A loan officer has been tasked with evaluating a client’s eligibility for a mortgage. She needs to consider a number of factors, including the client’s credit score and their debt-to-income ratio. However, she often finds herself manually cross-referencing multiple charts and data tables to understand how these two factors interact, which is both time-consuming and prone to error.
+
+Her manager suggests that adding a graph to the decision page would make the process far more efficient. The graph would map loan options based on credit score on one axis and debt-to-income ratio on the other, allowing the loan officer to quickly see which loans are available for the client at a glance. This addition would save time, reduce complexity, and make it easier to identify the best loan options based on the client’s unique financial situation.
+
+The loan officers at SeerEquities believe that this new graph will not only speed up their decision-making but also improve accuracy and clarity when presenting loan options to clients.
+
+This is your opportunity to sharpen your skills with Oracle Graph and help create a solution that truly improves the way loan officers make decisions.
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Lab 6b Step-by-step: Code Property Graph for step-by-step instructions.
+
+Good luck, and enjoy the process!
+
+Estimated Time: 30 minutes
+
+### Objectives
+* Enhance your understanding of Graph by applying it to a developer coding challenge.
+* Gain hands-on experience with Graph and refining application features to meet specific development requirements.
+
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+## Task 1: Challenge Requirements
+
+**About Property Graph**
+
+In Oracle Database 23ai we can create property graphs inside the database. These property graphs allow us to map the vertices and edges to new or existing tables, external tables, materialized views or synonyms to these objects inside the database. The property graphs are stored as metadata inside the database meaning they don't store the actual data. Rather, the data is still stored in the underlying objects and we use the SQL/PQG syntax to interact with the property graphs.
+
+Property graphs make the process of working with interconnected data, like identifying influencers in a social network, predicting trends and customer behavior, discovering relationships based on pattern matching and more by providing a more natural and efficient way to model and query them.
+
+**Coding Requirement**
+
+The loan officer is requesting an additional graph to be added to the decision page to visualize additional loan options based on credit score and debt-to-income ratio. Specifically, they want to display an additional graph that shows loan options based on two key metrics: required credit score on one axis and debt-to-income ratio on the other.
+
+1. Update the Decision.py file to add functionality for an additional graph that displays the following metrics: Required Credit Score and Debt-to-Income Ratio (%). The graph should display scatter plots similar to the example provided below, Required Credit Score and Debt-to-Income Ratio (%) are plotted:
+
+ 
+
+2. Implement a dropdown that allows the user to select the new graph view.
+
+ 
+
+## Task 2: Modify the Required File
+
+In this task, we will show you how to access the file needed to complete the challenge.
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Decision.py** file.
+
+ 
+
+3. After making the necessary changes in the Decision.py file to create an additional graph that displays the following metrics: Required Credit Score and Debt-to-Income Ratio (%), you will need to save the file.
+
+ 
+
+## Task 3: Launch the Application
+
+In this task, we will show you how to launch the application.
+
+1. Select the **Launcher** tab and open the **terminal**.
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 4: View the Results
+
+In this task, we will show you how to view the changes you made in the application.
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Woods**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the AI generated loan recommendations will be displayed. Click the **Navigate To Decisions** button.
+
+ 
+
+3. Expand the drop down to view the newly added graph.
+
+ 
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Author** - Kamryn Vinson
+* **Contributors** - Linda Foinding, Francis Regalado, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-url.png
new file mode 100644
index 000000000..6b899c244
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/dev-env.png
new file mode 100644
index 000000000..c94ae3c8c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-dropdown.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-dropdown.png
new file mode 100644
index 000000000..9c724df26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-dropdown.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-exercise.png
new file mode 100644
index 000000000..9d3fb5692
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/graph-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-ai.png
new file mode 100644
index 000000000..1273ce0ec
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-decision.png
new file mode 100644
index 000000000..671c26b18
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-graph.png
new file mode 100644
index 000000000..a1f87d2dd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods.png
new file mode 100644
index 000000000..18423309d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/login.png
new file mode 100644
index 000000000..0acc1ff72
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/graph-exercise/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/how-to.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/how-to.md
new file mode 100644
index 000000000..0f4285ff5
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/how-to.md
@@ -0,0 +1,304 @@
+# Hands On How-To’s
+
+## Introduction
+
+This lab guides you through spinning up and navigating a GenAI-powered loan approval application, designed to streamline the loan processing workflow and significantly reduce the time-consuming paperwork that currently takes months for Loan Officers to handle.
+
+Estimated Lab Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+* Begin the demo process of the hands_on loan officer approval use cases
+
+### Prerequisites
+
+This lab assumes you have:
+* Completed the Get Started lab
+* Successfully launched the demo environment
+
+## Task 1: Demo User with Good Credit
+
+In this first example, we'll navigate through this application to show you the first user being approved with good credit.
+
+1. Select **Dashboard** in the left navigation menu.
+
+ 
+
+2. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+3. This will display the customers loan application details. In approximately 15 seconds, the AI generated recommendations will be displayed.
+
+ 
+
+4. Copy the following prompt into the AI chatbot and press Enter.
+
+ ```
+
+ What would be the top 0% down payment loans?
+
+ ```
+ 
+
+5. Press the **Generate Finalized Decision PDF** button to save the AI responses and proceed to the final loan disposition.
+
+ 
+
+6. Select **Decision** in the left navigation menu.
+
+ 
+
+7. In the **Select Final Approved Loan Option** section, the graph options using Oracle 23ai Property Graph are displayed. This is where the loan officer could choose to request additional information in order to provide a slightly better loan. For this scenario, we will continue with selecting one of the suggested loans.
+
+ 
+
+8. Select the AI suggested loan with the lowest time to close. Since our customer wanted the lowest time to close, we would select loan number 3.
+
+ 
+
+9. Set the final loan status to **Approved**.
+
+ 
+
+10. Click the **Save Final Approval & Loan Status** button.
+
+ The loan status has been updated to 'Approved' and saved to the customer profile.
+
+ 
+
+11. Click the **Download Recommendation as PDF** button.
+
+ 
+
+12. Click **Download PDF**
+
+ 
+
+13. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+14. Navigate back to the **Dashboard** and expand **View Approved Customers**. We can see that James Smith has been removed from the Pending Review Loan Requests list and has been added to the Approved Loan Requests list.
+
+ 
+
+## Task 2: Demo User with Bad Credit
+
+1. Select **Dashboard** in the left navigation menu if you are not on the Dashboard page already.
+
+ 
+
+2. On the Dashboard page, from the pending review list, select the Customer ID for **James Woods**.
+
+ 
+
+3. This will display the customers loan application details. In approximately 15 seconds, the AI generated recommendations will be displayed.
+
+ 
+
+4. Press the **Generate Finalized Decision PDF** button to save the AI responses and proceed to the final loan disposition.
+
+ 
+
+5. Select **Decision** in the left navigation menu.
+
+ 
+
+6. Click the **Save Final Approval & Loan Status** button.
+
+ The loan status has been updated to 'Denied' and saved to the customer profile.
+
+ 
+
+7. Click the **Download Recommendation as PDF** button.
+
+ 
+
+8. Click **Download PDF**
+
+ 
+
+9. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+10. Navigate back to the **Dashboard** and expand **View Denied Customers**. We can see that James Woods has been removed from the Pending Review Loan Requests list and added to the Denied Loan Requests list.
+
+ 
+
+
+## Task 3: Opportunity Zone User with Low Income Good Credit
+
+1. Select **Dashboard** in the left navigation menu if you are not on the Dashboard page already.
+
+ 
+
+2. On the Dashboard page, from the pending review list, select the Customer ID for **Evan Burton**.
+
+ 
+
+3. This will display the customers loan application details. In approximately 15 seconds, the AI generated recommendations will be displayed.
+
+ 
+
+4. Press the **Generate Finalized Decision PDF** button to save the AI responses and proceed to the final loan disposition.
+
+ 
+
+5. Select **Decision** in the left navigation menu.
+
+ 
+
+6. In the **Select Final Approved Loan Option** section, the graph options using Oracle 23ai Property Graph are displayed. This is where the loan officer could choose to request additional information in order to provide a slightly better loan. For this scenario, we will continue with selecting one of the suggested loans.
+
+ 
+
+
+7. Select the AI suggested opportunity zone loan with the lowest time to close. In our case, we would select loan number 1.
+
+ 
+
+8. Set the final loan status to **Approved**.
+
+ 
+
+9. Click the **Save Final Approval & Loan Status** button.
+
+ The loan status has been updated to 'Approved' and saved to the customer profile.
+
+ 
+
+10. Click the **Download Recommendation as PDF** button.
+
+ 
+
+11. Click **Download PDF**
+
+ 
+
+12. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+13. Navigate back to the **Dashboard** and expand **View Approved Customers**. We can see that Evan Burton has been removed from the Pending Review Loan Requests list and has been added to the Approved Loan Requests list.
+
+ 
+
+## Task 4: First Time Home Buyer Good Credit
+
+1. Select **Dashboard** in the left navigation menu if you are not on the Dashboard page already.
+
+ 
+
+2. On the Dashboard page, from the pending review list, select the Customer ID for **Alex Anderson**.
+
+ 
+
+3. This will display the customers loan application details. In approximately 15 seconds, the AI generated recommendations will be displayed.
+
+ 
+
+4. Copy the following prompt into the AI chatbot to see the lowest down payment. Press Enter.
+
+ ```
+
+ Show me the lowest down payment.
+
+ ```
+ 
+
+ Copy the following prompt into the AI chatbot to see the lowest monthly payment. Press Enter.
+ ```
+
+ Show me the lowest monthly payment.
+
+ ```
+ 
+
+5. Press the **Generate Finalized Decision PDF** button to save the AI responses and proceed to the final loan disposition.
+
+ 
+
+6. Select **Decision** in the left navigation menu.
+
+ 
+
+6. In the **Select Final Approved Loan Option** section, the graph options using Oracle 23ai Property Graph are displayed. This is where the loan officer could choose to request additional information in order to provide a slightly better loan. For this scenario, we will continue with selecting one of the suggested loans.
+
+ 
+
+8. Since the AI suggested the first time home owner loan with the lowest monthly payment, we would select loan number 1. This loan is the most suitable option for Michael given his financial profile and loan eligibility.
+
+ 
+
+9. Set the final loan status to **Approved**.
+
+ 
+
+9. Click the **Save Final Approval & Loan Status** button.
+
+ The loan status has been updated to 'Approved' and saved to the customer profile.
+
+ 
+
+10. Click the **Download Recommendation as PDF** button.
+
+ 
+
+11. Click **Download PDF**
+
+ 
+
+12. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+13. Navigate back to the **Dashboard** and expand **View Approved Customers**. We can see that Alex Anderson has been removed from the Pending Review Loan Requests list and has been added to the Approved Loan Requests list.
+
+ 
+
+## Task 5: Edit Customer Details
+For this task, we will edit a customers details.
+
+1. Select **Dashboard** in the left navigation menu if you are not on the Dashboard page already.
+
+ 
+
+2. On the Dashboard page, expand **View Denied Customers**. From the Denied Loan Requests list, select the customer ID for **James Woods**.
+
+ 
+
+3. On the Customer Details page, expand **Customer Details**.
+
+ 
+
+5. Let's change James' loan status from Denied back to **Pending Review**.
+
+ 
+
+6. Click **Save Customer Details**.
+
+ 
+
+7. Navigate back to the Dashboard.
+
+ 
+
+8. We can see that James Woods has been removed from the Denied Loan Requests list and has been added back to the Pending Review Loan Requests list.
+
+ 
+
+
+## Learn More
+
+*(optional - include links to docs, white papers, blogs, etc)*
+
+* [URL text 1](http://docs.oracle.com)
+* [URL text 2](http://docs.oracle.com)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/click-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/click-dashboard.png
new file mode 100644
index 000000000..d8d71547c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/click-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/customer-details.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/customer-details.png
new file mode 100644
index 000000000..1f0ecfc3f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/customer-details.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-ai.png
new file mode 100644
index 000000000..93b9dcbdb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approve.png
new file mode 100644
index 000000000..b20e43513
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approved-list.png
new file mode 100644
index 000000000..c6a3941c0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-decision.png
new file mode 100644
index 000000000..7185d55f3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download-pdf.png
new file mode 100644
index 000000000..498944790
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download.png
new file mode 100644
index 000000000..2e02b83fc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-pdf.png
new file mode 100644
index 000000000..ec60b46ed
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-save.png
new file mode 100644
index 000000000..71af9cb1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-final-loan.png
new file mode 100644
index 000000000..874bf47a9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-loan.png
new file mode 100644
index 000000000..039492648
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton.png
new file mode 100644
index 000000000..83ff80051
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/evan-burton.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-ai.png
new file mode 100644
index 000000000..66b9c804b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approve.png
new file mode 100644
index 000000000..84a31772f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approved-list.png
new file mode 100644
index 000000000..0a3bd52c4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-chatbot.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-chatbot.png
new file mode 100644
index 000000000..aed48e729
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-chatbot.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-decision.png
new file mode 100644
index 000000000..a3f9857a1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download-pdf.png
new file mode 100644
index 000000000..91a301d1c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download.png
new file mode 100644
index 000000000..985d17fbf
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-pdf.png
new file mode 100644
index 000000000..137f24347
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-save.png
new file mode 100644
index 000000000..75810021a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-final-loan.png
new file mode 100644
index 000000000..39a3e6531
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-loan.png
new file mode 100644
index 000000000..17430b952
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith.png
new file mode 100644
index 000000000..569e764c8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-ai.png
new file mode 100644
index 000000000..f657e2d33
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-decision.png
new file mode 100644
index 000000000..c96420154
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-denied-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-denied-list.png
new file mode 100644
index 000000000..6fd3376af
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-denied-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download-pdf.png
new file mode 100644
index 000000000..2cca854ea
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download.png
new file mode 100644
index 000000000..d6e41d5b8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pdf.png
new file mode 100644
index 000000000..74a80bdea
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pending-review-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pending-review-list.png
new file mode 100644
index 000000000..ba82f0a69
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-pending-review-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-save.png
new file mode 100644
index 000000000..237b4426c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods.png
new file mode 100644
index 000000000..28b7dc575
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-ai.png
new file mode 100644
index 000000000..5225f56af
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approve.png
new file mode 100644
index 000000000..9314d4e79
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approved-list.png
new file mode 100644
index 000000000..233a2c034
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot1.png
new file mode 100644
index 000000000..5388887dc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot2.png
new file mode 100644
index 000000000..796001c26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-chatbot2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-decision.png
new file mode 100644
index 000000000..39c4a0507
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-pdf.png
new file mode 100644
index 000000000..547dbfa9c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-save.png
new file mode 100644
index 000000000..39652ed14
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-final-loan.png
new file mode 100644
index 000000000..84a62a8c8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-loan.png
new file mode 100644
index 000000000..c9b49434d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos.png
new file mode 100644
index 000000000..0eee059ba
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/michael-ramos.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-evan-burton-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-evan-burton-pdf.png
new file mode 100644
index 000000000..da8b84905
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-evan-burton-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-smith-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-smith-pdf.png
new file mode 100644
index 000000000..6de02d70d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-smith-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-woods-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-woods-pdf.png
new file mode 100644
index 000000000..a233fa1d5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-james-woods-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-michael-ramos-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-michael-ramos-pdf.png
new file mode 100644
index 000000000..7f6c591f5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/open-michael-ramos-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/pending-review.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/pending-review.png
new file mode 100644
index 000000000..df079f8f9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/pending-review.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample1.png
new file mode 100644
index 000000000..2d9ad4738
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample2.png
new file mode 100644
index 000000000..145c9d39c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/sample2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/save-details.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/save-details.png
new file mode 100644
index 000000000..9b228f22d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/save-details.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-dashboard.png
new file mode 100644
index 000000000..2b355708b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-james-woods-denied.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-james-woods-denied.png
new file mode 100644
index 000000000..58679b9d2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/how-to/images/select-james-woods-denied.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/images/vectors-diagram.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/images/vectors-diagram.png
new file mode 100644
index 000000000..0156e2d8f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/images/vectors-diagram.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction-event.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction-event.md
new file mode 100644
index 000000000..801e635f1
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction-event.md
@@ -0,0 +1,78 @@
+# Introduction
+
+## About this Workshop
+
+SeerEquities, a fictional financial services firm, is under pressure to speed up loan approvals without sacrificing accuracy or compliance. Their data team is reimagining the loan approval process using Oracle Database 23ai—combining AI with the database to power faster, more contextual decisions.
+
+In this hands-on workshop, you’ll step into the role of **a SeerEquities developer** helping build a GenAI-powered loan approval system. **Your goal:** combine enterprise data with large language models (LLMs) to generate personalized recommendations, answer customer questions, and automate financial workflows—all inside Oracle Database 23ai.
+
+You’ll learn how to:
+
+* ✅ Use **native Vector Search** to query structured data, documents, and unstructured text—without moving data across systems
+* ✅ Combine **LLMs with enterprise data** using Retrieval-Augmented Generation (RAG)
+* ✅ Automate loan workflows using **JSON Duality Views** and Oracle’s **Mongo API**
+
+By the end of this workshop, you’ll understand how Oracle Database 23ai helps companies like SeerEquities:
+
+* ✅ Accelerate decisions with centralized, AI-ready data
+* ✅ Build intelligent apps with zero external vector infrastructure
+* ✅ Deliver governed, context-aware answers using your own data
+
+**Start building where your data already lives—with Oracle Database 23ai.**
+
+### 🔧 What You’ll Do
+
+You’ll work through five interactive labs:
+
+- **Lab 1** – Connect to the cloud-based development environment (JupyterLab)
+- **Lab 2** – Learn Python basics and explore Oracle’s JSON Duality Views + Mongo APIs
+- **Lab 3** – Build a complete loan recommendation system using Oracle Database 23ai and GenAI
+- **Lab 4a/4b** – Complete a coding challenge using AI Vector Search
+- **Lab 5** – (Optional) Try running the app in your own local environment
+
+Each lab builds toward a real-world AI use case: generating accurate, personalized loan recommendations from customer data—with secure, governed access.
+
+
+### ▶️ Watch the Demo
+
+ [](videohub:1_mg30brw3:medium)
+
+
+### 🚀 Ready to Start?
+
+Jump into **Lab 1** to launch your JupyterLab environment.
+
+From there, you’ll:
+
+* ✅ Connect to Oracle Database 23ai using Python
+* ✅ Run SQL and JSON queries
+* ✅ Implement an RAG process
+
+You can also explore and experiment beyond the guided steps—modify code, try your own queries, or build on the application logic. By the final lab, you’ll have built the core of the SeerEquities AI Loan Assistant, ready to support real-time loan approvals.
+
+### Objectives
+
+* Understand how Oracle Database 23ai powers real-world AI applications
+* Learn Python integration using `oracledb` and `pymongo`
+* Build, vectorize, and search embedded documents with AI Vector Search
+* Implement Retrieval-Augmented Generation (RAG) using native database features
+* Apply these tools to a financial loan approval scenario
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle account to submit your a LiveLabs Sandbox reservation.
+
+* Basic knowledge of Python.
+
+* Familiarity with SQL and Oracle Database is helpful, but not required
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado, Kamryn Vinson
+* **Contributors** - Kevin Lazarz, Eddie Ambler, Ramona Magadan, Rahul Tasker
+* **Last Updated By/Date** - Linda Foinding, July 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction.md
new file mode 100644
index 000000000..13eb47148
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction.md
@@ -0,0 +1,91 @@
+# Introduction
+
+## About this Workshop
+
+**Data is more than an asset—it’s the engine behind every smart decision, risk calculation, and growth strategy. From real-time decision-making to risk management and innovation, success hinges on how well you harness it.**
+
+Generative AI and Oracle Database 23ai makes it possible to unlock deeper insights, faster—directly within your database.
+
+In this hands-on workshop, you’ll build a finance-focused GenAI solution using Oracle Database 23ai.
+
+To get things started we invite you to watch the introduction video to see the demo in action:
+
+[](videohub:1_mg30brw3:medium)
+
+You will:
+ * Use **native Vector Search** to query and analyze structured data, documents, and images—without moving data across platforms.
+
+ * Combine your **enterprise data with large language models (LLMs)** using Retrieval-Augmented Generation (RAG) to answer natural language questions with context-aware accuracy.
+
+ * Automate real-world financial workflows, like loan approvals, by **embedding and querying unstructured data** in real time.
+
+By the end of this workshop, you’ll understand how Oracle Database 23ai helps financial organizations:
+
+ * ✅ Accelerate time-to-insight with centralized, AI-ready data
+
+ * ✅ Build intelligent apps without specialized AI infrastructure
+
+ * ✅ Drive data-driven decisions with consistent, governed access
+
+
+**Start building where your data already lives—with Oracle Database 23ai.**
+
+**Your next breakthrough is just a lab away!**
+
+
+#### ➡️ **Start with the demo!**
+
+Check out the demo to see how Generative AI and Vector Search in the database, can operate against multiple types of data—empowering you to build real applications and make faster, smarter decisions. The best part? **No setup required**—just start with Lab 1 and follow the guide. You can explore guided use cases or experiment on your own using the demo application.
+
+#### ➡️ **Start coding!**
+
+Lab 2 describes how to get access to our browser-based development environment. Make sure to check it out before continuing to Lab 3 and 4, where you will get hands-on and start interacting with Python with Oracle Database 23ai:
+
+ * ✅ Connect to the database using Python
+
+ * ✅ Run SQL queries with Python
+
+ * ✅ Create JSON Duality Views
+
+ * ✅ Connect to the database using a Mongo API driver
+
+ * ✅ Use the Mongo API to query and update data
+
+ * ✅ Implement AI Vector Search
+
+In lab 4, you will learn how to **implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai.**
+
+#### ➡️ **Start experimenting!**
+
+You can also experiment with the code in your own environment. The workshop environment is flexible and allows you try out different things: Start building your own version of the loan approval application!
+
+### Objectives
+
+* Learn how Oracle Database 23ai capabilities can be used to automate and enhance the loan approval process
+
+* Start coding with Python and Oracle's Python driver `oracledb`
+
+* Learn how to implement and interact with Oracle Database 23ai's new features using Python
+
+* Implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai
+
+* Try a coding challenge and implement a solution using AI Vector Search
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle account to submit your a LiveLabs Sandbox reservation.
+
+* Basic knowledge of Python.
+
+* Basic knowledge of Oracle Database, i.e., how to run queries.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado, Kamryn Vinson
+* **Contributors** - Kevin Lazarz, Eddie Ambler, Ramona Magadan, Mark Nelson, Andy Tael, Anders Swanson, Rahul Tasker
+* **Last Updated By/Date** - Linda Foinding, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction_temp.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction_temp.md
new file mode 100644
index 000000000..f7c394b0c
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction/introduction_temp.md
@@ -0,0 +1,85 @@
+# Introduction
+
+## About this Workshop
+
+In this workshop, you will build a GenAI-powered loan approval app using Oracle Autonomous Database and Oracle Database 23ai.
+
+The demo shows how a loan officer uses Generative AI, Vector Search, and Graph analytics to evaluate real applications and streamline decisions. No setup required—just start with Lab 1 and follow the guide. You can explore guided use cases or experiment on your own.
+
+In the hands-on portion, you will learn how to use Python with Oracle Database 23ai:
+
+* Connect to the database using Python
+
+* Run SQL queries with Python
+
+* Create JSON Duality Views
+
+* Use the Mongo API to query and update data
+
+* Implement AI Vector Search
+
+In the lab 3, you will learn how to implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai.
+
+To get things started we invite you to watch the introduction video to see the demo in action:
+
+ [](videohub:1_mg30brw3:large)
+
+**About Oracle AI Vector Search**
+
+Oracle AI Vector Search is a feature of Oracle Database 23ai that enables efficient searching of AI-generated vectors stored in the database. It supports fast search using various indexing strategies and can handle massive amounts of vector data. This makes it possible for Large Language Models (LLMs) to query private business data using a natural language interface, helping them provide more accurate and relevant results. Additionally, AI Vector Search allows developers to easily add semantic search capabilities to both new and existing applications.
+
+**About Generative artificial intelligence (AI)**
+
+Generative AI excels at creating text responses based on large language models (LLMs) where the AI is trained on a massive number of data points. The generated text is often easy to read and provides detailed responses that are broadly applicable to the questions asked of the software, often called prompts.
+
+The following diagram shows a VERY high-level overview of how you would create a chatbot application that can use an LLM in combination with private company data to answer questions specific to YOUR data. This process is called Retrieval Augmented Generation, or RAG.
+
+
+
+**About Retrieval-augmented generation (RAG)**
+
+RAG provides a way to optimize the output of an LLM with targeted information without modifying the underlying model itself; that targeted information can be more up-to-date than the LLM as well as specific to a particular organization and industry. That means the generative AI system can provide more contextually appropriate answers to prompts as well as base those answers on extremely current data.
+
+**About Property Graph**
+
+In Oracle Database 23ai we can create property graphs inside the database. These property graphs allow us to map the vertices and edges to new or existing tables, external tables, materialized views or synonyms to these objects inside the database. The property graphs are stored as metadata inside the database meaning they don't store the actual data. Rather, the data is still stored in the underlying objects and we use the SQL/PQG syntax to interact with the property graphs.
+
+Property graphs make the process of working with interconnected data, like identifying influencers in a social network, predicting trends and customer behavior, discovering relationships based on pattern matching and more by providing a more natural and efficient way to model and query them.
+
+**About JSON Duality View**
+
+JSON Relational Duality is a landmark capability in Oracle Database 23ai, providing game-changing flexibility and simplicity for Oracle Database developers. This feature overcomes the historical challenges developers have faced when building applications using the relational or document models.
+
+JSON Relational Duality helps to converge the benefits of both document and relational worlds. Developers now get the flexibility and data access benefits of the JSON document model, plus the storage efficiency and power of the relational model. The new feature enabling this functionality is JSON Relational Duality View
+
+
+
+### Objectives
+
+This demo/workshop will show you how to automate and enhance the loan approval process using Oracle Database 23ai. Through hands-on labs and technical walkthroughs, you will embed 23ai capabilities into a custom web application.
+You will work with features such as AI Vector Search, Property Graph, and JSON Duality Views to:
+
+* Ask natural language questions about an applicant’s financial history
+
+* Track loan approval status and update application records
+
+* Generate PDF reports summarizing loan decisions
+
+* Analyze relationships and trends in applicant data using Graph
+
+
+By building these capabilities yourself, you will learn how to combine AI-driven insights with Oracle’s data tools to streamline real-world financial workflows.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle account
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Otis Barr, Ramona Magadan, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/images/vectors-diagram.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/images/vectors-diagram.png
new file mode 100644
index 000000000..0156e2d8f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/images/vectors-diagram.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction.md
new file mode 100644
index 000000000..438fec15b
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction.md
@@ -0,0 +1,68 @@
+# Introduction
+
+## About this Workshop
+
+In this workshop, you will build a GenAI app on Oracle Database 23ai.
+
+Estimated time: 2-3 hours
+
+#### ➡️ **Start with the demo!**
+
+Check out the demo to see how Generative AI and Vector Search in the database, can operate against multiple types of data—empowering you to build real applications and make faster, smarter decisions. The best part? **No setup required**—just start with Lab 1 and follow the guide. You can explore guided use cases or experiment on your own using the demo application.
+
+#### ➡️ **Start coding!**
+
+Lab 2 describes how to get access to our browser-based development environment. Make sure to check it out before continuing to Lab 3 and 4, where you will get hands-on and start interacting with Python with Oracle Database 23ai:
+
+✅ Connect to the database using Python
+
+✅ Run SQL queries with Python
+
+✅ Create JSON Duality Views
+
+✅ Connect to the database using a Mongo API driver
+
+✅ Use the Mongo API to query and update data
+
+✅ Implement AI Vector Search
+
+In lab 4, you will learn how to **implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai.**
+
+#### ➡️ **Start experimenting!**
+
+You can also experiment with the code in your own environment. The workshop environment is flexible and allows you try out different things: Start building your own version of the loan approval application!
+
+To get things started we invite you to watch the introduction video to see the demo in action:
+
+ [](videohub:1_mg30brw3:medium)
+
+### Objectives
+
+* Learn how Oracle Database 23ai capabilities can be used to automate and enhance the loan approval process
+
+* Start coding with Python and Oracle's Python driver `oracledb`
+
+* Learn how to implement and interact with Oracle Database 23ai's new features using Python
+
+* Implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai
+
+* Try a coding challenge and implement a solution using AI Vector Search
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle account to submit your a LiveLabs Sandbox reservation.
+
+* Basic knowledge of Python.
+
+* Basic knowledge of Oracle Database, i.e., how to run queries.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Francis Regalado, Linda Foinding, Kamryn Vinson
+* **Contributors** - Kevin Lazarz, Eddie Ambler, Otis Barr, Ramona Magadan
+* **Last Updated By/Date** - Linda Foinding, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction_temp.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction_temp.md
new file mode 100644
index 000000000..f7c394b0c
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/introduction_spring/introduction_temp.md
@@ -0,0 +1,85 @@
+# Introduction
+
+## About this Workshop
+
+In this workshop, you will build a GenAI-powered loan approval app using Oracle Autonomous Database and Oracle Database 23ai.
+
+The demo shows how a loan officer uses Generative AI, Vector Search, and Graph analytics to evaluate real applications and streamline decisions. No setup required—just start with Lab 1 and follow the guide. You can explore guided use cases or experiment on your own.
+
+In the hands-on portion, you will learn how to use Python with Oracle Database 23ai:
+
+* Connect to the database using Python
+
+* Run SQL queries with Python
+
+* Create JSON Duality Views
+
+* Use the Mongo API to query and update data
+
+* Implement AI Vector Search
+
+In the lab 3, you will learn how to implement a working example of retrieval-augmented generation (RAG) using Oracle Database 23ai.
+
+To get things started we invite you to watch the introduction video to see the demo in action:
+
+ [](videohub:1_mg30brw3:large)
+
+**About Oracle AI Vector Search**
+
+Oracle AI Vector Search is a feature of Oracle Database 23ai that enables efficient searching of AI-generated vectors stored in the database. It supports fast search using various indexing strategies and can handle massive amounts of vector data. This makes it possible for Large Language Models (LLMs) to query private business data using a natural language interface, helping them provide more accurate and relevant results. Additionally, AI Vector Search allows developers to easily add semantic search capabilities to both new and existing applications.
+
+**About Generative artificial intelligence (AI)**
+
+Generative AI excels at creating text responses based on large language models (LLMs) where the AI is trained on a massive number of data points. The generated text is often easy to read and provides detailed responses that are broadly applicable to the questions asked of the software, often called prompts.
+
+The following diagram shows a VERY high-level overview of how you would create a chatbot application that can use an LLM in combination with private company data to answer questions specific to YOUR data. This process is called Retrieval Augmented Generation, or RAG.
+
+
+
+**About Retrieval-augmented generation (RAG)**
+
+RAG provides a way to optimize the output of an LLM with targeted information without modifying the underlying model itself; that targeted information can be more up-to-date than the LLM as well as specific to a particular organization and industry. That means the generative AI system can provide more contextually appropriate answers to prompts as well as base those answers on extremely current data.
+
+**About Property Graph**
+
+In Oracle Database 23ai we can create property graphs inside the database. These property graphs allow us to map the vertices and edges to new or existing tables, external tables, materialized views or synonyms to these objects inside the database. The property graphs are stored as metadata inside the database meaning they don't store the actual data. Rather, the data is still stored in the underlying objects and we use the SQL/PQG syntax to interact with the property graphs.
+
+Property graphs make the process of working with interconnected data, like identifying influencers in a social network, predicting trends and customer behavior, discovering relationships based on pattern matching and more by providing a more natural and efficient way to model and query them.
+
+**About JSON Duality View**
+
+JSON Relational Duality is a landmark capability in Oracle Database 23ai, providing game-changing flexibility and simplicity for Oracle Database developers. This feature overcomes the historical challenges developers have faced when building applications using the relational or document models.
+
+JSON Relational Duality helps to converge the benefits of both document and relational worlds. Developers now get the flexibility and data access benefits of the JSON document model, plus the storage efficiency and power of the relational model. The new feature enabling this functionality is JSON Relational Duality View
+
+
+
+### Objectives
+
+This demo/workshop will show you how to automate and enhance the loan approval process using Oracle Database 23ai. Through hands-on labs and technical walkthroughs, you will embed 23ai capabilities into a custom web application.
+You will work with features such as AI Vector Search, Property Graph, and JSON Duality Views to:
+
+* Ask natural language questions about an applicant’s financial history
+
+* Track loan approval status and update application records
+
+* Generate PDF reports summarizing loan decisions
+
+* Analyze relationships and trends in applicant data using Graph
+
+
+By building these capabilities yourself, you will learn how to combine AI-driven insights with Oracle’s data tools to streamline real-world financial workflows.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle account
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Otis Barr, Ramona Magadan, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/272-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/272-code.png
new file mode 100644
index 000000000..6a59a5921
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/272-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-1.png
new file mode 100644
index 000000000..384ac08a8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-2.png
new file mode 100644
index 000000000..a62c75c17
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-3.png
new file mode 100644
index 000000000..f9dd71a6c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-4.png
new file mode 100644
index 000000000..a46c3d094
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/3-to-5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/353-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/353-code.png
new file mode 100644
index 000000000..0a3ba18b3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/353-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/362-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/362-code.png
new file mode 100644
index 000000000..830c19c1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/362-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/370-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/370-code.png
new file mode 100644
index 000000000..59b285860
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/370-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/378-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/378-code.png
new file mode 100644
index 000000000..170cb4d59
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/378-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/395-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/395-code.png
new file mode 100644
index 000000000..3301378b0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/395-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/406-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/406-code.png
new file mode 100644
index 000000000..bc639405a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/406-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/all-customers.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/all-customers.png
new file mode 100644
index 000000000..7847e4b4c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/all-customers.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/average-age.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/average-age.png
new file mode 100644
index 000000000..c24d0b305
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/average-age.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-dropdown.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-dropdown.png
new file mode 100644
index 000000000..9c724df26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-dropdown.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-exercise.png
new file mode 100644
index 000000000..9d3fb5692
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/graph-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith-5-ai.png
new file mode 100644
index 000000000..98082ba13
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith.png
new file mode 100644
index 000000000..176e4090e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-ai.png
new file mode 100644
index 000000000..1273ce0ec
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-graph.png
new file mode 100644
index 000000000..adfae9423
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods.png
new file mode 100644
index 000000000..cba8dbfc8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/json_hackaton.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/json_hackaton.png
new file mode 100644
index 000000000..b9ee44122
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/json_hackaton.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/login.png
new file mode 100644
index 000000000..93ca6436b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/specific-age.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/specific-age.png
new file mode 100644
index 000000000..8decb30f6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/images/specific-age.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/json-answers.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/json-answers.md
new file mode 100644
index 000000000..fd17c36ab
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-answers/json-answers.md
@@ -0,0 +1,146 @@
+# Code with JSON Duality Views step-by-step
+
+## Introduction
+
+This step-by-step guide will walk you through the necessary updates, providing solutions and insights to help you fully understand how to utilize JSON duality views in a practical scenario.
+
+At SeerEquites, the analytics department has flagged an issue with incorrect customer age data, affecting their reports and insights. To resolve this, loan officers are tasked with manually updating customer ages in the loan application, but currently, they cannot edit the age field. Fortunately, the system was designed with age fields already in the database, so the solution is to update the frontend of the loan application to allow officers to modify the age. Once this is implemented, the analytics department can benefit by using JSON Duality Views to run SQL queries on the updated data, even though it's stored as documents. This will allow the team to access accurate, up-to-date customer ages, improving their reporting and decision-making, while loan officers can ensure the data is correct.
+
+Let’s dive in and unlock the full potential of JSON in your application!
+
+Estimated Time: 15 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Enhance your understanding of JSON duality views by applying it to a coding challenge.
+
+* Gain hands-on experience with JSON duality views and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+## Task 1: Challenge Requirements
+
+**About Jason Duality Views**:
+
+JSON Relational Duality is a landmark capability in Oracle Database 23ai, providing game-changing flexibility and simplicity for Oracle Database developers. This feature overcomes the historical challenges developers have faced when building applications using the relational or document models.
+
+JSON Relational Duality helps to converge the benefits of both document and relational worlds. Developers now get the flexibility and data access benefits of the JSON document model, plus the storage efficiency and power of the relational model. The new feature enabling this functionality is JSON Relational Duality View
+
+**Coding Requirements**:
+
+This challenge consists of **three steps**:
+
+* First, update the frontend of the loan application to enable loan officers to view and modify customer ages.
+* Second, calculate the average age across the client base using the corrected information.
+* Third, use JSON Duality Views to run SQL queries on the updated data.
+
+## Task 2: Update Application Frontend
+
+The company has requested an enhancement to the current customer data and would now like to see the parameter for **age** to be reflected.
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. In the Customer.py file, find the # 🔍 Customer Details Section at line 219
+
+4. Update the section to include a new parameter for **age**.
+
+5. Save the Customers.py file.
+
+ 
+
+## Task 3: Analyzing the Complete Client Data
+
+The analytics team needs to access the full dataset of client information (e.g., age, income, credit score, loan history) to perform a comprehensive analysis. This command returns the entire data field in JSON format, which could contain detailed client records.
+
+````sql
+
+ SELECT json_serialize(data PRETTY) FROM clients_dv;
+
+````
+
+By examining this data, the analytics team can:
+
+* Identify key patterns in client demographics (e.g., a high proportion of clients in a particular age group applying for certain types of loans).
+
+* Recognize which attributes (such as age, income level, or credit score) are most strongly correlated with loan approval rates or defaults.
+
+* Provide insights that the loan officers can use to suggest customized loan options to clients based on their age and financial background.
+
+ 
+
+## Task 4: Analyzing Clients of a Specific Age
+
+A common scenario for a loan officer is to deal with clients who fall into a specific age group. For example, there may be a market trend where people around the age of 34 are showing an increased interest in home loans or refinancing options.
+
+````sql
+
+ SELECT json_serialize(data PRETTY)
+ FROM clients_dv WHERE json_value(data, '$.age') = '34';
+
+````
+
+The analytics team can use this query to extract all client data for those who are 34 years old. The output helps identify:
+
+* Whether this demographic is asking for specific types of loans (e.g., home loans vs. personal loans).
+
+* If age 34 clients are more likely to get approved or face any challenges in their loan applications.
+
+* Demographic details like income, credit score, and previous loan history that could influence loan recommendations for 34-year-olds.
+
+Loan officers can then use these insights to:
+
+* Tailor loan offers to meet the needs of 34-year-old clients.
+
+* Customize interest rates or repayment terms based on the behavior and loan eligibility trends of this age group.
+
+ 
+
+## Task 5: Calculating the Average Age of Clients
+
+The analytics team can calculate the average age of all clients in the database. This helps understand the overall age distribution of clients seeking loans. For example, if the average age of clients is 28, it might suggest that younger customers are more likely to apply for loans or require financial products that cater to their specific needs (e.g., first-time homebuyers or education loans).
+
+````sql
+
+ SELECT AVG(CAST(json_value(data, '$.age') AS INT)) AS average_age
+ FROM clients_dv;
+
+````
+
+Loan officers can use this data to:
+
+* Adjust their loan offerings to target the most common age group.
+
+* Customize their approach for different age groups by suggesting loan products suited for younger vs. older clients.
+
+* Understand the risk and behavior patterns associated with different age groups—helpful for tailoring loan terms or interest rates.
+
+For instance, if the average age is low, there might be an opportunity to introduce loans tailored for young professionals, like lower-interest student loan consolidation or startup loans. If the average age is high, home equity loans or retirement planning options may be more relevant.
+
+
+
+**Congratulations, you have successfully completed the JSON Duality View Coding Exercise!**
+
+## Conclusion
+The analytics team can leverage these SQL queries to deliver powerful insights into the client base's age distribution and preferences, enabling loan officers like yourself to offer more personalized, relevant, and profitable loan recommendations. By using the data in a structured way, the loan process becomes more customer-centric, improving satisfaction and potentially increasing the volume and quality of loan products offered.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Otis Barr, Ramona Magadan, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/23ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/23ai.png
new file mode 100644
index 000000000..c9d91565d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/23ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/access.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/access.png
new file mode 100644
index 000000000..67d0f079c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/access.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/adb-available.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/adb-available.png
new file mode 100644
index 000000000..83c42c2f8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/adb-available.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/all-customers.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/all-customers.png
new file mode 100644
index 000000000..7847e4b4c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/all-customers.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/atp.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/atp.png
new file mode 100644
index 000000000..09736ee76
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/atp.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/average-age.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/average-age.png
new file mode 100644
index 000000000..c24d0b305
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/average-age.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb.png
new file mode 100644
index 000000000..224b16bc2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb2.png
new file mode 100644
index 000000000..20fe1a66e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/create-adb2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/demo-db.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/demo-db.png
new file mode 100644
index 000000000..b7bad922b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/demo-db.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/login.png
new file mode 100644
index 000000000..93ca6436b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/oracle-database.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/oracle-database.png
new file mode 100644
index 000000000..642d0dbfc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/oracle-database.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/password.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/password.png
new file mode 100644
index 000000000..e770db461
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/password.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/provisioning.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/provisioning.png
new file mode 100644
index 000000000..a04507757
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/provisioning.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/specific-age.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/specific-age.png
new file mode 100644
index 000000000..8decb30f6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/images/specific-age.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/json-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/json-exercise.md
new file mode 100644
index 000000000..57eff8e7b
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/json-exercise/json-exercise.md
@@ -0,0 +1,147 @@
+# Code with JSON Duality Views
+
+## Introduction
+
+**Welcome to the JSON Duality Views Challenge!**
+
+In this lab, you will tackle an exciting coding challenge focused on **JSON**. Your goal is to enhance the existing application by implementing an update that will elevate its functionality.
+
+At SeerEquites, the analytics department has flagged an issue with incorrect customer age data, affecting their reports and insights. To resolve this, loan officers are tasked with manually updating customer ages in the loan application, but currently, they cannot edit the age field. Fortunately, the system was designed with age fields already in the database, so the solution is to update the frontend of the loan application to allow officers to modify the age. Once this is implemented, the analytics department can benefit by using JSON Duality Views to run SQL queries on the updated data, even though it's stored as documents. This will allow the team to access accurate, up-to-date customer ages, improving their reporting and decision-making, while loan officers can ensure the data is correct.
+
+This is your opportunity to sharpen your skills and explore the power of JSON.
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Lab 7b Step-by-step: JSON Duality Views for step-by-step instructions.
+
+Good luck, and enjoy the process!
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Enhance your understanding of JSON duality views by applying it to a coding challenge.
+
+* Gain hands-on experience with JSON duality views and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+
+## Task 1: Challenge Requirements
+
+This challenge consists of **three steps**:
+
+* First, update the frontend of the loan application to enable loan officers to view and modify customer ages.
+* Second, calculate the average age across the client base using the corrected information.
+* Third, use JSON Duality Views to run SQL queries on the updated data.
+
+## Task 2: Update Application Frontend
+
+The company has requested an enhancement to the current customer data and would now like to see the parameter for **age** to be reflected.
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. In the Customer.py file, find the # 🔍 Customer Details Section at line 219
+
+4. Update the section to include a new parameter for **age**.
+
+5. Save the Customers.py file.
+
+ 
+
+## Task 3: Analyzing the Complete Client Data
+
+The analytics team needs to access the full dataset of client information (e.g., age, income, credit score, loan history) to perform a comprehensive analysis. This command returns the entire data field in JSON format, which could contain detailed client records.
+
+````sql
+
+ SELECT json_serialize(data PRETTY) FROM clients_dv;
+
+````
+
+By examining this data, the analytics team can:
+
+* Identify key patterns in client demographics (e.g., a high proportion of clients in a particular age group applying for certain types of loans).
+
+* Recognize which attributes (such as age, income level, or credit score) are most strongly correlated with loan approval rates or defaults.
+
+* Provide insights that the loan officers can use to suggest customized loan options to clients based on their age and financial background.
+
+ 
+
+## Task 4: Analyzing Clients of a Specific Age
+
+A common scenario for a loan officer is to deal with clients who fall into a specific age group. For example, there may be a market trend where people around the age of 34 are showing an increased interest in home loans or refinancing options.
+
+````sql
+
+ SELECT json_serialize(data PRETTY)
+ FROM clients_dv WHERE json_value(data, '$.age') = '34';
+
+````
+
+The analytics team can use this query to extract all client data for those who are 34 years old. The output helps identify:
+
+* Whether this demographic is asking for specific types of loans (e.g., home loans vs. personal loans).
+
+* If age 34 clients are more likely to get approved or face any challenges in their loan applications.
+
+* Demographic details like income, credit score, and previous loan history that could influence loan recommendations for 34-year-olds.
+
+Loan officers can then use these insights to:
+
+* Tailor loan offers to meet the needs of 34-year-old clients.
+
+* Customize interest rates or repayment terms based on the behavior and loan eligibility trends of this age group.
+
+ 
+
+## Task 5: Calculating the Average Age of Clients
+
+The analytics team can calculate the average age of all clients in the database. This helps understand the overall age distribution of clients seeking loans. For example, if the average age of clients is 28, it might suggest that younger customers are more likely to apply for loans or require financial products that cater to their specific needs (e.g., first-time homebuyers or education loans).
+
+````sql
+
+ SELECT AVG(CAST(json_value(data, '$.age') AS INT)) AS average_age
+ FROM clients_dv;
+
+````
+
+Loan officers can use this data to:
+
+* Adjust their loan offerings to target the most common age group.
+
+* Customize their approach for different age groups by suggesting loan products suited for younger vs. older clients.
+
+* Understand the risk and behavior patterns associated with different age groups—helpful for tailoring loan terms or interest rates.
+
+For instance, if the average age is low, there might be an opportunity to introduce loans tailored for young professionals, like lower-interest student loan consolidation or startup loans. If the average age is high, home equity loans or retirement planning options may be more relevant.
+
+
+
+**Congratulations, you have successfully completed the JSON Duality View Coding Exercise!**
+
+## Conclusion
+The analytics team can leverage these SQL queries to deliver powerful insights into the client base's age distribution and preferences, enabling loan officers like yourself to offer more personalized, relevant, and profitable loan recommendations. By using the data in a structured way, the loan process becomes more customer-centric, improving satisfaction and potentially increasing the volume and quality of loan products offered.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Otis Barr, Ramona Magadan, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Linda Foinding, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/2025-07-16_15-51-38.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/2025-07-16_15-51-38.png
new file mode 100644
index 000000000..d2fb1de53
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/2025-07-16_15-51-38.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-ocid.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-ocid.png
new file mode 100644
index 000000000..3d294c7c3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-ocid.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioned.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioned.png
new file mode 100644
index 000000000..4eff376aa
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioned.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioning.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioning.png
new file mode 100644
index 000000000..d8a36adb9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-provisioning.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-workload-type.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-workload-type.png
new file mode 100644
index 000000000..7257da637
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/adb-workload-type.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules-all.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules-all.png
new file mode 100644
index 000000000..ece3d86af
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules-all.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules.png
new file mode 100644
index 000000000..1fab3aa3c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-ingress-rules.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-key.png
new file mode 100644
index 000000000..c7d5a202a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/add-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/added-policy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/added-policy.png
new file mode 100644
index 000000000..22d1bd6f7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/added-policy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-dashboard.png
new file mode 100644
index 000000000..2d2f1ca29
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-start-screen.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-start-screen.png
new file mode 100644
index 000000000..acd6e19ed
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/application-start-screen.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-detail-review.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-detail-review.png
new file mode 100644
index 000000000..d93d6ef7f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-detail-review.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-security-mtls.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-security-mtls.png
new file mode 100644
index 000000000..24b86f61b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/atp-security-mtls.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/basic-information.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/basic-information.png
new file mode 100644
index 000000000..88f354a15
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/basic-information.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/begin-oci-menu.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/begin-oci-menu.png
new file mode 100644
index 000000000..36b2feaf1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/begin-oci-menu.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/chicago-region.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/chicago-region.png
new file mode 100644
index 000000000..853d9d958
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/chicago-region.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/choose-autonomous.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/choose-autonomous.png
new file mode 100644
index 000000000..095969b94
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/choose-autonomous.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-api-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-api-key.png
new file mode 100644
index 000000000..02824797c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-api-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-ingress-rules.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-ingress-rules.png
new file mode 100644
index 000000000..194df40ef
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-add-ingress-rules.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-create-instance.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-create-instance.png
new file mode 100644
index 000000000..01c74d972
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-create-instance.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security-list.png
new file mode 100644
index 000000000..4c1185110
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security.png
new file mode 100644
index 000000000..710a1300b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-default-security.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-generative-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-generative-ai.png
new file mode 100644
index 000000000..8ae6b4de4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-generative-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-security-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-security-list.png
new file mode 100644
index 000000000..785aebc27
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-security-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-subnet.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-subnet.png
new file mode 100644
index 000000000..755ba9999
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-subnet.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-tenancy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-tenancy.png
new file mode 100644
index 000000000..ae68dece0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-tenancy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-user-settings.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-user-settings.png
new file mode 100644
index 000000000..d2f7b7e1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-user-settings.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-vcn.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-vcn.png
new file mode 100644
index 000000000..75b14d40c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/click-vcn.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment-name.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment-name.png
new file mode 100644
index 000000000..b69068773
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment-name.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment.png
new file mode 100644
index 000000000..6704dfbd1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartment.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartments.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartments.png
new file mode 100644
index 000000000..42f4cbb40
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/compartments.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/config-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/config-file.png
new file mode 100644
index 000000000..0ee192b65
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/config-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/configure-db.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/configure-db.png
new file mode 100644
index 000000000..827a8b3d6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/configure-db.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/connection-string.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/connection-string.png
new file mode 100644
index 000000000..e79c085d1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/connection-string.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/contact-email-field.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/contact-email-field.png
new file mode 100644
index 000000000..4bfdcaba0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/contact-email-field.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-api-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-api-key.png
new file mode 100644
index 000000000..68b4a3525
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-api-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-compartment-ocid.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-compartment-ocid.png
new file mode 100644
index 000000000..d96fd69b4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-compartment-ocid.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-connection-string.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-connection-string.png
new file mode 100644
index 000000000..6244a1be8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-connection-string.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-env-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-env-file.png
new file mode 100644
index 000000000..01d75b57f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-env-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ip.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ip.png
new file mode 100644
index 000000000..9c5cf2e17
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ip.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ocid.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ocid.png
new file mode 100644
index 000000000..df42d94f5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-ocid.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-tenancy-ocid.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-tenancy-ocid.png
new file mode 100644
index 000000000..aa9aa6541
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/copy-tenancy-ocid.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-button.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-button.png
new file mode 100644
index 000000000..5237ae7b9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-button.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-form.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-form.png
new file mode 100644
index 000000000..f7b4a964e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb-form.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb.png
new file mode 100644
index 000000000..32c6f207e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-adb.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-admin.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-admin.png
new file mode 100644
index 000000000..77952a527
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-admin.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-four-files.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-four-files.png
new file mode 100644
index 000000000..36625cf2d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-four-files.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-2.png
new file mode 100644
index 000000000..f55153d0c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-3.png
new file mode 100644
index 000000000..fb8253ade
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-4.png
new file mode 100644
index 000000000..eb610f5d4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-5.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-5.png
new file mode 100644
index 000000000..1e35c8b46
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-5.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-6.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-6.png
new file mode 100644
index 000000000..ef7b4fb4e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-6.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-7.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-7.png
new file mode 100644
index 000000000..84ef5a265
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-7.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-8.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-8.png
new file mode 100644
index 000000000..f6a81f38e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-8.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-succeeded.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-succeeded.png
new file mode 100644
index 000000000..c18c76ea7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance-succeeded.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance.png
new file mode 100644
index 000000000..2c9f06366
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-instance.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-policy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-policy.png
new file mode 100644
index 000000000..9a1f03bcb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-policy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-subnet.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-subnet.png
new file mode 100644
index 000000000..4eb022632
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-subnet.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-vcn.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-vcn.png
new file mode 100644
index 000000000..addd96397
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/create-vcn.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/db-connection.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/db-connection.png
new file mode 100644
index 000000000..85555d9c6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/db-connection.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/default-security-list-final.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/default-security-list-final.png
new file mode 100644
index 000000000..104824cf8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/default-security-list-final.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/deployment-type-serverless.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/deployment-type-serverless.png
new file mode 100644
index 000000000..553b8fdbf
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/deployment-type-serverless.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/download-private-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/download-private-key.png
new file mode 100644
index 000000000..ef49c0995
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/download-private-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/enable-firewall.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/enable-firewall.png
new file mode 100644
index 000000000..4641d6bb9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/enable-firewall.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-credentials.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-credentials.png
new file mode 100644
index 000000000..d5b75f66b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-credentials.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file-copy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file-copy.png
new file mode 100644
index 000000000..9a5776b9b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file-copy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file.png
new file mode 100644
index 000000000..1e0b1b7ef
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/env-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/find-configuration-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/find-configuration-file.png
new file mode 100644
index 000000000..fa836ea92
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/find-configuration-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/folder.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/folder.png
new file mode 100644
index 000000000..e59dfdc11
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/folder.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-public-keys.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-public-keys.png
new file mode 100644
index 000000000..a34af1a3d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-public-keys.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-ssh-keys.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-ssh-keys.png
new file mode 100644
index 000000000..ed9864768
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/generate-ssh-keys.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/graph-endpoint.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/graph-endpoint.png
new file mode 100644
index 000000000..76a3bff63
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/graph-endpoint.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-1.png
new file mode 100644
index 000000000..0b7e3ca6e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-2.png
new file mode 100644
index 000000000..7ea68c09a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-3.png
new file mode 100644
index 000000000..5526fa8cb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-4.png
new file mode 100644
index 000000000..94decf2b2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-5.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-5.png
new file mode 100644
index 000000000..5dd6bef43
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-5.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-6.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-6.png
new file mode 100644
index 000000000..7710f7c42
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/ingress-rule-6.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/key-preview.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/key-preview.png
new file mode 100644
index 000000000..170f77e14
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/key-preview.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/license.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/license.png
new file mode 100644
index 000000000..b3a6acf9a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/license.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/login-with-ssh-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/login-with-ssh-key.png
new file mode 100644
index 000000000..20de50f79
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/login-with-ssh-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-the-vnic.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-the-vnic.png
new file mode 100644
index 000000000..36e118de5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-the-vnic.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-vnic-confirm.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-vnic-confirm.png
new file mode 100644
index 000000000..14cabbc90
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/name-vnic-confirm.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/network-access.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/network-access.png
new file mode 100644
index 000000000..19a9fd6a0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/network-access.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-api-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-api-key.png
new file mode 100644
index 000000000..c0d0edcb2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-api-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-config.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-config.png
new file mode 100644
index 000000000..dccd77f7b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/oci-config.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/open-terminal.png
new file mode 100644
index 000000000..5a8cde252
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/paste-ssh-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/paste-ssh-key.png
new file mode 100644
index 000000000..a1a52abe7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/paste-ssh-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policies.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policies.png
new file mode 100644
index 000000000..3e57a3176
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policies.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy-info.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy-info.png
new file mode 100644
index 000000000..82dc0d739
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy-info.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy.png
new file mode 100644
index 000000000..71264e42f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/policy.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/private-key.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/private-key.png
new file mode 100644
index 000000000..f3a7f4557
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/private-key.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/provisioning-atp.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/provisioning-atp.png
new file mode 100644
index 000000000..11f381950
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/provisioning-atp.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version-installed.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version-installed.png
new file mode 100644
index 000000000..ad73c3267
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version-installed.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version.png
new file mode 100644
index 000000000..2dadcbaed
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/python-version.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/region.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/region.png
new file mode 100644
index 000000000..64c824cc8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/region.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/requirements.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/requirements.png
new file mode 100644
index 000000000..5300ee500
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/requirements.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/review-basic-information.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/review-basic-information.png
new file mode 100644
index 000000000..0fa35b060
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/review-basic-information.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-atp.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-atp.png
new file mode 100644
index 000000000..ba3960f93
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-atp.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compartment.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compartment.png
new file mode 100644
index 000000000..202c7df5d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compartment.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compute.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compute.png
new file mode 100644
index 000000000..b548fc99f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-compute.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-instances.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-instances.png
new file mode 100644
index 000000000..55dcba987
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-instances.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-vcn.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-vcn.png
new file mode 100644
index 000000000..fa8ca22e5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-vcn.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-your-adb.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-your-adb.png
new file mode 100644
index 000000000..5efaa65d1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/select-your-adb.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/show-editor.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/show-editor.png
new file mode 100644
index 000000000..f086a15fb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/show-editor.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard.png
new file mode 100644
index 000000000..0c02b8833
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard2.png
new file mode 100644
index 000000000..8560d298a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/start-vcn-wizard2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/streamlit-service-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/streamlit-service-file.png
new file mode 100644
index 000000000..ec70b9abd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/streamlit-service-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-blocks.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-blocks.png
new file mode 100644
index 000000000..2b90b8b58
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-blocks.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-create.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-create.png
new file mode 100644
index 000000000..85867a30f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-create.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-dns.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-dns.png
new file mode 100644
index 000000000..2cb008fe8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-dns.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-name.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-name.png
new file mode 100644
index 000000000..2a32ad501
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-name.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-type.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-type.png
new file mode 100644
index 000000000..f2efa84f1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/subnet-type.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/tokens-keys.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/tokens-keys.png
new file mode 100644
index 000000000..0e240715a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/tokens-keys.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/upload-public-keys.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/upload-public-keys.png
new file mode 100644
index 000000000..af5e15d3b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/upload-public-keys.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-ocid.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-ocid.png
new file mode 100644
index 000000000..f3f9df56a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-ocid.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-settings.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-settings.png
new file mode 100644
index 000000000..6f427d5bc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/user-settings.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-available.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-available.png
new file mode 100644
index 000000000..9188b2bab
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-available.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-blocks.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-blocks.png
new file mode 100644
index 000000000..8da04f0a4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-blocks.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-create.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-create.png
new file mode 100644
index 000000000..fdfa7f1af
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-create.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-details.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-details.png
new file mode 100644
index 000000000..ea98602f0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-details.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-dns.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-dns.png
new file mode 100644
index 000000000..d05fd0c1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-dns.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-name.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-name.png
new file mode 100644
index 000000000..54160f953
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/vcn-name.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/verify-subnet.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/verify-subnet.png
new file mode 100644
index 000000000..a60e83e4e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/verify-subnet.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/virtual-environment.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/virtual-environment.png
new file mode 100644
index 000000000..ce13f4032
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/virtual-environment.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name-2.png
new file mode 100644
index 000000000..f7d9ea94b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name.png
new file mode 100644
index 000000000..d7586678c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/images/your-tenancy-name.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/local-tenancy.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/local-tenancy.md
new file mode 100644
index 000000000..27f79f7d2
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/local-tenancy/local-tenancy.md
@@ -0,0 +1,671 @@
+# How-to Install and Run the Application on OCI
+
+## Introduction
+
+This lab will show you how to setup and run the Seer Equities Loan Approval application on OCI. This guide is designed to walk you through the complete setup process, which includes provisioning required services and installing dependencies enabling you to launch and run the application on OCI.
+
+The document is structured to help you meet all prerequisites, configure both the Autonomous Database and the OCI Generative AI Service, and troubleshoot any issues that may arise during setup. Whether you're new to Oracle Cloud Infrastructure or simply deploying for development and testing, this step-by-step guide will ensure a smooth setup experience.
+
+Estimated Time: 60 minutes
+
+### Objectives
+
+By the end of this section, you will be able to:
+
+- Provision and connect to an OCI VM and an Oracle Autonomous Database.
+
+- Set up a Python-based local development environment.
+
+- Configure access to OCI Generative AI services.
+
+- Securely store your credentials and configuration details.
+
+- Launch and interact with the application using Streamlit.
+
+> 💡Note: This guide is intended for development and testing purposes. For production deployment, additional configuration and security hardening will be required.
+
+Let’s get started!
+
+## Task 1: Create a virtual cloud network and a compute instance
+
+1. Click the Navigation menu in the top left and select **Compute** then **Instances**.
+
+ 
+
+2. Verify that the filter reflects the correct compartment and click **Create Instance**.
+
+ 
+
+3. Name the instance **SeerVM**, verify you're in the correct compartment, and accept all the defaults. Click the **Next** button.
+
+ > **Note**: While all operating systems are supported, we recommend using Oracle Linux 9 as the operating system. The application runs on any available shape, including shapes available in the OCI Always Free tier.
+
+ 
+
+4. On the Security screen, click **Next**.
+
+5. In the **Networking** section name the VNIC - *SeerVNIC*. Check the radio button to **Create new virtual cloud network**. Verify that the radio button for **Create new public subnet** is checked.
+
+ 
+
+ In the **Add SSH Keys** section, you can generate a new SSH key pair or use your favorite existing keys.
+
+6. To generate a new key pair, click the radio button next to **Generate a key pair for me**. Then click the **Download private key** button to save the file to your local downloads directory. Click the button to **Download public key** to your local computer so you have both keys for safe-keeping.
+
+ 
+
+ In a future task you'll need the SSH keys to gain access to the compute instance where you'll configure and run the software for this lab. Feel free to move the SSH keys to the .ssh directory of your terminal application. This will vary depending on which terminal emulator you're using on your system.
+
+7. You can also utilize an existing key pair if you already have one. Choose the radio button for **Upload public key file (.pub)** and drop the file on the box or click it to locate the file and upload it to the VM.
+
+ 
+
+8. Alternately, you can paste the contents of an existing public key. Locate the key you want to use and open it up in an editor. Copy and paste the contents of the key into the field
+
+ 
+
+9. Once you've completed the SSH Key section, click the **Next** button to continue.
+
+10. On the Boot Volume section, accept the defaults and choose **Next**.
+
+11. Review the VM configuration information. Look in the Networking section and verify that **Public IPv4 address** = **Yes**. Click the **Create** button.
+
+ 
+
+12. The instance will begin provisioning and in a few moments the state will change to **Succeeded** and then to **Running**.
+
+ 
+
+In the next step, you'll add 5 ingress rules to allow traffic on specific ports within your VCN.
+
+13. Click on the **Navigation Menu** and select **Networking** then **Virtual Cloud Networks**.
+
+
+
+14. Click the VCN link that was created along with your compute instance.
+
+15. Click the **Security** tab, then click on the **Default Security List for vcn-xxxxx**.
+
+
+
+16. Click the **Security Rules** tab, then click the **Add Ingress Rules** under the Ingress Rules section. Note that port 22 is already enabled for SSH communication.
+
+ 
+
+17. For each rule, add 0.0.0.0/0 as the **Source CIDR** and add the specific port below to the **Destination Port Range** field. Click **+ Another Ingress Rule** after each entry.
+
+Add 5 rules using the below information.
+
+| Ingress Rule # | Source CIDR | Port # |
+| ------------- | ------------- | ------------ |
+| 1 | 0.0.0.0/0 | 80 |
+| 2 | 0.0.0.0/0 | 1521 |
+| 3 | 0.0.0.0/0 | 1522 |
+| 4 | 0.0.0.0/0 | 8501 |
+| 5 | 0.0.0.0/0 | 8502 |
+ {: title="Ingress rules"}
+
+
+When you've added all 5 ingress rules, click the **Add Ingress Rules** button at the bottom right of the page.
+
+ 
+
+Your default security list should look like the below screenshot.
+
+ 
+
+## Task 2: Access and update the VM
+
+1. Click on the **Navigation Menu** select **Compute** then **Instances**
+
+ 
+
+2. Click on the link to the SeerVM instance you created earlier.
+
+3. Locate the **Public IP address** in the Instance access section copy the **Public IP**.
+
+ 
+
+4. Type or copy/paste the following command into your terminal. Replace ssh\_key\_name with the name of your private key. Replace public\_ip with the public IP you just copied from your VM. The '-i' switch allows you to specify the location where your SSH keys are stored.
+
+ ````
+
+ ssh -i ~/.ssh/ssh_key_name opc@public_ip
+
+ ````
+
+ 
+
+
+6. Run the command below to update the VM. It will take a few minutes.
+
+ ````
+
+ sudo yum update -y
+
+ ````
+
+ 
+
+7. Once the VM has been updated install python3.11, pip, and the oci cli application. Run the commands below:
+
+ ````
+
+ sudo yum install python3.11 -y
+
+ ````
+
+ ````
+
+ sudo yum install python3-pip -y
+
+ ````
+
+ ````
+
+ sudo yum install python3.11-pip -y
+
+ ````
+
+ ````
+
+ pip install --upgrade pip
+
+ ````
+
+ ```
+
+ sudo dnf install python39-oci-cli -y
+
+
+
+
+
+## Task 3: Provision an Autonomous Database
+
+The application is built for Autonomous Database. Follow the steps to provision an Oracle Autonomous Transaction Database.
+
+1. Click the navigation menu in the upper left of the OCI console, choose **Oracle Database** then **Autonomous Database**.
+
+ 
+
+2. Verify that the filter option reflects the correct compartment and click the **Create Autonomous Database** button.
+
+ 
+
+3. Use the information in the table below to fill out the **Create Autonomous Database Serverless** form. Proceed to the next step for instructions on setting up **Network Access**.
+
+ | Field Name | Input |
+ | ------------- | ------------ |
+ | Display Name | SeerATP |
+ | Database Name | SeerATP |
+ | Compartment | Verify correct compartment |
+ | Workload Type | ATP |
+ | Database Version | 23ai |
+ | ECPU Count | 2 |
+ | Password | Password1234! |
+ {: title="ADB configuration details overview"}
+
+ 
+
+1. In the **Network access** section, choose **Secure access from allowed IPs and VCNs only**. In the **IP notation type** drop-down, choose **CIDR block**. For values, enter **0.0.0.0/0**. Verify that **Require mutual TLS (mTLS) authentication** is disabled. Click the **Create** button.
+
+ 
+
+2. The ATP Database will enter the provisioning state.
+
+ 
+
+3. Once the state changes to **Available**, the Autonomous Transaction Processing database is ready to use!
+
+ 
+
+## Task 5: Setting up the Local Environment
+
+The application environment has been created and zipped up for you in a downloadable package.
+
+1. Return to the terminal connected to the VM. From the /home/opc directory, enter the following command in your terminal to download the application package to your virtual machine.
+
+```
+
+ wget https://c4u04.objectstorage.us-ashburn-1.oci.customer-oci.com/p/EcTjWk2IuZPZeNnD_fYMcgUhdNDIDA6rt9gaFj_WZMiL7VvxPBNMY60837hu5hga/n/c4u04/b/livelabsfiles/o/database/ai-app-build-local.zip
+
+```
+
+2. Unzip the file.
+
+```
+
+ unzip ai-app-build-local.zip
+
+```
+
+Next we're going to generate an oci configuration file that will contain user credentials and other settings needed for interacting with Oracle Cloud. In order to prepare for this step you'll need to gather the user OCID, the tenancy OCID, and the tenancy region and store these in a text file.
+
+3. Find the user OCID: Click the profile icon in the upper right corner of the OCI console and choose **User settings**.
+
+ 
+
+4. In the My profile screen, locate the **OCID** field and click **Copy** to the right of the OCID field. Store this information in a text file.
+
+ 
+
+5. Tenancy OCID: Click the profile icon in the upper right corner of the OCI console and choose **Tenancy:*your tenancy name***
+
+ 
+
+6. Locate the tenancy OCID and click the **Copy** button to copy the OCID. Paste it into your text file.
+
+ 
+
+7. Identify the home region of your tenancy located on the top bar of the console toward the right. Note that information in your text file.
+
+ 
+
+8. With the above information handy, run the following command in the terminal.
+
+```
+
+ oci setup config
+
+```
+9. Hit return to accept the default config file location of /home/opc/.oci/config
+
+10. Enter your user OCID, tenancy OCID, and select your region from the list by using the corresponding number.
+
+11. When asked if you want to generate a new API key, answer 'Y' for yes.
+
+12. Press **Enter** to accept the default creation directory of /home/opc/.oci
+
+13. Press **Enter** to accept the default name of *oci_api_key*.
+
+14. Enter *N/A* twice to eliminate the need for a passphrase. (Your output won't show up in the terminal screen.)
+
+Next you'll create an environment file for the application.
+
+15. Create the .env file that will hold connection information for your application.
+
+````
+
+ touch .env
+
+````
+
+16. Use your favorite editor to open and edit the file.
+
+ ````
+
+ nano .env
+
+ ````
+
+17. The following information needs to be collected and inserted into the .env file. Copy the 9 lines below and paste them in the .env file. Follow the steps below to gather the required information and place it in the file.
+
+ ```
+
+ USERNAME=""
+ DBPASSWORD=""
+ DBCONNECTION=""
+ ADB_NAME=""
+ ADB_OCID=""
+ GRAPH_ENDPOINT=""
+ COMPARTMENT_OCID=""
+ TENANCY_OCID=""
+ ENDPOINT=https://inference.generativeai.us-chicago-1.oci.oraclecloud.com
+
+ ```
+
+18. The database username should be 'admin'. Use the password that you assigned to the admin user. (Password1234!). Make sure all the information you enter into the file stays between the quotes.
+
+19. Find your database connection string by selecting navigating to **Oracle Database**, choose **Autonomous Database**, then choose the ATP you created earlier in the lab, **SeerATP**. At the top of the screen, click the button labeled **Database Connection**.
+
+ 
+
+20. Locate the connection labeled *seeratp_low*. Click the ellipsis at the far right and choose *Copy*. Paste the result into your configuration file. **Note:** Make sure to enclose the connection string in single quotes. Click **Cancel** to close the screen when you're done.
+
+ 
+
+21. Copy your Autonomous Database Name and OCID and paste them into your .env file.
+
+ 
+
+22. While still in the ATP details screen, click the **Tool Configuration** tab. Copy the Graph Studio Public access URL and paste it into the .env file.
+
+ 
+
+23. To find the compartment OCID, navigate to **Identity & Security**, select **Compartments**, then click on the link of the compartment you're using for this lab.
+
+24. Locate the compartment OCID and click the *Copy* link. Paste the compartment OCID into your .env file.
+
+ 
+
+25. Locate the tenancy OCID. From the OCI Console home screen, click the tenancy name link under the **Home** title.
+
+ 
+
+26. Copy the tenancy OCID and paste it into the .env file.
+
+ 
+
+27. Copy the below url and paste it into your file as the endpoint.
+
+ ````
+
+ https://inference.generativeai.us-chicago-1.oci.oraclecloud.com
+
+ ````
+
+28. Your .env file should look similar to the screenshot below. (*Don't forget the sinqle quotes around the connection string!*)
+
+ 
+
+29. Save and close the .env file.
+
+## Task 4: Create the application environment
+
+1. Create a Virtual Environment. It is recommended to create a virtual environment to isolate application dependencies. In your terminal, run the following command to create a virtual environment.
+
+ ````
+
+ python3.11 -m venv loan_env
+
+ ````
+
+ This will create a directory called loan_env that will contain your virtual environment.
+
+2. Enable the firewall for the application port. Run the following commands:
+
+ ````
+
+ sudo firewall-cmd --zone=public --add-port=8501/tcp --permanent
+
+ ````
+
+ ````
+
+ sudo firewall-cmd --reload
+
+ ````
+
+ ````
+
+ nohup streamlit run 1-Introduction.py --server.port 8501 --server.address 0.0.0.0 > streamlit.log 2>&1 &
+
+ ````
+
+ 
+
+3. Create the streamlit.service file to allow management of the streamlit app like any other service.
+
+ ````
+
+ sudo nano /etc/systemd/system/streamlit.service
+
+ ````
+
+
+4. Copy and paste the following information into the file. Verify the user is 'opc' and the port is set to 8501.
+
+ ````
+
+ [Unit]
+ Description=Streamlit Loan Approval App
+ After=network.target
+
+ [Service]
+ User=opc
+ WorkingDirectory=/home/opc
+ ExecStart=/bin/bash -c 'source /home/opc/loan_env/bin/activate && streamlit run 1-Introduction.py --server.port 8501 --server.address 0.0.0.0'
+ Restart=always
+
+ [Install]
+ WantedBy=multi-user.target
+
+ ````
+
+
+
+
+5. Activate the virtual environment. Enter the following command.
+
+ ````
+
+ source loan_env/bin/activate
+
+ ````
+
+6. Run the following command to upgrade pip.
+
+ ````
+
+ pip install --upgrade pip
+
+ ````
+
+
+
+7. Install the required applications from the supplied requirements.txt file.
+
+ ```
+
+ pip install -r requirements.txt
+
+ ```
+
+8. Install java.
+
+ ````
+
+ sudo dnf install java-17-openjdk-devel -y
+
+ ````
+
+9. Install sqlcl
+
+ ````
+
+ sudo yum install sqlcl -y
+
+ ````
+10. Reload the daemons and enable streamlit
+
+ ````
+
+ sudo systemctl daemon-reload
+
+ ````
+
+ ````
+
+ sudo systemctl enable streamlit
+
+ ````
+
+ ````
+
+ sudo systemctl start streamlit
+
+ ````
+
+ ````
+
+ sudo systemctl status streamlit
+
+ ````
+
+Streamlit is up and running. Press Control + C on your keyboard to escape.
+
+
+## Task 5: Launch the Application
+
+1. Navigate to the *dbinit* subdirectory.
+
+ ````
+
+ cd ~/dbinit
+
+ ````
+
+2. Change the permissions on the shell_script.sh file to executable.
+
+ ```
+
+ chmod +x shell_script.sh
+
+ ```
+
+3. Run shell script file to populate the database and configure the application. Run the following command.
+
+ ````
+
+ ./shell_script.sh
+
+ ````
+
+4. Open a web browser.
+
+5. Type in the IP address of the VM followed by :8501 into the incognito window.. You can obtain it from the OCI Console - VM details screen.
+
+6. Success! You should see the application start screen.
+
+ 
+
+Congratulations, you have built and configured the Loan Management application using Oracle Cloud Insfrastructure, Oracle Autonomous Database, and Oracle GenAI!
+
+
+## Troubleshooting
+If you encounter any issues during the setup, here are a few common troubleshooting tips:
+
+* **Missing Keys or Permissions**: Double-check your .oci/config for typos and ensure the key file path is correct and readable.
+
+* **OCI SDK Errors**: Ensure the required OCI Python SDK is installed:
+
+ ````
+
+ pip install oci
+ .
+
+* **Database Connection Errors**: Ensure that the database credentials in the .env file are correct and that you have access to the Autonomous Database.
+
+## Additional Notes
+
+* Your .oci/config and .environment files contain sensitive credentials. Do not commit them to version control.
+
+* Keep your oci\_api\_key.pem secure and never share it.
+
+* If you use multiple OCI profiles, you can add them to ~/.oci/config and reference them explicitly in your code.
+
+* This setup is intended for development and local testing purposes. If you're looking to deploy the application in production, additional configuration and security hardening may be required.
+
+* Ensure that your system's Python version is compatible (3.9 or higher) and that the virtual environment is activated whenever you work on the application.
+
+## Conclusion
+
+By following the steps outlined above, you should be able to set up and run the application locally. If you face any issues, refer to the troubleshooting section or contact the support team for assistance.
+
+You may now **proceed to the next lab**.
+
+## Learn More
+
+- [Generative AI Documentation](https://docs.oracle.com/en-us/iaas/Content/generative-ai/home.htm)
+
+## Acknowledgements
+
+- **Created By/Date** - Kamryn Vinson, Linda Foinding, Kevin Lazarz
+- **Last Updated By/Date** - Dan Kingsley, July 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-answers/messaging-answers.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-answers/messaging-answers.md
new file mode 100644
index 000000000..d03db7a2d
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-answers/messaging-answers.md
@@ -0,0 +1,153 @@
+# Code with Transactional Event Queues step-by-step
+
+## Introduction
+
+This step-by-step guide will walk you through the necessary updates, providing solutions and insights to help you fully understand how to utilize Transactional Event Queues in a practical scenario.
+
+At SeerEquities, the loan department has flagged an issue with earnest payment overdraft logging, affecting auditing and analytics. Currently, loan officers must manually file overdrafts for failed earnest payments in a time-consuming process. To resolve this, the system must be updated to log overdrafts during earnest payment process. Once this is implemented, the processing of earnest payment will automatically include overdraft logging in a single, atomic database transaction.
+
+Let’s dive in and unlock the full potential of Transactional Event Queues in your application!
+
+Estimated Time: 15 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Enhance your understanding of [Transactional Event Queues](https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/aq-introduction.html) and [Oracle REST Data Services (ORDS)](https://www.oracle.com/database/technologies/appdev/rest.html).
+* Gain hands-on experience with transactional messaging and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+
+## Task 1: Challenge Requirements
+
+**About Transactional Event Queues (TxEventQ) **:
+
+TxEventQ is a messaging system built into Oracle Database — that is, TxEventQ runs within the database, providing an interface for applications to asynchronously produce and consume messages using database transactions. TxEventQ was introduced in Oracle Database 19c as the evolution of classic queuing to address the needs of modern event streaming microservices. TxEventQ is included as a free-of-charge Oracle Database feature.
+
+In this challenge, you'll leverage the transactional capabilities of TxEventQ's Kafka Java Clients API to work with database records from an event-streaming context.
+
+**Coding Requirements**:
+
+This challenge consists of **three steps**:
+
+* First, browse the transactional messaging code to get an understanding of Oracle Database's Kafka Java Client APIs.
+* Second, update the earnest payments service to support overdraft logging.
+* Third, publish an earnest payment event that should trigger an overdraft and validate it using ORDS.
+
+## Task 2: Understand the Kafka Java Client APIs
+
+1. In the EarnestPaymentsConsumer.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/consumer/EarnestPaymentsConsumer.java), find the # 🔍 `run` method at line 42.
+ 2. The `run` method starts a Oracle Database consumer on a given collection of topics, processing each batch of records it receives. If you have written Java code using Apache Kafka, this method may look very familiar.
+3. In the EarnestPaymentsConsumer.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/consumer/EarnestPaymentsConsumer.java), find the # 🔍 `processRecords` method at line 57.
+ 4. The `processRecords` method iterates through each record received by the consumer, and processes the earnest payment.
+ 5. If the payment is successful, the destination account is debited a given amount from the source account (lines 61-63).
+ 6. If the payment fails due to an overdraft, the transaction is dropped (lines 64-64).
+
+Database operations done in the `processRecords` method use the database connection provided by the Oracle Database consumer: this means all database operations done in this method occur the _same transaction_ as the consumer. Transactional messaging capabilities allow us to easily roll back or commit records in the context of event streaming.
+
+## Task 3: Update earnest payments service
+
+The company has requested an enhancement to earnest payment processing, and would now like to overdrafts to be automatically logged.
+
+1. In the EarnestPaymentsService.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/service/EarnestPaymentsService.java), find the # 🔍 processOverdraft method Details Section at line 70
+2. Update the processOverdraft method to save the overdraft information.
+
+> Note that the `Connection` object provided to the `processOverdraft` method is the same database connection used by the earnest payments consumer. Any database operations on this connection will occur in the same transaction as overall consumer processing.
+
+```java
+public void processOverdraft(Connection conn, OverdraftException oe) throws SQLException {
+ try (PreparedStatement ps = conn.prepareStatement(insertOverdraft)) {
+ ps.setString(1, oe.getCustomerId());
+ ps.setDouble(2, oe.getAmount());
+ ps.executeUpdate();
+ }
+}
+```
+
+In the application.yaml file (financial-services/earnest-payment-service/src/main/resources/application.yaml), find the # 🔍 consumerGroup property at line 9. Update this value to `earnest_payment_consumer_test`:
+
+```yaml
+okafka:
+ consumerGroup: earnest_payment_consumer_test
+```
+
+> Changing the consumer group configures our updated earnest payments service to process records separately from the old service.
+
+## Task 4: Start the updated earnest payments service
+
+Now that you've updated the service, we'll restart it to test the new functionality. From the financial-services/earnest-payment-service directory, start the earnest payments service using Maven:
+
+```bash
+mvn -o spring-boot:run -Dmaven.repo.local=/financial-services/repo
+```
+
+You should see output similar to the following:
+
+```bash
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.o.o.clients.consumer.ConsumerConfig : These configurations '[max.poll.records]' were supplied but are not used yet.
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 3.7.1
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: e2494e6ffb89f828
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1744393506060
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] All Known nodes are disconnected. Try one time to connect.
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Initiating connection to node 0:::
+2025-04-11T10:45:06.063-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.o.o.c.c.internals.AQKafkaConsumer : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Connecting to Oracle Database : jdbc:oracle:thin:@mydb_tp
+2025-04-11T10:45:06.319-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/'
+2025-04-11T10:45:06.325-07:00 INFO 20900 --- [earnest_payment_service] [ main] c.oracle.finance.payments.Application : Started Application in 4.764 seconds (process running for 5.09)
+2025-04-11T10:45:07.295-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.o.o.c.c.internals.AQKafkaConsumer : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Database Consumer Session Info: 15301,42442. Process Id 307858 Instance Name e2o1pod7
+2025-04-11T10:45:07.366-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Reconnect successful to node 7::ADMIN
+2025-04-11T10:45:08.178-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] org.oracle.okafka.clients.Metadata : Cluster ID: e2o1pod
+2025-04-11T10:45:08.178-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+2025-04-11T10:45:09.645-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+```
+
+## Task 5: Verify overdraft logging using ORDS
+
+1. Open a new terminal
+
+2. Run the following cURL command to initiate an earnest payment from CUST0001 to CUST0002 for $10,000 using the ORDS TxEventQ API.
+```bash
+curl -X POST -u "$USERNAME:$DBPASSWORD" \
+ -H 'Content-Type: application/json' \
+ "${ORDSURL}admin/_/db-api/stable/database/txeventq/topics/earnest_payment" -d '{
+ "records": [
+ { "key": "xyz", "value": "{\"sourceCustomer\": \"CUST0001\", \"destinationCustomer\": \"CUST0002\", \"amount\": 10000 }" }
+ ]
+}'
+```
+
+3. Switch to the terminal, and run the following cURL command to verify the overdraft was logged:
+
+```bash
+curl -s -X GET "http://localhost:8086/overdraft" | jq
+```
+
+You should see the following output:
+
+```bash
+[
+ {
+ "customerId": "CUST0001",
+ "amount": 10000
+ }
+]
+```
+
+**Congratulations, you have successfully completed the Transactional Event Queues Coding Exercise!**
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Anders Swanson
+* **Contributors** -
+* **Last Updated By/Date** - Anders Swanson, April 2025
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-exercise/messaging-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-exercise/messaging-exercise.md
new file mode 100644
index 000000000..0716d489c
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/messaging-exercise/messaging-exercise.md
@@ -0,0 +1,158 @@
+# Code with Transactional Event Queues
+
+## Introduction
+
+**Welcome to the Transactional Event Queues Challenge!**
+
+In this step-by-step lab, you will tackle a challenge focused on messaging with **Transactional Event Queues**. Your goal is add transactions to a messaging microservice in the existing application.
+
+At SeerEquities, the loan department has flagged an issue with earnest payment overdraft logging, affecting auditing and analytics. Currently, loan officers must manually file overdrafts for failed earnest payments in a time-consuming process. To resolve this, the system must be updated to log overdrafts during earnest payment process. Once this is implemented, the processing of earnest payment will automatically include overdraft logging in a single, atomic database transaction.
+
+This is your opportunity to sharpen your skills and explore the power of transactions and messaging with Oracle Database.
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Step-by-step: Transactional Event Queues for step-by-step instructions.
+
+Good luck, and enjoy the process!
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Enhance your understanding of [Transactional Event Queues](https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/aq-introduction.html) and [Oracle REST Data Services (ORDS)](https://www.oracle.com/database/technologies/appdev/rest.html).
+* Gain hands-on experience with transactional messaging and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+
+## Task 1: Challenge Requirements
+
+**About Transactional Event Queues (TxEventQ) **:
+
+TxEventQ is a messaging system built into Oracle Database — that is, TxEventQ runs within the database, providing an interface for applications to asynchronously produce and consume messages using database transactions. TxEventQ was introduced in Oracle Database 19c as the evolution of classic queuing to address the needs of modern event streaming microservices. TxEventQ is included as a free-of-charge Oracle Database feature.
+
+In this challenge, you'll leverage the transactional capabilities of TxEventQ's Kafka Java Clients API to work with database records from an event-streaming context.
+
+**Coding Requirements**:
+
+This challenge consists of **three steps**:
+
+* First, browse the transactional messaging code to get an understanding of Oracle Database's Kafka Java Client APIs.
+* Second, update the earnest payments service to support overdraft logging.
+* Third, publish an earnest payment event that should trigger an overdraft and validate it using ORDS.
+
+## Task 2: Understand the Kafka Java Client APIs
+
+1. In the EarnestPaymentsConsumer.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/consumer/EarnestPaymentsConsumer.java), find the # 🔍 `run` method at line 42.
+ 2. The `run` method starts a Oracle Database consumer on a given collection of topics, processing each batch of records it receives. If you have written Java code using Apache Kafka, this method may look very familiar.
+3. In the EarnestPaymentsConsumer.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/consumer/EarnestPaymentsConsumer.java), find the # 🔍 `processRecords` method at line 57.
+ 4. The `processRecords` method iterates through each record received by the consumer, and processes the earnest payment.
+ 5. If the payment is successful, the destination account is debited a given amount from the source account (lines 61-63).
+ 6. If the payment fails due to an overdraft, the transaction is dropped (lines 64-64).
+
+Database operations done in the `processRecords` method use the database connection provided by the Oracle Database consumer: this means all database operations done in this method occur the _same transaction_ as the consumer. Transactional messaging capabilities allow us to easily roll back or commit records in the context of event streaming.
+
+## Task 3: Update earnest payments service
+
+The company has requested an enhancement to earnest payment processing, and would now like to overdrafts to be automatically logged.
+
+1. In the EarnestPaymentsService.java file (financial-services/earnest-payment-service/src/main/java/com/oracle/finance/payments/service/EarnestPaymentsService.java), find the # 🔍 processOverdraft method Details Section at line 70
+2. Update the processOverdraft method to save the overdraft information.
+
+> Note that the `Connection` object provided to the `processOverdraft` method is the same database connection used by the earnest payments consumer. Any database operations on this connection will occur in the same transaction as overall consumer processing.
+
+```java
+public void processOverdraft(Connection conn, OverdraftException oe) throws SQLException {
+ // TODO: implement overdraft logging
+}
+```
+
+**HINT** Use the provided `insertOverdraft` query with a JDBC `PreparedStatement`. Parameters for the overdraft log are provided in the `OverdraftException` object.
+
+In the application.yaml file (financial-services/earnest-payment-service/src/main/resources/application.yaml), find the # 🔍 consumerGroup property at line 9. Update this value to `earnest_payment_consumer_test`:
+
+```yaml
+okafka:
+ consumerGroup: earnest_payment_consumer_test
+```
+
+> Changing the consumer group configures our updated earnest payments service to process records separately from the old service.
+
+## Task 4: Start the updated earnest payments service
+
+Now that you've updated the service, we'll restart it to test the new functionality. From the financial-services/earnest-payment-service directory, start the earnest payments service using Maven:
+
+```bash
+mvn -o spring-boot:run -Dmaven.repo.local=/financial-services/repo
+```
+
+You should see output similar to the following:
+
+```bash
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.o.o.clients.consumer.ConsumerConfig : These configurations '[max.poll.records]' were supplied but are not used yet.
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 3.7.1
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: e2494e6ffb89f828
+2025-04-11T10:45:06.060-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1744393506060
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] All Known nodes are disconnected. Try one time to connect.
+2025-04-11T10:45:06.062-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Initiating connection to node 0:::
+2025-04-11T10:45:06.063-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.o.o.c.c.internals.AQKafkaConsumer : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Connecting to Oracle Database : jdbc:oracle:thin:@mydb_tp
+2025-04-11T10:45:06.319-07:00 INFO 20900 --- [earnest_payment_service] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/'
+2025-04-11T10:45:06.325-07:00 INFO 20900 --- [earnest_payment_service] [ main] c.oracle.finance.payments.Application : Started Application in 4.764 seconds (process running for 5.09)
+2025-04-11T10:45:07.295-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.o.o.c.c.internals.AQKafkaConsumer : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Database Consumer Session Info: 15301,42442. Process Id 307858 Instance Name e2o1pod7
+2025-04-11T10:45:07.366-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Reconnect successful to node 7::ADMIN
+2025-04-11T10:45:08.178-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] org.oracle.okafka.clients.Metadata : Cluster ID: e2o1pod
+2025-04-11T10:45:08.178-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+2025-04-11T10:45:09.645-07:00 INFO 20900 --- [earnest_payment_service] [ task-1] o.oracle.okafka.clients.NetworkClient : [Consumer clientId=consumer-earnest_payments-1, groupId=earnest_payments] Available Nodes 1
+```
+
+## Task 5: Verify overdraft logging using ORDS
+
+1. Open a new terminal
+
+2. Run the following cURL command to initiate an earnest payment from CUST0001 to CUST0002 for $10,000 using the ORDS TxEventQ API.
+```bash
+curl -X POST -u "$USERNAME:$DBPASSWORD" \
+ -H 'Content-Type: application/json' \
+ "${ORDSURL}admin/_/db-api/stable/database/txeventq/topics/earnest_payment" -d '{
+ "records": [
+ { "key": "xyz", "value": "{\"sourceCustomer\": \"CUST0001\", \"destinationCustomer\": \"CUST0002\", \"amount\": 10000 }" }
+ ]
+}'
+```
+
+3. Switch to the terminal, and run the following cURL command to verify the overdraft was logged:
+
+```bash
+curl -s -X GET "http://localhost:8086/overdraft" | jq
+```
+
+You should see the following output:
+
+```bash
+[
+ {
+ "customerId": "CUST0001",
+ "amount": 10000
+ }
+]
+```
+
+**Congratulations, you have successfully completed the Transactional Event Queues Coding Exercise!**
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Anders Swanson
+* **Contributors** -
+* **Last Updated By/Date** - Anders Swanson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/creditreport-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/creditreport-exercise.md
new file mode 100644
index 000000000..c897d73dd
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/creditreport-exercise.md
@@ -0,0 +1,292 @@
+# Create a Creditreport Microservice
+
+## Introduction
+
+**Welcome to the Microservice creditreport Challenge!**
+
+In this lab, you will tackle an exciting coding challenge focused on **microservice, spring boot and Oracle cloud Spring Boot starter for database**. Your goal is to enhance the existing application by implementing an update that will create a GET REST endpoint that produces a creditreport that the frontend UI than will consume and the loan officer can see the information.
+
+Spring Boot is a Java framework that makes it easier to create and run Java applications. It simplifies the configuration and setup process, allowing developers to focus more on writing code for their applications.
+
+Spring Boot Starter is a set of convenient dependency descriptors you can include in your application to simplify the setup of Spring applications. It provides a way to bundle common dependencies and configurations, allowing developers to get started quickly with minimal setup.
+
+At SeerEquites, the loan officer will see the creditreport in his dashboard and make decisions based on the report.
+
+This is your opportunity to sharpen your skills and explore the power of microservices, Spring Boot and Spring Oracle Cloud Database starter.
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding.
+
+Good luck, and happy coding!
+
+Estimated Time: 20 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Download and unpack the stub code.
+* Configure the application to use Spring Cloud Oracle Database Starter for Universal Connection Pooling (UCP).
+* Use Jupyter to finish the application code (JPA, DTO, REST endpoint and more).
+* Test the application at various stages
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle Cloud account.
+* Successfully completed Lab 1: Run the Demo.
+* Successfully completed Lab 3: Connect to Development Environment.
+* A good understanding of Java.
+* Google Chrome or Firefox is the preferred browser.
+
+## Task 1: Familiarize yourself with the stub code
+
+In the Jupyter environment expand the root level `creditreport` folder and to look around in the stub code.
+
+* The `controller` package contains the Spring REST controller. You will be modifying this file by creating a REST endpoint.
+* The `dto` package contains the DTOs (Data Transfer Objects). You will use the DTOs when creating the creditreport service.
+* The `model` package contains the JPA entities (Clients and ClientDebt). They reflect the Oracle Autonomous Database 23ai tables that the service is using.
+* The `repository` package contains the JPA Repositories. The API is for CRUD operations and also API for pagination and sorting. You will be modifying the ClientsRepository. You will enhance the Clients JPA repository.
+* The `service` package contains the logic that creates the creditreport DTO. You will create this logic.
+
+
+
+## Task 2: Run the application and add Spring Cloud Oracle Database starter for UCP
+
+Open a terminal window and execute the following command. If you look at the output you will see that fails to start.
+
+```bash
+cd $HOME/creditreport; mvn -o spring-boot:run -DskipTests -Dmaven.repo.local=/financial-services/repo
+```
+
+The output will looks like this:
+
+```log
+***************************
+APPLICATION FAILED TO START
+***************************
+
+Description:
+
+Failed to bind properties under 'spring.datasource.type' to java.lang.Class:
+
+ Property: spring.datasource.type
+ Value: "oracle.ucp.jdbc.PoolDataSource"
+ Origin: class path resource [application.yaml] - 18:11
+ Reason: failed to convert java.lang.String to java.lang.Class (caused by java.lang.ClassNotFoundException: oracle.ucp.jdbc.PoolDataSource)
+
+Action:
+
+Update your application's configuration
+```
+
+The reason is that the application want to use Oracle Universal Connection Pooling (UCP) and the right dependency hasn't been added to the application `pom.xml`. To resolve the problem we need to add Spring Cloud Oracle Database starter for UCP dependency to the application. Open the `pom.xml` file and add the following dependency. The pom file is in the `root` directory of the `creditscore` application:
+
+```xml
+
+ com.oracle.database.spring
+ oracle-spring-boot-starter-ucp
+ 25.1.0
+
+```
+
+Make sure you put the dependency in the right location (e.g. inside the `` tag). Save the file.
+
+
+
+In a terminal window run the application again.
+
+```bash
+source $HOME/.env; cd $HOME/creditreport; mvn -o spring-boot:run -DskipTests -Dmaven.repo.local=/financial-services/repo
+```
+
+The console log will look something like this:
+
+```log
+2025-04-10T21:07:41.900Z INFO 13325 --- [creditreport] [ main] c.e.c.CreditreportApplication : Started CreditreportApplication in 9.992 seconds (process running for 10.318)
+```
+
+In a different terminal window (keep the application running) execute the following command:
+
+```bash
+curl -v http://localhost:8080/creport/CUST_1000
+```
+
+The output will look like this:
+
+```log
+opc@livelabs ~]$ curl -v http://localhost:8080/creport/CUST_1000
+* Trying ::1...
+* TCP_NODELAY set
+* Connected to localhost (::1) port 8080 (#0)
+> GET /creport/CUST_1000 HTTP/1.1
+> Host: localhost:8080
+> User-Agent: curl/7.61.1
+> Accept: */*
+>
+< HTTP/1.1 200
+< Content-Length: 0
+< Date: Thu, 10 Apr 2025 21:09:47 GMT
+<
+* Connection #0 to host localhost left intact
+```
+
+The command will not return any data but a HTTP 200 code that means that a request has succeeded, indicating that the server has successfully processed the request and returned the requested resource.
+
+This is the GET REST endpoint you will build going forward in the exercise.
+
+Stop the application by typing `Ctrl-C` in the terminal window where the application is running.
+
+## Task 5: Add JPA Repository findByCustomerID method
+
+Open the JPA repository class `ClientsRepository.java` (lives in the `creditreport/src/main/java/com/example/creditreport/repository`) and add the following method and save the file.
+
+```java
+Clients findByCustomerId(String customerId);
+```
+
+
+
+This method returns a Client object for a specific `customerId` from the `CLIENTS` table in the Autonomous Database 23ai that the application is using.
+
+## Task 6: Create the service that creates the creditreport
+
+Open the Service class `CreditReportService.java` and add the following code to the `CreditReportDTO` method. Make sure that you delete the already existing `return null` statement. Don't forget to save the file.
+
+```java
+ // Find the client using the JPA repository method
+ Clients client = clientsRepository.findByCustomerId(customerId);
+ if (client == null) {
+ return null;
+ }
+
+ // Set total dept to 0
+ debtByCustomer = 0;
+
+ // Create a List with client_depts
+ List clientDeptDTOs = client.getClientDepts().stream().map(clientDebt -> {
+
+ // Add up total debt for customer
+ debtByCustomer = debtByCustomer + clientDebt.getDebtAmount();
+
+ ClientDeptDTO clientDeptDTO = new ClientDeptDTO();
+ clientDeptDTO.setId(clientDebt.getId());
+ clientDeptDTO.setDebtType(clientDebt.getDebtType());
+ clientDeptDTO.setDebtAmount(clientDebt.getDebtAmount());
+ return clientDeptDTO;
+ }).toList();
+
+ // Create the Creditreport aka ClientDTO
+ CreditreportDTO creditreportDTO = new CreditreportDTO();
+ creditreportDTO.setCreditReportId(reportId());
+ creditreportDTO.setCustomerId(client.getCustomerId());
+ creditreportDTO.setGenerationDate(new Date());
+ creditreportDTO.setCreditScore(calculateCreditScore());
+ creditreportDTO.setTotalDebtAmount(debtByCustomer);
+ creditreportDTO.setClientDepts(clientDeptDTOs);
+
+ return creditreportDTO;
+```
+
+
+
+Click *File -> Save All*. In a terminal window run the following command to make sure that the application compiles and runs properly:
+
+```bash
+source $HOME/.env; cd $HOME/creditreport; mvn -o spring-boot:run -DskipTests -Dmaven.repo.local=/financial-services/repo
+```
+
+The application should start and you will get a log message that looks like this:
+
+```log
+2025-04-16T12:29:17.446-05:00 INFO 23912 --- [creditreport] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
+2025-04-16T12:29:17.451-05:00 INFO 23912 --- [creditreport] [ main] c.e.c.CreditreportApplication : Started CreditreportApplication in 15.625 seconds (process running for 15.872)
+```
+
+Stop the application by pressing `Ctrl-C`.
+
+## Task 7: Create the GET REST Endpoint
+
+Open the `RestController` class called `CreditReportController.java` and add the following code to the `getReport` method. Make sure that you delete the already existing `return null` statement.
+
+```java
+log.info("*** Getting creditreport for customer ID: " + customerId);
+
+CreditreportDTO creditreportDTO = creditReportService.getClientWithDepts(customerId);
+return creditreportDTO != null ? ResponseEntity.ok(creditreportDTO) : ResponseEntity.notFound().build();
+```
+
+
+
+Click *File -> Save All*. In a terminal window run the following command to make sure that the application compiles and runs properly:
+
+```bash
+source $HOME/.env; cd $HOME/creditreport; mvn -o spring-boot:run -DskipTests -Dmaven.repo.local=/financial-services/repo
+```
+
+The application should start and the log output will look similar to this:
+
+```log
+2025-04-16T12:38:57.809-05:00 INFO 25978 --- [creditreport] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
+2025-04-16T12:38:57.814-05:00 INFO 25978 --- [creditreport] [ main] c.e.c.CreditreportApplication : Started CreditreportApplication in 14.617 seconds (process running for 14.844)
+```
+
+Keep the application running, you will test the endpoint in the next task.
+
+## Task 8: Test the REST endpoint
+
+Open a new terminal window (or use an existing one) and execute the following command:
+
+```bash
+curl -s http://localhost:8080/creport/CUST_3000 | jq
+```
+
+The endpoint response will look like this
+
+```json
+{
+ "creditReportId": "2bdbeca2-d2b7-4e4f-916b-508435f1c66b",
+ "customerId": "CUST_3000",
+ "creditScore": 596,
+ "generationDate": "2025-04-16T17:44:56.318+00:00",
+ "clientDepts": [
+ {
+ "id": 5,
+ "debtType": "Personal",
+ "debtAmount": 5000
+ },
+ {
+ "id": 6,
+ "debtType": "Business",
+ "debtAmount": 22000
+ }
+ ],
+ "totalDebtAmount": 27000
+}
+```
+
+The JSON document above, is what the `CreditreportDTO` object contains. The document is created with data from the `CLIENTS` and `CLIENT_DEPT` tables. The `creditScore` is a random number between 500 and 900, so is the `creditReportId`.
+
+If you look at the output window where the application is running you can see that the application is using JPA to query the Oracle Autonomous Database 23ai and construct the creditreport.
+
+```log
+2025-04-16T12:54:31.399-05:00 INFO 29083 --- [creditreport] [nio-8080-exec-5] c.e.c.controller.CreditreportController : *** Getting creditreport for customer ID: CUST_3000
+Hibernate: select c1_0.customer_id,c1_0.age,c1_0.city,c1_0.first_name,c1_0.income,c1_0.last_name,c1_0.state,c1_0.veteran,c1_0.zip_code from clients c1_0 where c1_0.customer_id=?
+Hibernate: select cd1_0.customer_id,cd1_0.id,cd1_0.application_id,cd1_0.debt_amount,cd1_0.debt_type from client_debt cd1_0 where cd1_0.customer_id=?
+```
+
+**Congratulations, you have successfully completed Create a Creditreport Microservice Coding Exercise!** You can close all the opened terminal windows and files.
+
+## Learn More
+
+* [Spring Cloud Oracle Starters](https://oracle.github.io/spring-cloud-oracle/latest/reference/html/index.html)
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+* [OCI Code Editor](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/code_editor_intro.htm)
+
+## Acknowledgements
+
+* **Authors** - Andy Tael
+* **Contributors** - Mark Nelson
+* **Last Updated By/Date** - Andy Tael, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/add-jpa-method.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/add-jpa-method.png
new file mode 100644
index 000000000..1ccdf187b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/add-jpa-method.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/credit-report-dto-method.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/credit-report-dto-method.png
new file mode 100644
index 000000000..8b2c03fc5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/credit-report-dto-method.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/creditreport-dto-method.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/creditreport-dto-method.png
new file mode 100644
index 000000000..04ef98a09
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/creditreport-dto-method.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/familiarize.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/familiarize.png
new file mode 100644
index 000000000..a690db810
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/familiarize.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/get-report-method.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/get-report-method.png
new file mode 100644
index 000000000..e87a1f732
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/get-report-method.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/pom-file.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/pom-file.png
new file mode 100644
index 000000000..36a7c34f1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/pom-file.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/terminal.png
new file mode 100644
index 000000000..6de764901
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/test-application.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/test-application.png
new file mode 100644
index 000000000..f8050771d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/test-application.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/ucp-dep.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/ucp-dep.png
new file mode 100644
index 000000000..1ead72dbd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/microservice-creport/images/ucp-dep.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith-5-ai.png
new file mode 100644
index 000000000..d09040ac2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith.png
new file mode 100644
index 000000000..02892f848
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/login.png
new file mode 100644
index 000000000..d34ea2de5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/open-terminal.png
new file mode 100644
index 000000000..30e21a9a4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/prompt-ai-exercise.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/prompt-ai-exercise.md
new file mode 100644
index 000000000..01854687f
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai-exercise/prompt-ai-exercise.md
@@ -0,0 +1,111 @@
+# Code with Generative AI
+
+## Introduction
+
+**Welcome to the Code with Generative AI Challenge!**
+
+In this lab, you will tackle an exciting developer coding challenge focused on **AI Vector Search**. Your goal is to enhance the existing application by implementing an update that will elevate its functionality. This is your opportunity to sharpen your skills and explore the power of AI-driven search.
+
+**Are you up for the challenge?**
+
+If you're ready to dive in, proceed with this lab and start coding. If you prefer a more guided approach with a detailed walkthrough, you can continue to Lab 4b Step-by-step: Code with Generative AI for step-by-step instructions.
+
+Good luck, and enjoy the process!
+
+Estimated Time: 30 minutes
+
+
+### Objectives
+In this lab, you will:
+* Enhance your understanding of Generative AI by applying it to a real-world developer coding challenge.
+* Gain hands-on experience with fine-tuning and refining application features to meet specific development requirements.
+
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+
+## Task 1: Challenge Requirements
+
+The company has requested an enhancement to the current loan recommendation system. The loan officer has indicated that the existing 3 loan options are insufficient, and they'd like to see the top 5 loan options instead.
+
+1. Update the Customers.py and Decision.py files to make the necessary changes in the code so that the AI prompt returns the top 5 loans instead of the current 3.
+
+2. Ensure the output displays the top 5 loans as shown in the image below:
+
+ 
+
+## Task 2: Modify the Required Files
+
+In this task, we will show you how to access the files needed to complete the challenge.
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. After making the necessary changes in the Customers.py file so that the AI prompt returns the top 5 loans instead of the current 3, you will need to save the file before opening the Decision.py file.
+
+ 
+
+4. Select the **Decision.py** file.
+
+ 
+
+5. After making the necessary changes in the Decision.py file so that the AI prompt returns the top 5 loans instead of the current 3, you will need to save the file.
+
+ 
+
+## Task 3: Launch the Application
+
+In this task, we will show you how to launch the application.
+
+1. Select the **Launcher** tab and open the **terminal**.
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+ $
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 4: View the Results
+
+In this task, we will show you how to view the changes you made in the application.
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the 5 AI generated loan recommendations will be displayed.
+
+ 
+
+**Congratulations, you have successfully completed the Generative AI Challenge!** You have updated the files to make the necessary changes in the code so that the AI prompt returns the top 5 loans instead of the current 3. The company can now see more loans options and provide better service to their customer.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/272-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/272-code.png
new file mode 100644
index 000000000..6a59a5921
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/272-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-1.png
new file mode 100644
index 000000000..384ac08a8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-2.png
new file mode 100644
index 000000000..a62c75c17
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-3.png
new file mode 100644
index 000000000..f9dd71a6c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-4.png
new file mode 100644
index 000000000..a46c3d094
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3-to-5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/353-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/353-code.png
new file mode 100644
index 000000000..0a3ba18b3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/353-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/362-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/362-code.png
new file mode 100644
index 000000000..830c19c1d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/362-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/370-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/370-code.png
new file mode 100644
index 000000000..59b285860
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/370-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/378-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/378-code.png
new file mode 100644
index 000000000..170cb4d59
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/378-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/395-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/395-code.png
new file mode 100644
index 000000000..3301378b0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/395-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-1.png
new file mode 100644
index 000000000..c869c2d60
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-2.png
new file mode 100644
index 000000000..91e3e5d37
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-3.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-3.png
new file mode 100644
index 000000000..36ea976e8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-3.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-4.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-4.png
new file mode 100644
index 000000000..8a824ce84
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/3to5-4.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/406-code.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/406-code.png
new file mode 100644
index 000000000..bc639405a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/406-code.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/ai-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/ai-exercise.png
new file mode 100644
index 000000000..434d7b9df
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/ai-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-pages.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-pages.png
new file mode 100644
index 000000000..ed8a3a92b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-pages.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-url.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-url.png
new file mode 100644
index 000000000..d01516965
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/click-url.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/customers-py.png
new file mode 100644
index 000000000..9c300a873
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/decision-py.png
new file mode 100644
index 000000000..447924f31
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/dev-env.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/dev-env.png
new file mode 100644
index 000000000..7f65f8193
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/dev-env.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-dropdown.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-dropdown.png
new file mode 100644
index 000000000..9c724df26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-dropdown.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-exercise.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-exercise.png
new file mode 100644
index 000000000..9d3fb5692
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/graph-exercise.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith-5-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith-5-ai.png
new file mode 100644
index 000000000..d09040ac2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith-5-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith.png
new file mode 100644
index 000000000..02892f848
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-ai.png
new file mode 100644
index 000000000..1273ce0ec
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-graph.png
new file mode 100644
index 000000000..adfae9423
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods.png
new file mode 100644
index 000000000..cba8dbfc8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/jupyter-login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/jupyter-login.png
new file mode 100644
index 000000000..c3ba1fde6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/jupyter-login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/login.png
new file mode 100644
index 000000000..d34ea2de5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/open-terminal.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/open-terminal.png
new file mode 100644
index 000000000..208f97dde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/open-terminal.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-customers-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-customers-py.png
new file mode 100644
index 000000000..3592c8203
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-customers-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-decision-py.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-decision-py.png
new file mode 100644
index 000000000..ea289adf6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/images/save-decision-py.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/prompt-ai.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/prompt-ai.md
new file mode 100644
index 000000000..c58fd1ca6
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/prompt-ai/prompt-ai.md
@@ -0,0 +1,115 @@
+# Code with AI Vector Search step-by-step
+
+## Introduction
+
+In this lab, we’ll provide a step-by-step guide to help you successfully complete the coding challenge from the previous lab. This step-by-step guide will walk you through the necessary updates, providing solutions and insights to help you fully understand how to utilize AI Vector Search in a practical scenario.
+
+Let’s dive in and unlock the full potential of AI Vector Search in your application!
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+* Enhance your understanding of AI Vector Search by applying it to a real-world developer coding challenge.
+* Gain hands-on experience with integrating AI Vector Search and refining application features to meet specific development requirements.
+
+### Prerequisites
+
+This lab assumes you have:
+* An Oracle Cloud account
+* Successfully completed Lab 1: Run the Demo
+* Successfully completed Lab 3: Connect to Development Environment
+
+## Task 1: Challenge Requirements
+The company has requested an enhancement to the current loan recommendation system. The loan officer has indicated that the existing 3 loan options are insufficient, and they'd like to see the top 5 loan options instead.
+
+1. Update the Customers.py and Decision.py files to make the necessary changes in the code so that the AI prompt returns the top 5 loans instead of the current 3.
+
+2. Ensure the output displays the top 5 loans like the image below:
+
+ 
+
+## Task 2: Modify the Cutomers.py File
+
+1. Click **Pages**.
+
+ 
+
+2. Select the **Customers.py** file.
+
+ 
+
+3. On lines 477 and 478, change the value 3 to **5**, as we need to display the top 5 loan recommendations instead of 3.
+
+ 
+
+4. Save the Customers.py file.
+
+ 
+
+## Task 3: Modify the Decision.py File
+
+1. Select the **Decision.py** file.
+
+ 
+
+2. On line 283, change the value 3 to **5**.
+
+ 
+
+3. On line 297, change the value 3 to **5**.
+
+ 
+
+4. On line 312, change the value 3 to **5**.
+
+ 
+
+5. Save the Decision.py file.
+
+ 
+
+## Task 4: Launch the Application
+
+1. Select the **Launcher** tab and open the **terminal**
+
+ 
+
+2. Copy the ./run.sh command and paste it into the terminal.
+
+ ````bash
+ $
+ ./run.sh
+
+ ````
+
+3. Click the URL displayed in the terminal to launch the SeerEquities Loan Management application.
+
+ 
+
+4. Enter in a username and click **Login**.
+
+ 
+
+## Task 5: View the Results
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. This will display the customers loan application details. In approximately 15 seconds, the 5 AI generated loan recommendations will be displayed.
+
+ 
+
+**Congratulations, you have successfully completed the Generative AI Challenge!** You have updated the files to make the necessary changes in the code so that the AI prompt returns the top 5 loans instead of the current 3. The company can now see more loans options and provide better service to their customer.
+
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Linda Foinding, Francis Regalado
+* **Contributors** - Kamryn Vinson, Eddie Ambler, Kevin Lazarz
+* **Last Updated By/Date** - Kamryn Vinson, April 2025
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/bindvar.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/bindvar.png
new file mode 100644
index 000000000..0bd1f1318
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/bindvar.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatehandler.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatehandler.png
new file mode 100644
index 000000000..1440abb16
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatehandler.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatetemplate.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatetemplate.png
new file mode 100644
index 000000000..30ab4b548
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/clickcreatetemplate.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandler.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandler.png
new file mode 100644
index 000000000..cacd50ae4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandler.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandlersuccess.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandlersuccess.png
new file mode 100644
index 000000000..f138b6919
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createhandlersuccess.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createmodulefloodzone.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createmodulefloodzone.png
new file mode 100644
index 000000000..3d9bd130d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createmodulefloodzone.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createtemplate.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createtemplate.png
new file mode 100644
index 000000000..e59185e3c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/createtemplate.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataload.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataload.png
new file mode 100644
index 000000000..5af3566e6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataload.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataloadlanding.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataloadlanding.png
new file mode 100644
index 000000000..24da5e3fd
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/dataloadlanding.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/floodzonestable.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/floodzonestable.png
new file mode 100644
index 000000000..ef6e2f089
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/floodzonestable.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/fzquerysuccess.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/fzquerysuccess.png
new file mode 100644
index 000000000..6e690c721
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/fzquerysuccess.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/geojsontools.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/geojsontools.png
new file mode 100644
index 000000000..590bc06ba
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/geojsontools.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040handler.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040handler.png
new file mode 100644
index 000000000..66141fcbf
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040handler.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040module.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040module.png
new file mode 100644
index 000000000..7820edce4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040module.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040template.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040template.png
new file mode 100644
index 000000000..ae6670cee
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/isflooded2040template.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/landingpage.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/landingpage.png
new file mode 100644
index 000000000..ada7d5f14
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/landingpage.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loaddata.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loaddata.png
new file mode 100644
index 000000000..f8ed18a2f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loaddata.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loadtable.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loadtable.png
new file mode 100644
index 000000000..2d76edcd4
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/loadtable.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/modules.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/modules.png
new file mode 100644
index 000000000..73284c080
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/modules.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/reservationinformation.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/reservationinformation.png
new file mode 100644
index 000000000..292fc8d86
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/reservationinformation.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/restserviceslanding.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/restserviceslanding.png
new file mode 100644
index 000000000..bdfe19588
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/restserviceslanding.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/successfulcompletion.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/successfulcompletion.png
new file mode 100644
index 000000000..3757bf343
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/successfulcompletion.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/teneanbeach.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/teneanbeach.png
new file mode 100644
index 000000000..67489fa96
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/teneanbeach.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testfzuri.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testfzuri.png
new file mode 100644
index 000000000..664422d53
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testfzuri.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testisflooded2040.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testisflooded2040.png
new file mode 100644
index 000000000..8b35b872c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/images/testisflooded2040.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/spatial.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/spatial.md
new file mode 100644
index 000000000..7ca2294c2
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/spatial/spatial.md
@@ -0,0 +1,270 @@
+# Rapid Spatial Development with Oracle Database 23ai
+
+## Introduction
+
+In this lab you are asked to quickly prototype an app that is able to project ocean rise and it’s potential impact on property flood insurance. You have been provided data that predicts the ocean rise in the Boston area in 2040, 2060 and 2080.
+
+Estimated Time: 30 minutes
+### Objectives
+
+In this lab, you will:
+* Use Data Load to populate a table with GeoJSON data.
+* Quickly create 2 REST APIs using Oracle Rest Services.
+* Learn about Oracle's GEO Spatial features
+
+### Prerequisites
+
+This lab assumes you have:
+* Successfully completed Lab 1: Run the Demo
+
+## Setup
+
+Log into the Database Actions Console
+
+On the Reservation Information page
+
+
+
+Copy the DB ADMIN Password and click the SQL Worksheet link
+
+Login with
+
+Username: Spatial
+
+Password: DB ADMIN Password
+
+The first page is the Database Actions LandingPage
+The image below shows the Development Options. In this Lab, Rest Services will be used to create Rest Endpoints
+
+
+
+In the next task, Data Load will be used to import the floodzones GeoJSON data
+
+
+
+## Task 1: Import Data
+
+In this task, load the floodzones data into a new floodzones table.
+
+The data is located in an OCI Bucket. Download the file from
+```
+
+https://c4u04.objectstorage.us-ashburn-1.oci.customer-oci.com/p/EcTjWk2IuZPZeNnD_fYMcgUhdNDIDA6rt9gaFj_WZMiL7VvxPBNMY60837hu5hga/n/c4u04/b/livelabsfiles/o/labfiles%2Ffloodzonecdd_converted_geojson.json
+
+```
+and save it as floodzones.json.
+
+There are 3 rows and each row contains:
+
+* FID - a unique identifier
+
+* Desc - description of data
+
+* Geometry - a GeoJSON representation of ocean rise in a specific year
+
+[GeoJSON](https://geojson.org/) is an open standard format based on JSON for representing simple geographical features—such as points, lines, and polygons—along with their associated attributes.
+
+Use DataLoad from Database Actions to create a floodzones table from the local file floodzones.json
+
+
+
+Select Load Data and select Local File, floodzones.json
+
+
+
+Load the Data as a Table
+
+
+
+Run the data load job. This is what success looks like
+
+
+
+Check the table in the SQL Console
+
+
+
+Note that Geometry in the database is now type SDO_Geometry
+
+Oracle [Spatial](https://www.oracle.com/database/spatial-database/) uses the [`SDO_GEOMETRY`](https://docs.oracle.com/en/database/oracle/oracle-database/23/spatl/sdo_geometry-object-type.html) type because it offers a powerful and flexible framework for storing and analyzing spatial data directly within the database. This approach enables efficient querying, integration with GIS tools, and support for complex geospatial applications across industries like urban planning, transportation, environmental management, and more.
+Key Reasons for Using `SDO_GEOMETRY`
+
+1. **Unified Storage Model**:
+
+ Oracle Spatial uses the object-relational model to represent geometries, allowing an entire geometry to be stored in a single column of type `SDO_GEOMETRY` within a table. This simplifies the management of spatial data
+
+2. **Support for Complex Geometries**:
+
+ The `SDO_GEOMETRY` type can represent a wide range of spatial objects, including points, lines, polygons, and multi-part geometries. It supports both simple and complex geometric shapes.
+
+3. **Efficient Querying with Spatial Indexes**:
+
+ Oracle Spatial provides specialized spatial indexing (e.g., R-tree indexes) that enables efficient querying of spatial data based on location or geometry relationships (e.g., containment, intersection). Functions like `SDO_FILTER` and `SDO_RELATE` are optimized for spatial queries.
+
+4. **Integration with Coordinate Systems**:
+
+ The `SDO_SRID` attribute allows geometries to be associated with specific coordinate systems (spatial reference systems). This ensures consistency and accuracy in geospatial calculations
+
+## Task 2: Create Rest APIs using Rest Services
+
+Use Rest Services to create 2 APIs
+
+1. floodzone2040 - return GeoJSON coordinates of the predicted ocean rise in Boston in 2040
+2. isFlooded2040 - determine if the lon/lat coordinates will fall in a floodone in 2040
+
+Use Rest Services from Database Actions
+
+
+
+When creating REST APIs, they are in the form of module/template/handler
+
+Simply put,
+
+* Module is the Rest endpoint definition
+
+* Template is the Rest endpoint parameters
+
+* Handler is the SQL
+
+### floodzone2040
+
+Create the module by clicking MODULES in the upper left and click **Create Module** on the Modules page
+
+
+
+
+
+* Module Name is floodzone2040
+* Base Path is floodzone2040
+* Preview URL shows the Rest endpoint
+* Protected By Privilege is Not protected. This is a public API
+
+Create the Template by clicking **Create Template**
+
+
+
+
+URI Template - will take an id that correlates to fid in the database table
+
+Create the Handler by clicking **Create Handler**
+
+
+
+
+* Method is a GET
+* Pagination is set to 25
+* Source Type is Collection Query
+* Source is the query to run
+
+Conceptually, the **source type** in Oracle REST Data Services (ORDS) refers to the type of data source or logic that a RESTful service handler will execute to generate its response. It determines how ORDS processes the input (SQL query, PL/SQL block, or other data) and transforms it into the desired output format (e.g., JSON, binary, CSV).
+
+
+| **Source Type** | **Description** | **Result Format** | **HTTP Methods** |
+|----------------------------|-----------------------------------------------------------------------------|-------------------|------------------|
+| `Collection Query` | Returns multiple rows as a JSON array | JSON | GET |
+| `Collection Item` | Returns one row as a JSON object | JSON | GET |
+| `CSV Query` | Returns multiple rows as CSV | CSV | GET |
+| `Media` | Returns binary data with HTTP Content-Type header | Binary | GET |
+| `PL/SQL` | Executes a PL/SQL block and returns a result or custom response | JSON/custom | POST, PUT, DELETE |
+
+
+This query retrieves the spatial geometry from the FLOODZONES table for a specific feature identified by `fid = :id`, converts that geometry into GeoJSON format using `SDO_UTIL.TO_GEOJSON`, and returns the resulting GeoJSON as `geojson_output`.
+
+```
+
+SELECT SDO_UTIL.TO_GEOJSON(GEOMETRY) AS geojson_output
+FROM FLOODZONES
+WHERE fid = :id
+
+```
+
+Create the Handler
+
+
+
+Test the query by clicking the Green Play button
+Bind id to 1 which is the key for 2040 floodzone data
+
+
+
+Success
+
+
+
+Test the public Rest Endpoint by clicking Open in New Tab button to the left of URI
+
+
+
+To check that what was returned is valid GeoJSON, copy the geojson_output and paste into [GeoJSON Tools](https://geojson.tools/)
+
+
+
+There was alot of information but that was fairly straighforward. The next API is going to take [longitude,latitude] coordinates and check if the location falls within the 2040 flood zone.
+
+### isFlooded2040
+
+Create the Module for isFlooded2040
+
+
+
+* Module Name is isFlooded2040
+* Base Path is isFlooded2040
+* Preview URL shows the Rest endpoint
+* Protected By Privilege is Not protected. This is a public API
+
+Create the Template. It will take longitude and latitude
+
+
+
+URI Template - will take coordinates, longitude then latitude
+
+Create the Handler
+
+
+
+* Method is a GET
+* Pagination is set to 25
+* Source Type is Collection Query
+* Source is the query to run
+
+This query computes the spatial relationship between a point (with longitude :lon and latitude :lat) and the geometry of the feature in the FLOODZONES table where fid = 1. It uses the [`SDO_GEOM.RELATE`](https://docs.oracle.com/en/database/oracle/oracle-database/23/spatl/sdo_geom-relate.html) function with the 'determine' mask to return the type of spatial relationship (e.g., contains, overlaps) between the point and the specified flood zone geometry. The result is returned as relationship.
+
+```
+
+SELECT SDO_GEOM.RELATE(
+ sdo_geometry(2001, 4326, sdo_point_type(:lon, :lat, NULL), NULL, NULL), -- geom1 (the point)
+ 'determine', -- mask
+ geometry, -- geom2 (the table's geometry)
+ 0.005 -- tol (example tolerance, adjust as needed)
+ ) AS relationship
+FROM FLOODZONES
+WHERE fid = 1;
+
+```
+
+To Test, use the following coordinates
+[-71.042972,42.272597]
+This is the location of Tenean Beach Boston
+
+
+
+Test the public Rest Endpoint by clicking Open in New Tab button to the left of URI
+Bind the variables to the coordinates above and see how Tenean Beach fares in 2040
+
+
+
+Successful call and good news for Tenean Beach. The relationship is Disjoint
+The relationship between the point and the polygon is DISJOINT. The result of DISJOINT simply means that no spatial overlap exists between your input point and any geometry in the dataset.
+
+## Spatial Challenge
+
+Create Rest API isFlooded2080. Determine Tenean Beach flood status in 2080.
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Doug Drechsel
+* **Contributors** - Mark Nelson, Kevin Lazarz
+* **Last Updated By/Date** - Doug Drechsel, April 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/tables/tables.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/tables/tables.md
new file mode 100644
index 000000000..529dc6f7c
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/tables/tables.md
@@ -0,0 +1,54 @@
+# Tables in LiveLabs
+
+## Tables are cool!
+
+You can define a table in Markdown just like so:
+
+```
+| Tables | Are | Cool |
+| ------------- | :-----------: | ----: |
+| **col 3 is** | right-aligned | $1600 |
+| col 2 is | *centered* | $12 |
+| zebra stripes | ~~are neat~~ | $1 |
+```
+The result looks like this:
+
+| Tables | Are | Cool |
+| ------------- | :-----------: | ----: |
+| **col 3 is** | right-aligned | $1600 |
+| col 2 is | *centered* | $12 |
+| zebra stripes | ~~are neat~~ | $1 |
+
+You can see that there is a default table caption provided which is by default a concatenation of the workshop title and the lab title.
+
+If you don't like the default, you can also provide your own table title by adding the below the table definition:
+
+```
+{: title="My table title"}
+```
+
+The complete markdown looks like this:
+
+```
+| Tables | Are | Cool |
+| ------------- | :-----------: | ----: |
+| **col 3 is** | right-aligned | $1600 |
+| col 2 is | *centered* | $12 |
+| zebra stripes | ~~are neat~~ | $1 |
+{: title="My table title"}
+```
+
+Now our table looks like this:
+
+| Tables | Are | Cool |
+| ------------- | :-----------: | ----: |
+| **col 3 is** | right-aligned | $1600 |
+| col 2 is | *centered* | $12 |
+| zebra stripes | ~~are neat~~ | $1 |
+{: title="My table title"}
+
+As you can see, the numbering is added automatically.
+
+Isn't that cool?
+
+You can also refer to the [LiveLabs Markdown Cheatsheet](https://c4u04.objectstorage.us-ashburn-1.oci.customer-oci.com/p/EcTjWk2IuZPZeNnD_fYMcgUhdNDIDA6rt9gaFj_WZMiL7VvxPBNMY60837hu5hga/n/c4u04/b/livelabsfiles/o/labfiles/LiveLabs_MD_Cheat_Sheet.pdf)
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/files/starter-file.sql b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/files/starter-file.sql
new file mode 100644
index 000000000..9d7e762e8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/files/starter-file.sql
@@ -0,0 +1,101 @@
+/* NOTE: Files cannot contain empty lines (line breaks) */
+/* Specify the base URL that you copied from your files in OCI Object Storage in the define base_URL line below*/
+/* change idthydc0kinr to your real namespace. The name is case-sensitive. */
+/* change ADWCLab to your real bucket name. The name is case-sensitive. */
+/* change us-phoenix-1 to your real region name. The name is case-sensitive. */
+/* you can find these values on the OCI Console .. Storage .. Object Storage screen */
+set define on
+define base_URL='https://objectstorage.us-phoenix-1.oraclecloud.com/n/idthydc0kinr/b/ADWCLab/o'
+/* copy Channels table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CHANNELS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/chan_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* copy Countries table */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COUNTRIES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/coun_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+/* Copy customers */
+begin
+ dbms_cloud.copy_data(
+ table_name =>'CUSTOMERS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/cust1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dem1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/dmsal_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PRODUCTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prod1v3.dat',
+ format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'PROMOTIONS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/prom1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'SALES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/sale1v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'TIMES',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/time_v3.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
+ );
+end;
+/
+begin
+ dbms_cloud.copy_data(
+ table_name =>'COSTS',
+ credential_name =>'OBJ_STORE_CRED',
+ file_uri_list =>'&base_URL/costs.dat',
+ format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
+ );
+end;
+/
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-ai.png
new file mode 100644
index 000000000..39ab529a8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approve.png
new file mode 100644
index 000000000..72fedc9c2
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approved-list.png
new file mode 100644
index 000000000..e707bda8f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot1.png
new file mode 100644
index 000000000..96cd4450d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot2.png
new file mode 100644
index 000000000..8b0082501
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-chatbot2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-dashboard.png
new file mode 100644
index 000000000..3680fd451
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-decision.png
new file mode 100644
index 000000000..d18e6b10e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download-pdf.png
new file mode 100644
index 000000000..a88d58a9b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download.png
new file mode 100644
index 000000000..a8836bcc6
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-save.png
new file mode 100644
index 000000000..cd4d37b41
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-final-loan.png
new file mode 100644
index 000000000..ba4ce001c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-loan.png
new file mode 100644
index 000000000..353b635e7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson.png
new file mode 100644
index 000000000..962e05611
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/alex-anderson.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/app-home.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/app-home.png
new file mode 100644
index 000000000..6cf6ab118
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/app-home.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/click-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/click-dashboard.png
new file mode 100644
index 000000000..0c414e957
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/click-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/code-highlight-1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/code-highlight-1.png
new file mode 100644
index 000000000..decd21130
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/code-highlight-1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/customer-details.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/customer-details.png
new file mode 100644
index 000000000..731356111
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/customer-details.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-ai.png
new file mode 100644
index 000000000..248856574
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approve.png
new file mode 100644
index 000000000..d862e6efa
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approved-list.png
new file mode 100644
index 000000000..b5e6cd49e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-decision.png
new file mode 100644
index 000000000..9fd89efbe
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download-pdf.png
new file mode 100644
index 000000000..31a1cd219
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download.png
new file mode 100644
index 000000000..f0c299bde
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-pdf.png
new file mode 100644
index 000000000..ec60b46ed
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-save.png
new file mode 100644
index 000000000..ff0c3faa0
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-final-loan.png
new file mode 100644
index 000000000..3fcb7925d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-loan.png
new file mode 100644
index 000000000..70c1c72ab
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton.png
new file mode 100644
index 000000000..fa1609474
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-burton.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-return-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-return-dashboard.png
new file mode 100644
index 000000000..f91d0b16b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/evan-return-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/expand-graph.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/expand-graph.png
new file mode 100644
index 000000000..74f0faf5c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/expand-graph.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/income-updated.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/income-updated.png
new file mode 100644
index 000000000..a0e294345
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/income-updated.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-return-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-return-dashboard.png
new file mode 100644
index 000000000..cf4689da1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-return-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-ai.png
new file mode 100644
index 000000000..cfbde3548
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approve.png
new file mode 100644
index 000000000..84a31772f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approved-list.png
new file mode 100644
index 000000000..46c0cdbd1
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-chatbot.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-chatbot.png
new file mode 100644
index 000000000..0d0650da7
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-chatbot.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-decision.png
new file mode 100644
index 000000000..738116f2b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download-pdf.png
new file mode 100644
index 000000000..7b0e8c84e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download.png
new file mode 100644
index 000000000..5d6704d12
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-pdf.png
new file mode 100644
index 000000000..137f24347
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-save.png
new file mode 100644
index 000000000..9cb118a14
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-final-loan.png
new file mode 100644
index 000000000..e7401aa4a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-loan.png
new file mode 100644
index 000000000..3e6f61c08
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith.png
new file mode 100644
index 000000000..377f29a91
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-smith.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-ai.png
new file mode 100644
index 000000000..9d4d9e4f3
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-decision.png
new file mode 100644
index 000000000..1ab41a580
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-denied-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-denied-list.png
new file mode 100644
index 000000000..0e31aca19
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-denied-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download-pdf.png
new file mode 100644
index 000000000..2cca854ea
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download.png
new file mode 100644
index 000000000..aa8605619
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-download.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-graph2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-graph2.png
new file mode 100644
index 000000000..1440819c5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-graph2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pdf.png
new file mode 100644
index 000000000..1a5e43506
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pending-review-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pending-review-list.png
new file mode 100644
index 000000000..db7cd3dcb
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-pending-review-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-save.png
new file mode 100644
index 000000000..8fb76017e
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods.png
new file mode 100644
index 000000000..18423309d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/james-woods.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/login.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/login.png
new file mode 100644
index 000000000..0acc1ff72
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/login.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-ai.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-ai.png
new file mode 100644
index 000000000..5225f56af
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-ai.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approve.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approve.png
new file mode 100644
index 000000000..9314d4e79
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approve.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approved-list.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approved-list.png
new file mode 100644
index 000000000..233a2c034
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-approved-list.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot1.png
new file mode 100644
index 000000000..5388887dc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot2.png
new file mode 100644
index 000000000..796001c26
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-chatbot2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-decision.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-decision.png
new file mode 100644
index 000000000..39c4a0507
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-decision.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-pdf.png
new file mode 100644
index 000000000..547dbfa9c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-save.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-save.png
new file mode 100644
index 000000000..39652ed14
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-save.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-final-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-final-loan.png
new file mode 100644
index 000000000..84a62a8c8
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-final-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-loan.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-loan.png
new file mode 100644
index 000000000..c9b49434d
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos-select-loan.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos.png
new file mode 100644
index 000000000..0eee059ba
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/michael-ramos.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-alex-anderson-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-alex-anderson-pdf.png
new file mode 100644
index 000000000..9d4752622
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-alex-anderson-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-evan-burton-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-evan-burton-pdf.png
new file mode 100644
index 000000000..060b9fbcc
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-evan-burton-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-smith-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-smith-pdf.png
new file mode 100644
index 000000000..6376219d5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-smith-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-woods-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-woods-pdf.png
new file mode 100644
index 000000000..86d412f49
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-james-woods-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-michael-ramos-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-michael-ramos-pdf.png
new file mode 100644
index 000000000..7f6c591f5
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/open-michael-ramos-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/pending-review.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/pending-review.png
new file mode 100644
index 000000000..ae06cbf11
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/pending-review.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/process-selected-pdf.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/process-selected-pdf.png
new file mode 100644
index 000000000..32acecc0a
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/process-selected-pdf.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/profile-updated.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/profile-updated.png
new file mode 100644
index 000000000..dbdff04a9
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/profile-updated.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample1.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample1.png
new file mode 100644
index 000000000..2d9ad4738
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample1.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample2.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample2.png
new file mode 100644
index 000000000..145c9d39c
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/sample2.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/save-details.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/save-details.png
new file mode 100644
index 000000000..ffb3e8a32
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/save-details.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-alex-anderson.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-alex-anderson.png
new file mode 100644
index 000000000..21e962b79
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-alex-anderson.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-dashboard.png
new file mode 100644
index 000000000..2b355708b
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-james-woods-denied.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-james-woods-denied.png
new file mode 100644
index 000000000..b02b44a36
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/select-james-woods-denied.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/start-demo.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/start-demo.png
new file mode 100644
index 000000000..708660e79
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/start-demo.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/upload-document.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/upload-document.png
new file mode 100644
index 000000000..80fc10e41
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/upload-document.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/woods-return-dashboard.png b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/woods-return-dashboard.png
new file mode 100644
index 000000000..92a50b35f
Binary files /dev/null and b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/images/woods-return-dashboard.png differ
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/user-story.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/user-story.md
new file mode 100644
index 000000000..e37345107
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/user-story/user-story.md
@@ -0,0 +1,243 @@
+# Run the Demo
+
+## Introduction
+
+In this lab, you will step into the role of a loan officer using a next-generation loan approval application powered by Oracle Database 23ai. You will work with real loan applications and see how Generative AI, Vector Search, and Graph analytics replace manual review with faster, AI-driven decision-making.
+
+**Disclaimer**: Please note that your results may vary. The information provided is generated by OCI Generative AI services, and your outcomes may differ from those presented.
+
+Estimated Time: 30 minutes
+
+### Objectives
+
+In this lab, you will:
+
+* Review how the Seer Equities Loan approval app incorporates the use of JSON Duality Views, Graph analytics, and other converged database features, all without requiring complex data movement or separate systems.
+
+### Prerequisites
+
+This lab assumes you have:
+
+* An Oracle account to submit your a LiveLabs Sandbox reservation.
+
+## Task 1: Launch the application
+
+1. To access the demo environment, click **View Login Info** in the top left corner of the page. Click the **Start the Demo** link.
+
+ 
+
+2. Enter in a username and click **Login**.
+
+ 
+
+3. Welcome to the SeerEquities Loan Management application! Congratulations, you are now connected to the demo environment. You can now execute the different tasks for this Lab.
+
+ 
+
+## Task 2: Demo - Customer with strong credit score
+
+In this first example, you will use the application to approve a customer with strong credit score. The first user on your to-do list is James Smith.
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Smith**.
+
+ 
+
+2. Opening James Smith’s profile reveals his loan application details—name, location, requested amount, debt, and credit score.
+
+ 
+
+3. At the bottom of James Smith’s profile, you will find the **AI Loan Guru**—a chatbot built on Oracle Database 23ai and Vector search. When prompted, the system uses **RAG** to generate a response. It converts the question and loan data into embeddings, performs a similarity search, and then uses the **GenAI service** to turn the enriched context into a clear, natural language answer. If the customer calls with a question, you can quickly enter it into the AI Loan Guru to generate a relevant response.
+
+
+ **Copy** the question below into the AI chatbot and press **Enter**. What does the AI Loan Guru recommend?
+
+ ```text
+
+ What would be the top 0% down payment loans?
+
+ ```
+
+ 
+
+>💡 In Oracle Database 23ai, **AI Vector Search** allows you to combine your business data with the Large Language Model (LLM) to reduce hallucinations and get accurate answers from your data.
+
+4. Select the **Navigate To Decisions** button.
+
+ 
+
+ After navigating to the decisions page, the AI evaluation runs in the background. It analyzes James’s profile and matches it against available loan options in the database. A custom AI prompt ensures the system uses only internal data—never the internet. In this case, the AI returns three loan options, each with a clear explanation. All options are displayed alongside the AI’s final recommendation: approval.
+
+5. In the **Select Final Approved Loan Option** section, the available loan options are displayed. The loan officer can choose to request more information to refine the offer, but for this scenario, we will proceed by selecting one of the suggested loans.
+
+ 
+
+6. Select the AI-recommended loan labeled as the military veteran loan with the shortest time to close. In this example, that is Loan 26—the only military veteran option shown.
+
+ >Please note that your results may vary. The information provided is generated by OCI Generative AI services, and your outcomes may differ from those presented.
+
+ 
+
+7. Set the final loan status to **Approved**, then click **Save Final Approval & Loan Status** to complete the process.
+
+ The loan status has been updated to 'Approved' and saved to the customer profile.
+
+ 
+
+8. Click the **Generate Decision as PDF** button.
+
+ 
+
+9. Click **Download PDF**
+
+ 
+
+10. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+11. Click the **Return to Dashboard** button to navigate back to the Dashboard.
+
+ 
+
+12. Expand **View Approved Customers**. We can see that James Smith has been removed from the Pending Review Loan Requests list and has been added to the Approved Loan Requests list.
+
+ 
+
+**Conclusion**
+
+Once you select and save one of the 3 loans recommended by the AI:
+
+✅ The customer's loan status is updated.
+
+✅ A finalized PDF decision document is generated.
+
+✅ The dashboard reflects the change in real-time — marking James as Approved.
+
+Congratulations, you have just approved your first customer loan! Proceed to the next task.
+
+## Task 3: Demo - Denying a customer with high risk
+In this example, you will navigate the application to review a customer and deny them as part of the exercise. The second user on your to-do list is James Woods.
+
+1. On the Dashboard page, from the pending review list, select the Customer ID for **James Woods**.
+
+ 
+
+2. Opening James Woods’s profile displays his loan application details. Within a few seconds, the AI automatically generates recommendations. In this case, the system evaluates a less favorable profile and identifies key risk factors.
+
+ This customer has:
+
+ * **$5000 in income**
+ * A **low credit score**
+ * And is requesting a **high loan amount**
+
+ Despite the risk factors, the AI evaluates the profile and suggests next steps. In this case, it recommends a denial—but also provides clear, actionable guidance to help the customer improve their chances of approval in the future.
+
+ 
+
+3. Select the **Navigate to Decisions** button.
+
+ 
+
+>⁉️ **What is the reason that the AI decided to deny this applicant?** ⁉️
+
+
+4. Expand **View Dot Plot: Client-Loan Relationships** to view the graph.
+
+ 
+
+ On the decision page, the loan officer can use **Operational Property Graph** to explore near-approval loan scenarios. Built with **Oracle Graph**, this feature visually maps loans just out of reach and highlights what adjustments—like increasing income or reducing debt—could improve eligibility.
+
+ 
+
+>💡 In Oracle Database 23ai, **Property Graph** allows you to treat your data like a network of connected points, where each point (called a node) and each link (called an edge) has its own details or properties. This setup helps you run graph analytics, like finding important connections or patterns, directly within the database.
+
+5. The loan status is set to **Denied**. Click the **Save Final Approval & Loan Status** button.
+
+ The loan status has been updated to 'Denied' and saved to the customer profile.
+
+ 
+
+6. Press the **Generate Decision as PDF** button to save the AI responses and proceed to the final loan disposition.
+
+ 
+
+7. Click the **Download PDF** button.
+
+ 
+
+8. Display the message the customer would see by opening the downloaded PDF.
+
+ 
+
+9. Click the **Return to Dashboard** button to navigate back to the Dashboard.
+
+ 
+
+10. Expand **View Denied Customers**. You will see that James Woods has been moved from the **Pending Review Loan Requests** list to the **Denied Loan Requests** list.
+
+ 
+
+**Conclusion**
+
+Congratulations, you have finished reviewing a customer with high financial risk! Proceed to the next task.
+
+## Task 4: Demo - Update customer details
+
+Lastly, let’s explore how the system uses JSON Duality Views to handle profile updates. In this task, you will edit a customer’s details. In this example, the customer was asked to submit updated proof of income.
+
+1. On the Dashboard page, from the **Pending Review Loan Requests** list, select the customer ID for **Alex Anderson**.
+
+ 
+
+2. We will upload a document to update Alex's income. Before uploading the document, note that the customer’s income is currently listed as $25,000. On the Customer Details page, click the **Upload Document** button.
+
+ 
+
+3. The PDF file has been loaded. Click the **Process Selected PDF** button.
+
+ 
+
+>💡 **JSON Duality Views** in 23ai let's you update unstructured data in an easy, high-level format while automatically handling the technical details behind the scenes. This makes it faster and simpler to work with messy data and connect it to structured systems.
+
+4. The customer profile has been updated.
+
+ 
+
+5. Refresh the page and note that the income has been updated to $65,000. Thanks to JSON Transform and JSON Duality Views, only the relevant field is modified — leaving the rest of the profile UNTOUCHED.
+
+ 
+
+**Conclusion**
+
+Once the document is uploaded:
+
+✅ The system automatically detects the new income data.
+
+✅ Then their profile will be updated from $25,000 to $65,000.
+
+✅ And thanks to JSON Transform and JSON Duality Views, only the relevant field is modified — leaving the rest of the profile UNTOUCHED.
+
+## Summary
+
+In conclusion our Loan Management App was able to leverage Oracle database 23ai technologies such as **AI Vector Search, Property Graph, and JSON Duality Views** to:
+
+✅ Automate profile evaluations
+
+✅ Provide AI-driven loan recommendations by using an RAG model powered by a Oracle Database 23ai's AI Vector Search and OCI Generative AI service
+
+✅ Enable seamless profile updates with JSON Duality Views
+
+✅ Empower loan officers with actionable insights through Operational Property Graphs
+
+By combining these advanced tools, the application enables faster, smarter decisions and delivers clear guidance on how customers can improve their eligibility.
+
+**Next:** How about learning how the application was implemented in Python? Continue with the next labs and start developing!
+
+## Learn More
+
+* [Oracle Database 23ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/)
+
+## Acknowledgements
+* **Authors** - Kamryn Vinson, Linda Foinding, Francis Regalado
+* **Contributors** - Kevin Lazarz, Eddie Ambler, Ramona Magadan, Mark Nelson, Andy Tael, Anders Swanson, Rahul Tasker
+* **Last Updated By/Date** - Linda Foinding, June 2025
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables-in-another-file.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables-in-another-file.json
new file mode 100644
index 000000000..2492b7b6b
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables-in-another-file.json
@@ -0,0 +1,8 @@
+{
+ "var11": "Variable 1 value but yet different",
+ "var22": "Variable 2 value is different",
+ "random_name2": "LiveLabs rocks & rules!",
+ "name_of_database": "My-Database-Name-is-the-best",
+ "magic": "What is 2*2?",
+ "doc_link": "[more info](https://docs.oracle.com/en/engineered-systems/exadata-database-machine/)"
+ }
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.json
new file mode 100644
index 000000000..8c644daa3
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.json
@@ -0,0 +1,7 @@
+{
+ "var1": "Variable 1 value",
+ "var2": "Variable 2 value",
+ "random_name": "LiveLabs rocks!",
+ "number_of_ocpu_paid": "24",
+ "number_of_ocpu_always_free": "2"
+ }
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.md b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.md
new file mode 100644
index 000000000..fd1c2cde8
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/variables/variables.md
@@ -0,0 +1,68 @@
+# Variables in LiveLabs
+
+## Introduction
+
+You can specify variables in another file and refer to them in your Markdown.
+
+
+## Task 1:
+
+Add the following to your manifest.json in the top section:
+
+```
+ "variables": ["../../variables/variables.json",
+ "../../variables/variables-in-another-file.json"],
+```
+
+## Task 2
+
+Specify the variables in the .json file like this:
+
+*Example: variables.json*
+```
+{
+ "var1": "Variable 1 value",
+ "var2": "Variable 2 value",
+ "random_name": "LiveLabs rocks!",
+ "number_of_ocpu_paid": "24"
+ "number_of_ocpu_always_free": "2"
+ }
+ ```
+
+You can also add multiple files that specify variables (see the example in Task 1).
+
+ *Example: variables_in_another_file.json*
+```
+{
+ "var11": "Variable 1 value but yet different",
+ "var22": "Variable 2 value is different",
+ "random_name2": "LiveLabs rocks & rules!",
+ "name_of_database": "My-Database-Name-is-the-best",
+ "magic": "What is 2*2?"
+ }
+ ```
+
+## Task 3
+
+Now, you can refer to those variables using the following syntax (**Please note that you can see the syntax only in markdown**):
+
+[](var:var1)
+
+or
+
+[](var:magic)
+
+
+### Examples
+
+(Check the markdown to see the syntax - the bold text is the value of the variable)
+
+- Do you know math? This is **[](var:magic)**
+
+- How many OCPUs do I need to run this service in my paid tenancy? You need **[](var:number_of_ocpu_paid)**
+
+- But what if am using 'Always free'? Then you need **[](var:number_of_ocpu_always_free)**
+
+- What is the best name for my database? It is **[](var:name_of_database)**
+
+- Here you can find more info: **[](var:doc_link)**
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/index.html b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/index.html
new file mode 100644
index 000000000..aebbdda4a
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/manifest.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/manifest.json
new file mode 100644
index 000000000..bf458e314
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox/manifest.json
@@ -0,0 +1,51 @@
+{
+ "workshoptitle": "Build a GenAI-Powered Financial Services Loan Approval Application with Oracle Database 23ai",
+ "help": "livelabs-help-database_us@oracle.com",
+ "tutorials": [
+ {
+ "title": "Introduction",
+ "description": "The Introduction is always first. The title and contents menu title match for the Introduction.",
+ "filename": "../../introduction/introduction.md"
+ },
+ {
+ "title": "Lab 1: Run the Demo",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../user-story/user-story.md"
+ },
+ {
+ "title": "Lab 2: Connect to the Development Environment",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../connect-to-env/connect-to-env.md"
+ },
+ {
+ "title": "Lab 3: Coding Basics on Oracle Database 23ai",
+ "description": "Some coding examples",
+ "filename": "../../codingbasics/codingbasics.md"
+ },
+ {
+ "title": "Lab 4: Step by Step - Implement RAG with Oracle Database 23ai",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../build/build.md"
+ },
+ {
+ "title": "Lab 5a: Coding Challenge - AI Vector Search",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../ai-exercise/ai-vector-search-challenge.md"
+ },
+ {
+ "title": "Lab 5b: Coding Challenge - AI Vector Search - Guided",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../ai-exercise/ai-vector-search-challenge-answers.md"
+ },
+ {
+ "title": "Architecture & Workshop Features",
+ "description": "Review the physical and logical architecture behind the application",
+ "filename": "../../app-architecture/app-architecture.md"
+ },
+ {
+ "title": "Need Help?",
+ "description": "Solutions to Common Problems and Directions for Receiving Live Help",
+ "filename": "https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/index.html b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/index.html
new file mode 100644
index 000000000..aebbdda4a
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/manifest.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/manifest.json
new file mode 100644
index 000000000..471571feb
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_event/manifest.json
@@ -0,0 +1,53 @@
+{
+ "workshoptitle": "Build a GenAI-Powered Financial Services Loan Approval Application with Oracle Database 23ai",
+ "help": "livelabs-help-database_us@oracle.com",
+ "tutorials": [
+ {
+ "title": "Introduction",
+ "description": "The Introduction is always first. The title and contents menu title match for the Introduction.",
+ "filename": "../../introduction/introduction-event.md"
+ },
+ {
+ "title": "Lab 1: Connect to the Development Environment",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../connect-to-env/connect-to-env.md"
+ },
+ {
+ "title": "Lab 2: Coding Basics on Oracle Database 23ai",
+ "description": "Some coding examples",
+ "filename": "../../codingbasics/codingbasics.md"
+ },
+ {
+ "title": "Lab 3: Step by Step - Implement RAG with Oracle Database 23ai",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../build/build.md"
+ },
+ {
+ "title": "Lab 4a: Coding Challenge - AI Vector Search",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../ai-exercise/ai-vector-search-challenge.md"
+ },
+ {
+ "title": "Lab 4b: Coding Challenge - AI Vector Search - Guided",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../ai-exercise/ai-vector-search-challenge-answers.md"
+
+ },
+ {
+ "title": "Lab 5: Run the app in your own environment",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../local-tenancy/local-tenancy.md"
+
+ },
+ {
+ "title": "Demo Storyboard",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../user-story/user-story.md"
+ },
+ {
+ "title": "Need Help?",
+ "description": "Solutions to Common Problems and Directions for Receiving Live Help",
+ "filename": "https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/index.html b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/index.html
new file mode 100644
index 000000000..aebbdda4a
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/manifest.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/manifest.json
new file mode 100644
index 000000000..147fcfd0d
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/sandbox_spring/manifest.json
@@ -0,0 +1,51 @@
+{
+ "workshoptitle": "Integrate Spring Boot Microservices into a Financial Services Loan Approval Application with Oracle Database 23ai",
+ "help": "livelabs-help-database_us@oracle.com",
+ "tutorials": [
+ {
+ "title": "Introduction",
+ "description": "The Introduction is always first. The title and contents menu title match for the Introduction.",
+ "filename": "../../introduction_spring/introduction.md"
+ },
+ {
+ "title": "Lab 1: Run the Demo",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../user-story/user-story.md"
+ },
+ {
+ "title": "Lab 2: Connect to the Development Environment",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../connect-to-env/connect-to-env.md"
+ },
+ {
+ "title": "Lab 3: Create a Creditreport Microservice",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../microservice-creport/creditreport-exercise.md"
+ },
+ {
+ "title": "Lab 4: Rapid Spatial Development with Oracle Database 23ai",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../spatial/spatial.md"
+ },
+ {
+ "title": "Lab 5a Challenge Yourself: Code with Transactional Event Queues",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../messaging-exercise/messaging-exercise.md"
+ },
+ {
+ "title": "Lab 5b Step-by-step: Code with Transactional Event Queues",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../messaging-answers/messaging-answers.md"
+ },
+ {
+ "title": "Architecture & Workshop Features",
+ "description": "Review the physical and logical architecture behind the application",
+ "filename": "../../app-architecture/app-architecture.md"
+ },
+ {
+ "title": "Need Help?",
+ "description": "Solutions to Common Problems and Directions for Receiving Live Help",
+ "filename": "https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/index.html b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/index.html
new file mode 100644
index 000000000..aebbdda4a
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Oracle LiveLabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/manifest.json b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/manifest.json
new file mode 100644
index 000000000..104133f36
--- /dev/null
+++ b/dev-ai-app-dev-finance/dev-guide-ai-finance/workshops/tenancy/manifest.json
@@ -0,0 +1,96 @@
+{
+ "workshoptitle": "Build a GenAI-Powered Financial Services Loan Approval Application with Oracle Database 23ai",
+ "help": "livelabs-help-database_us@oracle.com",
+ "tutorials": [
+ {
+ "title": "Introduction",
+ "description": "The Introduction is always first. The title and contents menu title match for the Introduction.",
+ "filename": "../../introduction/introduction.md"
+ },
+ {
+ "title": "Get Started",
+ "description": "Prerequisites for LiveLabs (Oracle-owned tenancies). The title of the lab and the Contents Menu title (the title above) match for Prerequisite lab. This lab is always first.",
+ "filename": "../../cloud-login/cloud-login.md"
+ },
+ {
+ "title": "Lab 1: Demo Guide",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../user-story/user-story.md"
+ },
+ {
+ "title": "Lab 2: Connect to Development Environment",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../connect-to-env/connect-to-env.md"
+ },
+ {
+ "title": "Lab 3: Start coding with Oracle Database 23ai",
+ "description": "Some coding examples",
+ "filename": "../../codingbasics/codingbasics.md"
+ },
+ {
+ "title": "Lab 4: Step by Step - Implement RAG with Oracle Database 23ai",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../build/build.md"
+ },
+ {
+ "title": "Lab 5a Challenge Yourself: Code with AI Vector Search",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../ai-exercise/ai-vector-search-challenge.md"
+ },
+ {
+ "title": "Lab 5b Step-by-step: Code with AI Vector Search",
+ "description": "Labs that follow the introduction are numbered, starting with Lab 1",
+ "filename": "../../ai-exercise/ai-vector-search-challenge-answers.md"
+ },
+ {
+ "title": "Lab 6a Challenge Yourself: Code with Property Graph",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../graph-exercise/graph-exercise.md"
+ },
+ {
+ "title": "Lab 6b Step-by-step: Code with Property Graph",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../graph-answers/graph-answers.md"
+ },
+ {
+ "title": "Lab 7a Challenge Yourself: Code with JSON Duality Views",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../json-exercise/json-exercise.md"
+ },
+ {
+ "title": "Lab 7b Step-by-step: Code with JSON Duality Views",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../json-answers/json-answers.md"
+ },
+ {
+ "title": "Lab 8 Challenge Yourself: Create a Creditreport Microservice",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../microservice-creport/creditreport-exercise.md.md"
+ },
+ {
+ "title": "Lab 9 Challenge Yourself: Spatial Development with Oracle Database 23ai",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../spatial/spatial.md"
+ },
+ {
+ "title": "Lab 10a Challenge Yourself: Code with Transactional Event Queues",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../messaging-exercise/messaging-exercise.md"
+ },
+ {
+ "title": "Lab 10b Step-by-step: Code with Transactional Event Queues",
+ "description": "This is a step-by-step guide showcasing how the demo instance is navigated",
+ "filename": "../../messaging-answers/messaging-answers.md"
+ },
+ {
+ "title": "Application Architecture",
+ "description": "Review the physical and logical architecture behind the application",
+ "filename": "../../app-architecture/app-architecture.md"
+ },
+ {
+ "title": "Need Help?",
+ "description": "Solutions to Common Problems and Directions for Receiving Live Help",
+ "filename": "https://oracle-livelabs.github.io/common/labs/need-help/need-help-freetier.md"
+ }
+ ]
+}
\ No newline at end of file