From b3f556c250d503accc4442e4674420a30153ea83 Mon Sep 17 00:00:00 2001 From: RobertoBarrosoLuque <34043109+RobertoBarrosoLuque@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:33:45 -0700 Subject: [PATCH 1/2] Add code interpreter notebook --- integrations/AgentCore/constants.py | 51 + .../AgentCore/images/code-interpreter.png | Bin 0 -> 179129 bytes integrations/AgentCore/requirements.txt | 4 +- ...anced-data-analysis-code-interpreter.ipynb | 1106 +++++++++++++++++ 4 files changed, 1160 insertions(+), 1 deletion(-) create mode 100644 integrations/AgentCore/constants.py create mode 100644 integrations/AgentCore/images/code-interpreter.png create mode 100644 integrations/AgentCore/strands-agent-advanced-data-analysis-code-interpreter.ipynb diff --git a/integrations/AgentCore/constants.py b/integrations/AgentCore/constants.py new file mode 100644 index 0000000..bf64bf9 --- /dev/null +++ b/integrations/AgentCore/constants.py @@ -0,0 +1,51 @@ +DATA_SCIENTIST_SYSTEM_PROMPT = """ + You are an expert data analysis AI assistant specializing in economic and statistical analysis. You have access to a GDP dataset containing country-level data from 2020-2025 with columns: 'Country', '2020', '2021', '2022', '2023', '2024', '2025'. + + You MUST validate all answers through code execution using the tools provided. DO NOT answer questions without using the tools. + + DATA ANALYSIS PRINCIPLES: + 1. Always load and examine the dataset before answering questions + 2. Verify all statistical calculations, trends, and comparisons through code + 3. Use pandas for data manipulation and analysis, and matplotlib for data visualization + 4. Create visualizations when helpful to illustrate findings + 5. Show your analytical work with actual code execution + 6. Validate data quality and handle missing values appropriately + + VALIDATION PRINCIPLES: + 1. When making claims about calculations or trends - write code to verify them + 2. Use execute_python to perform statistical analysis, data aggregations, and comparisons + 3. Create test scripts to validate your understanding before giving answers + 4. Always show your work with actual code execution + 5. If uncertain, explicitly state limitations and validate what you can + + APPROACH: + - Load the dataset and inspect it before performing analysis + - For questions about specific countries, filter and analyze the relevant data + - For trend analysis, calculate year-over-year changes programmatically + - For comparisons, compute statistics and rankings with code + - For aggregations (regional averages, totals), show the grouping and calculation logic + - Include data validation checks (null values, data types, outliers) + - Document your analytical process for transparency + - The sandbox maintains state between executions, so you can refer to previous results + - Only use the tools and python packages available + + TOOL AVAILABLE: + - execute_python: Run Python code and see output + + PYTHON PACKAGES AVAILABLE: + - pandas + - numpy + - matplotlib + + RESPONSE FORMAT: The execute_python tool returns a JSON response with: + - sessionId: The sandbox session ID + - id: Request ID + - isError: Boolean indicating if there was an error + - content: Array of content objects with type and text/data + - structuredContent: For code execution, includes stdout, stderr, exitCode, executionTime + + For successful code execution, the output will be in content[0].text and also in structuredContent.stdout. + Check isError field to see if there was an error. + + Be thorough, accurate, and always validate your answers with code. Provide clear, data-driven insights backed by actual calculations. + """ \ No newline at end of file diff --git a/integrations/AgentCore/images/code-interpreter.png b/integrations/AgentCore/images/code-interpreter.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8da5496f269d3e4cc034d9e872defd89f159c7 GIT binary patch literal 179129 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�|f49s?ELZ0tGahz_;-lm{92Z#gG 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%0AfbJ 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 literal 0 HcmV?d00001 diff --git a/integrations/AgentCore/requirements.txt b/integrations/AgentCore/requirements.txt index c7f30f8..8c6fc9a 100644 --- a/integrations/AgentCore/requirements.txt +++ b/integrations/AgentCore/requirements.txt @@ -8,4 +8,6 @@ aws-opentelemetry-distro-genai-beta setuptools bedrock-agentcore jupyter -bedrock-agentcore-starter-toolkit \ No newline at end of file +bedrock-agentcore-starter-toolkit +pandas +kagglehub[pandas-datasets] \ No newline at end of file diff --git a/integrations/AgentCore/strands-agent-advanced-data-analysis-code-interpreter.ipynb b/integrations/AgentCore/strands-agent-advanced-data-analysis-code-interpreter.ipynb new file mode 100644 index 0000000..98d3153 --- /dev/null +++ b/integrations/AgentCore/strands-agent-advanced-data-analysis-code-interpreter.ipynb @@ -0,0 +1,1106 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "746626f6b18e1c8c", + "metadata": {}, + "source": [ + "## Data Analysis agent using FireworksAI + Amazon AgentCore Bedrock Code Interpreter\n", + "\n", + "This tutorial demonstrates how to create an AI agent that performs advanced data analysis through code execution using Python. We use Amazon Bedrock AgentCore Code Interpreter to run code that is generated by the LLM running on FireworksAI.\n", + "\n", + "This tutorial is an adaptation of the [agentcore data analysis tutorial](https://github.com/awslabs/amazon-bedrock-agentcore-samples/blob/main/01-tutorials/05-AgentCore-tools/01-Agent-Core-code-interpreter/03-advanced-data-analysis-with-agent-using-code-interpreter/strands-agent-advanced-data-analysis-code-interpreter.ipynb)\n", + "\n", + "We will demonstrate how to use AgentCore Bedrock Code Interpreter to:\n", + "1. Set up a sandbox environment\n", + "2. Configure a strands based agent that performs advanced data analysis by generating code based on the user query\n", + "3. Run top OSS coding models on FireworksAI (Qwen 3 Coder, Deepseek, Kimi, etc)\n", + "4. Execute code in a sandbox environment using Code Interpreter\n", + "5. Display the results back to the user\n", + "\n", + "## Prerequisites\n", + "- AWS account with Bedrock AgentCore Code Interpreter access\n", + "- You have the necessary IAM permissions to create and manage code interpreter resources\n", + "- Required Python packages installed(including boto3, bedrock-agentcore & strands)\n", + "- IAM role should have permissions to invoke models on Amazon Bedrock\n", + " - FireworksAI API access key, if you dont have one get one [here](https://app.fireworks.ai/settings/users/api-keys)\n", + "\n", + "## Your IAM execution role should have the following IAM policy attached" + ] + }, + { + "cell_type": "markdown", + "id": "f323388415caf3f7", + "metadata": {}, + "source": [ + "~~~ {\n", + "\"Version\": \"2012-10-17\",\n", + "\"Statement\": [\n", + " {\n", + " \"Effect\": \"Allow\",\n", + " \"Action\": [\n", + " \"bedrock-agentcore:CreateCodeInterpreter\",\n", + " \"bedrock-agentcore:StartCodeInterpreterSession\",\n", + " \"bedrock-agentcore:InvokeCodeInterpreter\",\n", + " \"bedrock-agentcore:StopCodeInterpreterSession\",\n", + " \"bedrock-agentcore:DeleteCodeInterpreter\",\n", + " \"bedrock-agentcore:ListCodeInterpreters\",\n", + " \"bedrock-agentcore:GetCodeInterpreter\"\n", + " ],\n", + " \"Resource\": \"*\"\n", + " },\n", + " {\n", + " \"Effect\": \"Allow\",\n", + " \"Action\": [\n", + " \"logs:CreateLogGroup\",\n", + " \"logs:CreateLogStream\",\n", + " \"logs:PutLogEvents\"\n", + " ],\n", + " \"Resource\": \"arn:aws:logs:*:*:log-group:/aws/bedrock-agentcore/code-interpreter*\"\n", + " }\n", + "]\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "226b2cb86ff18d9c", + "metadata": {}, + "source": [ + "## How it works\n", + "\n", + "The code execution sandbox enables agents to safely process user queries by creating an isolated environment with a code interpreter, shell, and file system. After a Large Language Model helps with tool selection, code is executed within this session, before being returned to the user or Agent for synthesis.\n", + "\n", + "![architecture local](images/code-interpreter.png)" + ] + }, + { + "cell_type": "markdown", + "id": "859482709c77b03d", + "metadata": {}, + "source": [ + "## 1. Setting Up the Environment\n", + "\n", + "First, let's import the necessary libraries and initialize our Code Interpreter client.\n", + "\n", + "The default session timeout is 900 seconds(15 minutes). However, we start the session with a slightly session timeout duration of 1200 seconds(20 minutes), since we will perform detailed analysis on our data" + ] + }, + { + "cell_type": "code", + "id": "a13da423bac8ddd5", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:31.807246Z", + "start_time": "2025-09-30T02:22:31.436714Z" + } + }, + "source": "!make setup", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting up local environment...\r\n", + "'uv' is already installed.\r\n", + "Virtual environment already exists.\r\n", + "Installing dependencies...\r\n", + "uv pip install -r requirements.txt\r\n", + "\u001B[2mAudited \u001B[1m13 packages\u001B[0m \u001B[2min 86ms\u001B[0m\u001B[0m\r\n" + ] + } + ], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "bb006310a96750c", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T04:32:35.995555Z", + "start_time": "2025-09-30T04:32:33.585005Z" + } + }, + "source": [ + "from bedrock_agentcore.tools.code_interpreter_client import CodeInterpreter\n", + "from strands import Agent, tool\n", + "import json\n", + "from typing import Dict, Any\n", + "from strands.models.openai import OpenAIModel\n", + "from dotenv import load_dotenv\n", + "import os\n", + "\n", + "load_dotenv()\n", + "\n", + "FIREWORKS_API_KEY = os.getenv(\"FIREWORKS_API_KEY\")\n", + "\n", + "assert FIREWORKS_API_KEY is not None, \"FIREWORKS_API_KEY not found in environment variables\"\n", + "\n", + "# Initialize the Code Interpreter within a supported AWS region.\n", + "code_client = CodeInterpreter('us-west-2')\n", + "code_client.start(session_timeout_seconds=1200)" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "'01K6CE9JXACRSTCVNDDHV0GMA8'" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 46 + }, + { + "cell_type": "markdown", + "id": "dbd02b57bd10dda2", + "metadata": {}, + "source": [ + "## 2. Downloading data from Kaggle\n", + "\n", + "We will be using an open source dataset in kaggle which has GDP by country for the years 2020-2025. The link to the dataset is [here](https://www.kaggle.com/datasets/codebynadiia/gdp-per-country-20202025)" + ] + }, + { + "cell_type": "code", + "id": "bef3821f290a589b", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.122859Z", + "start_time": "2025-09-30T02:22:34.086056Z" + } + }, + "source": [ + "import kagglehub\n", + "from kagglehub import KaggleDatasetAdapter\n", + "\n", + "df = kagglehub.dataset_load(\n", + " KaggleDatasetAdapter.PANDAS,\n", + " handle=\"codebynadiia/gdp-per-country-20202025\",\n", + " path=\"2020-2025.csv\"\n", + ")\n", + "\n", + "df.to_csv(\"data/gdp_data.csv\", index=False)\n", + "\n", + "# Drop NaN values to keep things clean\n", + "df = df.dropna()\n", + "\n", + "print(f\"Dataset schema {df.columns}\")\n", + "print()\n", + "print(\"First 5 records:\", df.head())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataset schema Index(['Country', '2020', '2021', '2022', '2023', '2024', '2025'], dtype='object')\n", + "\n", + "First 5 records: Country 2020 2021 2022 2023 2024 \\\n", + "1 Albania 15271 18086.0 19185.0 23388.0 27259.0 \n", + "2 Algeria 164774 185850.0 225709.0 247789.0 264913.0 \n", + "3 Andorra 2885 3325.0 3376.0 3786.0 4038.0 \n", + "4 Angola 66521 84375.0 142442.0 109764.0 115946.0 \n", + "5 Antigua and Barbuda 1412 1602.0 1867.0 2006.0 2225.0 \n", + "\n", + " 2025 \n", + "1 28372.0 \n", + "2 268885.0 \n", + "3 4035.0 \n", + "4 113343.0 \n", + "5 2373.0 \n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", + "id": "b5fc91e0fb83fa05", + "metadata": {}, + "source": [ + "## 3. Preparing Files for Sandbox Environment\n", + "\n", + "We'll create a structure that defines the files we want to create in the sandbox environment." + ] + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.135732Z", + "start_time": "2025-09-30T02:22:35.134004Z" + } + }, + "cell_type": "code", + "source": [ + "def read_file(file_path: str) -> str:\n", + " \"\"\"Helper function to read file content with error handling\"\"\"\n", + " try:\n", + " with open(file_path, 'r', encoding='utf-8') as file:\n", + " return file.read()\n", + " except FileNotFoundError:\n", + " print(f\"Error: The file '{file_path}' was not found.\")\n", + " return \"\"\n", + " except Exception as e:\n", + " print(f\"An error occurred: {e}\")\n", + " return \"\"\n" + ], + "id": "90b483d820eb836b", + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "id": "da44fb745b84c6ca", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.140621Z", + "start_time": "2025-09-30T02:22:35.139159Z" + } + }, + "source": [ + "files_to_create = [\n", + " {\n", + " \"path\": \"data/gdp_data.csv\",\n", + " \"text\": read_file(\"data/gdp_data.csv\")\n", + " }]" + ], + "outputs": [], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "id": "f055bea34c93279", + "metadata": {}, + "source": [ + "## 4. Creating Helper Function for Tool Invocation\n", + "\n", + "This helper function will make it easier to call sandbox tools and handle their responses. Within an active session, you can execute code in supported languages (Python, JavaScript), access libraries based on your dependencies configuration, generate visualizations, and maintain state between executions." + ] + }, + { + "cell_type": "code", + "id": "a74164c54b3b8ad5", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.145013Z", + "start_time": "2025-09-30T02:22:35.143494Z" + } + }, + "source": [ + "def call_tool(tool_name: str, arguments: Dict[str, Any]) -> str:\n", + " \"\"\"Helper function to invoke sandbox tools\n", + "\n", + " Args:\n", + " tool_name (str): Name of the tool to invoke\n", + " arguments (Dict[str, Any]): Arguments to pass to the tool\n", + "\n", + " Returns:\n", + " Dict[str, Any]: JSON formatted result\n", + " \"\"\"\n", + " response = code_client.invoke(tool_name, arguments)\n", + " for event in response[\"stream\"]:\n", + " return json.dumps(event[\"result\"])" + ], + "outputs": [], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "id": "cd33790785ac084a", + "metadata": {}, + "source": [ + "## 5. Write data file to Code Sandbox\n", + "\n", + "Now we'll write our data file into the sandbox environment and verify they were created successfully." + ] + }, + { + "cell_type": "code", + "id": "380afae3a5ba4934", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.602108Z", + "start_time": "2025-09-30T02:22:35.149105Z" + } + }, + "source": [ + "# Write files to sandbox\n", + "writing_files = call_tool(\"writeFiles\", {\"content\": files_to_create})\n", + "print(\"Writing files result:\")\n", + "print(writing_files)\n", + "\n", + "# Verify files were created\n", + "listing_files = call_tool(\"listFiles\", {\"path\": \"\"})\n", + "print(\"\\nFiles in sandbox:\")\n", + "print(listing_files)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing files result:\n", + "{\"content\": [{\"type\": \"text\", \"text\": \"Successfully wrote all 1 files\"}], \"isError\": false}\n", + "\n", + "Files in sandbox:\n", + "{\"content\": [{\"type\": \"resource_link\", \"uri\": \"file:///log\", \"name\": \"log\", \"description\": \"Directory\"}, {\"type\": \"resource_link\", \"uri\": \"file:///data\", \"name\": \"data\", \"description\": \"Directory\"}, {\"type\": \"resource_link\", \"uri\": \"file:///.ipython\", \"name\": \".ipython\", \"description\": \"Directory\"}], \"isError\": false}\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "id": "640eae7a52ce9f8d", + "metadata": {}, + "source": [ + "## 6. Perform Advanced Analysis using Strands based Agent\n", + "\n", + "Now we will configure an agent to perform data analysis on the data file that we uploaded into the sandbox(above)" + ] + }, + { + "cell_type": "markdown", + "id": "5a3b068faf4a5eaa", + "metadata": {}, + "source": [ + "### 6.1 System Prompt Definition\n", + "Define the behavior and capabilities of the AI assistant. We instruct our assistant to always validate answers through code execution and data based reasoning." + ] + }, + { + "cell_type": "code", + "id": "6e6830a170b45ce3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.609762Z", + "start_time": "2025-09-30T02:22:35.607229Z" + } + }, + "source": [ + "from constants import DATA_SCIENTIST_SYSTEM_PROMPT\n", + "print(DATA_SCIENTIST_SYSTEM_PROMPT)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " You are an expert data analysis AI assistant specializing in economic and statistical analysis. You have access to a GDP dataset containing country-level data from 2020-2025 with columns: 'Country', '2020', '2021', '2022', '2023', '2024', '2025'.\n", + " \n", + " You MUST validate all answers through code execution using the tools provided. DO NOT answer questions without using the tools.\n", + " \n", + " DATA ANALYSIS PRINCIPLES:\n", + " 1. Always load and examine the dataset before answering questions\n", + " 2. Verify all statistical calculations, trends, and comparisons through code\n", + " 3. Use pandas for data manipulation and analysis, and matplotlib for data visualization\n", + " 4. Create visualizations when helpful to illustrate findings\n", + " 5. Show your analytical work with actual code execution\n", + " 6. Validate data quality and handle missing values appropriately\n", + " \n", + " VALIDATION PRINCIPLES:\n", + " 1. When making claims about calculations or trends - write code to verify them\n", + " 2. Use execute_python to perform statistical analysis, data aggregations, and comparisons\n", + " 3. Create test scripts to validate your understanding before giving answers\n", + " 4. Always show your work with actual code execution\n", + " 5. If uncertain, explicitly state limitations and validate what you can\n", + " \n", + " APPROACH:\n", + " - Load the dataset and inspect it before performing analysis\n", + " - For questions about specific countries, filter and analyze the relevant data\n", + " - For trend analysis, calculate year-over-year changes programmatically\n", + " - For comparisons, compute statistics and rankings with code\n", + " - For aggregations (regional averages, totals), show the grouping and calculation logic\n", + " - Include data validation checks (null values, data types, outliers)\n", + " - Document your analytical process for transparency\n", + " - The sandbox maintains state between executions, so you can refer to previous results\n", + " - Only use the tools and python packages available\n", + " \n", + " TOOL AVAILABLE:\n", + " - execute_python: Run Python code and see output\n", + " \n", + " PYTHON PACKAGES AVAILABLE:\n", + " - pandas\n", + " - numpy\n", + " - matplotlib\n", + " \n", + " RESPONSE FORMAT: The execute_python tool returns a JSON response with:\n", + " - sessionId: The sandbox session ID\n", + " - id: Request ID\n", + " - isError: Boolean indicating if there was an error\n", + " - content: Array of content objects with type and text/data\n", + " - structuredContent: For code execution, includes stdout, stderr, exitCode, executionTime\n", + " \n", + " For successful code execution, the output will be in content[0].text and also in structuredContent.stdout.\n", + " Check isError field to see if there was an error.\n", + " \n", + " Be thorough, accurate, and always validate your answers with code. Provide clear, data-driven insights backed by actual calculations.\n", + " \n" + ] + } + ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "id": "87157a0ea835ab5", + "metadata": {}, + "source": [ + "### 6.2 Code Execution Tool Definition\n", + "Next we define the function as tool that will be used by the Agent as tool, to run code in the code sandbox. We use the @tool decorator to annotate the function as a custom tool for the Agent.\n", + "\n", + "Within an active code interpreter session, you can execute code in supported languages (Python, JavaScript), access libraries based on your dependencies configuration, generate visualizations, and maintain state between executions." + ] + }, + { + "cell_type": "code", + "id": "750472cd96e873c9", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:35.622425Z", + "start_time": "2025-09-30T02:22:35.615947Z" + } + }, + "source": [ + "#Define and configure the code interpreter tool\n", + "@tool\n", + "def execute_python(code: str, description: str = \"\") -> str:\n", + " \"\"\"Execute Python code in the sandbox.\"\"\"\n", + "\n", + " if description:\n", + " code = f\"# {description}\\n{code}\"\n", + "\n", + " #Print generated Code to be executed\n", + " print(f\"\\n Generated Code: {code}\")\n", + "\n", + "\n", + " # Call the Invoke method and execute the generated code, within the initialized code interpreter session\n", + " response = code_client.invoke(\"executeCode\", {\n", + " \"code\": code,\n", + " \"language\": \"python\",\n", + " \"clearContext\": False\n", + " })\n", + " for event in response[\"stream\"]:\n", + " return json.dumps(event[\"result\"])" + ], + "outputs": [], + "execution_count": 9 + }, + { + "cell_type": "markdown", + "id": "e9bc47b82755730d", + "metadata": {}, + "source": [ + "### 6.3 Agent Configuration\n", + "We create and configure an agent using the Strands SDK. We provide it the system prompt and the tool we defined above to execute generate code.\n", + "\n", + "We use [Qwen 3 Coder 480B](https://app.fireworks.ai/models/fireworks/qwen3-coder-480b-a35b-instruct) a SOTA OSS model from the Qwen family" + ] + }, + { + "cell_type": "code", + "id": "14c5e8f18b70dc01", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:22:36.501763Z", + "start_time": "2025-09-30T02:22:36.497637Z" + } + }, + "source": [ + "model = OpenAIModel(\n", + " client_args={\n", + " \"api_key\": FIREWORKS_API_KEY,\n", + " \"base_url\": \"https://api.fireworks.ai/inference/v1\",\n", + " },\n", + " model_id=\"accounts/fireworks/models/qwen3-coder-480b-a35b-instruct\",\n", + " params={\n", + " \"max_tokens\": 5000,\n", + " \"temperature\": 0.0,\n", + " }\n", + ")\n", + "\n", + "agent=Agent(\n", + " model=model,\n", + " tools=[execute_python],\n", + " system_prompt=DATA_SCIENTIST_SYSTEM_PROMPT,\n", + " callback_handler=None\n", + ")" + ], + "outputs": [], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "id": "25693e10aa1e5689", + "metadata": {}, + "source": [ + "## 7. Agent Invocation and Response Processing\n", + "We invoke the agent with our query and process the agent's response\n", + "\n", + "\n", + "Note: Async execution requires running in an async environment" + ] + }, + { + "cell_type": "markdown", + "id": "bddfa7cb97ead950", + "metadata": {}, + "source": [ + "## 7.1 Query to perform Exploratory Data Analysis(EDA)" + ] + }, + { + "cell_type": "markdown", + "id": "89f98916e2cc3627", + "metadata": {}, + "source": [ + "Let's start with a query which instructs the agent to perform exploratory data analysis on the data file in the code sandbox environment" + ] + }, + { + "cell_type": "code", + "id": "7370ff964d06a1cd", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T02:24:31.543275Z", + "start_time": "2025-09-30T02:22:41.040563Z" + } + }, + "source": [ + "query = (\"Load the file 'gdp_data.csv' and perform some simple exploratory data analysis (EDA) on it. Tell me about distributions and outlier values. \"\n", + " \"Prepare a short final report with your findings.\")\n", + "\n", + "# Invoke the agent asynchcronously and stream the response\n", + "response_text = \"\"\n", + "async for event in agent.stream_async(query):\n", + " if \"data\" in event:\n", + " # Stream text response\n", + " chunk = event[\"data\"]\n", + " response_text += chunk\n", + " print(chunk, end=\"\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I'll help you load and analyze the GDP dataset. Let me start by loading the file and performing exploratory data analysis.\n", + "\n", + "\n", + " Generated Code: # Loading the GDP dataset and displaying basic information\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('gdp_data.csv')\n", + "\n", + "# Display basic information about the dataset\n", + "print(\"Dataset Info:\")\n", + "print(df.info())\n", + "print(\"\\nFirst few rows:\")\n", + "print(df.head())\n", + "print(\"\\nDataset shape:\", df.shape)\n", + "I apologize for the error. It seems the file 'gdp_data.csv' doesn't exist in the current directory. Let me check what files are available for us to work with.\n", + "\n", + "\n", + " Generated Code: # Checking available files in the current directory\n", + "import os\n", + "\n", + "# List all files in the current directory\n", + "files = os.listdir('.')\n", + "print(\"Available files:\")\n", + "for file in files:\n", + " print(file)\n", + "I see that there's a 'data' directory. Let me check what's inside that directory, as the GDP data might be stored there.\n", + "\n", + "\n", + " Generated Code: # Checking files in the data directory\n", + "import os\n", + "\n", + "# List files in the data directory\n", + "try:\n", + " files = os.listdir('data')\n", + " print(\"Files in 'data' directory:\")\n", + " for file in files:\n", + " print(file)\n", + "except FileNotFoundError:\n", + " print(\"No 'data' directory found\")\n", + "Great! I found the GDP data file in the 'data' directory. Let me load it and perform the exploratory data analysis.\n", + "\n", + "\n", + " Generated Code: # Loading the GDP dataset and displaying basic information\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset from the data directory\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Display basic information about the dataset\n", + "print(\"Dataset Info:\")\n", + "print(df.info())\n", + "print(\"\\nFirst few rows:\")\n", + "print(df.head())\n", + "print(\"\\nDataset shape:\", df.shape)\n", + "print(\"\\nColumn names:\")\n", + "print(df.columns.tolist())\n", + "Now let me perform a more detailed exploratory data analysis, including checking for missing values, basic statistics, and distributions.\n", + "\n", + "\n", + " Generated Code: # Checking missing values and basic statistics\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Check for missing values\n", + "print(\"Missing values per column:\")\n", + "print(df.isnull().sum())\n", + "print(\"\\nPercentage of missing values per column:\")\n", + "print((df.isnull().sum() / len(df)) * 100)\n", + "\n", + "# Basic statistics for numerical columns\n", + "print(\"\\nBasic statistics for GDP values:\")\n", + "gdp_columns = ['2020', '2021', '2022', '2023', '2024', '2025']\n", + "print(df[gdp_columns].describe())\n", + "\n", + "# Check data types\n", + "print(\"\\nData types:\")\n", + "print(df.dtypes)\n", + "Let me now identify which countries have missing values and examine the distribution of GDP values more closely, including visualization.\n", + "\n", + "\n", + " Generated Code: # Identifying countries with missing values and potential outliers\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Identify countries with missing values\n", + "print(\"Countries with missing GDP data:\")\n", + "missing_data = df[df.isnull().any(axis=1)]\n", + "print(missing_data[['Country'] + [col for col in df.columns if col != 'Country' and df[col].isnull().any()]])\n", + "\n", + "# Check for potential outliers using IQR method for 2025 data (most complete year)\n", + "gdp_2025 = df['2025'].dropna()\n", + "\n", + "Q1 = gdp_2025.quantile(0.25)\n", + "Q3 = gdp_2025.quantile(0.75)\n", + "IQR = Q3 - Q1\n", + "\n", + "lower_bound = Q1 - 1.5 * IQR\n", + "upper_bound = Q3 + 1.5 * IQR\n", + "\n", + "outliers = df[(df['2025'] < lower_bound) | (df['2025'] > upper_bound)]['Country'].tolist()\n", + "print(f\"\\nPotential outliers in 2025 GDP data (using IQR method):\")\n", + "print(outliers)\n", + "\n", + "# Let's also look at the top 10 countries by GDP in 2025\n", + "print(f\"\\nTop 10 countries by GDP in 2025:\")\n", + "top_10 = df.nlargest(10, '2025')[['Country', '2025']]\n", + "print(top_10)\n", + "Let me create some visualizations to better understand the GDP distributions and trends.\n", + "\n", + "\n", + " Generated Code: # Creating visualizations for GDP distributions\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Set up the plotting style\n", + "plt.style.use('seaborn-v0_8-darkgrid')\n", + "fig, axes = plt.subplots(2, 3, figsize=(18, 12))\n", + "fig.suptitle('GDP Distribution Across Years', fontsize=16)\n", + "\n", + "# Plot histograms for each year\n", + "years = ['2020', '2021', '2022', '2023', '2024', '2025']\n", + "axes = axes.flatten()\n", + "\n", + "for i, year in enumerate(years):\n", + " data = df[year].dropna()\n", + " axes[i].hist(data, bins=50, color=f'C{i}', alpha=0.7)\n", + " axes[i].set_title(f'GDP Distribution - {year}')\n", + " axes[i].set_xlabel('GDP Value')\n", + " axes[i].set_ylabel('Frequency')\n", + " axes[i].ticklabel_format(style='scientific', axis='x', scilimits=(0,0))\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Create a boxplot to show the distribution and outliers across years\n", + "plt.figure(figsize=(12, 8))\n", + "gdp_data = [df[year].dropna() for year in years]\n", + "plt.boxplot(gdp_data, labels=years)\n", + "plt.title('GDP Distribution Across Years (Boxplot)')\n", + "plt.ylabel('GDP Value')\n", + "plt.yscale('log') # Using log scale to better visualize the wide range of values\n", + "plt.show()\n", + "\n", + "# Plot the top 10 countries by 2025 GDP\n", + "top_10 = df.nlargest(10, '2025')\n", + "plt.figure(figsize=(12, 8))\n", + "plt.barh(top_10['Country'], top_10['2025'], color='skyblue')\n", + "plt.title('Top 10 Countries by GDP in 2025')\n", + "plt.xlabel('GDP Value')\n", + "plt.ticklabel_format(style='scientific', axis='x', scilimits=(0,0))\n", + "plt.gca().invert_yaxis() # To have the highest at the top\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Show basic statistics\n", + "print(\"Summary of GDP distributions:\")\n", + "for year in years:\n", + " data = df[year].dropna()\n", + " print(f\"{year}: Mean = {data.mean():.2f}, Median = {data.median():.2f}, Std = {data.std():.2f}\")\n", + "Let me also analyze the GDP growth trends for a better understanding of the data.\n", + "\n", + "\n", + " Generated Code: # Analyzing GDP growth trends\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Calculate year-over-year growth rates\n", + "gdp_columns = ['2020', '2021', '2022', '2023', '2024', '2025']\n", + "df_growth = df[['Country']].copy()\n", + "\n", + "# Calculate growth rates\n", + "for i in range(1, len(gdp_columns)):\n", + " current_year = gdp_columns[i]\n", + " previous_year = gdp_columns[i-1]\n", + " growth_rate_col = f'{current_year}_growth'\n", + " \n", + " # Calculate growth rate: (current - previous) / previous * 100\n", + " df_growth[growth_rate_col] = ((df[current_year] - df[previous_year]) / df[previous_year]) * 100\n", + "\n", + "# Display average growth rates by year\n", + "growth_columns = [col for col in df_growth.columns if 'growth' in col]\n", + "print(\"Average GDP Growth Rates by Year:\")\n", + "for col in growth_columns:\n", + " avg_growth = df_growth[col].mean()\n", + " print(f\"{col}: {avg_growth:.2f}%\")\n", + "\n", + "# Identify countries with the highest and lowest growth rates in 2025\n", + "print(\"\\nCountries with highest growth rates in 2025:\")\n", + "top_growth = df_growth.nlargest(5, '2025_growth')[['Country', '2025_growth']]\n", + "print(top_growth)\n", + "\n", + "print(\"\\nCountries with lowest growth rates in 2025:\")\n", + "bottom_growth = df_growth.nsmallest(5, '2025_growth')[['Country', '2025_growth']]\n", + "print(bottom_growth)\n", + "\n", + "# Check for any negative growth rates\n", + "negative_growth = df_growth[df_growth['2025_growth'] < 0]\n", + "print(f\"\\nNumber of countries with negative GDP growth in 2025: {len(negative_growth)}\")\n", + "\n", + "# Calculate overall GDP trends\n", + "print(\"\\nOverall GDP trends (sum of all countries by year):\")\n", + "total_gdp_by_year = {}\n", + "for year in gdp_columns:\n", + " total_gdp_by_year[year] = df[year].sum()\n", + " \n", + "for year, total in total_gdp_by_year.items():\n", + " print(f\"{year}: {total:,.0f}\")\n", + "\n", + "# Calculate global GDP growth rates\n", + "years = list(total_gdp_by_year.keys())\n", + "global_growth_rates = {}\n", + "for i in range(1, len(years)):\n", + " current_year = years[i]\n", + " previous_year = years[i-1]\n", + " growth_rate = ((total_gdp_by_year[current_year] - total_gdp_by_year[previous_year]) / total_gdp_by_year[previous_year]) * 100\n", + " global_growth_rates[current_year] = growth_rate\n", + " print(f\"Global GDP growth rate {previous_year}-{current_year}: {growth_rate:.2f}%\")\n", + "Now let me create a comprehensive final report summarizing all the findings from the exploratory data analysis.\n", + "\n", + "\n", + " Generated Code: # Generating final EDA report\n", + "import pandas as pd\n", + "\n", + "# Load the GDP dataset\n", + "df = pd.read_csv('data/gdp_data.csv')\n", + "\n", + "# Generate final report\n", + "report = \"\"\"\n", + "# GDP Dataset Exploratory Data Analysis Report\n", + "\n", + "## Dataset Overview\n", + "- **Dataset Shape**: 196 countries, 7 columns (Country name + 6 years of GDP data)\n", + "- **Time Period**: 2020-2025\n", + "- **Data Types**: Country names (object), GDP values (int64 and float64)\n", + "\n", + "## Data Quality Assessment\n", + "- **Missing Values**: \n", + " - 2020: 0 missing values\n", + " - 2021-2023: 2 missing values each (1.02%)\n", + " - 2024: 4 missing values (2.04%)\n", + " - 2025: 7 missing values (3.57%)\n", + " \n", + "- **Countries with Missing Data**:\n", + " - Afghanistan (missing 2024-2025 data)\n", + " - Eritrea (missing all data except country name)\n", + " - Lebanon (missing 2025 data)\n", + " - Pakistan (missing 2025 data)\n", + " - Sri Lanka (missing 2025 data)\n", + " - Syria (missing all GDP data)\n", + " - Palestine (missing 2024-2025 data)\n", + "\n", + "## GDP Distribution Analysis\n", + "- **Wide Range of Values**: GDP values range from just over 50 to over 30 million (USD)\n", + "- **High Variability**: Standard deviation is much larger than the mean, indicating high disparity between countries\n", + "- **Skewed Distribution**: Most countries have relatively low GDP values, with a few countries having extremely high values\n", + "- **Top Economies (2025)**:\n", + " 1. United States: ~30.5 million\n", + " 2. China: ~19.2 million\n", + " 3. Germany: ~4.7 million\n", + " 4. India: ~4.2 million\n", + " 5. Japan: ~4.2 million\n", + "\n", + "## Outliers\n", + "- Using the IQR method, 22 countries were identified as outliers in 2025, including major economies like the US, China, Japan, Germany, etc.\n", + "- These \"outliers\" are actually the largest economies and represent expected extreme values rather than data errors\n", + "\n", + "## GDP Growth Trends\n", + "- **Average Growth Rates**:\n", + " - 2020-2021: 13.86%\n", + " - 2021-2022: 8.46%\n", + " - 2022-2023: 6.41%\n", + " - 2023-2024: 5.72%\n", + " - 2024-2025: 4.43%\n", + " \n", + "- **Global GDP Growth**:\n", + " - 2020-2021: 14.00%\n", + " - 2021-2022: 4.19%\n", + " - 2022-2023: 4.40%\n", + " - 2023-2024: 3.85%\n", + " - 2024-2025: 2.45%\n", + " \n", + "- **Highest Growth (2025)**: Burundi (42.21%), Haiti (27.90%), Malawi (18.33%)\n", + "- **Negative Growth (2025)**: 23 countries, including South Sudan (-26.28%), Ethiopia (-17.93%), Iran (-15.03%)\n", + "\n", + "## Key Insights\n", + "1. The dataset shows a clear pattern of recovery and growth following the economic impacts of 2020\n", + "2. Growth rates have been gradually declining since 2021, which is typical for post-recovery periods\n", + "3. There's significant disparity in GDP values between countries, with a few major economies dominating global GDP\n", + "4. Some countries continue to face economic challenges, as evidenced by negative growth rates\n", + "5. The data quality is generally good, with only a small percentage of missing values\n", + "\n", + "## Recommendations for Further Analysis\n", + "1. Investigate the reasons behind missing data for specific countries\n", + "2. Analyze regional patterns by grouping countries by geographic regions\n", + "3. Examine per-capita GDP to account for population differences\n", + "4. Compare growth patterns between developed and developing economies\n", + "\"\"\"\n", + "\n", + "print(report)\n", + "# GDP Dataset Exploratory Data Analysis Report\n", + "\n", + "## Dataset Overview\n", + "- **Dataset Shape**: 196 countries, 7 columns (Country name + 6 years of GDP data)\n", + "- **Time Period**: 2020-2025\n", + "- **Data Types**: Country names (object), GDP values (int64 and float64)\n", + "\n", + "## Data Quality Assessment\n", + "- **Missing Values**: \n", + " - 2020: 0 missing values\n", + " - 2021-2023: 2 missing values each (1.02%)\n", + " - 2024: 4 missing values (2.04%)\n", + " - 2025: 7 missing values (3.57%)\n", + " \n", + "- **Countries with Missing Data**:\n", + " - Afghanistan (missing 2024-2025 data)\n", + " - Eritrea (missing all data except country name)\n", + " - Lebanon (missing 2025 data)\n", + " - Pakistan (missing 2025 data)\n", + " - Sri Lanka (missing 2025 data)\n", + " - Syria (missing all GDP data)\n", + " - Palestine (missing 2024-2025 data)\n", + "\n", + "## GDP Distribution Analysis\n", + "- **Wide Range of Values**: GDP values range from just over 50 to over 30 million (USD)\n", + "- **High Variability**: Standard deviation is much larger than the mean, indicating high disparity between countries\n", + "- **Skewed Distribution**: Most countries have relatively low GDP values, with a few countries having extremely high values\n", + "- **Top Economies (2025)**:\n", + " 1. United States: ~30.5 million\n", + " 2. China: ~19.2 million\n", + " 3. Germany: ~4.7 million\n", + " 4. India: ~4.2 million\n", + " 5. Japan: ~4.2 million\n", + "\n", + "## Outliers\n", + "- Using the IQR method, 22 countries were identified as outliers in 2025, including major economies like the US, China, Japan, Germany, etc.\n", + "- These \"outliers\" are actually the largest economies and represent expected extreme values rather than data errors\n", + "\n", + "## GDP Growth Trends\n", + "- **Average Growth Rates**:\n", + " - 2020-2021: 13.86%\n", + " - 2021-2022: 8.46%\n", + " - 2022-2023: 6.41%\n", + " - 2023-2024: 5.72%\n", + " - 2024-2025: 4.43%\n", + " \n", + "- **Global GDP Growth**:\n", + " - 2020-2021: 14.00%\n", + " - 2021-2022: 4.19%\n", + " - 2022-2023: 4.40%\n", + " - 2023-2024: 3.85%\n", + " - 2024-2025: 2.45%\n", + " \n", + "- **Highest Growth (2025)**: Burundi (42.21%), Haiti (27.90%), Malawi (18.33%)\n", + "- **Negative Growth (2025)**: 23 countries, including South Sudan (-26.28%), Ethiopia (-17.93%), Iran (-15.03%)\n", + "\n", + "## Key Insights\n", + "1. The dataset shows a clear pattern of recovery and growth following the economic impacts of 2020\n", + "2. Growth rates have been gradually declining since 2021, which is typical for post-recovery periods\n", + "3. There's significant disparity in GDP values between countries, with a few major economies dominating global GDP\n", + "4. Some countries continue to face economic challenges, as evidenced by negative growth rates\n", + "5. The data quality is generally good, with only a small percentage of missing values\n", + "\n", + "## Recommendations for Further Analysis\n", + "1. Investigate the reasons behind missing data for specific countries\n", + "2. Analyze regional patterns by grouping countries by geographic regions\n", + "3. Examine per-capita GDP to account for population differences\n", + "4. Compare growth patterns between developed and developing economies" + ] + } + ], + "execution_count": 11 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "Lets double check that these insights are correct and not hallucinated", + "id": "84436a72e90348b8" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T04:20:33.062922Z", + "start_time": "2025-09-30T04:20:33.059867Z" + } + }, + "cell_type": "code", + "source": [ + "# Calculate growth per country year to year\n", + "for years in range(2021, 2026):\n", + " df[\"growth_\" + str(years)] = (100 * (df[str(years)] - df[str(years - 1)]) )/ df[str(years - 1)]" + ], + "id": "932e55ea3349b84f", + "outputs": [], + "execution_count": 22 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### Double check the agents work", + "id": "cc466e4eecb393b1" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T04:24:26.800498Z", + "start_time": "2025-09-30T04:24:26.795581Z" + } + }, + "cell_type": "code", + "source": [ + "print(f'Countries with the highest growth in 2025:\\n {df.sort_values(by=\"growth_2025\", ascending=False).loc[:, [\"Country\", \"growth_2025\"]].head(3)}')\n", + "print()\n", + "print(f'Countries with the largest contraction in 2025:\\n {df.sort_values(by=\"growth_2025\", ascending=True).loc[:, [\"Country\", \"growth_2025\"]].head(3)}')" + ], + "id": "cc584a1667170799", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Countries with the highest growth in 2025:\n", + " Country growth_2025\n", + "28 Burundi 42.209572\n", + "72 Haiti 27.904228\n", + "104 Malawi 18.326693\n", + "\n", + "Countries with the largest contraction in 2025:\n", + " Country growth_2025\n", + "159 South Sudan -26.276968\n", + "57 Ethiopia -17.932827\n", + "79 Iran -15.034994\n" + ] + } + ], + "execution_count": 35 + }, + { + "cell_type": "markdown", + "id": "2d6b3ce0963d4a83", + "metadata": {}, + "source": [ + "## 8. Cleanup\n", + "\n", + "Finally, we'll clean up by stopping the Code Interpreter session. Once finished using a session, the session should be shopped to release resources and avoid unnecessary charges." + ] + }, + { + "cell_type": "code", + "id": "baa2ca7fce8b181d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-09-30T04:32:40.259254Z", + "start_time": "2025-09-30T04:32:40.040546Z" + } + }, + "source": [ + "# Stop the Code Interpreter session\n", + "code_client.stop()\n", + "print(\"Code Interpreter session stopped successfully!\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Code Interpreter session stopped successfully!\n" + ] + } + ], + "execution_count": 47 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 6917deba08903e5575f0bb3c4d6550d526ed4175 Mon Sep 17 00:00:00 2001 From: RobertoBarrosoLuque <34043109+RobertoBarrosoLuque@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:51:37 -0700 Subject: [PATCH 2/2] Add Readme --- integrations/AgentCore/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/integrations/AgentCore/README.md b/integrations/AgentCore/README.md index 142d6d7..35f0bb7 100644 --- a/integrations/AgentCore/README.md +++ b/integrations/AgentCore/README.md @@ -9,6 +9,7 @@ AgentCore/ ├── Makefile # Setup and environment management ├── requirements.txt # Python dependencies ├── runtime_with_strands_and_fireworksai_models.ipynb # Main deployment notebook +├── strands-agent-advanced-data-analysis-code-interpreter.ipynb # Code interpreter notebook ├── strands_agents_fireworks_ai.py # AgentCore deployment script └── strands_agents_fireworks_ai_local.py # Local testing script ```