From 8d37830dd6cd78b20757e937b8672712be0d76c6 Mon Sep 17 00:00:00 2001 From: Sakalya Date: Tue, 5 Nov 2024 12:35:31 +0530 Subject: [PATCH 1/3] Added Automated Code Generation AI Agent --- ai_agent_tutorials/ai_code_agent | 1 + 1 file changed, 1 insertion(+) create mode 160000 ai_agent_tutorials/ai_code_agent diff --git a/ai_agent_tutorials/ai_code_agent b/ai_agent_tutorials/ai_code_agent new file mode 160000 index 0000000..b50e3ec --- /dev/null +++ b/ai_agent_tutorials/ai_code_agent @@ -0,0 +1 @@ +Subproject commit b50e3ec2fcf8adccc9d91f62a9f904a8bbdb1910 From 863eddb24f13580a3d48cc244461b9f59e2956a8 Mon Sep 17 00:00:00 2001 From: Sakalya Date: Tue, 5 Nov 2024 12:58:22 +0530 Subject: [PATCH 2/3] Added AI tutorial for Coding Agent --- ai_agent_tutorials/ai_code_agent | 1 - ai_agent_tutorials/ai_coding_agent/.gitignore | 162 ++++++ ai_agent_tutorials/ai_coding_agent/LICENSE | 21 + ai_agent_tutorials/ai_coding_agent/README.md | 98 ++++ .../Sample Data/housing_regression.csv | 546 ++++++++++++++++++ .../Sample Data/iris_classification.csv | 151 +++++ .../Sample Data/iris_na_classification.csv | 151 +++++ ai_agent_tutorials/ai_coding_agent/app.py | 283 +++++++++ .../ai_coding_agent/autotabml_agents.py | 90 +++ .../ai_coding_agent/autotabml_tasks.py | 66 +++ .../ai_coding_agent/requirements.txt | 11 + 11 files changed, 1579 insertions(+), 1 deletion(-) delete mode 160000 ai_agent_tutorials/ai_code_agent create mode 100644 ai_agent_tutorials/ai_coding_agent/.gitignore create mode 100644 ai_agent_tutorials/ai_coding_agent/LICENSE create mode 100644 ai_agent_tutorials/ai_coding_agent/README.md create mode 100644 ai_agent_tutorials/ai_coding_agent/Sample Data/housing_regression.csv create mode 100644 ai_agent_tutorials/ai_coding_agent/Sample Data/iris_classification.csv create mode 100644 ai_agent_tutorials/ai_coding_agent/Sample Data/iris_na_classification.csv create mode 100644 ai_agent_tutorials/ai_coding_agent/app.py create mode 100644 ai_agent_tutorials/ai_coding_agent/autotabml_agents.py create mode 100644 ai_agent_tutorials/ai_coding_agent/autotabml_tasks.py create mode 100644 ai_agent_tutorials/ai_coding_agent/requirements.txt diff --git a/ai_agent_tutorials/ai_code_agent b/ai_agent_tutorials/ai_code_agent deleted file mode 160000 index b50e3ec..0000000 --- a/ai_agent_tutorials/ai_code_agent +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b50e3ec2fcf8adccc9d91f62a9f904a8bbdb1910 diff --git a/ai_agent_tutorials/ai_coding_agent/.gitignore b/ai_agent_tutorials/ai_coding_agent/.gitignore new file mode 100644 index 0000000..82f9275 --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/.gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/ai_agent_tutorials/ai_coding_agent/LICENSE b/ai_agent_tutorials/ai_coding_agent/LICENSE new file mode 100644 index 0000000..640b12d --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Sakalya Mitra + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ai_agent_tutorials/ai_coding_agent/README.md b/ai_agent_tutorials/ai_coding_agent/README.md new file mode 100644 index 0000000..45f7105 --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/README.md @@ -0,0 +1,98 @@ +# AutoTabML - Automated Machine Learning Code Generator for Tabular Data + +AutoTabML is an innovative application designed to automate the generation of machine learning code for tabular data. Utilizing CrewAI and the Groq Llama 70B model, AutoTabML simplifies the process of building and debugging machine learning models for both regression and classification problems. With this tool, you can generate working code, debug errors, and run your code without writing a single line of code manually. + +## Features + +- **Automated Code Generation**: Generate Python code for machine learning tasks based on your tabular dataset and problem description. +- **EDA and Feature Engineering**: Perform comprehensive Exploratory Data Analysis (EDA) and feature engineering. +- **Model Recommendation**: Get suggestions for the most suitable machine learning models for your problem. +- **Code Modification and Debugging**: Modify generated code based on user suggestions and debug errors effortlessly. +- **In-app Execution**: Run the generated code within the application and view the results without the need for external IDEs or additional installations. + +## How It Works + +AutoTabML leverages multiple agents, each specializing in different aspects of the machine learning pipeline. Here's a brief overview of the agents and their roles: + +- **Data Reader Agent**: Reads and loads the uploaded dataset. +- **Problem Definition Agent**: Clarifies the machine learning problem based on user input. +- **EDA Agent**: Performs exploratory data analysis to understand data characteristics. +- **Feature Engineering Agent**: Executes feature engineering based on EDA results. +- **Model Recommendation Agent**: Suggests the most suitable machine learning models. +- **Starter Code Generator Agent**: Generates the initial Python code template for the project. +- **Code Modification Agent**: Adapts the generated code according to user feedback. +- **Code Debugger Agent**: Debugs the generated code to fix any issues. +- **Compiler Agent**: Extracts and compiles the Python code. + +## Technology Used +- Python +- CrewAI +- Groq +- Streamlit + +## Demo + + +## Getting Started + +### Prerequisites + +- Required Python packages (listed in `requirements.txt`) + +### Installation + +1. Clone the repository: + + ```bash + git clone https://github.com/Sakalya100/AutoTabML.git + cd AutoTabML + ``` + +2. Create and activate a virtual environment: + + ```bash + python3 -m venv venv + source venv/bin/activate + ``` + +3. Install the required packages: + + ```bash + pip install -r requirements.txt + ``` + +4. Set up the environment variables by creating a `.env` file in the root directory and adding your Groq API key: + + ``` + GROQ_API_KEY=your_groq_api_key + ``` + +### Usage + +1. Run the Streamlit application: + + ```bash + streamlit run app.py + ``` + +2. Open your web browser and go to `http://localhost:8501`. + +3. Describe your machine learning problem and upload a sample CSV of your dataset. + +4. Click on "Process" to generate the initial code. You can then modify, debug, and run the code directly within the application. + +### Example Workflow + +1. **Describe Your Problem**: Enter a detailed description of the machine learning problem you want to solve. +2. **Upload Dataset**: Upload your dataset in CSV format. +3. **Generate Code**: Click the "Process" button to generate the initial Python code. +4. **Modify and Debug**: Use the provided text areas to suggest code modifications or paste error messages for debugging. +5. **Run the Code**: Execute the generated code and view the results, including any plots or outputs generated during execution. + +### Contributors + +- **Sakalya Mitra** - **Shalu Singh** + +## License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. diff --git a/ai_agent_tutorials/ai_coding_agent/Sample Data/housing_regression.csv b/ai_agent_tutorials/ai_coding_agent/Sample Data/housing_regression.csv new file mode 100644 index 0000000..88ca478 --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/Sample Data/housing_regression.csv @@ -0,0 +1,546 @@ +price,area,bedrooms,bathrooms,stories,mainroad,guestroom,basement,hotwaterheating,airconditioning,parking,prefarea,furnishingstatus +13300000,7420,4,2,3,yes,no,no,no,yes,2,yes,furnished +12250000,8960,4,4,4,yes,no,no,no,yes,3,no,furnished +12250000,9960,3,2,2,yes,no,yes,no,no,2,yes,semi-furnished +12215000,7500,4,2,2,yes,no,yes,no,yes,3,yes,furnished +11410000,7420,4,1,2,yes,yes,yes,no,yes,2,no,furnished +10850000,7500,3,3,1,yes,no,yes,no,yes,2,yes,semi-furnished +10150000,8580,4,3,4,yes,no,no,no,yes,2,yes,semi-furnished +10150000,16200,5,3,2,yes,no,no,no,no,0,no,unfurnished +9870000,8100,4,1,2,yes,yes,yes,no,yes,2,yes,furnished +9800000,5750,3,2,4,yes,yes,no,no,yes,1,yes,unfurnished +9800000,13200,3,1,2,yes,no,yes,no,yes,2,yes,furnished +9681000,6000,4,3,2,yes,yes,yes,yes,no,2,no,semi-furnished +9310000,6550,4,2,2,yes,no,no,no,yes,1,yes,semi-furnished +9240000,3500,4,2,2,yes,no,no,yes,no,2,no,furnished +9240000,7800,3,2,2,yes,no,no,no,no,0,yes,semi-furnished +9100000,6000,4,1,2,yes,no,yes,no,no,2,no,semi-furnished +9100000,6600,4,2,2,yes,yes,yes,no,yes,1,yes,unfurnished +8960000,8500,3,2,4,yes,no,no,no,yes,2,no,furnished +8890000,4600,3,2,2,yes,yes,no,no,yes,2,no,furnished +8855000,6420,3,2,2,yes,no,no,no,yes,1,yes,semi-furnished +8750000,4320,3,1,2,yes,no,yes,yes,no,2,no,semi-furnished +8680000,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished +8645000,8050,3,1,1,yes,yes,yes,no,yes,1,no,furnished +8645000,4560,3,2,2,yes,yes,yes,no,yes,1,no,furnished +8575000,8800,3,2,2,yes,no,no,no,yes,2,no,furnished +8540000,6540,4,2,2,yes,yes,yes,no,yes,2,yes,furnished +8463000,6000,3,2,4,yes,yes,yes,no,yes,0,yes,semi-furnished +8400000,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished +8400000,7950,5,2,2,yes,no,yes,yes,no,2,no,unfurnished +8400000,5500,4,2,2,yes,no,yes,no,yes,1,yes,semi-furnished +8400000,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished +8400000,7000,3,1,4,yes,no,no,no,yes,2,no,semi-furnished +8295000,4880,4,2,2,yes,no,no,no,yes,1,yes,furnished +8190000,5960,3,3,2,yes,yes,yes,no,no,1,no,unfurnished +8120000,6840,5,1,2,yes,yes,yes,no,yes,1,no,furnished +8080940,7000,3,2,4,yes,no,no,no,yes,2,no,furnished +8043000,7482,3,2,3,yes,no,no,yes,no,1,yes,furnished +7980000,9000,4,2,4,yes,no,no,no,yes,2,no,furnished +7962500,6000,3,1,4,yes,yes,no,no,yes,2,no,unfurnished +7910000,6000,4,2,4,yes,no,no,no,yes,1,no,semi-furnished +7875000,6550,3,1,2,yes,no,yes,no,yes,0,yes,furnished +7840000,6360,3,2,4,yes,no,no,no,yes,0,yes,furnished +7700000,6480,3,2,4,yes,no,no,no,yes,2,no,unfurnished +7700000,6000,4,2,4,yes,no,no,no,no,2,no,semi-furnished +7560000,6000,4,2,4,yes,no,no,no,yes,1,no,furnished +7560000,6000,3,2,3,yes,no,no,no,yes,0,no,semi-furnished +7525000,6000,3,2,4,yes,no,no,no,yes,1,no,furnished +7490000,6600,3,1,4,yes,no,no,no,yes,3,yes,furnished +7455000,4300,3,2,2,yes,no,yes,no,no,1,no,unfurnished +7420000,7440,3,2,1,yes,yes,yes,no,yes,0,yes,semi-furnished +7420000,7440,3,2,4,yes,no,no,no,no,1,yes,unfurnished +7420000,6325,3,1,4,yes,no,no,no,yes,1,no,unfurnished +7350000,6000,4,2,4,yes,yes,no,no,yes,1,no,furnished +7350000,5150,3,2,4,yes,no,no,no,yes,2,no,semi-furnished +7350000,6000,3,2,2,yes,yes,no,no,yes,1,no,semi-furnished +7350000,6000,3,1,2,yes,no,no,no,yes,1,no,unfurnished +7343000,11440,4,1,2,yes,no,yes,no,no,1,yes,semi-furnished +7245000,9000,4,2,4,yes,yes,no,no,yes,1,yes,furnished +7210000,7680,4,2,4,yes,yes,no,no,yes,1,no,semi-furnished +7210000,6000,3,2,4,yes,yes,no,no,yes,1,no,furnished +7140000,6000,3,2,2,yes,yes,no,no,no,1,no,semi-furnished +7070000,8880,2,1,1,yes,no,no,no,yes,1,no,semi-furnished +7070000,6240,4,2,2,yes,no,no,no,yes,1,no,furnished +7035000,6360,4,2,3,yes,no,no,no,yes,2,yes,furnished +7000000,11175,3,1,1,yes,no,yes,no,yes,1,yes,furnished +6930000,8880,3,2,2,yes,no,yes,no,yes,1,no,furnished +6930000,13200,2,1,1,yes,no,yes,yes,no,1,no,furnished +6895000,7700,3,2,1,yes,no,no,no,no,2,no,unfurnished +6860000,6000,3,1,1,yes,no,no,no,yes,1,no,furnished +6790000,12090,4,2,2,yes,no,no,no,no,2,yes,furnished +6790000,4000,3,2,2,yes,no,yes,no,yes,0,yes,semi-furnished +6755000,6000,4,2,4,yes,no,no,no,yes,0,no,unfurnished +6720000,5020,3,1,4,yes,no,no,no,yes,0,yes,unfurnished +6685000,6600,2,2,4,yes,no,yes,no,no,0,yes,furnished +6650000,4040,3,1,2,yes,no,yes,yes,no,1,no,furnished +6650000,4260,4,2,2,yes,no,no,yes,no,0,no,semi-furnished +6650000,6420,3,2,3,yes,no,no,no,yes,0,yes,furnished +6650000,6500,3,2,3,yes,no,no,no,yes,0,yes,furnished +6650000,5700,3,1,1,yes,yes,yes,no,yes,2,yes,furnished +6650000,6000,3,2,3,yes,yes,no,no,yes,0,no,furnished +6629000,6000,3,1,2,yes,no,no,yes,no,1,yes,semi-furnished +6615000,4000,3,2,2,yes,no,yes,no,yes,1,no,semi-furnished +6615000,10500,3,2,1,yes,no,yes,no,yes,1,yes,furnished +6580000,6000,3,2,4,yes,no,no,no,yes,0,no,semi-furnished +6510000,3760,3,1,2,yes,no,no,yes,no,2,no,semi-furnished +6510000,8250,3,2,3,yes,no,no,no,yes,0,no,furnished +6510000,6670,3,1,3,yes,no,yes,no,no,0,yes,unfurnished +6475000,3960,3,1,1,yes,no,yes,no,no,2,no,semi-furnished +6475000,7410,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished +6440000,8580,5,3,2,yes,no,no,no,no,2,no,furnished +6440000,5000,3,1,2,yes,no,no,no,yes,0,no,semi-furnished +6419000,6750,2,1,1,yes,yes,yes,no,no,2,yes,furnished +6405000,4800,3,2,4,yes,yes,no,no,yes,0,no,furnished +6300000,7200,3,2,1,yes,no,yes,no,yes,3,no,semi-furnished +6300000,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished +6300000,4100,3,2,3,yes,no,no,no,yes,2,no,semi-furnished +6300000,9000,3,1,1,yes,no,yes,no,no,1,yes,furnished +6300000,6400,3,1,1,yes,yes,yes,no,yes,1,yes,semi-furnished +6293000,6600,3,2,3,yes,no,no,no,yes,0,yes,unfurnished +6265000,6000,4,1,3,yes,yes,yes,no,no,0,yes,unfurnished +6230000,6600,3,2,1,yes,no,yes,no,yes,0,yes,unfurnished +6230000,5500,3,1,3,yes,no,no,no,no,1,yes,unfurnished +6195000,5500,3,2,4,yes,yes,no,no,yes,1,no,semi-furnished +6195000,6350,3,2,3,yes,yes,no,no,yes,0,no,furnished +6195000,5500,3,2,1,yes,yes,yes,no,no,2,yes,furnished +6160000,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished +6160000,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished +6125000,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished +6107500,3240,4,1,3,yes,no,no,no,no,1,no,semi-furnished +6090000,6615,4,2,2,yes,yes,no,yes,no,1,no,semi-furnished +6090000,6600,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished +6090000,8372,3,1,3,yes,no,no,no,yes,2,no,unfurnished +6083000,4300,6,2,2,yes,no,no,no,no,0,no,furnished +6083000,9620,3,1,1,yes,no,yes,no,no,2,yes,furnished +6020000,6800,2,1,1,yes,yes,yes,no,no,2,no,furnished +6020000,8000,3,1,1,yes,yes,yes,no,yes,2,yes,semi-furnished +6020000,6900,3,2,1,yes,yes,yes,no,no,0,yes,unfurnished +5950000,3700,4,1,2,yes,yes,no,no,yes,0,no,furnished +5950000,6420,3,1,1,yes,no,yes,no,yes,0,yes,furnished +5950000,7020,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished +5950000,6540,3,1,1,yes,yes,yes,no,no,2,yes,furnished +5950000,7231,3,1,2,yes,yes,yes,no,yes,0,yes,semi-furnished +5950000,6254,4,2,1,yes,no,yes,no,no,1,yes,semi-furnished +5950000,7320,4,2,2,yes,no,no,no,no,0,no,furnished +5950000,6525,3,2,4,yes,no,no,no,no,1,no,furnished +5943000,15600,3,1,1,yes,no,no,no,yes,2,no,semi-furnished +5880000,7160,3,1,1,yes,no,yes,no,no,2,yes,unfurnished +5880000,6500,3,2,3,yes,no,no,no,yes,0,no,unfurnished +5873000,5500,3,1,3,yes,yes,no,no,yes,1,no,furnished +5873000,11460,3,1,3,yes,no,no,no,no,2,yes,semi-furnished +5866000,4800,3,1,1,yes,yes,yes,no,no,0,no,unfurnished +5810000,5828,4,1,4,yes,yes,no,no,no,0,no,semi-furnished +5810000,5200,3,1,3,yes,no,no,no,yes,0,no,semi-furnished +5810000,4800,3,1,3,yes,no,no,no,yes,0,no,unfurnished +5803000,7000,3,1,1,yes,no,yes,no,no,2,yes,semi-furnished +5775000,6000,3,2,4,yes,no,no,no,yes,0,no,unfurnished +5740000,5400,4,2,2,yes,no,no,no,yes,2,no,unfurnished +5740000,4640,4,1,2,yes,no,no,no,no,1,no,semi-furnished +5740000,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished +5740000,6360,3,1,1,yes,yes,yes,no,yes,2,yes,furnished +5740000,5800,3,2,4,yes,no,no,no,yes,0,no,unfurnished +5652500,6660,4,2,2,yes,yes,yes,no,no,1,yes,semi-furnished +5600000,10500,4,2,2,yes,no,no,no,no,1,no,semi-furnished +5600000,4800,5,2,3,no,no,yes,yes,no,0,no,unfurnished +5600000,4700,4,1,2,yes,yes,yes,no,yes,1,no,furnished +5600000,5000,3,1,4,yes,no,no,no,no,0,no,furnished +5600000,10500,2,1,1,yes,no,no,no,no,1,no,semi-furnished +5600000,5500,3,2,2,yes,no,no,no,no,1,no,semi-furnished +5600000,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished +5600000,6600,4,2,1,yes,no,yes,no,no,0,yes,semi-furnished +5600000,5136,3,1,2,yes,yes,yes,no,yes,0,yes,unfurnished +5565000,4400,4,1,2,yes,no,no,no,yes,2,yes,semi-furnished +5565000,5400,5,1,2,yes,yes,yes,no,yes,0,yes,furnished +5530000,3300,3,3,2,yes,no,yes,no,no,0,no,semi-furnished +5530000,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished +5530000,6100,3,2,1,yes,no,yes,no,no,2,yes,furnished +5523000,6900,3,1,1,yes,yes,yes,no,no,0,yes,semi-furnished +5495000,2817,4,2,2,no,yes,yes,no,no,1,no,furnished +5495000,7980,3,1,1,yes,no,no,no,no,2,no,semi-furnished +5460000,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished +5460000,6210,4,1,4,yes,yes,no,no,yes,0,no,furnished +5460000,6100,3,1,3,yes,yes,no,no,yes,0,yes,semi-furnished +5460000,6600,4,2,2,yes,yes,yes,no,no,0,yes,semi-furnished +5425000,6825,3,1,1,yes,yes,yes,no,yes,0,yes,semi-furnished +5390000,6710,3,2,2,yes,yes,yes,no,no,1,yes,furnished +5383000,6450,3,2,1,yes,yes,yes,yes,no,0,no,unfurnished +5320000,7800,3,1,1,yes,no,yes,no,yes,2,yes,unfurnished +5285000,4600,2,2,1,yes,no,no,no,yes,2,no,semi-furnished +5250000,4260,4,1,2,yes,no,yes,no,yes,0,no,furnished +5250000,6540,4,2,2,no,no,no,no,yes,0,no,semi-furnished +5250000,5500,3,2,1,yes,no,yes,no,no,0,no,semi-furnished +5250000,10269,3,1,1,yes,no,no,no,no,1,yes,semi-furnished +5250000,8400,3,1,2,yes,yes,yes,no,yes,2,yes,unfurnished +5250000,5300,4,2,1,yes,no,no,no,yes,0,yes,unfurnished +5250000,3800,3,1,2,yes,yes,yes,no,no,1,yes,unfurnished +5250000,9800,4,2,2,yes,yes,no,no,no,2,no,semi-furnished +5250000,8520,3,1,1,yes,no,no,no,yes,2,no,furnished +5243000,6050,3,1,1,yes,no,yes,no,no,0,yes,semi-furnished +5229000,7085,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished +5215000,3180,3,2,2,yes,no,no,no,no,2,no,semi-furnished +5215000,4500,4,2,1,no,no,yes,no,yes,2,no,semi-furnished +5215000,7200,3,1,2,yes,yes,yes,no,no,1,yes,furnished +5145000,3410,3,1,2,no,no,no,no,yes,0,no,semi-furnished +5145000,7980,3,1,1,yes,no,no,no,no,1,yes,semi-furnished +5110000,3000,3,2,2,yes,yes,yes,no,no,0,no,furnished +5110000,3000,3,1,2,yes,no,yes,no,no,0,no,unfurnished +5110000,11410,2,1,2,yes,no,no,no,no,0,yes,furnished +5110000,6100,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished +5075000,5720,2,1,2,yes,no,no,no,yes,0,yes,unfurnished +5040000,3540,2,1,1,no,yes,yes,no,no,0,no,semi-furnished +5040000,7600,4,1,2,yes,no,no,no,yes,2,no,furnished +5040000,10700,3,1,2,yes,yes,yes,no,no,0,no,semi-furnished +5040000,6600,3,1,1,yes,yes,yes,no,no,0,yes,furnished +5033000,4800,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished +5005000,8150,3,2,1,yes,yes,yes,no,no,0,no,semi-furnished +4970000,4410,4,3,2,yes,no,yes,no,no,2,no,semi-furnished +4970000,7686,3,1,1,yes,yes,yes,yes,no,0,no,semi-furnished +4956000,2800,3,2,2,no,no,yes,no,yes,1,no,semi-furnished +4935000,5948,3,1,2,yes,no,no,no,yes,0,no,semi-furnished +4907000,4200,3,1,2,yes,no,no,no,no,1,no,furnished +4900000,4520,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished +4900000,4095,3,1,2,no,yes,yes,no,yes,0,no,semi-furnished +4900000,4120,2,1,1,yes,no,yes,no,no,1,no,semi-furnished +4900000,5400,4,1,2,yes,no,no,no,no,0,no,semi-furnished +4900000,4770,3,1,1,yes,yes,yes,no,no,0,no,semi-furnished +4900000,6300,3,1,1,yes,no,no,no,yes,2,no,semi-furnished +4900000,5800,2,1,1,yes,yes,yes,no,yes,0,no,semi-furnished +4900000,3000,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished +4900000,2970,3,1,3,yes,no,no,no,no,0,no,semi-furnished +4900000,6720,3,1,1,yes,no,no,no,no,0,no,unfurnished +4900000,4646,3,1,2,yes,yes,yes,no,no,2,no,semi-furnished +4900000,12900,3,1,1,yes,no,no,no,no,2,no,furnished +4893000,3420,4,2,2,yes,no,yes,no,yes,2,no,semi-furnished +4893000,4995,4,2,1,yes,no,yes,no,no,0,no,semi-furnished +4865000,4350,2,1,1,yes,no,yes,no,no,0,no,unfurnished +4830000,4160,3,1,3,yes,no,no,no,no,0,no,unfurnished +4830000,6040,3,1,1,yes,no,no,no,no,2,yes,semi-furnished +4830000,6862,3,1,2,yes,no,no,no,yes,2,yes,furnished +4830000,4815,2,1,1,yes,no,no,no,yes,0,yes,semi-furnished +4795000,7000,3,1,2,yes,no,yes,no,no,0,no,unfurnished +4795000,8100,4,1,4,yes,no,yes,no,yes,2,no,semi-furnished +4767000,3420,4,2,2,yes,no,no,no,no,0,no,semi-furnished +4760000,9166,2,1,1,yes,no,yes,no,yes,2,no,semi-furnished +4760000,6321,3,1,2,yes,no,yes,no,yes,1,no,furnished +4760000,10240,2,1,1,yes,no,no,no,yes,2,yes,unfurnished +4753000,6440,2,1,1,yes,no,no,no,yes,3,no,semi-furnished +4690000,5170,3,1,4,yes,no,no,no,yes,0,no,semi-furnished +4690000,6000,2,1,1,yes,no,yes,no,yes,1,no,furnished +4690000,3630,3,1,2,yes,no,no,no,no,2,no,semi-furnished +4690000,9667,4,2,2,yes,yes,yes,no,no,1,no,semi-furnished +4690000,5400,2,1,2,yes,no,no,no,no,0,yes,semi-furnished +4690000,4320,3,1,1,yes,no,no,no,no,0,yes,semi-furnished +4655000,3745,3,1,2,yes,no,yes,no,no,0,no,furnished +4620000,4160,3,1,1,yes,yes,yes,no,yes,0,no,unfurnished +4620000,3880,3,2,2,yes,no,yes,no,no,2,no,semi-furnished +4620000,5680,3,1,2,yes,yes,no,no,yes,1,no,semi-furnished +4620000,2870,2,1,2,yes,yes,yes,no,no,0,yes,semi-furnished +4620000,5010,3,1,2,yes,no,yes,no,no,0,no,semi-furnished +4613000,4510,4,2,2,yes,no,yes,no,no,0,no,semi-furnished +4585000,4000,3,1,2,yes,no,no,no,no,1,no,furnished +4585000,3840,3,1,2,yes,no,no,no,no,1,yes,semi-furnished +4550000,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished +4550000,3640,3,1,2,yes,no,no,no,yes,0,no,furnished +4550000,2550,3,1,2,yes,no,yes,no,no,0,no,furnished +4550000,5320,3,1,2,yes,yes,yes,no,no,0,yes,semi-furnished +4550000,5360,3,1,2,yes,no,no,no,no,2,yes,unfurnished +4550000,3520,3,1,1,yes,no,no,no,no,0,yes,semi-furnished +4550000,8400,4,1,4,yes,no,no,no,no,3,no,unfurnished +4543000,4100,2,2,1,yes,yes,yes,no,no,0,no,semi-furnished +4543000,4990,4,2,2,yes,yes,yes,no,no,0,yes,furnished +4515000,3510,3,1,3,yes,no,no,no,no,0,no,semi-furnished +4515000,3450,3,1,2,yes,no,yes,no,no,1,no,semi-furnished +4515000,9860,3,1,1,yes,no,no,no,no,0,no,semi-furnished +4515000,3520,2,1,2,yes,no,no,no,no,0,yes,furnished +4480000,4510,4,1,2,yes,no,no,no,yes,2,no,semi-furnished +4480000,5885,2,1,1,yes,no,no,no,yes,1,no,unfurnished +4480000,4000,3,1,2,yes,no,no,no,no,2,no,furnished +4480000,8250,3,1,1,yes,no,no,no,no,0,no,furnished +4480000,4040,3,1,2,yes,no,no,no,no,1,no,semi-furnished +4473000,6360,2,1,1,yes,no,yes,no,yes,1,no,furnished +4473000,3162,3,1,2,yes,no,no,no,yes,1,no,furnished +4473000,3510,3,1,2,yes,no,no,no,no,0,no,semi-furnished +4445000,3750,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished +4410000,3968,3,1,2,no,no,no,no,no,0,no,semi-furnished +4410000,4900,2,1,2,yes,no,yes,no,no,0,no,semi-furnished +4403000,2880,3,1,2,yes,no,no,no,no,0,yes,semi-furnished +4403000,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished +4403000,4920,3,1,2,yes,no,no,no,no,1,no,semi-furnished +4382000,4950,4,1,2,yes,no,no,no,yes,0,no,semi-furnished +4375000,3900,3,1,2,yes,no,no,no,no,0,no,unfurnished +4340000,4500,3,2,3,yes,no,no,yes,no,1,no,furnished +4340000,1905,5,1,2,no,no,yes,no,no,0,no,semi-furnished +4340000,4075,3,1,1,yes,yes,yes,no,no,2,no,semi-furnished +4340000,3500,4,1,2,yes,no,no,no,no,2,no,furnished +4340000,6450,4,1,2,yes,no,no,no,no,0,no,semi-furnished +4319000,4032,2,1,1,yes,no,yes,no,no,0,no,furnished +4305000,4400,2,1,1,yes,no,no,no,no,1,no,semi-furnished +4305000,10360,2,1,1,yes,no,no,no,no,1,yes,semi-furnished +4277000,3400,3,1,2,yes,no,yes,no,no,2,yes,semi-furnished +4270000,6360,2,1,1,yes,no,no,no,no,0,no,furnished +4270000,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished +4270000,4500,2,1,1,yes,no,no,no,yes,2,no,furnished +4270000,2175,3,1,2,no,yes,yes,no,yes,0,no,unfurnished +4270000,4360,4,1,2,yes,no,no,no,no,0,no,furnished +4270000,7770,2,1,1,yes,no,no,no,no,1,no,furnished +4235000,6650,3,1,2,yes,yes,no,no,no,0,no,semi-furnished +4235000,2787,3,1,1,yes,no,yes,no,no,0,yes,furnished +4200000,5500,3,1,2,yes,no,no,no,yes,0,no,unfurnished +4200000,5040,3,1,2,yes,no,yes,no,yes,0,no,unfurnished +4200000,5850,2,1,1,yes,yes,yes,no,no,2,no,semi-furnished +4200000,2610,4,3,2,no,no,no,no,no,0,no,semi-furnished +4200000,2953,3,1,2,yes,no,yes,no,yes,0,no,unfurnished +4200000,2747,4,2,2,no,no,no,no,no,0,no,semi-furnished +4200000,4410,2,1,1,no,no,no,no,no,1,no,unfurnished +4200000,4000,4,2,2,no,no,no,no,no,0,no,semi-furnished +4200000,2325,3,1,2,no,no,no,no,no,0,no,semi-furnished +4200000,4600,3,2,2,yes,no,no,no,yes,1,no,semi-furnished +4200000,3640,3,2,2,yes,no,yes,no,no,0,no,unfurnished +4200000,5800,3,1,1,yes,no,no,yes,no,2,no,semi-furnished +4200000,7000,3,1,1,yes,no,no,no,no,3,no,furnished +4200000,4079,3,1,3,yes,no,no,no,no,0,no,semi-furnished +4200000,3520,3,1,2,yes,no,no,no,no,0,yes,semi-furnished +4200000,2145,3,1,3,yes,no,no,no,no,1,yes,unfurnished +4200000,4500,3,1,1,yes,no,yes,no,no,0,no,furnished +4193000,8250,3,1,1,yes,no,yes,no,no,3,no,semi-furnished +4193000,3450,3,1,2,yes,no,no,no,no,1,no,semi-furnished +4165000,4840,3,1,2,yes,no,no,no,no,1,no,semi-furnished +4165000,4080,3,1,2,yes,no,no,no,no,2,no,semi-furnished +4165000,4046,3,1,2,yes,no,yes,no,no,1,no,semi-furnished +4130000,4632,4,1,2,yes,no,no,no,yes,0,no,semi-furnished +4130000,5985,3,1,1,yes,no,yes,no,no,0,no,semi-furnished +4123000,6060,2,1,1,yes,no,yes,no,no,1,no,semi-furnished +4098500,3600,3,1,1,yes,no,yes,no,yes,0,yes,furnished +4095000,3680,3,2,2,yes,no,no,no,no,0,no,semi-furnished +4095000,4040,2,1,2,yes,no,no,no,no,1,no,semi-furnished +4095000,5600,2,1,1,yes,no,no,no,yes,0,no,semi-furnished +4060000,5900,4,2,2,no,no,yes,no,no,1,no,unfurnished +4060000,4992,3,2,2,yes,no,no,no,no,2,no,unfurnished +4060000,4340,3,1,1,yes,no,no,no,no,0,no,semi-furnished +4060000,3000,4,1,3,yes,no,yes,no,yes,2,no,semi-furnished +4060000,4320,3,1,2,yes,no,no,no,no,2,yes,furnished +4025000,3630,3,2,2,yes,no,no,yes,no,2,no,semi-furnished +4025000,3460,3,2,1,yes,no,yes,no,yes,1,no,furnished +4025000,5400,3,1,1,yes,no,no,no,no,3,no,semi-furnished +4007500,4500,3,1,2,no,no,yes,no,yes,0,no,semi-furnished +4007500,3460,4,1,2,yes,no,no,no,yes,0,no,semi-furnished +3990000,4100,4,1,1,no,no,yes,no,no,0,no,unfurnished +3990000,6480,3,1,2,no,no,no,no,yes,1,no,semi-furnished +3990000,4500,3,2,2,no,no,yes,no,yes,0,no,semi-furnished +3990000,3960,3,1,2,yes,no,no,no,no,0,no,furnished +3990000,4050,2,1,2,yes,yes,yes,no,no,0,yes,unfurnished +3920000,7260,3,2,1,yes,yes,yes,no,no,3,no,furnished +3920000,5500,4,1,2,yes,yes,yes,no,no,0,no,semi-furnished +3920000,3000,3,1,2,yes,no,no,no,no,0,no,semi-furnished +3920000,3290,2,1,1,yes,no,no,yes,no,1,no,furnished +3920000,3816,2,1,1,yes,no,yes,no,yes,2,no,furnished +3920000,8080,3,1,1,yes,no,no,no,yes,2,no,semi-furnished +3920000,2145,4,2,1,yes,no,yes,no,no,0,yes,unfurnished +3885000,3780,2,1,2,yes,yes,yes,no,no,0,no,semi-furnished +3885000,3180,4,2,2,yes,no,no,no,no,0,no,furnished +3850000,5300,5,2,2,yes,no,no,no,no,0,no,semi-furnished +3850000,3180,2,2,1,yes,no,yes,no,no,2,no,semi-furnished +3850000,7152,3,1,2,yes,no,no,no,yes,0,no,furnished +3850000,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3850000,3850,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3850000,2015,3,1,2,yes,no,yes,no,no,0,yes,semi-furnished +3850000,2176,2,1,2,yes,yes,no,no,no,0,yes,semi-furnished +3836000,3350,3,1,2,yes,no,no,no,no,0,no,unfurnished +3815000,3150,2,2,1,no,no,yes,no,no,0,no,semi-furnished +3780000,4820,3,1,2,yes,no,no,no,no,0,no,semi-furnished +3780000,3420,2,1,2,yes,no,no,yes,no,1,no,semi-furnished +3780000,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3780000,5830,2,1,1,yes,no,no,no,no,2,no,unfurnished +3780000,2856,3,1,3,yes,no,no,no,no,0,yes,furnished +3780000,8400,2,1,1,yes,no,no,no,no,1,no,furnished +3773000,8250,3,1,1,yes,no,no,no,no,2,no,furnished +3773000,2520,5,2,1,no,no,yes,no,yes,1,no,furnished +3773000,6930,4,1,2,no,no,no,no,no,1,no,furnished +3745000,3480,2,1,1,yes,no,no,no,no,0,yes,semi-furnished +3710000,3600,3,1,1,yes,no,no,no,no,1,no,unfurnished +3710000,4040,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3710000,6020,3,1,1,yes,no,no,no,no,0,no,semi-furnished +3710000,4050,2,1,1,yes,no,no,no,no,0,no,furnished +3710000,3584,2,1,1,yes,no,no,yes,no,0,no,semi-furnished +3703000,3120,3,1,2,no,no,yes,yes,no,0,no,semi-furnished +3703000,5450,2,1,1,yes,no,no,no,no,0,no,furnished +3675000,3630,2,1,1,yes,no,yes,no,no,0,no,furnished +3675000,3630,2,1,1,yes,no,no,no,yes,0,no,unfurnished +3675000,5640,2,1,1,no,no,no,no,no,0,no,semi-furnished +3675000,3600,2,1,1,yes,no,no,no,no,0,no,furnished +3640000,4280,2,1,1,yes,no,no,no,yes,2,no,semi-furnished +3640000,3570,3,1,2,yes,no,yes,no,no,0,no,semi-furnished +3640000,3180,3,1,2,no,no,yes,no,no,0,no,semi-furnished +3640000,3000,2,1,2,yes,no,no,no,yes,0,no,furnished +3640000,3520,2,2,1,yes,no,yes,no,no,0,no,semi-furnished +3640000,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished +3640000,4130,3,2,2,yes,no,no,no,no,2,no,semi-furnished +3640000,2850,3,2,2,no,no,yes,no,no,0,yes,unfurnished +3640000,2275,3,1,3,yes,no,no,yes,yes,0,yes,semi-furnished +3633000,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished +3605000,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3605000,4000,2,1,1,yes,no,no,no,no,0,yes,semi-furnished +3570000,3150,3,1,2,yes,no,yes,no,no,0,no,furnished +3570000,4500,4,2,2,yes,no,yes,no,no,2,no,furnished +3570000,4500,2,1,1,no,no,no,no,no,0,no,furnished +3570000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished +3535000,3850,3,1,1,yes,no,no,no,no,2,no,unfurnished +3500000,4240,3,1,2,yes,no,no,no,yes,0,no,semi-furnished +3500000,3650,3,1,2,yes,no,no,no,no,0,no,unfurnished +3500000,4600,4,1,2,yes,no,no,no,no,0,no,semi-furnished +3500000,2135,3,2,2,no,no,no,no,no,0,no,unfurnished +3500000,3036,3,1,2,yes,no,yes,no,no,0,no,semi-furnished +3500000,3990,3,1,2,yes,no,no,no,no,0,no,semi-furnished +3500000,7424,3,1,1,no,no,no,no,no,0,no,unfurnished +3500000,3480,3,1,1,no,no,no,no,yes,0,no,unfurnished +3500000,3600,6,1,2,yes,no,no,no,no,1,no,unfurnished +3500000,3640,2,1,1,yes,no,no,no,no,1,no,semi-furnished +3500000,5900,2,1,1,yes,no,no,no,no,1,no,furnished +3500000,3120,3,1,2,yes,no,no,no,no,1,no,unfurnished +3500000,7350,2,1,1,yes,no,no,no,no,1,no,semi-furnished +3500000,3512,2,1,1,yes,no,no,no,no,1,yes,unfurnished +3500000,9500,3,1,2,yes,no,no,no,no,3,yes,unfurnished +3500000,5880,2,1,1,yes,no,no,no,no,0,no,unfurnished +3500000,12944,3,1,1,yes,no,no,no,no,0,no,unfurnished +3493000,4900,3,1,2,no,no,no,no,no,0,no,unfurnished +3465000,3060,3,1,1,yes,no,no,no,no,0,no,unfurnished +3465000,5320,2,1,1,yes,no,no,no,no,1,yes,unfurnished +3465000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished +3430000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished +3430000,3185,2,1,1,yes,no,no,no,no,2,no,unfurnished +3430000,3850,3,1,1,yes,no,no,no,no,0,no,unfurnished +3430000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished +3430000,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished +3430000,1950,3,2,2,yes,no,yes,no,no,0,yes,unfurnished +3423000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished +3395000,4785,3,1,2,yes,yes,yes,no,yes,1,no,furnished +3395000,3450,3,1,1,yes,no,yes,no,no,2,no,unfurnished +3395000,3640,2,1,1,yes,no,no,no,no,0,no,furnished +3360000,3500,4,1,2,yes,no,no,no,yes,2,no,unfurnished +3360000,4960,4,1,3,no,no,no,no,no,0,no,semi-furnished +3360000,4120,2,1,2,yes,no,no,no,no,0,no,unfurnished +3360000,4750,2,1,1,yes,no,no,no,no,0,no,unfurnished +3360000,3720,2,1,1,no,no,no,no,yes,0,no,unfurnished +3360000,3750,3,1,1,yes,no,no,no,no,0,no,unfurnished +3360000,3100,3,1,2,no,no,yes,no,no,0,no,semi-furnished +3360000,3185,2,1,1,yes,no,yes,no,no,2,no,furnished +3353000,2700,3,1,1,no,no,no,no,no,0,no,furnished +3332000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished +3325000,4040,2,1,1,yes,no,no,no,no,1,no,unfurnished +3325000,4775,4,1,2,yes,no,no,no,no,0,no,unfurnished +3290000,2500,2,1,1,no,no,no,no,yes,0,no,unfurnished +3290000,3180,4,1,2,yes,no,yes,no,yes,0,no,unfurnished +3290000,6060,3,1,1,yes,yes,yes,no,no,0,no,furnished +3290000,3480,4,1,2,no,no,no,no,no,1,no,semi-furnished +3290000,3792,4,1,2,yes,no,no,no,no,0,no,semi-furnished +3290000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished +3290000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished +3290000,5880,3,1,1,yes,no,no,no,no,1,no,unfurnished +3255000,4500,2,1,1,no,no,no,no,no,0,no,semi-furnished +3255000,3930,2,1,1,no,no,no,no,no,0,no,unfurnished +3234000,3640,4,1,2,yes,no,yes,no,no,0,no,unfurnished +3220000,4370,3,1,2,yes,no,no,no,no,0,no,unfurnished +3220000,2684,2,1,1,yes,no,no,no,yes,1,no,unfurnished +3220000,4320,3,1,1,no,no,no,no,no,1,no,unfurnished +3220000,3120,3,1,2,no,no,no,no,no,0,no,furnished +3150000,3450,1,1,1,yes,no,no,no,no,0,no,furnished +3150000,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished +3150000,3500,2,1,1,no,no,yes,no,no,0,no,semi-furnished +3150000,4095,2,1,1,yes,no,no,no,no,2,no,semi-furnished +3150000,1650,3,1,2,no,no,yes,no,no,0,no,unfurnished +3150000,3450,3,1,2,yes,no,yes,no,no,0,no,semi-furnished +3150000,6750,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3150000,9000,3,1,2,yes,no,no,no,no,2,no,semi-furnished +3150000,3069,2,1,1,yes,no,no,no,no,1,no,unfurnished +3143000,4500,3,1,2,yes,no,no,no,yes,0,no,unfurnished +3129000,5495,3,1,1,yes,no,yes,no,no,0,no,unfurnished +3118850,2398,3,1,1,yes,no,no,no,no,0,yes,semi-furnished +3115000,3000,3,1,1,no,no,no,no,yes,0,no,unfurnished +3115000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished +3115000,3500,2,1,1,yes,no,no,no,no,0,no,unfurnished +3087000,8100,2,1,1,yes,no,no,no,no,1,no,unfurnished +3080000,4960,2,1,1,yes,no,yes,no,yes,0,no,unfurnished +3080000,2160,3,1,2,no,no,yes,no,no,0,no,semi-furnished +3080000,3090,2,1,1,yes,yes,yes,no,no,0,no,unfurnished +3080000,4500,2,1,2,yes,no,no,yes,no,1,no,semi-furnished +3045000,3800,2,1,1,yes,no,no,no,no,0,no,unfurnished +3010000,3090,3,1,2,no,no,no,no,no,0,no,semi-furnished +3010000,3240,3,1,2,yes,no,no,no,no,2,no,semi-furnished +3010000,2835,2,1,1,yes,no,no,no,no,0,no,semi-furnished +3010000,4600,2,1,1,yes,no,no,no,no,0,no,furnished +3010000,5076,3,1,1,no,no,no,no,no,0,no,unfurnished +3010000,3750,3,1,2,yes,no,no,no,no,0,no,unfurnished +3010000,3630,4,1,2,yes,no,no,no,no,3,no,semi-furnished +3003000,8050,2,1,1,yes,no,no,no,no,0,no,unfurnished +2975000,4352,4,1,2,no,no,no,no,no,1,no,unfurnished +2961000,3000,2,1,2,yes,no,no,no,no,0,no,semi-furnished +2940000,5850,3,1,2,yes,no,yes,no,no,1,no,unfurnished +2940000,4960,2,1,1,yes,no,no,no,no,0,no,unfurnished +2940000,3600,3,1,2,no,no,no,no,no,1,no,unfurnished +2940000,3660,4,1,2,no,no,no,no,no,0,no,unfurnished +2940000,3480,3,1,2,no,no,no,no,no,1,no,semi-furnished +2940000,2700,2,1,1,no,no,no,no,no,0,no,furnished +2940000,3150,3,1,2,no,no,no,no,no,0,no,unfurnished +2940000,6615,3,1,2,yes,no,no,no,no,0,no,semi-furnished +2870000,3040,2,1,1,no,no,no,no,no,0,no,unfurnished +2870000,3630,2,1,1,yes,no,no,no,no,0,no,unfurnished +2870000,6000,2,1,1,yes,no,no,no,no,0,no,semi-furnished +2870000,5400,4,1,2,yes,no,no,no,no,0,no,unfurnished +2852500,5200,4,1,3,yes,no,no,no,no,0,no,unfurnished +2835000,3300,3,1,2,no,no,no,no,no,1,no,semi-furnished +2835000,4350,3,1,2,no,no,no,yes,no,1,no,unfurnished +2835000,2640,2,1,1,no,no,no,no,no,1,no,furnished +2800000,2650,3,1,2,yes,no,yes,no,no,1,no,unfurnished +2800000,3960,3,1,1,yes,no,no,no,no,0,no,furnished +2730000,6800,2,1,1,yes,no,no,no,no,0,no,unfurnished +2730000,4000,3,1,2,yes,no,no,no,no,1,no,unfurnished +2695000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished +2660000,3934,2,1,1,yes,no,no,no,no,0,no,unfurnished +2660000,2000,2,1,2,yes,no,no,no,no,0,no,semi-furnished +2660000,3630,3,3,2,no,yes,no,no,no,0,no,unfurnished +2660000,2800,3,1,1,yes,no,no,no,no,0,no,unfurnished +2660000,2430,3,1,1,no,no,no,no,no,0,no,unfurnished +2660000,3480,2,1,1,yes,no,no,no,no,1,no,semi-furnished +2660000,4000,3,1,1,yes,no,no,no,no,0,no,semi-furnished +2653000,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished +2653000,4000,3,1,2,yes,no,no,no,yes,0,no,unfurnished +2604000,2910,2,1,1,no,no,no,no,no,0,no,unfurnished +2590000,3600,2,1,1,yes,no,no,no,no,0,no,unfurnished +2590000,4400,2,1,1,yes,no,no,no,no,0,no,unfurnished +2590000,3600,2,2,2,yes,no,yes,no,no,1,no,furnished +2520000,2880,3,1,1,no,no,no,no,no,0,no,unfurnished +2520000,3180,3,1,1,no,no,no,no,no,0,no,unfurnished +2520000,3000,2,1,2,yes,no,no,no,no,0,no,furnished +2485000,4400,3,1,2,yes,no,no,no,no,0,no,unfurnished +2485000,3000,3,1,2,no,no,no,no,no,0,no,semi-furnished +2450000,3210,3,1,2,yes,no,yes,no,no,0,no,unfurnished +2450000,3240,2,1,1,no,yes,no,no,no,1,no,unfurnished +2450000,3000,2,1,1,yes,no,no,no,no,1,no,unfurnished +2450000,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished +2450000,4840,2,1,2,yes,no,no,no,no,0,no,unfurnished +2450000,7700,2,1,1,yes,no,no,no,no,0,no,unfurnished +2408000,3635,2,1,1,no,no,no,no,no,0,no,unfurnished +2380000,2475,3,1,2,yes,no,no,no,no,0,no,furnished +2380000,2787,4,2,2,yes,no,no,no,no,0,no,furnished +2380000,3264,2,1,1,yes,no,no,no,no,0,no,unfurnished +2345000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished +2310000,3180,2,1,1,yes,no,no,no,no,0,no,unfurnished +2275000,1836,2,1,1,no,no,yes,no,no,0,no,semi-furnished +2275000,3970,1,1,1,no,no,no,no,no,0,no,unfurnished +2275000,3970,3,1,2,yes,no,yes,no,no,0,no,unfurnished +2240000,1950,3,1,1,no,no,no,yes,no,0,no,unfurnished +2233000,5300,3,1,1,no,no,no,no,yes,0,yes,unfurnished +2135000,3000,2,1,1,no,no,no,no,no,0,no,unfurnished +2100000,2400,3,1,2,yes,no,no,no,no,0,no,unfurnished +2100000,3000,4,1,2,yes,no,no,no,no,0,no,unfurnished +2100000,3360,2,1,1,yes,no,no,no,no,1,no,unfurnished +1960000,3420,5,1,2,no,no,no,no,no,0,no,unfurnished +1890000,1700,3,1,2,yes,no,no,no,no,0,no,unfurnished +1890000,3649,2,1,1,yes,no,no,no,no,0,no,unfurnished +1855000,2990,2,1,1,no,no,no,no,no,1,no,unfurnished +1820000,3000,2,1,1,yes,no,yes,no,no,2,no,unfurnished +1767150,2400,3,1,1,no,no,no,no,no,0,no,semi-furnished +1750000,3620,2,1,1,yes,no,no,no,no,0,no,unfurnished +1750000,2910,3,1,1,no,no,no,no,no,0,no,furnished +1750000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished diff --git a/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_classification.csv b/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_classification.csv new file mode 100644 index 0000000..1b9d029 --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_classification.csv @@ -0,0 +1,151 @@ +"sepal.length","sepal.width","petal.length","petal.width","variety" +5.1,3.5,1.4,.2,"Setosa" +4.9,3,1.4,.2,"Setosa" +4.7,3.2,1.3,.2,"Setosa" +4.6,3.1,1.5,.2,"Setosa" +5,3.6,1.4,.2,"Setosa" +5.4,3.9,1.7,.4,"Setosa" +4.6,3.4,1.4,.3,"Setosa" +5,3.4,1.5,.2,"Setosa" +4.4,2.9,1.4,.2,"Setosa" +4.9,3.1,1.5,.1,"Setosa" +5.4,3.7,1.5,.2,"Setosa" +4.8,3.4,1.6,.2,"Setosa" +4.8,3,1.4,.1,"Setosa" +4.3,3,1.1,.1,"Setosa" +5.8,4,1.2,.2,"Setosa" +5.7,4.4,1.5,.4,"Setosa" +5.4,3.9,1.3,.4,"Setosa" +5.1,3.5,1.4,.3,"Setosa" +5.7,3.8,1.7,.3,"Setosa" +5.1,3.8,1.5,.3,"Setosa" +5.4,3.4,1.7,.2,"Setosa" +5.1,3.7,1.5,.4,"Setosa" +4.6,3.6,1,.2,"Setosa" +5.1,3.3,1.7,.5,"Setosa" +4.8,3.4,1.9,.2,"Setosa" +5,3,1.6,.2,"Setosa" +5,3.4,1.6,.4,"Setosa" +5.2,3.5,1.5,.2,"Setosa" +5.2,3.4,1.4,.2,"Setosa" +4.7,3.2,1.6,.2,"Setosa" +4.8,3.1,1.6,.2,"Setosa" +5.4,3.4,1.5,.4,"Setosa" +5.2,4.1,1.5,.1,"Setosa" +5.5,4.2,1.4,.2,"Setosa" +4.9,3.1,1.5,.2,"Setosa" +5,3.2,1.2,.2,"Setosa" +5.5,3.5,1.3,.2,"Setosa" +4.9,3.6,1.4,.1,"Setosa" +4.4,3,1.3,.2,"Setosa" +5.1,3.4,1.5,.2,"Setosa" +5,3.5,1.3,.3,"Setosa" +4.5,2.3,1.3,.3,"Setosa" +4.4,3.2,1.3,.2,"Setosa" +5,3.5,1.6,.6,"Setosa" +5.1,3.8,1.9,.4,"Setosa" +4.8,3,1.4,.3,"Setosa" +5.1,3.8,1.6,.2,"Setosa" +4.6,3.2,1.4,.2,"Setosa" +5.3,3.7,1.5,.2,"Setosa" +5,3.3,1.4,.2,"Setosa" +7,3.2,4.7,1.4,"Versicolor" +6.4,3.2,4.5,1.5,"Versicolor" +6.9,3.1,4.9,1.5,"Versicolor" +5.5,2.3,4,1.3,"Versicolor" +6.5,2.8,4.6,1.5,"Versicolor" +5.7,2.8,4.5,1.3,"Versicolor" +6.3,3.3,4.7,1.6,"Versicolor" +4.9,2.4,3.3,1,"Versicolor" +6.6,2.9,4.6,1.3,"Versicolor" +5.2,2.7,3.9,1.4,"Versicolor" +5,2,3.5,1,"Versicolor" +5.9,3,4.2,1.5,"Versicolor" +6,2.2,4,1,"Versicolor" +6.1,2.9,4.7,1.4,"Versicolor" +5.6,2.9,3.6,1.3,"Versicolor" +6.7,3.1,4.4,1.4,"Versicolor" +5.6,3,4.5,1.5,"Versicolor" +5.8,2.7,4.1,1,"Versicolor" +6.2,2.2,4.5,1.5,"Versicolor" +5.6,2.5,3.9,1.1,"Versicolor" +5.9,3.2,4.8,1.8,"Versicolor" +6.1,2.8,4,1.3,"Versicolor" +6.3,2.5,4.9,1.5,"Versicolor" +6.1,2.8,4.7,1.2,"Versicolor" +6.4,2.9,4.3,1.3,"Versicolor" +6.6,3,4.4,1.4,"Versicolor" +6.8,2.8,4.8,1.4,"Versicolor" +6.7,3,5,1.7,"Versicolor" +6,2.9,4.5,1.5,"Versicolor" +5.7,2.6,3.5,1,"Versicolor" +5.5,2.4,3.8,1.1,"Versicolor" +5.5,2.4,3.7,1,"Versicolor" +5.8,2.7,3.9,1.2,"Versicolor" +6,2.7,5.1,1.6,"Versicolor" +5.4,3,4.5,1.5,"Versicolor" +6,3.4,4.5,1.6,"Versicolor" +6.7,3.1,4.7,1.5,"Versicolor" +6.3,2.3,4.4,1.3,"Versicolor" +5.6,3,4.1,1.3,"Versicolor" +5.5,2.5,4,1.3,"Versicolor" +5.5,2.6,4.4,1.2,"Versicolor" +6.1,3,4.6,1.4,"Versicolor" +5.8,2.6,4,1.2,"Versicolor" +5,2.3,3.3,1,"Versicolor" +5.6,2.7,4.2,1.3,"Versicolor" +5.7,3,4.2,1.2,"Versicolor" +5.7,2.9,4.2,1.3,"Versicolor" +6.2,2.9,4.3,1.3,"Versicolor" +5.1,2.5,3,1.1,"Versicolor" +5.7,2.8,4.1,1.3,"Versicolor" +6.3,3.3,6,2.5,"Virginica" +5.8,2.7,5.1,1.9,"Virginica" +7.1,3,5.9,2.1,"Virginica" +6.3,2.9,5.6,1.8,"Virginica" +6.5,3,5.8,2.2,"Virginica" +7.6,3,6.6,2.1,"Virginica" +4.9,2.5,4.5,1.7,"Virginica" +7.3,2.9,6.3,1.8,"Virginica" +6.7,2.5,5.8,1.8,"Virginica" +7.2,3.6,6.1,2.5,"Virginica" +6.5,3.2,5.1,2,"Virginica" +6.4,2.7,5.3,1.9,"Virginica" +6.8,3,5.5,2.1,"Virginica" +5.7,2.5,5,2,"Virginica" +5.8,2.8,5.1,2.4,"Virginica" +6.4,3.2,5.3,2.3,"Virginica" +6.5,3,5.5,1.8,"Virginica" +7.7,3.8,6.7,2.2,"Virginica" +7.7,2.6,6.9,2.3,"Virginica" +6,2.2,5,1.5,"Virginica" +6.9,3.2,5.7,2.3,"Virginica" +5.6,2.8,4.9,2,"Virginica" +7.7,2.8,6.7,2,"Virginica" +6.3,2.7,4.9,1.8,"Virginica" +6.7,3.3,5.7,2.1,"Virginica" +7.2,3.2,6,1.8,"Virginica" +6.2,2.8,4.8,1.8,"Virginica" +6.1,3,4.9,1.8,"Virginica" +6.4,2.8,5.6,2.1,"Virginica" +7.2,3,5.8,1.6,"Virginica" +7.4,2.8,6.1,1.9,"Virginica" +7.9,3.8,6.4,2,"Virginica" +6.4,2.8,5.6,2.2,"Virginica" +6.3,2.8,5.1,1.5,"Virginica" +6.1,2.6,5.6,1.4,"Virginica" +7.7,3,6.1,2.3,"Virginica" +6.3,3.4,5.6,2.4,"Virginica" +6.4,3.1,5.5,1.8,"Virginica" +6,3,4.8,1.8,"Virginica" +6.9,3.1,5.4,2.1,"Virginica" +6.7,3.1,5.6,2.4,"Virginica" +6.9,3.1,5.1,2.3,"Virginica" +5.8,2.7,5.1,1.9,"Virginica" +6.8,3.2,5.9,2.3,"Virginica" +6.7,3.3,5.7,2.5,"Virginica" +6.7,3,5.2,2.3,"Virginica" +6.3,2.5,5,1.9,"Virginica" +6.5,3,5.2,2,"Virginica" +6.2,3.4,5.4,2.3,"Virginica" +5.9,3,5.1,1.8,"Virginica" \ No newline at end of file diff --git a/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_na_classification.csv b/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_na_classification.csv new file mode 100644 index 0000000..d00567a --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_na_classification.csv @@ -0,0 +1,151 @@ +sepal.length,sepal.width,petal.length,petal.width,variety +5.1,NA,1.4,0.2,Setosa +4.9,3,1.4,0.2,Setosa +4.7,3.2,,,Setosa +4.6,,1.5,0.2,Setosa +5,3.6,1.4,0.2,Setosa +5.4,3.9,1.7,0.4,Setosa +4.6,3.4,1.4,0.3,Setosa +5,3.4,1.5,0.2,Setosa +4.4,2.9,1.4,0.2,Setosa +4.9,3.1,1.5,0.1,Setosa +5.4,3.7,1.5,0.2,Setosa +4.8,3.4,1.6,0.2,Setosa +4.8,3,1.4,0.1,Setosa +4.3,3,1.1,0.1,Setosa +5.8,4,1.2,0.2,Setosa +5.7,4.4,1.5,0.4,Setosa +5.4,3.9,1.3,0.4,Setosa +5.1,3.5,1.4,0.3,Setosa +5.7,3.8,1.7,0.3,Setosa +5.1,3.8,1.5,0.3,Setosa +5.4,3.4,1.7,0.2,Setosa +5.1,3.7,1.5,0.4,Setosa +4.6,3.6,1,0.2,Setosa +5.1,3.3,1.7,0.5,Setosa +4.8,3.4,1.9,0.2,Setosa +5,3,1.6,0.2,Setosa +5,3.4,1.6,0.4,Setosa +5.2,3.5,1.5,0.2,Setosa +5.2,3.4,1.4,0.2,Setosa +4.7,3.2,1.6,0.2,Setosa +4.8,3.1,1.6,0.2,Setosa +5.4,3.4,1.5,0.4,Setosa +5.2,4.1,1.5,0.1,Setosa +5.5,4.2,1.4,0.2,Setosa +4.9,3.1,1.5,0.2,Setosa +5,3.2,1.2,0.2,Setosa +5.5,3.5,1.3,0.2,Setosa +4.9,3.6,1.4,0.1,Setosa +4.4,3,1.3,0.2,Setosa +5.1,3.4,1.5,0.2,Setosa +5,3.5,1.3,0.3,Setosa +4.5,2.3,1.3,0.3,Setosa +4.4,3.2,1.3,0.2,Setosa +5,3.5,1.6,0.6,Setosa +5.1,3.8,1.9,0.4,Setosa +4.8,3,1.4,0.3,Setosa +5.1,3.8,1.6,0.2,Setosa +4.6,3.2,1.4,0.2,Setosa +5.3,3.7,1.5,0.2,Setosa +5,3.3,1.4,0.2,Setosa +7,3.2,4.7,1.4,Versicolor +6.4,3.2,4.5,1.5,Versicolor +6.9,3.1,4.9,1.5,Versicolor +5.5,2.3,4,1.3,Versicolor +6.5,2.8,4.6,1.5,Versicolor +5.7,2.8,4.5,1.3,Versicolor +6.3,3.3,4.7,1.6,Versicolor +4.9,2.4,3.3,1,Versicolor +6.6,2.9,4.6,1.3,Versicolor +5.2,2.7,3.9,1.4,Versicolor +5,2,3.5,1,Versicolor +5.9,3,4.2,1.5,Versicolor +6,2.2,4,1,Versicolor +6.1,2.9,4.7,1.4,Versicolor +5.6,2.9,3.6,1.3,Versicolor +6.7,3.1,4.4,1.4,Versicolor +5.6,3,4.5,1.5,Versicolor +5.8,2.7,4.1,1,Versicolor +6.2,2.2,4.5,1.5,Versicolor +5.6,2.5,3.9,1.1,Versicolor +5.9,3.2,4.8,1.8,Versicolor +6.1,2.8,4,1.3,Versicolor +6.3,2.5,4.9,1.5,Versicolor +6.1,2.8,4.7,1.2,Versicolor +6.4,2.9,4.3,1.3,Versicolor +6.6,3,4.4,1.4,Versicolor +6.8,2.8,4.8,1.4,Versicolor +6.7,3,5,1.7,Versicolor +6,2.9,4.5,1.5,Versicolor +5.7,2.6,3.5,1,Versicolor +5.5,2.4,3.8,1.1,Versicolor +5.5,2.4,3.7,1,Versicolor +5.8,2.7,3.9,1.2,Versicolor +6,2.7,5.1,1.6,Versicolor +5.4,3,4.5,1.5,Versicolor +6,3.4,4.5,1.6,Versicolor +6.7,3.1,4.7,1.5,Versicolor +6.3,2.3,4.4,1.3,Versicolor +5.6,3,4.1,1.3,Versicolor +5.5,2.5,4,1.3,Versicolor +5.5,2.6,4.4,1.2,Versicolor +6.1,3,4.6,1.4,Versicolor +5.8,2.6,4,1.2,Versicolor +5,2.3,3.3,1,Versicolor +5.6,2.7,4.2,1.3,Versicolor +5.7,3,4.2,1.2,Versicolor +5.7,2.9,4.2,1.3,Versicolor +6.2,2.9,4.3,1.3,Versicolor +5.1,2.5,3,1.1,Versicolor +5.7,2.8,4.1,1.3,Versicolor +6.3,3.3,6,2.5,Virginica +5.8,2.7,5.1,1.9,Virginica +7.1,3,5.9,2.1,Virginica +6.3,2.9,5.6,1.8,Virginica +6.5,3,5.8,2.2,Virginica +7.6,3,6.6,2.1,Virginica +4.9,2.5,4.5,1.7,Virginica +7.3,2.9,6.3,1.8,Virginica +6.7,2.5,5.8,1.8,Virginica +7.2,3.6,6.1,2.5,Virginica +6.5,3.2,5.1,2,Virginica +6.4,2.7,5.3,1.9,Virginica +6.8,3,5.5,2.1,Virginica +5.7,2.5,5,2,Virginica +5.8,2.8,5.1,2.4,Virginica +6.4,3.2,5.3,2.3,Virginica +6.5,3,5.5,1.8,Virginica +7.7,3.8,6.7,2.2,Virginica +7.7,2.6,6.9,2.3,Virginica +6,2.2,5,1.5,Virginica +6.9,3.2,5.7,2.3,Virginica +5.6,2.8,4.9,2,Virginica +7.7,2.8,6.7,2,Virginica +6.3,2.7,4.9,1.8,Virginica +6.7,3.3,5.7,2.1,Virginica +7.2,3.2,6,1.8,Virginica +6.2,2.8,4.8,1.8,Virginica +6.1,3,4.9,1.8,Virginica +6.4,2.8,5.6,2.1,Virginica +7.2,3,5.8,1.6,Virginica +7.4,2.8,6.1,1.9,Virginica +7.9,3.8,6.4,2,Virginica +6.4,2.8,5.6,2.2,Virginica +6.3,2.8,5.1,1.5,Virginica +6.1,2.6,5.6,1.4,Virginica +7.7,3,6.1,2.3,Virginica +6.3,3.4,5.6,2.4,Virginica +6.4,3.1,5.5,1.8,Virginica +6,3,4.8,1.8,Virginica +6.9,3.1,5.4,2.1,Virginica +6.7,3.1,5.6,2.4,Virginica +6.9,3.1,5.1,2.3,Virginica +5.8,2.7,5.1,1.9,Virginica +6.8,3.2,5.9,2.3,Virginica +6.7,3.3,5.7,2.5,Virginica +6.7,3,5.2,2.3,Virginica +6.3,2.5,5,1.9,Virginica +6.5,3,5.2,2,Virginica +6.2,3.4,5.4,2.3,Virginica +5.9,3,5.1,1.8,Virginica diff --git a/ai_agent_tutorials/ai_coding_agent/app.py b/ai_agent_tutorials/ai_coding_agent/app.py new file mode 100644 index 0000000..daeb71e --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/app.py @@ -0,0 +1,283 @@ +import streamlit as st +import pandas as pd +import os +from crewai import Crew +from langchain_groq import ChatGroq +import streamlit_ace as st_ace +import traceback +import contextlib +import io +from crewai_tools import FileReadTool +import matplotlib.pyplot as plt +import glob +from dotenv import load_dotenv +from autotabml_agents import initialize_agents +from autotabml_tasks import create_tasks + + +TEMP_DIR = "temp_dir" +OUTPUT_DIR = "Output_dir" +# Ensure the temporary directory exists +if not os.path.exists(TEMP_DIR): + os.makedirs(TEMP_DIR) + +# Ensure the Output directory exits +if not os.path.exists(OUTPUT_DIR): + os.makedirs(OUTPUT_DIR) + +# Function to save uploaded file +def save_uploaded_file(uploaded_file): + file_path = os.path.join(TEMP_DIR, uploaded_file.name) + with open(file_path, 'wb') as f: + f.write(uploaded_file.getbuffer()) + return file_path + +# load the .env file +load_dotenv() +# Set up Groq API key +groq_api_key = os.environ.get("GROQ_API_KEY") # os.environ["GROQ_API_KEY"] = + + +def main(): + # Set custom CSS for UI + set_custom_css() + + # Initialize session state for edited code + if 'edited_code' not in st.session_state: + st.session_state['edited_code'] = "" + + # Initialize session state for whether the initial code is generated + if 'code_generated' not in st.session_state: + st.session_state['code_generated'] = False + + # Header with futuristic design + st.markdown(""" +
+

