diff --git a/ai_agent_tutorials/ai_audio_tour_agent/README.md b/ai_agent_tutorials/ai_audio_tour_agent/README.md new file mode 100644 index 0000000..ff2eb01 --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/README.md @@ -0,0 +1,73 @@ +# 🗺️ Self-Guided Audio Tour Agent + +A conversational voice agent system that generates immersive, self-guided audio tours based on the user’s **location**, **areas of interest**, and **tour duration**. Built on a multi-agent architecture using OpenAI Agents SDK, real-time information retrieval, and expressive TTS for natural speech output. + +--- + +## 🚀 Features + +### 🎙️ Multi-Agent Architecture + +- **Orchestrator Agent** + Coordinates the overall tour flow, manages transitions, and assembles content from all expert agents. + +- **History Agent** + Delivers insightful historical narratives with an authoritative voice. + +- **Architecture Agent** + Highlights architectural details, styles, and design elements using a descriptive and technical tone. + +- **Culture Agent** + Explores local customs, traditions, and artistic heritage with an enthusiastic voice. + +- **Culinary Agent** + Describes iconic dishes and food culture in a passionate and engaging tone. + +--- + +### 📍 Location-Aware Content Generation + +- Dynamic content generation based on user-input **location** +- Real-time **web search integration** to fetch relevant, up-to-date details +- Personalized content delivery filtered by user **interest categories** + +--- + +### ⏱️ Customizable Tour Duration + +- Selectable tour length: **15, 30, or 60 minutes** +- Time allocations adapt to user interest weights and location relevance +- Ensures well-paced and proportioned narratives across sections + +--- + +### 🔊 Expressive Speech Output + +- High-quality audio generated using **Text-to-Speech (TTS)** + + + + + +### How to get Started? + +1. Clone the GitHub repository + +```bash +git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git +cd ai_agent_tutorials/ai_audio_tour_agent +``` +2. Install the required dependencies: + +```bash +pip install -r requirements.txt +``` +3. Get your OpenAI API Key + +- Sign up for an [OpenAI account](https://platform.openai.com/) (or the LLM provider of your choice) and obtain your API key. + +4. Run the Streamlit App +```bash +streamlit run ai_audio_tour_agent.py +``` + diff --git a/ai_agent_tutorials/ai_audio_tour_agent/agent.py b/ai_agent_tutorials/ai_audio_tour_agent/agent.py new file mode 100644 index 0000000..3dd0486 --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/agent.py @@ -0,0 +1,306 @@ +from pydantic import BaseModel +from agents import Agent, WebSearchTool +from agents.model_settings import ModelSettings + +ARCHITECTURE_AGENT_INSTRUCTIONS = (""" +You are the Architecture agent for a self-guided audio tour system. Given a location and the areas of interest of user, your role is to: +1. Describe architectural styles, notable buildings, urban planning, and design elements +2. Provide technical insights balanced with accessible explanations +3. Highlight the most visually striking or historically significant structures +4. Adopt a detailed, descriptive voice style when delivering architectural content +5. Make sure not to add any headings like ## Architecture. Just provide the content +6. Make sure the details are conversational and don't include any formatting or headings. It will be directly used in a audio model for converting to speech and the entire content should feel like natural speech. +7. Make sure the content is strictly between the upper and lower Word Limit as specified. For example, If the word limit is 100 to 120, it should be within that, not less than 100 or greater than 120 + +NOTE: Given a location, use web search to retrieve up‑to‑date context and architectural information about the location + +NOTE: Do not add any Links or Hyperlinks in your answer or never cite any source + +Help users see and appreciate architectural details they might otherwise miss. Make it as detailed and elaborative as possible +""") + +class Architecture(BaseModel): + output: str + +architecture_agent = Agent( + name="ArchitectureAgent", + instructions=ARCHITECTURE_AGENT_INSTRUCTIONS, + model="gpt-4o", + tools=[WebSearchTool()], + model_settings=ModelSettings(tool_choice="required"), + output_type=Architecture +) + +CULINARY_AGENT_INSTRUCTIONS = (""" +You are the Culinary agent for a self-guided audio tour system. Given a location and the areas of interest of user, your role is to: +1. Highlight local food specialties, restaurants, markets, and culinary traditions in the user's location +2. Explain the historical and cultural significance of local dishes and ingredients +3. Suggest food stops suitable for the tour duration +4. Adopt an enthusiastic, passionate voice style when delivering culinary content +5. Make sure not to add any headings like ## Culinary. Just provide the content +6. Make sure the details are conversational and don't include any formatting or headings. It will be directly used in a audio model for converting to speech and the entire content should feel like natural speech. +7. Make sure the content is strictly between the upper and lower Word Limit as specified. For example, If the word limit is 100 to 120, it should be within that, not less than 100 or greater than 120 + +NOTE: Given a location, use web search to retrieve up‑to‑date context and culinary information about the location + +NOTE: Do not add any Links or Hyperlinks in your answer or never cite any source + +Make your descriptions vivid and appetizing. Include practical information like operating hours when relevant. Make it as detailed and elaborative as possible +""") + +class Culinary(BaseModel): + output: str + + +culinary_agent = Agent( + name="CulinaryAgent", + instructions=CULINARY_AGENT_INSTRUCTIONS, + model="gpt-4o", + tools=[WebSearchTool()], + model_settings=ModelSettings(tool_choice="required"), + output_type=Culinary +) + +CULTURE_AGENT_INSTRUCTIONS = (""" +You are the Culture agent for a self-guided audio tour system. Given a location and the areas of interest of user, your role is to: +1. Provide information about local traditions, customs, arts, music, and cultural practices +2. Highlight cultural venues and events relevant to the user's interests +3. Explain cultural nuances and significance that enhance the visitor's understanding +4. Adopt a warm, respectful voice style when delivering cultural content +5. Make sure not to add any headings like ## Culture. Just provide the content +6. Make sure the details are conversational and don't include any formatting or headings. It will be directly used in a audio model for converting to speech and the entire content should feel like natural speech. +7. Make sure the content is strictly between the upper and lower Word Limit as specified. For example, If the word limit is 100 to 120, it should be within that, not less than 100 or greater than 120 + +NOTE: Given a location, use web search to retrieve up‑to‑date context and all the cultural information about the location + +NOTE: Do not add any Links or Hyperlinks in your answer or never cite any source + +Focus on authentic cultural insights that help users appreciate local ways of life. Make it as detailed and elaborative as possible +""") + +class Culture(BaseModel): + output: str + +culture_agent = Agent( + name="CulturalAgent", + instructions=CULTURE_AGENT_INSTRUCTIONS, + model="gpt-4o", + tools=[WebSearchTool()], + model_settings=ModelSettings(tool_choice="required"), + output_type=Culture +) + +HISTORY_AGENT_INSTRUCTIONS = (""" +You are the History agent for a self-guided audio tour system. Given a location and the areas of interest of user, your role is to: +1. Provide historically accurate information about landmarks, events, and people related to the user's location +2. Prioritize the most significant historical aspects based on the user's time constraints +3. Include interesting historical facts and stories that aren't commonly known +4. Adopt an authoritative, professorial voice style when delivering historical content +5. Make sure not to add any headings like ## History. Just provide the content +6. Make sure the details are conversational and don't include any formatting or headings. It will be directly used in a audio model for converting to speech and the entire content should feel like natural speech. +7. Make sure the content is strictly between the upper and lower Word Limit as specified. For example, If the word limit is 100 to 120, it should be within that, not less than 100 or greater than 120 + +NOTE: Given a location, use web search to retrieve up‑to‑date context and historical information about the location + +NOTE: Do not add any Links or Hyperlinks in your answer or never cite any source + +Focus on making history come alive through engaging narratives. Keep descriptions concise but informative. Make it as detailed and elaborative as possible +""") + +class History(BaseModel): + output: str + +historical_agent = Agent( + name="HistoricalAgent", + instructions=HISTORY_AGENT_INSTRUCTIONS, + model="gpt-4o", + output_type=History, + tools=[WebSearchTool()], + model_settings=ModelSettings(tool_choice="required"), +) + +ORCHESTRATOR_INSTRUCTIONS = (""" +Your Role +You are the Orchestrator Agent for a self-guided audio tour system. Your task is to assemble a comprehensive and engaging tour for a single location by integrating pre-timed content from four specialist agents (Architecture, History, Culinary, and Culture), while adding introduction and conclusion elements. + +Input Parameters +- User Location: The specific location for the tour (e.g., a landmark, neighborhood, or district) +- User Interests: User's preference across categories (Architecture, History, Culinary, Culture) +- Specialist Agent Outputs: Pre-sized content from each domain expert (Architecture, History, Culinary, Culture) +- Specialist Agent Word Limit: Word Limit from each domain expert (Architecture, History, Culinary, Culture) + +Your Tasks + +1. Introduction Creation (1-2 minutes) +Create an engaging and warm introduction that: +- Welcomes the user to the specific location +- Briefly outlines what the tour will cover +- Highlights which categories are emphasized based on user interests +- Sets the tone for the experience (conversational and immersive) + +2. Content Integration with Deduplication +Integrate the content from all four agents in the correct order: +- Architecture → History → Culture → Culinary +- Maintain each agent's voice and expertise +- Ensure all content fits within its allocated time budget +- Don't edit anything from your end and just accumulate the content from the specialised agents + +3. Transition Development +Develop smooth transitions between the sections: +- Use natural language to move from one domain to another +- Connect themes when possible (e.g., how architecture influenced culture, or how history shaped food) + +4. Conclusion Creation +Write a thoughtful concise and short conclusion that: +- Summarizes key highlights from the tour +- Reinforces the uniqueness of the location +- Connects the explored themes holistically +- Encourages the listener to explore further based on their interests + +5. Final Assembly +Assemble the complete tour in the following order: +- Introduction +- Architecture +- History +- Culture +- Culinary +- Conclusion + +Ensure: +- Transitions are smooth +- Content is free from redundancy +- Total duration respects the time allocation plan +- The entire output sounds like one cohesive guided experience +""") + + +class FinalTour(BaseModel): + introduction: str + """A short introduction of the Tour.""" + + architecture: str + """The Architectural Content""" + + history: str + """The Historical Content""" + + culture: str + """The Culture Content""" + + culinary: str + """The Culinary Content""" + + conclusion: str + """A short conclusion of the Tour.""" + + +orchestrator_agent = Agent( + name="OrchestratorAgent", + instructions=ORCHESTRATOR_INSTRUCTIONS, + model="gpt-4o", + output_type=FinalTour, +) + +PLANNER_INSTRUCTIONS = (""" + +Your Role +You are the Planner Agent for a self-guided tour system. Your primary responsibility is to analyze the user's location, interests, and requested tour duration to create an optimal time allocation plan for content generation by specialist agents (Architecture, History, Culture, and Culinary). +Input Parameters + +User Location: The specific location for the tour +User Interests: User's ranked preferences across categories (Architecture, History, Culture, Culinary) +Tour Duration: User's selected time (15, 30, or 60 minutes) + +Your Tasks +1. Interest Analysis + +Evaluate the user's interest preferences +Assign weight to each category based on expressed interest level +If no specific preferences are provided, assume equal interest in all categories + +2. Location Assessment + +Analyze the significance of the specified location for each category +Determine if the location has stronger relevance in particular categories + +Example: A cathedral might warrant more time for Architecture and History than Culinary + + + +3. Time Allocation Calculation + +Calculate the total content time (excluding introduction and conclusion) +Reserve 1-2 minutes for introduction and 1 minute for conclusion +Distribute the remaining time among the four categories based on: + +User interest weights (primary factor) +Location relevance to each category (secondary factor) + + +Ensure minimum time thresholds for each category (even low-interest categories get some coverage) + +4. Scaling for Different Durations + +15-minute tour: + +Introduction: ~1 minute +Content sections: ~12-13 minutes total (divided among categories) +Conclusion: ~1 minute +Each category gets at least 1 minute, with preferred categories getting more + + +30-minute tour: + +Introduction: ~1.5 minutes +Content sections: ~27 minutes total (divided among categories) +Conclusion: ~1.5 minutes +Each category gets at least 3 minutes, with preferred categories getting more + + +60-minute tour: + +Introduction: ~2 minutes +Content sections: ~56 minutes total (divided among categories) +Conclusion: ~2 minutes +Each category gets at least 5 minutes, with preferred categories getting more + + +Your output must be a JSON object with numeric time allocations (in minutes) for each section: + +- introduction +- architecture +- history +- culture +- culinary +- conclusion + +Only return the number of minutes allocated to each section. Do not include explanations or text descriptions. +Example: +{ + "introduction": 2, + "architecture": 15, + "history": 20, + "culture": 10, + "culinary": 9, + "conclusion": 2 +} + +Make sure the time allocation adheres to the interests, and the interested section is allocated more time than others. +""") + + +class Planner(BaseModel): + introduction: float + architecture: float + history: float + culture: float + culinary: float + conclusion: float + + +planner_agent = Agent( + name="PlannerAgent", + instructions=PLANNER_INSTRUCTIONS, + model="gpt-4o", + output_type=Planner, +) diff --git a/ai_agent_tutorials/ai_audio_tour_agent/ai_audio_tour_agent.py b/ai_agent_tutorials/ai_audio_tour_agent/ai_audio_tour_agent.py new file mode 100644 index 0000000..4c43bad --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/ai_audio_tour_agent.py @@ -0,0 +1,83 @@ +import streamlit as st +import asyncio +from manager import TourManager +from agents import set_default_openai_key + +def tts(text): + from pathlib import Path + from openai import OpenAI + + client = OpenAI() + speech_file_path = Path(__file__).parent / f"speech_tour.mp3" + + response = client.audio.speech.create( + model="gpt-4o-mini-tts", + voice="coral", + input=text, + instructions="""Speak with different tones based on the content sections: + - Use an inviting and warm tone for the Introduction. + - Speak in an authoritative tone for History sections. + - Use a positive and curious tone when discussing Architecture. + - Use an enthusiastic and lively tone when covering Culture. + - Use a joyful and passionate tone when talking about Culinary topics. + Keep the transitions smooth and natural between sections.""" + ) + response.stream_to_file(speech_file_path) + return speech_file_path + +def run_async(func, *args, **kwargs): + try: + return asyncio.run(func(*args, **kwargs)) + except RuntimeError: + loop = asyncio.get_event_loop() + return loop.run_until_complete(func(*args, **kwargs)) + +st.sidebar.title("🔑 API Settings") +api_key = st.sidebar.text_input("Enter your OpenAI API key:", type="password") + +if api_key: + st.session_state["OPENAI_API_KEY"] = api_key + st.sidebar.success("API key saved!") + +set_default_openai_key(api_key) + +st.title("🏛️ Self-Guided Audio Tour Generator") + + +location = st.text_input("📍 Enter the location for your tour:") + +interests = st.multiselect( + "🎯 Select your interests:", + options=["History", "Architecture", "Culinary", "Culture"] +) + +duration = st.slider( + "⏱️ Select the duration of the tour (in minutes):", + min_value=5, + max_value=60, + value=30, + step=5 +) + +if st.button("🎧 Generate Tour"): + if "OPENAI_API_KEY" not in st.session_state: + st.error("Please enter your OpenAI API key in the sidebar.") + elif not location: + st.error("Please enter a location.") + elif not interests: + st.error("Please select at least one interest.") + else: + with st.spinner(f"Generating a {duration}-minute tour in {location} focused on {', '.join(interests)}."): + mgr = TourManager() + final_tour = run_async( + mgr.run, location, interests, duration + ) + + with st.expander("🎬 Tour"): + st.markdown(final_tour) + + with st.spinner("Generating Audio"): + tour_audio = tts(final_tour) + st.audio(tour_audio, format="audio/mp3") + + \ No newline at end of file diff --git a/ai_agent_tutorials/ai_audio_tour_agent/manager.py b/ai_agent_tutorials/ai_audio_tour_agent/manager.py new file mode 100644 index 0000000..6a2e709 --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/manager.py @@ -0,0 +1,168 @@ +from __future__ import annotations + +import asyncio +import time +import json +from collections.abc import Sequence + +from rich.console import Console + +from agents import Runner, RunResult, custom_span, gen_trace_id, trace + +from agent import History, historical_agent +from agent import Culinary,culinary_agent +from agent import Culture,culture_agent +from agent import Architecture,architecture_agent +from agent import Planner, planner_agent +from agent import FinalTour, orchestrator_agent +from printer import Printer + + +class TourManager: + """ + Orchestrates the full flow + """ + + def __init__(self) -> None: + self.console = Console() + self.printer = Printer(self.console) + + async def run(self, query: str, interest: str, duration: str) -> None: + trace_id = gen_trace_id() + with trace("Tour Research trace", trace_id=trace_id): + self.printer.update_item( + "trace_id", + f"View trace: https://platform.openai.com/traces/{trace_id}", + is_done=True, + hide_checkmark=True, + ) + self.printer.update_item("start", "Starting tour research...", is_done=True) + planner = await self._get_plan(query, interest, duration) + print(planner) + architecture_research = await self._get_architecture(query, interest, planner.architecture) + historical_research = await self._get_history(query, interest, planner.history) + culinary_research = await self._get_culinary(query, interest, planner.culinary) + culture_research = await self._get_culture(query, interest, planner.culture) + final_tour = await self._get_final_tour(query, interest, duration, architecture_research.output, planner.architecture, historical_research.output, planner.history, culinary_research.output, planner.culinary, culture_research.output, planner.culture) + + self.printer.update_item("final_report", "", is_done=True) + + self.printer.end() + + tour_intro = final_tour.introduction + architecture = final_tour.architecture + history = final_tour.history + culinary = final_tour.culinary + culture = final_tour.culture + conclusion = final_tour.conclusion + + final = ( + "INTRODUCTION\n\n" + + tour_intro + "\n\n" + + + "ARCHITECTURE\n\n" + + architecture + "\n\n" + + + "HISTORY\n\n" + + history + "\n\n" + + + "CULTURE\n\n" + + culture + "\n\n" + + + "CULINARY\n\n" + + culinary + "\n\n" + + + "CONCLUSION\n\n" + + conclusion + ) + return final + + async def _get_plan(self, query: str, interest: str, duration: str) -> Planner: + self.printer.update_item("Planner", "Getting Time allocation for each section") + result = await Runner.run(planner_agent, f"Query: {query} Interest: {interest} Duration: {duration}") + self.printer.update_item( + "Planner", + f"Completed planning", + is_done=True, + ) + return result.final_output_as(Planner) + + async def _get_history(self, query: str, interest: str, duration: float) -> History: + self.printer.update_item("History", "Getting Historical Data for Location") + word_limit = int(duration) * 120 + result = await Runner.run(historical_agent, f"Query: {query} Interest: {interest} Word Limit: {word_limit} - {word_limit + 20}") + self.printer.update_item( + "History", + f"Completed history research", + is_done=True, + ) + return result.final_output_as(History) + # return result.final_output_as(FinancialSearchPlan) + + async def _get_architecture(self, query: str, interest: str, duration: float): + self.printer.update_item("Architecture", "Getting Architectural Data for Location") + word_limit = int(duration) * 120 + result = await Runner.run(architecture_agent, f"Query: {query} Interest: {interest} Word Limit: {word_limit} - {word_limit + 20}") + self.printer.update_item( + "Architecture", + f"Completed architecture research", + is_done=True, + ) + return result.final_output_as(Architecture) + + async def _get_culinary(self, query: str, interest: str, duration: float): + self.printer.update_item("Culinary", "Getting Culinary Data for Location") + word_limit = int(duration) * 120 + result = await Runner.run(culinary_agent, f"Query: {query} Interest: {interest} Word Limit: {word_limit} - {word_limit + 20}") + self.printer.update_item( + "Culinary", + f"Completed culinary research", + is_done=True, + ) + return result.final_output_as(Culinary) + + async def _get_culture(self, query: str, interest: str, duration: float): + self.printer.update_item("Culture", "Getting Cultural Data for Location") + word_limit = int(duration) * 120 + result = await Runner.run(culture_agent, f"Query: {query} Interest: {interest} Word Limit: {word_limit} - {word_limit + 20}") + self.printer.update_item( + "Culture", + f"Completed culture research", + is_done=True, + ) + return result.final_output_as(Culture) + + async def _get_final_tour(self, query: str, interest: str, duration: float, architecture: str, architecture_dur: float, history: str, history_dur: float, culinary: str, culinary_dur: float, culture: str, culture_dur:float): + self.printer.update_item("Final Tour", "Getting Final Tour") + result = await Runner.run( + orchestrator_agent, + f"""Query: {query} + Interest: {interest} + Total Tour Duration (in minutes): {duration} + + Word Limit Allocation: + - Architecture: {architecture_dur*100} + - History: {history_dur*100} + - Culture: {culture_dur*100} + - Culinary: {culinary_dur*100} + + Content Sections: + Architecture: + {architecture} + + History: + {history} + + Culture: + {culture} + + Culinary: + {culinary} + """ + ) + self.printer.update_item( + "Final Tour", + f"Completed Final Tour Guide Creation", + is_done=True, + ) + return result.final_output_as(FinalTour) \ No newline at end of file diff --git a/ai_agent_tutorials/ai_audio_tour_agent/printer.py b/ai_agent_tutorials/ai_audio_tour_agent/printer.py new file mode 100644 index 0000000..4c1a494 --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/printer.py @@ -0,0 +1,46 @@ +from typing import Any + +from rich.console import Console, Group +from rich.live import Live +from rich.spinner import Spinner + + +class Printer: + """ + Simple wrapper to stream status updates. Used by the financial bot + manager as it orchestrates planning, search and writing. + """ + + def __init__(self, console: Console) -> None: + self.live = Live(console=console) + self.items: dict[str, tuple[str, bool]] = {} + self.hide_done_ids: set[str] = set() + self.live.start() + + def end(self) -> None: + self.live.stop() + + def hide_done_checkmark(self, item_id: str) -> None: + self.hide_done_ids.add(item_id) + + def update_item( + self, item_id: str, content: str, is_done: bool = False, hide_checkmark: bool = False + ) -> None: + self.items[item_id] = (content, is_done) + if hide_checkmark: + self.hide_done_ids.add(item_id) + self.flush() + + def mark_item_done(self, item_id: str) -> None: + self.items[item_id] = (self.items[item_id][0], True) + self.flush() + + def flush(self) -> None: + renderables: list[Any] = [] + for item_id, (content, is_done) in self.items.items(): + if is_done: + prefix = "✅ " if item_id not in self.hide_done_ids else "" + renderables.append(prefix + content) + else: + renderables.append(Spinner("dots", text=content)) + self.live.update(Group(*renderables)) diff --git a/ai_agent_tutorials/ai_audio_tour_agent/requirements.txt b/ai_agent_tutorials/ai_audio_tour_agent/requirements.txt new file mode 100644 index 0000000..69d2108 --- /dev/null +++ b/ai_agent_tutorials/ai_audio_tour_agent/requirements.txt @@ -0,0 +1,7 @@ +openai==1.68.2 +openai-agents==0.0.6 +pydantic==2.10.6 +pydantic_core==2.27.2 +python-dotenv==1.0.1 +rich==13.9.4 +streamlit==1.43.2 \ No newline at end of file diff --git a/ai_agent_tutorials/ai_coding_agent/.gitignore b/ai_agent_tutorials/ai_coding_agent/.gitignore deleted file mode 100644 index 82f9275..0000000 --- a/ai_agent_tutorials/ai_coding_agent/.gitignore +++ /dev/null @@ -1,162 +0,0 @@ -# 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 deleted file mode 100644 index 640b12d..0000000 --- a/ai_agent_tutorials/ai_coding_agent/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 45f7105..0000000 --- a/ai_agent_tutorials/ai_coding_agent/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# 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 deleted file mode 100644 index 88ca478..0000000 --- a/ai_agent_tutorials/ai_coding_agent/Sample Data/housing_regression.csv +++ /dev/null @@ -1,546 +0,0 @@ -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 deleted file mode 100644 index 1b9d029..0000000 --- a/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_classification.csv +++ /dev/null @@ -1,151 +0,0 @@ -"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 deleted file mode 100644 index d00567a..0000000 --- a/ai_agent_tutorials/ai_coding_agent/Sample Data/iris_na_classification.csv +++ /dev/null @@ -1,151 +0,0 @@ -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 deleted file mode 100644 index b769e94..0000000 --- a/ai_agent_tutorials/ai_coding_agent/app.py +++ /dev/null @@ -1,285 +0,0 @@ -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.getenv("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(""" -
Automated Machine Learning Code Generation for Tabluar Data
-