AutoTabML

+

Automated Machine Learning Code Generation for Tabluar Data

+
+ """, unsafe_allow_html=True) + + # Sidebar for customization options + st.sidebar.title('LLM Model') + model = st.sidebar.selectbox( + 'Model', + ["llama3-70b-8192"] + ) + + # Initialize LLM + llm = initialize_llm(model) + + + + # User inputs + user_question = st.text_area("Describe your ML problem:", key="user_question") + uploaded_file = st.file_uploader("Upload a sample .csv of your data", key="uploaded_file") + try: + file_name = uploaded_file.name + except: + file_name = "dataset.csv" + + # Initialize agents + agents = initialize_agents(llm,file_name,TEMP_DIR) + # Process uploaded file + if uploaded_file: + try: + file_path = save_uploaded_file(uploaded_file) + df = pd.read_csv(uploaded_file) + st.write("Data successfully uploaded:") + st.dataframe(df.head()) + data_upload = True + except Exception as e: + st.error(f"Error reading the file: {e}") + data_upload = False + else: + df = None + data_upload = False + + # Process button + if st.button('Process'): + tasks = create_tasks("Process",user_question,file_name, data_upload, df, None, st.session_state['edited_code'], None, agents) + with st.spinner('Processing...'): + crew = Crew( + agents=list(agents.values()), + tasks=tasks, + verbose=2 + ) + + result = crew.kickoff() + + if result: # Only call st_ace if code has a valid value + code = result.strip("```") + try: + filt_idx = code.index("```") + code = code[:filt_idx] + except: + pass + st.session_state['edited_code'] = code + st.session_state['code_generated'] = True + + st.session_state['edited_code'] = st_ace.st_ace( + value=st.session_state['edited_code'], + language='python', + theme='monokai', + keybinding='vscode', + min_lines=20, + max_lines=50 + ) + + if st.session_state['code_generated']: + # Show options for modification, debugging, and running the code + suggestion = st.text_area("Suggest modifications to the generated code (optional):", key="suggestion") + if st.button('Modify'): + if st.session_state['edited_code'] and suggestion: + tasks = create_tasks("Modify",user_question,file_name, data_upload, df, suggestion, st.session_state['edited_code'], None, agents) + with st.spinner('Modifying code...'): + crew = Crew( + agents=list(agents.values()), + tasks=tasks, + verbose=2 + ) + + result = crew.kickoff() + + if result: # Only call st_ace if code has a valid value + code = result.strip("```") + try: + filter_idx = code.index("```") + code = code[:filter_idx] + except: + pass + st.session_state['edited_code'] = code + + st.write("Modified code:") + st.session_state['edited_code']= st_ace.st_ace( + value=st.session_state['edited_code'], + language='python', + theme='monokai', + keybinding='vscode', + min_lines=20, + max_lines=50 + ) + + debugger = st.text_area("Paste error message here for debugging (optional):", key="debugger") + if st.button('Debug'): + if st.session_state['edited_code'] and debugger: + tasks = create_tasks("Debug",user_question,file_name, data_upload, df, None, st.session_state['edited_code'], debugger, agents) + with st.spinner('Debugging code...'): + crew = Crew( + agents=list(agents.values()), + tasks=tasks, + verbose=2 + ) + + result = crew.kickoff() + + if result: # Only call st_ace if code has a valid value + code = result.strip("```") + try: + filter_idx = code.index("```") + code = code[:filter_idx] + except: + pass + st.session_state['edited_code'] = code + + st.write("Debugged code:") + st.session_state['edited_code'] = st_ace.st_ace( + value=st.session_state['edited_code'], + language='python', + theme='monokai', + keybinding='vscode', + min_lines=20, + max_lines=50 + ) + + if st.button('Run'): + output = io.StringIO() + with contextlib.redirect_stdout(output): + try: + globals().update({'dataset': df}) + final_code = st.session_state["edited_code"] + + with st.expander("Final Code"): + st.code(final_code, language='python') + + exec(final_code, globals()) + result = output.getvalue() + success = True + except Exception as e: + result = str(e) + success = False + + st.subheader('Output:') + st.text(result) + + figs = [manager.canvas.figure for manager in plt._pylab_helpers.Gcf.get_all_fig_managers()] + if figs: + st.subheader('Generated Plots:') + for fig in figs: + st.pyplot(fig) + + if success: + st.success("Code executed successfully!") + else: + st.error("Code execution failed! Waiting for debugging input...") + + # Move the generated files section to the sidebar + with st.sidebar: + st.header('Output_dir :') + files = glob.glob(os.path.join(OUTPUT_DIR, '*')) + for file in files: + if os.path.isfile(file): + with open(file, 'rb') as f: + st.download_button(label=f'Download {os.path.basename(file)}', data=f, file_name=os.path.basename(file)) + + + +# Function to set custom CSS for futuristic UI +def set_custom_css(): + st.markdown(""" + + """, unsafe_allow_html=True) + +# Function to initialize LLM +def initialize_llm(model): + return ChatGroq( + temperature=0, + groq_api_key=groq_api_key, + model_name=model + ) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py b/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py new file mode 100644 index 0000000..64bcaba --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py @@ -0,0 +1,90 @@ +from crewai import Agent +from crewai_tools import FileReadTool + + +# Function to initialize agents +def initialize_agents(llm,file_name,Temp_dir): + file_read_tool = FileReadTool() + return { + "Data_Reader_Agent": Agent( + role='Data_Reader_Agent', + goal="Read the uploaded dataset and provide it to other agents.", + backstory="Responsible for reading the uploaded dataset.", + verbose=True, + allow_delegation=False, + llm=llm, + tools=[file_read_tool] + ), + "Problem_Definition_Agent": Agent( + role='Problem_Definition_Agent', + goal="Clarify the machine learning problem the user wants to solve.", + backstory="Expert in defining machine learning problems.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "EDA_Agent": Agent( + role='EDA_Agent', + goal="Perform all possible Exploratory Data Analysis (EDA) on the data provided by the user.", + backstory="Specializes in conducting comprehensive EDA to understand the data characteristics, distributions, and relationships.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "Feature_Engineering_Agent": Agent( + role='Feature_Engineering_Agent', + goal="Perform feature engineering on the data based on the EDA results provided by the EDA agent.", + backstory="Expert in deriving new features, transforming existing features, and preprocessing data to prepare it for modeling.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "Model_Recommendation_Agent": Agent( + role='Model_Recommendation_Agent', + goal="Suggest the most suitable machine learning models.", + backstory="Expert in recommending machine learning algorithms.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "Starter_Code_Generator_Agent": Agent( + role='Starter_Code_Generator_Agent', + goal=f"Generate starter Python code for the project. Always give dataset name as '{Temp_dir}/{file_name}", + backstory="Code wizard for generating starter code templates.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "Code_Modification_Agent": Agent( + role='Code_Modification_Agent', + goal="Modify the generated Python code based on user suggestions.", + backstory="Expert in adapting code according to user feedback.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + # "Code_Runner_Agent": Agent( + # role='Code_Runner_Agent', + # goal="Run the generated Python code and catch any errors.", + # backstory="Debugging expert.", + # verbose=True, + # allow_delegation=True, + # llm=llm, + # ), + "Code_Debugger_Agent": Agent( + role='Code_Debugger_Agent', + goal="Debug the generated Python code.", + backstory="Seasoned code debugger.", + verbose=True, + allow_delegation=False, + llm=llm, + ), + "Compiler_Agent":Agent( + role = "Code_compiler", + goal = "Extract only the python code.", + backstory = "You are the compiler which extract only the python code.", + verbose = True, + allow_delegation = False, + llm = llm + ) + } diff --git a/ai_agent_tutorials/ai_coding_agent/autotabml_tasks.py b/ai_agent_tutorials/ai_coding_agent/autotabml_tasks.py new file mode 100644 index 0000000..d2f4acc --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/autotabml_tasks.py @@ -0,0 +1,66 @@ +from crewai import Task +# Function to create tasks based on user inputs +def create_tasks(func_call,user_question,file_name, data_upload, df, suggestion, edited_code, debugger, agents): + info = df.info() + tasks = [] + if(func_call == "Process"): + tasks.append(Task( + description=f"Clarify the ML problem: {user_question}", + agent=agents["Problem_Definition_Agent"], + expected_output="A clear and concise definition of the ML problem." + ) + ) + + if data_upload: + tasks.extend([ + Task( + description=f"Evaluate the data provided by the file name . This is the data: {df}", + agent=agents["EDA_Agent"], + expected_output="An assessment of the EDA and preprocessing like dataset info, missing value, duplication, outliers etc. on the data provided" + ), + Task( + description=f"Feature Engineering on data {df} based on EDA output: {info}", + agent=agents["Feature_Engineering_Agent"], + expected_output="An assessment of the Featuring Engineering and preprocessing like handling missing values, handling duplication, handling outliers, feature encoding, feature scaling etc. on the data provided" + ) + ]) + + tasks.extend([ + Task( + description="Suggest suitable ML models.", + agent=agents["Model_Recommendation_Agent"], + expected_output="A list of suitable ML models." + ), + Task( + description=f"Generate starter Python code based on feature engineering, where column names are {df.columns.tolist()}. Generate only the code without any extra text", + agent=agents["Starter_Code_Generator_Agent"], + expected_output="Starter Python code." + ), + ]) + if(func_call == "Modify"): + if suggestion: + tasks.append( + Task( + description=f"Modify the already generated code {edited_code} according to the suggestion: {suggestion} \n\n Do not generate entire new code.", + agent=agents["Code_Modification_Agent"], + expected_output="Modified code." + ) + ) + if(func_call == "Debug"): + if debugger: + tasks.append( + Task( + description=f"Debug and fix any errors for data with column names {df.columns.tolist()} with data as {df} in the generated code: {edited_code} \n\n According to the debugging: {debugger}. \n\n Do not generate entire new code. Just remove the error in the code by modifying only necessary parts of the code.", + agent=agents["Code_Debugger_Agent"], + expected_output="Debugged and successfully executed code." + ) + ) + tasks.append( + Task( + description = "Your job is to only extract python code from string", + agent = agents["Compiler_Agent"], + expected_output = "Running python code." + ) + ) + + return tasks diff --git a/ai_agent_tutorials/ai_coding_agent/requirements.txt b/ai_agent_tutorials/ai_coding_agent/requirements.txt new file mode 100644 index 0000000..afefc31 --- /dev/null +++ b/ai_agent_tutorials/ai_coding_agent/requirements.txt @@ -0,0 +1,11 @@ +streamlit +pandas +crewai +langchain_groq +streamlit_ace +crewai_tools +matplotlib +python-dotenv +seaborn +scikit-learn +tensorflow From ff894d47a8fbb81f066572361b89db3d866f5fc1 Mon Sep 17 00:00:00 2001 From: Sakalya Date: Tue, 3 Dec 2024 00:18:53 +0530 Subject: [PATCH 3/3] Updated and fixed the issues in Agent code --- ai_agent_tutorials/ai_coding_agent/app.py | 18 ++++++++++-------- .../ai_coding_agent/autotabml_agents.py | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ai_agent_tutorials/ai_coding_agent/app.py b/ai_agent_tutorials/ai_coding_agent/app.py index daeb71e..b769e94 100644 --- a/ai_agent_tutorials/ai_coding_agent/app.py +++ b/ai_agent_tutorials/ai_coding_agent/app.py @@ -35,7 +35,7 @@ def save_uploaded_file(uploaded_file): # load the .env file load_dotenv() # Set up Groq API key -groq_api_key = os.environ.get("GROQ_API_KEY") # os.environ["GROQ_API_KEY"] = +groq_api_key = os.getenv("GROQ_API_KEY") # os.environ["GROQ_API_KEY"] = def main(): @@ -62,7 +62,7 @@ def main(): st.sidebar.title('LLM Model') model = st.sidebar.selectbox( 'Model', - ["llama3-70b-8192"] + ["groq/llama-3.1-8b-instant"] ) # Initialize LLM @@ -102,13 +102,15 @@ def main(): crew = Crew( agents=list(agents.values()), tasks=tasks, - verbose=2 + verbose=True ) result = crew.kickoff() if result: # Only call st_ace if code has a valid value - code = result.strip("```") + code = str(result).strip("```") + if 'python' in code: + code = code[code.index('python')+1:] try: filt_idx = code.index("```") code = code[:filt_idx] @@ -136,13 +138,13 @@ def main(): crew = Crew( agents=list(agents.values()), tasks=tasks, - verbose=2 + verbose=True ) result = crew.kickoff() if result: # Only call st_ace if code has a valid value - code = result.strip("```") + code = str(result).strip("```") try: filter_idx = code.index("```") code = code[:filter_idx] @@ -168,13 +170,13 @@ def main(): crew = Crew( agents=list(agents.values()), tasks=tasks, - verbose=2 + verbose=True ) result = crew.kickoff() if result: # Only call st_ace if code has a valid value - code = result.strip("```") + code = str(result).strip("```") try: filter_idx = code.index("```") code = code[:filter_idx] diff --git a/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py b/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py index 64bcaba..371a430 100644 --- a/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py +++ b/ai_agent_tutorials/ai_coding_agent/autotabml_agents.py @@ -81,7 +81,7 @@ def initialize_agents(llm,file_name,Temp_dir): ), "Compiler_Agent":Agent( role = "Code_compiler", - goal = "Extract only the python code.", + goal = "Extract only the python code. Remove any other things like backticks ``` and any thing like ```python```", backstory = "You are the compiler which extract only the python code.", verbose = True, allow_delegation = False,