From 57cf98b48412e89897e7ca546bf6afb41843dfc0 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Fri, 1 Dec 2023 08:39:33 -0800 Subject: [PATCH 01/32] Update gpt4_vision_api.py --- swarms/models/gpt4_vision_api.py | 101 +++++++++++-------------------- 1 file changed, 34 insertions(+), 67 deletions(-) diff --git a/swarms/models/gpt4_vision_api.py b/swarms/models/gpt4_vision_api.py index 6efb68f4..b589fe70 100644 --- a/swarms/models/gpt4_vision_api.py +++ b/swarms/models/gpt4_vision_api.py @@ -15,10 +15,7 @@ from termcolor import colored try: import cv2 except ImportError: - print( - "OpenCV not installed. Please install OpenCV to use this" - " model." - ) + print("OpenCV not installed. Please install OpenCV to use this model.") raise ImportError # Load environment variables @@ -103,79 +100,60 @@ class GPT4VisionAPI: if self.meta_prompt: self.system_prompt = self.meta_prompt_init() - def encode_image(self, img: str): + def encode_image(self, img_path: str): """Encode image to base64.""" - if not os.path.exists(img): - print(f"Image file not found: {img}") + if not os.path.exists(img_path): + print(f"Image file not found: {img_path}") return None - with open(img, "rb") as image_file: + with open(img_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8") + + def download_img_then_encode(self, img: str): """Download image from URL then encode image to base64 using requests""" pass # Function to handle vision tasks def run( - self, - task: Optional[str] = None, - img: Optional[str] = None, - *args, - **kwargs, - ): + self, + image_path, + task): """Run the model.""" try: - base64_image = self.encode_image(img) + base64_image = self.encode_image(image_path) headers = { "Content-Type": "application/json", - "Authorization": f"Bearer {openai_api_key}", + "Authorization": f"Bearer {self.openai_api_key}", } payload = { "model": self.model_name, "messages": [ - { - "role": "system", - "content": [self.system_prompt], - }, + {"role": "system", "content": [self.system_prompt]}, { "role": "user", "content": [ {"type": "text", "text": task}, - { - "type": "image_url", - "image_url": { - "url": f"data:image/jpeg;base64,{base64_image}" - }, - }, + {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}} ], }, ], "max_tokens": self.max_tokens, } - response = requests.post( - self.openai_proxy, - headers=headers, - json=payload, - ) + response = requests.post(self.openai_proxy, headers=headers, json=payload) out = response.json() - content = out["choices"][0]["message"]["content"] - - if self.streaming_enabled: - content = self.stream_response(content) - else: - pass - - if self.beautify: - content = colored(content, "cyan") - print(content) + if 'choices' in out and out['choices']: + content = out["choices"][0].get("message", {}).get("content", None) + return content else: - print(content) + print("No valid response in 'choices'") + return None except Exception as error: print(f"Error with the request: {error}") - raise error + return None def video_prompt(self, frames): """ @@ -249,9 +227,7 @@ class GPT4VisionAPI: if not success: break _, buffer = cv2.imencode(".jpg", frame) - base64_frames.append( - base64.b64encode(buffer).decode("utf-8") - ) + base64_frames.append(base64.b64encode(buffer).decode("utf-8")) video.release() print(len(base64_frames), "frames read.") @@ -276,10 +252,7 @@ class GPT4VisionAPI: payload = { "model": self.model_name, "messages": [ - { - "role": "system", - "content": [self.system_prompt], - }, + {"role": "system", "content": [self.system_prompt]}, { "role": "user", "content": [ @@ -287,7 +260,9 @@ class GPT4VisionAPI: { "type": "image_url", "image_url": { - "url": f"data:image/jpeg;base64,{base64_image}" + "url": ( + f"data:image/jpeg;base64,{base64_image}" + ) }, }, ], @@ -337,9 +312,7 @@ class GPT4VisionAPI: """ # Instantiate the thread pool executor - with ThreadPoolExecutor( - max_workers=self.max_workers - ) as executor: + with ThreadPoolExecutor(max_workers=self.max_workers) as executor: results = executor.map(self.run, tasks, imgs) # Print the results for debugging @@ -385,7 +358,9 @@ class GPT4VisionAPI: { "type": "image_url", "image_url": { - "url": f"data:image/jpeg;base64,{base64_image}" + "url": ( + f"data:image/jpeg;base64,{base64_image}" + ) }, }, ], @@ -395,9 +370,7 @@ class GPT4VisionAPI: } async with aiohttp.ClientSession() as session: async with session.post( - self.openai_proxy, - headers=headers, - data=json.dumps(payload), + self.openai_proxy, headers=headers, data=json.dumps(payload) ) as response: out = await response.json() content = out["choices"][0]["message"]["content"] @@ -406,9 +379,7 @@ class GPT4VisionAPI: print(f"Error with the request {error}") raise error - def run_batch( - self, tasks_images: List[Tuple[str, str]] - ) -> List[str]: + def run_batch(self, tasks_images: List[Tuple[str, str]]) -> List[str]: """Process a batch of tasks and images""" with concurrent.futures.ThreadPoolExecutor() as executor: futures = [ @@ -435,9 +406,7 @@ class GPT4VisionAPI: """Process a batch of tasks and images asynchronously with retries""" loop = asyncio.get_event_loop() futures = [ - loop.run_in_executor( - None, self.run_with_retries, task, img - ) + loop.run_in_executor(None, self.run_with_retries, task, img) for task, img in tasks_images ] return await asyncio.gather(*futures) @@ -445,9 +414,7 @@ class GPT4VisionAPI: def health_check(self): """Health check for the GPT4Vision model""" try: - response = requests.get( - "https://api.openai.com/v1/engines" - ) + response = requests.get("https://api.openai.com/v1/engines") return response.status_code == 200 except requests.RequestException as error: print(f"Health check failed: {error}") From 64ecedbd82893281c2e5c3e26913ce927598f06a Mon Sep 17 00:00:00 2001 From: Kye Date: Fri, 1 Dec 2023 14:36:00 -0800 Subject: [PATCH 02/32] [FIX][execute_futures_dict] --- futures.py | 14 ++++++++++++++ swarms/utils/futures.py | 32 +++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 futures.py diff --git a/futures.py b/futures.py new file mode 100644 index 00000000..26e8247c --- /dev/null +++ b/futures.py @@ -0,0 +1,14 @@ +import concurrent.futures +import time +import random +import swarms.utils.futures + + +def f(x): + time.sleep(random.random()) + return x + + +with concurrent.futures.ThreadPoolExecutor() as executor: + fs_dict = {str(i): executor.submit(f, i) for i in range(10)} + print(swarms.utils.futures.execute_futures_dict(fs_dict)) diff --git a/swarms/utils/futures.py b/swarms/utils/futures.py index 744b44e0..bc2d47ef 100644 --- a/swarms/utils/futures.py +++ b/swarms/utils/futures.py @@ -1,12 +1,38 @@ from concurrent import futures -from typing import TypeVar +from concurrent.futures import Future +from typing import TypeVar, Dict T = TypeVar("T") def execute_futures_dict( - fs_dict: dict[str, futures.Future[T]] -) -> dict[str, T]: + fs_dict: Dict[str, Future[T]] +) -> Dict[str, T]: + """Execute a dictionary of futures and return the results. + + Args: + fs_dict (dict[str, futures.Future[T]]): _description_ + + Returns: + dict[str, T]: _description_ + + Example: + >>> import concurrent.futures + >>> import time + >>> import random + >>> import swarms.utils.futures + >>> def f(x): + ... time.sleep(random.random()) + ... return x + >>> with concurrent.futures.ThreadPoolExecutor() as executor: + ... fs_dict = { + ... str(i): executor.submit(f, i) + ... for i in range(10) + ... } + ... print(swarms.utils.futures.execute_futures_dict(fs_dict)) + {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} + + """ futures.wait( fs_dict.values(), timeout=None, From 1c280b1fe02b26f6301bae726f320e6690b1559f Mon Sep 17 00:00:00 2001 From: Kye Date: Fri, 1 Dec 2023 14:36:22 -0800 Subject: [PATCH 03/32] 2.5.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0ed9a094..b9b10e4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "swarms" -version = "2.4.9" +version = "2.5.0" description = "Swarms - Pytorch" license = "MIT" authors = ["Kye Gomez "] From 452bf7dd21036d139187a0acb5c4e4f5ee113ee0 Mon Sep 17 00:00:00 2001 From: Kye Date: Fri, 1 Dec 2023 14:37:34 -0800 Subject: [PATCH 04/32] [FIX][execute_futures_dict --- futures.py | 4 ++-- swarms/memory/base.py | 2 +- swarms/utils/__init__.py | 2 +- swarms/utils/{futures.py => execute_futures.py} | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename swarms/utils/{futures.py => execute_futures.py} (100%) diff --git a/futures.py b/futures.py index 26e8247c..6ebe26b9 100644 --- a/futures.py +++ b/futures.py @@ -1,7 +1,7 @@ import concurrent.futures import time import random -import swarms.utils.futures +import swarms.utils.execute_futures def f(x): @@ -11,4 +11,4 @@ def f(x): with concurrent.futures.ThreadPoolExecutor() as executor: fs_dict = {str(i): executor.submit(f, i) for i in range(10)} - print(swarms.utils.futures.execute_futures_dict(fs_dict)) + print(swarms.utils.execute_futures.execute_futures_dict(fs_dict)) diff --git a/swarms/memory/base.py b/swarms/memory/base.py index c0e8e4b6..2e9574b8 100644 --- a/swarms/memory/base.py +++ b/swarms/memory/base.py @@ -3,7 +3,7 @@ from concurrent import futures from dataclasses import dataclass from typing import Optional, Any from attr import define, field, Factory -from swarms.utils.futures import execute_futures_dict +from swarms.utils.execute_futures import execute_futures_dict from griptape.artifacts import TextArtifact diff --git a/swarms/utils/__init__.py b/swarms/utils/__init__.py index 494f182f..f6ee793d 100644 --- a/swarms/utils/__init__.py +++ b/swarms/utils/__init__.py @@ -1,5 +1,5 @@ from swarms.utils.markdown_message import display_markdown_message -from swarms.utils.futures import execute_futures_dict +from swarms.utils.execute_futures import execute_futures_dict from swarms.utils.code_interpreter import SubprocessCodeInterpreter from swarms.utils.parse_code import ( extract_code_in_backticks_in_string, diff --git a/swarms/utils/futures.py b/swarms/utils/execute_futures.py similarity index 100% rename from swarms/utils/futures.py rename to swarms/utils/execute_futures.py From 01eceebfcd1dedf31d3de719070b2e3aa252cc48 Mon Sep 17 00:00:00 2001 From: evelynmitchell Date: Fri, 1 Dec 2023 16:10:40 -0700 Subject: [PATCH 05/32] Update requirements.txt to match pyproject.toml openai version --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 067356df..eca99a55 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ beautifulsoup4 google-search-results==2.4.2 Pillow faiss-cpu -openai +openai=0.28.0 attrs datasets soundfile @@ -64,4 +64,4 @@ rich mkdocs mkdocs-material mkdocs-glightbox -pre-commit \ No newline at end of file +pre-commit From e35b2530f3ee1a7bbfa4149e97a8e144246b7ca1 Mon Sep 17 00:00:00 2001 From: Kye Date: Fri, 1 Dec 2023 16:39:19 -0800 Subject: [PATCH 06/32] [FIX][execute_futures_dict] --- futures.py | 5 +++-- swarms/utils/__init__.py | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/futures.py b/futures.py index 6ebe26b9..c5c468df 100644 --- a/futures.py +++ b/futures.py @@ -1,7 +1,7 @@ import concurrent.futures import time import random -import swarms.utils.execute_futures +from swarms.utils.futures import execute_futures_dict def f(x): @@ -10,5 +10,6 @@ def f(x): with concurrent.futures.ThreadPoolExecutor() as executor: + """Create a dictionary of futures.""" fs_dict = {str(i): executor.submit(f, i) for i in range(10)} - print(swarms.utils.execute_futures.execute_futures_dict(fs_dict)) + print(execute_futures_dict(fs_dict)) diff --git a/swarms/utils/__init__.py b/swarms/utils/__init__.py index f6ee793d..8c935f26 100644 --- a/swarms/utils/__init__.py +++ b/swarms/utils/__init__.py @@ -1,5 +1,4 @@ from swarms.utils.markdown_message import display_markdown_message -from swarms.utils.execute_futures import execute_futures_dict from swarms.utils.code_interpreter import SubprocessCodeInterpreter from swarms.utils.parse_code import ( extract_code_in_backticks_in_string, @@ -8,7 +7,6 @@ from swarms.utils.pdf_to_text import pdf_to_text __all__ = [ "display_markdown_message", - "execute_futures_dict", "SubprocessCodeInterpreter", "extract_code_in_backticks_in_string", "pdf_to_text", From d10b816efae614057d99896dbe33be4ff93076cc Mon Sep 17 00:00:00 2001 From: evelynmitchell Date: Fri, 1 Dec 2023 18:35:09 -0700 Subject: [PATCH 07/32] Update requirements.txt typo = instead of == --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index eca99a55..936157e5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ beautifulsoup4 google-search-results==2.4.2 Pillow faiss-cpu -openai=0.28.0 +openai==0.28.0 attrs datasets soundfile From 60d777080d7df910f3df2fa6b02d352a61fd8413 Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 01:33:50 -0800 Subject: [PATCH 08/32] [FEAT][ChromaDB] [FEAT][tool_func_doc_scraper] [FEAT][BaseVectorStore] [FEAT][memory -> short_memory] [FEAT][memory: BaseVectorDB] --- example.py | 2 +- futures.py | 15 - playground/demos/ad_gen/ad_gen.py | 71 ++-- .../structs/autoscaler.py | 0 playground/tools/tool_prompt_scaper.py | 21 ++ pyproject.toml | 2 +- swarms/memory/base_vector_db.py | 60 ++++ swarms/memory/chroma_db.py | 172 +++++++++ swarms/structs/agent.py | 327 ++++++++++++------ swarms/tools/__init__.py | 3 + swarms/tools/tool_func_doc_scraper.py | 36 ++ swarms/utils/token_count_tiktoken.py | 27 ++ 12 files changed, 587 insertions(+), 149 deletions(-) delete mode 100644 futures.py rename autoscaler.py => playground/structs/autoscaler.py (100%) create mode 100644 playground/tools/tool_prompt_scaper.py create mode 100644 swarms/memory/base_vector_db.py create mode 100644 swarms/memory/chroma_db.py create mode 100644 swarms/tools/tool_func_doc_scraper.py create mode 100644 swarms/utils/token_count_tiktoken.py diff --git a/example.py b/example.py index 67ea34f9..4bab46cd 100644 --- a/example.py +++ b/example.py @@ -20,7 +20,7 @@ llm = OpenAIChat( ## Initialize the workflow -agent = Agent(llm=llm, max_loops=1, dashboard=True) +agent = Agent(llm=llm, max_loops=1, dashboard=True, autosave=True) # Run the workflow on a task out = agent.run("Generate a 10,000 word blog on health and wellness.") diff --git a/futures.py b/futures.py deleted file mode 100644 index c5c468df..00000000 --- a/futures.py +++ /dev/null @@ -1,15 +0,0 @@ -import concurrent.futures -import time -import random -from swarms.utils.futures import execute_futures_dict - - -def f(x): - time.sleep(random.random()) - return x - - -with concurrent.futures.ThreadPoolExecutor() as executor: - """Create a dictionary of futures.""" - fs_dict = {str(i): executor.submit(f, i) for i in range(10)} - print(execute_futures_dict(fs_dict)) diff --git a/playground/demos/ad_gen/ad_gen.py b/playground/demos/ad_gen/ad_gen.py index 3d16eb25..b665b63a 100644 --- a/playground/demos/ad_gen/ad_gen.py +++ b/playground/demos/ad_gen/ad_gen.py @@ -10,43 +10,62 @@ openai_api_key = os.getenv("OPENAI_API_KEY") stability_api_key = os.getenv("STABILITY_API_KEY") # Initialize the language model and image generation model -llm = OpenAIChat(openai_api_key=openai_api_key, temperature=0.5, max_tokens=3000) +llm = OpenAIChat( + openai_api_key=openai_api_key, temperature=0.5, max_tokens=3000 +) sd_api = StableDiffusion(api_key=stability_api_key) + # Creative Concept Generator for Product Ads class ProductAdConceptGenerator: def __init__(self, product_name): self.product_name = product_name self.themes = [ - "futuristic", "rustic", "luxurious", "minimalistic", "vibrant", "elegant", - "retro", "urban", "ethereal", "surreal", "artistic", "tech-savvy", - "vintage", "natural", "sophisticated", "playful", "dynamic", "serene", "lasers," "lightning" + "futuristic", + "rustic", + "luxurious", + "minimalistic", + "vibrant", + "elegant", + "retro", + "urban", + "ethereal", + "surreal", + "artistic", + "tech-savvy", + "vintage", + "natural", + "sophisticated", + "playful", + "dynamic", + "serene", + "lasers,lightning", ] self.contexts = [ - "in an everyday setting", "in a rave setting", "in an abstract environment", - "in an adventurous context", "surrounded by nature", "in a high-tech setting", - "in a historical context", "in a busy urban scene", "in a tranquil and peaceful setting", - "against a backdrop of city lights", "in a surreal dreamscape", "in a festive atmosphere", - "in a luxurious setting", "in a playful and colorful background", "in an ice cave setting", - "in a serene and calm landscape" + "in an everyday setting", + "in a rave setting", + "in an abstract environment", + "in an adventurous context", + "surrounded by nature", + "in a high-tech setting", + "in a historical context", + "in a busy urban scene", + "in a tranquil and peaceful setting", + "against a backdrop of city lights", + "in a surreal dreamscape", + "in a festive atmosphere", + "in a luxurious setting", + "in a playful and colorful background", + "in an ice cave setting", + "in a serene and calm landscape", ] -<<<<<<< HEAD -======= self.contexts = [ "high realism product ad (extremely creative)" ] ->>>>>>> 831147e ([CODE QUALITY]) def generate_concept(self): theme = random.choice(self.themes) context = random.choice(self.contexts) -<<<<<<< HEAD - return f"An ad for {self.product_name} that embodies a {theme} theme {context}" - -# User input -product_name = input("Enter a product name for ad creation (e.g., 'PS5', 'AirPods', 'Kirkland Vodka'): ") -social_media_platform = input("Enter a social media platform (e.g., 'Facebook', 'Twitter', 'Instagram'): ") -======= return ( f"{theme} inside a {style} {self.product_name}, {context}" ) @@ -57,7 +76,6 @@ product_name = input( "Enter a product name for ad creation (e.g., 'PS5', 'AirPods'," " 'Kirkland Vodka'): " ) ->>>>>>> 831147e ([CODE QUALITY]) # Generate creative concept concept_generator = ProductAdConceptGenerator(product_name) @@ -68,15 +86,13 @@ image_paths = sd_api.run(creative_concept) # Generate ad copy ad_copy_agent = Agent(llm=llm, max_loops=1) -ad_copy_prompt = f"Write a compelling {social_media_platform} ad copy for a product photo showing {product_name} {creative_concept}." +ad_copy_prompt = ( + f"Write a compelling {social_media_platform} ad copy for a" + f" product photo showing {product_name} {creative_concept}." +) ad_copy = ad_copy_agent.run(task=ad_copy_prompt) # Output the results -<<<<<<< HEAD -print("Creative Concept:", creative_concept) -print("Image Path:", image_paths[0] if image_paths else "No image generated") -print("Ad Copy:", ad_copy) -======= print("Creative Concept:", concept_result) print("Design Ideas:", design_result) print("Ad Copy:", copywriting_result) @@ -84,4 +100,3 @@ print( "Image Path:", image_paths[0] if image_paths else "No image generated", ) ->>>>>>> 831147e ([CODE QUALITY]) diff --git a/autoscaler.py b/playground/structs/autoscaler.py similarity index 100% rename from autoscaler.py rename to playground/structs/autoscaler.py diff --git a/playground/tools/tool_prompt_scaper.py b/playground/tools/tool_prompt_scaper.py new file mode 100644 index 00000000..162211c3 --- /dev/null +++ b/playground/tools/tool_prompt_scaper.py @@ -0,0 +1,21 @@ +from swarms.tools.tool import tool +from swarms.tools.tool_func_doc_scraper import scrape_tool_func_docs + +# Define a tool by decorating a function with the tool decorator and providing a docstring + +@tool(return_direct=True) +def search_api(query: str): + """Search the web for the query + + Args: + query (str): _description_ + + Returns: + _type_: _description_ + """ + return f"Search results for {query}" + + +# Scrape the tool func docs to prepare for injection into the agent prompt +out = scrape_tool_func_docs(search_api) +print(out) diff --git a/pyproject.toml b/pyproject.toml index b9b10e4e..13547aa0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "swarms" -version = "2.5.0" +version = "2.5.2" description = "Swarms - Pytorch" license = "MIT" authors = ["Kye Gomez "] diff --git a/swarms/memory/base_vector_db.py b/swarms/memory/base_vector_db.py new file mode 100644 index 00000000..fc58bf36 --- /dev/null +++ b/swarms/memory/base_vector_db.py @@ -0,0 +1,60 @@ +from abc import ABC, abstractmethod +from typing import Any, Dict + + +class VectorDatabase(ABC): + @abstractmethod + def add( + self, vector: Dict[str, Any], metadata: Dict[str, Any] + ) -> None: + """ + add a vector into the database. + + Args: + vector (Dict[str, Any]): The vector to add. + metadata (Dict[str, Any]): Metadata associated with the vector. + """ + pass + + @abstractmethod + def query( + self, vector: Dict[str, Any], num_results: int + ) -> Dict[str, Any]: + """ + Query the database for vectors similar to the given vector. + + Args: + vector (Dict[str, Any]): The vector to compare against. + num_results (int): The number of similar vectors to return. + + Returns: + Dict[str, Any]: The most similar vectors and their associated metadata. + """ + pass + + @abstractmethod + def delete(self, vector_id: str) -> None: + """ + Delete a vector from the database. + + Args: + vector_id (str): The ID of the vector to delete. + """ + pass + + @abstractmethod + def update( + self, + vector_id: str, + vector: Dict[str, Any], + metadata: Dict[str, Any], + ) -> None: + """ + Update a vector in the database. + + Args: + vector_id (str): The ID of the vector to update. + vector (Dict[str, Any]): The new vector. + metadata (Dict[str, Any]): The new metadata. + """ + pass diff --git a/swarms/memory/chroma_db.py b/swarms/memory/chroma_db.py new file mode 100644 index 00000000..a225524e --- /dev/null +++ b/swarms/memory/chroma_db.py @@ -0,0 +1,172 @@ +import os +from termcolor import colored +import logging +from typing import Dict, List, Optional +import chromadb +import tiktoken as tiktoken +from chromadb.config import Settings +from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction +from dotenv import load_dotenv +from swarms.utils.token_count_tiktoken import limit_tokens_from_string + +load_dotenv() + +# ChromaDB settings +client = chromadb.Client(Settings(anonymized_telemetry=False)) + + +# ChromaDB client +def get_chromadb_client(): + return client + + +# OpenAI API key +OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") + + +# Results storage using local ChromaDB +class ChromaDB: + """ + + ChromaDB database + + Args: + metric (str): _description_ + RESULTS_STORE_NAME (str): _description_ + LLM_MODEL (str): _description_ + openai_api_key (str): _description_ + + Methods: + add: _description_ + query: _description_ + + Examples: + >>> chromadb = ChromaDB( + >>> metric="cosine", + >>> RESULTS_STORE_NAME="results", + >>> LLM_MODEL="gpt3", + >>> openai_api_key=OPENAI_API_KEY, + >>> ) + >>> chromadb.add(task, result, result_id) + >>> chromadb.query(query, top_results_num) + """ + + def __init__( + self, + metric: str, + RESULTS_STORE_NAME: str, + LLM_MODEL: str, + openai_api_key: str = OPENAI_API_KEY, + top_results_num: int = 3, + limit_tokens: Optional[int] = 1000, + ): + self.metric = metric + self.RESULTS_STORE_NAME = RESULTS_STORE_NAME + self.LLM_MODEL = LLM_MODEL + self.openai_api_key = openai_api_key + self.top_results_num = top_results_num + self.limit_tokens = limit_tokens + + # Disable ChromaDB logging + logging.getLogger("chromadb").setLevel(logging.ERROR) + # Create Chroma collection + chroma_persist_dir = "chroma" + chroma_client = chromadb.PersistentClient( + settings=chromadb.config.Settings( + persist_directory=chroma_persist_dir, + ) + ) + + # Create embedding function + embedding_function = OpenAIEmbeddingFunction( + api_key=openai_api_key + ) + + # Create Chroma collection + self.collection = chroma_client.get_or_create_collection( + name=RESULTS_STORE_NAME, + metadata={"hnsw:space": metric}, + embedding_function=embedding_function, + ) + + def add(self, task: Dict, result: str, result_id: str): + """Adds a result to the ChromaDB collection + + Args: + task (Dict): _description_ + result (str): _description_ + result_id (str): _description_ + """ + + try: + # Embed the result + embeddings = ( + self.collection.embedding_function.embed([result])[0] + .tolist() + .copy() + ) + + # If the result is a list, flatten it + if ( + len( + self.collection.get(ids=[result_id], include=[])[ + "ids" + ] + ) + > 0 + ): # Check if the result already exists + self.collection.update( + ids=result_id, + embeddings=embeddings, + documents=result, + metadatas={ + "task": task["task_name"], + "result": result, + }, + ) + + # If the result is not a list, add it + else: + self.collection.add( + ids=result_id, + embeddings=embeddings, + documents=result, + metadatas={ + "task": task["task_name"], + "result": result, + }, + ) + except Exception as error: + print( + colored(f"Error adding to ChromaDB: {error}", "red") + ) + + def query( + self, + query: str, + ) -> List[dict]: + """Queries the ChromaDB collection with a query for the top results + + Args: + query (str): _description_ + top_results_num (int): _description_ + + Returns: + List[dict]: _description_ + """ + try: + count: int = self.collection.count() + if count == 0: + return [] + results = self.collection.query( + query_texts=query, + n_results=min(self.top_results_num, count), + include=["metadatas"], + ) + out = [item["task"] for item in results["metadatas"][0]] + out = limit_tokens_from_string( + out, "gpt-4", self.limit_tokens + ) + return out + except Exception as error: + print(colored(f"Error querying ChromaDB: {error}", "red")) diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index fe62dc20..1ebc8880 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -10,6 +10,7 @@ from typing import Any, Callable, Dict, List, Optional, Tuple from termcolor import colored +from swarms.memory.base_vector_db import VectorDatabase from swarms.prompts.agent_system_prompts import ( FLOW_SYSTEM_PROMPT, agent_system_prompt_2, @@ -26,6 +27,7 @@ from swarms.utils.parse_code import ( extract_code_in_backticks_in_string, ) from swarms.utils.pdf_to_text import pdf_to_text +from swarms.utils.token_count_tiktoken import limit_tokens_from_string # Utils @@ -35,11 +37,13 @@ def stop_when_repeats(response: str) -> bool: return "Stop" in response.lower() +# Parse done token def parse_done_token(response: str) -> bool: """Parse the response to see if the done token is present""" return "" in response +# Agent ID generator def agent_id(): """Generate an agent id""" return str(uuid.uuid4()) @@ -58,16 +62,40 @@ class Agent: * Ability to provide a loop interval Args: + id (str): The id of the agent llm (Any): The language model to use - max_loops (int): The maximum number of loops to run - stopping_condition (Optional[Callable[[str], bool]]): A stopping condition - loop_interval (int): The interval between loops - retry_attempts (int): The number of retry attempts - retry_interval (int): The interval between retry attempts - interactive (bool): Whether or not to run in interactive mode - dashboard (bool): Whether or not to print the dashboard - dynamic_temperature_enabled(bool): Dynamical temperature handling - **kwargs (Any): Any additional keyword arguments + template (Optional[str]): The template to use + max_loops (int): The maximum number of loops + stopping_condition (Optional[Callable[[str], bool]]): The stopping condition + loop_interval (int): The loop interval + retry_attempts (int): The retry attempts + retry_interval (int): The retry interval + return_history (bool): Return the history + stopping_token (str): The stopping token + dynamic_loops (Optional[bool]): Dynamic loops + interactive (bool): Interactive mode + dashboard (bool): Dashboard mode + agent_name (str): The name of the agent + agent_description (str): The description of the agent + system_prompt (str): The system prompt + tools (List[BaseTool]): The tools + dynamic_temperature_enabled (Optional[bool]): Dynamic temperature enabled + sop (Optional[str]): The standard operating procedure + sop_list (Optional[List[str]]): The standard operating procedure list + saved_state_path (Optional[str]): The saved state path + autosave (Optional[bool]): Autosave + context_length (Optional[int]): The context length + user_name (str): The user name + self_healing_enabled (Optional[bool]): Self healing enabled + code_interpreter (Optional[bool]): Code interpreter + multi_modal (Optional[bool]): Multi modal + pdf_path (Optional[str]): The pdf path + list_of_pdf (Optional[str]): The list of pdf + tokenizer (Optional[Any]): The tokenizer + memory (Optional[VectorDatabase]): The memory + preset_stopping_token (Optional[bool]): Preset stopping token + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. Methods: run(task: str, **kwargs: Any): Run the agent on a task @@ -143,15 +171,14 @@ class Agent: dynamic_loops: Optional[bool] = False, interactive: bool = False, dashboard: bool = False, - agent_name: str = "Autonomous Agent XYZ1B", + agent_name: str = "Autonomous-Agent-XYZ1B", agent_description: str = None, system_prompt: str = FLOW_SYSTEM_PROMPT, tools: List[BaseTool] = None, dynamic_temperature_enabled: Optional[bool] = False, sop: Optional[str] = None, sop_list: Optional[List[str]] = None, - # memory: Optional[Vectorstore] = None, - saved_state_path: Optional[str] = "flow_state.json", + saved_state_path: Optional[str] = None, autosave: Optional[bool] = False, context_length: Optional[int] = 8192, user_name: str = "Human:", @@ -161,6 +188,8 @@ class Agent: pdf_path: Optional[str] = None, list_of_pdf: Optional[str] = None, tokenizer: Optional[Any] = None, + memory: Optional[VectorDatabase] = None, + preset_stopping_token: Optional[bool] = False, *args, **kwargs: Any, ): @@ -187,7 +216,7 @@ class Agent: self.system_prompt = system_prompt self.agent_name = agent_name self.agent_description = agent_description - self.saved_state_path = saved_state_path + self.saved_state_path = f"{self.agent_name}_state.json" self.autosave = autosave self.response_filters = [] self.self_healing_enabled = self_healing_enabled @@ -196,6 +225,8 @@ class Agent: self.pdf_path = pdf_path self.list_of_pdf = list_of_pdf self.tokenizer = tokenizer + self.memory = memory + self.preset_stopping_token = preset_stopping_token # The max_loops will be set dynamically if the dynamic_loop if self.dynamic_loops: @@ -211,11 +242,15 @@ class Agent: # Memory self.feedback = [] - self.memory = [] + self.short_memory = [] # Initialize the code executor self.code_executor = SubprocessCodeInterpreter() + # If the preset stopping token is enabled then set the stopping token to the preset stopping token + if preset_stopping_token: + self.stopping_token = "" + def provide_feedback(self, feedback: str) -> None: """Allow users to provide feedback on the responses.""" self.feedback.append(feedback) @@ -349,20 +384,29 @@ class Agent: """ Take the history and truncate it to fit into the model context length """ - truncated_history = self.memory[-1][-self.context_length :] - self.memory[-1] = truncated_history + # truncated_history = self.short_memory[-1][-self.context_length :] + # self.short_memory[-1] = truncated_history + # out = limit_tokens_from_string( + # "\n".join(truncated_history), self.llm.model_name + # ) + truncated_history = self.short_memory[-1][ + -self.context_length : + ] + text = "\n".join(truncated_history) + out = limit_tokens_from_string(text, "gpt-4") + return out def add_task_to_memory(self, task: str): """Add the task to the memory""" - self.memory.append([f"{self.user_name}: {task}"]) + self.short_memory.append([f"{self.user_name}: {task}"]) def add_message_to_memory(self, message: str): """Add the message to the memory""" - self.memory[-1].append(message) + self.short_memory[-1].append(message) def add_message_to_memory_and_truncate(self, message: str): """Add the message to the memory and truncate""" - self.memory[-1].append(message) + self.short_memory[-1].append(message) self.truncate_history() def print_dashboard(self, task: str): @@ -404,7 +448,36 @@ class Agent: ) ) - # print(dashboard) + def add_message_to_memory_db( + self, message: Dict[str, Any], metadata: Dict[str, Any] + ) -> None: + """Add the message to the memory + + Args: + message (Dict[str, Any]): _description_ + metadata (Dict[str, Any]): _description_ + """ + if self.memory is not None: + self.memory.add(message, metadata) + + def query_memorydb( + self, + message: Dict[str, Any], + num_results: int = 100, + ) -> Dict[str, Any]: + """Query the memory database + + Args: + message (Dict[str, Any]): _description_ + num_results (int): _description_ + + Returns: + Dict[str, Any]: _description_ + """ + if self.memory is not None: + return self.memory.query(message, num_results) + else: + return {} def activate_autonomous_agent(self): """Print the autonomous agent activation message""" @@ -588,18 +661,20 @@ class Agent: time.sleep(self.loop_interval) # Add the history to the memory - self.memory.append(history) + self.short_memory.append(history) # If autosave is enabled then save the state if self.autosave: - save_path = self.saved_state_path or "flow_state.json" print( colored( - f"Autosaving agent state to {save_path}", + ( + "Autosaving agent state to" + f" {self.saved_state_path}" + ), "green", ) ) - self.save_state(save_path) + self.save_state(self.saved_state_path) # If return history is enabled then return the response and history if self.return_history: @@ -685,13 +760,16 @@ class Agent: self.memory.append(history) if self.autosave: - save_path = self.saved_state_path or "flow_state.json" print( colored( - f"Autosaving agent state to {save_path}", "green" + ( + "Autosaving agent state to" + f" {self.saved_state_path}" + ), + "green", ) ) - self.save_state(save_path) + self.save_state(self.saved_state_path) if self.return_history: return response, history @@ -776,8 +854,13 @@ class Agent: return Agent(llm=llm, template=template) def save(self, file_path) -> None: + """Save the agent history to a file. + + Args: + file_path (_type_): _description_ + """ with open(file_path, "w") as f: - json.dump(self.memory, f) + json.dump(self.short_memory, f) print(f"Saved agent history to {file_path}") def load(self, file_path: str): @@ -788,7 +871,7 @@ class Agent: file_path (str): The path to the file containing the saved agent history. """ with open(file_path, "r") as f: - self.memory = json.load(f) + self.short_memory = json.load(f) print(f"Loaded agent history from {file_path}") def validate_response(self, response: str) -> bool: @@ -813,7 +896,9 @@ class Agent: "========================", "cyan", attrs=["bold"] ) ) - for loop_index, history in enumerate(self.memory, start=1): + for loop_index, history in enumerate( + self.short_memory, start=1 + ): print( colored( f"\nLoop {loop_index}:", "yellow", attrs=["bold"] @@ -856,10 +941,10 @@ class Agent: # Update the agent's history with the new interaction if self.interactive: - self.memory.append(f"AI: {response}") - self.memory.append(f"Human: {task}") + self.short_memory.append(f"AI: {response}") + self.short_memory.append(f"Human: {task}") else: - self.memory.append(f"AI: {response}") + self.short_memory.append(f"AI: {response}") return response except Exception as error: @@ -903,14 +988,14 @@ class Agent: print(message) """ - if len(self.memory) < 2: + if len(self.short_memory) < 2: return None, None # Remove the last response - self.memory.pop() + self.short_memory.pop() # Get the previous state - previous_state = self.memory[-1][-1] + previous_state = self.short_memory[-1][-1] return previous_state, f"Restored to {previous_state}" # Response Filtering @@ -930,7 +1015,6 @@ class Agent: """ Apply the response filters to the response - """ for word in self.response_filters: response = response.replace(word, "[FILTERED]") @@ -1029,21 +1113,28 @@ class Agent: >>> agent.save_state('saved_flow.json') """ state = { - "memory": self.memory, - # "llm_params": self.get_llm_params(), + "agent_id": str(self.id), + "agent_name": self.agent_name, + "agent_description": self.agent_description, + "system_prompt": self.system_prompt, + "sop": self.sop, + "memory": self.short_memory, "loop_interval": self.loop_interval, "retry_attempts": self.retry_attempts, "retry_interval": self.retry_interval, "interactive": self.interactive, "dashboard": self.dashboard, "dynamic_temperature": self.dynamic_temperature_enabled, + "autosave": self.autosave, + "saved_state_path": self.saved_state_path, + "max_loops": self.max_loops, } with open(file_path, "w") as f: json.dump(state, f, indent=4) - saved = colored("Saved agent state to", "green") - print(f"{saved} {file_path}") + saved = colored(f"Saved agent state to: {file_path}", "green") + print(saved) def load_state(self, file_path: str): """ @@ -1060,7 +1151,16 @@ class Agent: state = json.load(f) # Restore other saved attributes - self.memory = state.get("memory", []) + self.id = state.get("agent_id", self.id) + self.agent_name = state.get("agent_name", self.agent_name) + self.agent_description = state.get( + "agent_description", self.agent_description + ) + self.system_prompt = state.get( + "system_prompt", self.system_prompt + ) + self.sop = state.get("sop", self.sop) + self.short_memory = state.get("short_memory", []) self.max_loops = state.get("max_loops", 5) self.loop_interval = state.get("loop_interval", 1) self.retry_attempts = state.get("retry_attempts", 3) @@ -1120,7 +1220,7 @@ class Agent: def reset(self): """Reset the agent""" - self.memory = [] + self.short_memory = [] def run_code(self, code: str): """ @@ -1143,7 +1243,7 @@ class Agent: text = pdf_to_text(pdf) return text - def pdf_chunker(self, text: str = None): + def pdf_chunker(self, text: str = None, num_limits: int = 1000): """Chunk the pdf into sentences Args: @@ -1153,13 +1253,21 @@ class Agent: _type_: _description_ """ text = text or self.pdf_connector() - pass + text = limit_tokens_from_string(text, num_limits) + return text def tools_prompt_prep( self, docs: str = None, scenarios: str = None ): """ - Prepare the tool prompt + Tools prompt prep + + Args: + docs (str, optional): _description_. Defaults to None. + scenarios (str, optional): _description_. Defaults to None. + + Returns: + _type_: _description_ """ PROMPT = f""" # Task @@ -1214,61 +1322,72 @@ class Agent: ‘‘‘ """ - # def self_healing(self, **kwargs): - # """ - # Self healing by debugging errors and refactoring its own code - - # Args: - # **kwargs (Any): Any additional keyword arguments - # """ - # pass - - # def refactor_code( - # self, - # file: str, - # changes: List, - # confirm: bool = False - # ): - # """ - # Refactor the code - # """ - # with open(file) as f: - # original_file_lines = f.readlines() - - # # Filter out the changes that are not confirmed - # operation_changes = [ - # change for change in changes if "operation" in change - # ] - # explanations = [ - # change["explanation"] for change in changes if "explanation" in change - # ] - - # # Sort the changes in reverse line order - # # explanations.sort(key=lambda x: x["line", reverse=True]) - - # def error_prompt_inject( - # self, - # file_path: str, - # args: List, - # error: str, - # ): - # with open(file_path, "r") as f: - # file_lines = f.readlines() - - # file_with_lines = [] - # for i, line in enumerate(file_lines): - # file_with_lines.append(str(i + 1) + "" + line) - # file_with_lines = "".join(file_with_lines) - - # prompt = f""" - # Here is the script that needs fixing:\n\n - # {file_with_lines}\n\n - # Here are the arguments it was provided:\n\n - # {args}\n\n - # Here is the error message:\n\n - # {error}\n - # "Please provide your suggested changes, and remember to stick to the " - # exact format as described above. - # """ - - # print(prompt) + def self_healing(self, **kwargs): + """ + Self healing by debugging errors and refactoring its own code + + Args: + **kwargs (Any): Any additional keyword arguments + """ + pass + + def refactor_code( + self, file: str, changes: List, confirm: bool = False + ): + """_summary_ + + Args: + file (str): _description_ + changes (List): _description_ + confirm (bool, optional): _description_. Defaults to False. + """ + # with open(file) as f: + # original_file_lines = f.readlines() + + # # Filter out the changes that are not confirmed + # operation_changes = [ + # change for change in changes if "operation" in change + # ] + # explanations = [ + # change["explanation"] for change in changes if "explanation" in change + # ] + + # Sort the changes in reverse line order + # explanations.sort(key=lambda x: x["line", reverse=True]) + pass + + def error_prompt_inject( + self, + file_path: str, + args: List, + error: str, + ): + """ + Error prompt injection + + Args: + file_path (str): _description_ + args (List): _description_ + error (str): _description_ + + """ + # with open(file_path, "r") as f: + # file_lines = f.readlines() + + # file_with_lines = [] + # for i, line in enumerate(file_lines): + # file_with_lines.append(str(i + 1) + "" + line) + # file_with_lines = "".join(file_with_lines) + + # prompt = f""" + # Here is the script that needs fixing:\n\n + # {file_with_lines}\n\n + # Here are the arguments it was provided:\n\n + # {args}\n\n + # Here is the error message:\n\n + # {error}\n + # "Please provide your suggested changes, and remember to stick to the " + # exact format as described above. + # """ + # print(prompt) + pass diff --git a/swarms/tools/__init__.py b/swarms/tools/__init__.py index e69de29b..dc81462c 100644 --- a/swarms/tools/__init__.py +++ b/swarms/tools/__init__.py @@ -0,0 +1,3 @@ +from swarms.tools.tool_func_doc_scraper import scrape_tool_func_docs + +__all__ = ["scrape_tool_func_docs"] \ No newline at end of file diff --git a/swarms/tools/tool_func_doc_scraper.py b/swarms/tools/tool_func_doc_scraper.py new file mode 100644 index 00000000..003d7101 --- /dev/null +++ b/swarms/tools/tool_func_doc_scraper.py @@ -0,0 +1,36 @@ +import inspect +from typing import Callable +from termcolor import colored + +def scrape_tool_func_docs(fn: Callable) -> str: + """ + Scrape the docstrings and parameters of a function decorated with `tool` and return a formatted string. + + Args: + fn (Callable): The function to scrape. + + Returns: + str: A string containing the function's name, documentation string, and a list of its parameters. Each parameter is represented as a line containing the parameter's name, default value, and annotation. + """ + try: + + # If the function is a tool, get the original function + if hasattr(fn, "func"): + fn = fn.func + + signature = inspect.signature(fn) + parameters = [] + for name, param in signature.parameters.items(): + parameters.append( + f"Name: {name}, Type:" + f" {param.default if param.default is not param.empty else 'None'}," + " Annotation:" + f" {param.annotation if param.annotation is not param.empty else 'None'}" + ) + parameters_str = "\n".join(parameters) + return ( + f"Function: {fn.__name__}\nDocstring:" + f" {inspect.getdoc(fn)}\nParameters:\n{parameters_str}" + ) + except Exception as error: + print(colored(f"Error scraping tool function docs {error} try optimizing your inputs with different variables and attempt once more.", "red")) \ No newline at end of file diff --git a/swarms/utils/token_count_tiktoken.py b/swarms/utils/token_count_tiktoken.py new file mode 100644 index 00000000..f8a47b98 --- /dev/null +++ b/swarms/utils/token_count_tiktoken.py @@ -0,0 +1,27 @@ +import tiktoken + + +def limit_tokens_from_string( + string: str, model: str = "gpt-4", limit: int = 500 +) -> str: + """Limits the number of tokens in a string + + Args: + string (str): _description_ + model (str): _description_ + limit (int): _description_ + + Returns: + str: _description_ + """ + try: + encoding = tiktoken.encoding_for_model(model) + except Exception: + encoding = tiktoken.encoding_for_model( + "gpt2" + ) # Fallback for others. + + encoded = encoding.encode(string) + + out = encoding.decode(encoded[:limit]) + return out From 74f996b3525c46b03207fb4f50e3f71298a4980e Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 10:38:25 -0800 Subject: [PATCH 09/32] [CLEANUP][EXAMPLE] --- README.md | 9 ++++----- example.py | 7 ++++++- playground/tools/tool_prompt_scaper.py | 1 + swarms/structs/agent.py | 1 + swarms/tools/__init__.py | 2 +- swarms/tools/tool_func_doc_scraper.py | 13 +++++++++++-- 6 files changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4320259c..c9441685 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,6 @@ Run example in Collab: str: """ Scrape the docstrings and parameters of a function decorated with `tool` and return a formatted string. @@ -13,7 +14,6 @@ def scrape_tool_func_docs(fn: Callable) -> str: str: A string containing the function's name, documentation string, and a list of its parameters. Each parameter is represented as a line containing the parameter's name, default value, and annotation. """ try: - # If the function is a tool, get the original function if hasattr(fn, "func"): fn = fn.func @@ -33,4 +33,13 @@ def scrape_tool_func_docs(fn: Callable) -> str: f" {inspect.getdoc(fn)}\nParameters:\n{parameters_str}" ) except Exception as error: - print(colored(f"Error scraping tool function docs {error} try optimizing your inputs with different variables and attempt once more.", "red")) \ No newline at end of file + print( + colored( + ( + f"Error scraping tool function docs {error} try" + " optimizing your inputs with different" + " variables and attempt once more." + ), + "red", + ) + ) From 970239b8be377fd10907ef2d39911250a2c92ff9 Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 10:41:05 -0800 Subject: [PATCH 10/32] [FEAT][Agent Name print when init] --- swarms/structs/agent.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index e7f237a6..b7339878 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -484,7 +484,13 @@ class Agent: """Print the autonomous agent activation message""" try: print( - colored("Initializing Autonomous Agent...", "yellow") + colored( + ( + "Initializing Autonomous Agent" + f" {self.agent_name}..." + ), + "yellow", + ) ) # print(colored("Loading modules...", "yellow")) # print(colored("Modules loaded successfully.", "green")) From 032a3237da03abfcb60596604ff2f975b9b20abc Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 12:02:28 -0800 Subject: [PATCH 11/32] [V] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 13547aa0..61fa2834 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "swarms" -version = "2.5.2" +version = "2.5.4" description = "Swarms - Pytorch" license = "MIT" authors = ["Kye Gomez "] From 6fa37ef40aaba71a62a44846d6231c5d89593095 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sat, 2 Dec 2023 13:35:03 -0800 Subject: [PATCH 12/32] Create education.py --- playground/demos/education/education.py | 56 +++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 playground/demos/education/education.py diff --git a/playground/demos/education/education.py b/playground/demos/education/education.py new file mode 100644 index 00000000..5b9d9df7 --- /dev/null +++ b/playground/demos/education/education.py @@ -0,0 +1,56 @@ +import os +from dotenv import load_dotenv +from swarms.models import OpenAIChat +from swarms.models.stable_diffusion import StableDiffusion +from swarms.structs import Agent, SequentialWorkflow +import swarms.prompts.education as edu_prompts + +# Load environment variables +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") +stability_api_key = os.getenv("STABILITY_API_KEY") + +# Initialize language model +llm = OpenAIChat(openai_api_key=api_key, temperature=0.5, max_tokens=3000) + +# Initialize Stable Diffusion +sd_api = StableDiffusion(api_key=stability_api_key) + +# User preferences (can be dynamically set in a real application) +user_preferences = { + "subjects": "Cognitive Architectures", + "learning_style": "Visual", + "challenge_level": "Moderate" +} + +# Formatted prompts from user preferences +curriculum_prompt = edu_prompts.CURRICULUM_DESIGN_PROMPT.format(**user_preferences) +interactive_prompt = edu_prompts.INTERACTIVE_LEARNING_PROMPT.format(**user_preferences) +sample_prompt = edu_prompts.SAMPLE_TEST_PROMPT.format(**user_preferences) +image_prompt = edu_prompts.IMAGE_GENERATION_PROMPT.format(**user_preferences) + +# Initialize agents for different educational tasks +curriculum_agent = Agent(llm=llm, max_loops=1, sop=curriculum_prompt) +interactive_learning_agent = Agent(llm=llm, max_loops=1, sop=interactive_prompt) +sample_lesson_agent = Agent(llm=llm, max_loops=1, sop=sample_prompt) + +# Create Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to workflow with personalized prompts +workflow.add(curriculum_agent, "Generate a curriculum") +workflow.add(interactive_learning_agent, "Generate an interactive lesson") +workflow.add(sample_lesson_agent, "Generate a practice test") + +# Execute the workflow for text-based tasks +workflow.run() + +# Generate an image using Stable Diffusion +image_result = sd_api.run(image_prompt) + +# Output results for each task +for task in workflow.tasks: + print(f"Task Description: {task.description}\nResult: {task.result}\n") + +# Output image result +print(f"Image Generation Task: Generate an image for the interactive lesson\nResult: {image_result}") From 74bb90671df583967f613f40e75c326f13b0d174 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sat, 2 Dec 2023 13:37:21 -0800 Subject: [PATCH 13/32] Create education.py --- swarms/prompts/education.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 swarms/prompts/education.py diff --git a/swarms/prompts/education.py b/swarms/prompts/education.py new file mode 100644 index 00000000..5016c0f8 --- /dev/null +++ b/swarms/prompts/education.py @@ -0,0 +1,37 @@ +user_preferences = { + "subjects": "AI Cognitive Architectures", + "learning_style": "Visual", + "challenge_level": "Moderate", +} + +# Extracting individual preferences +subjects = user_preferences["subjects"] +learning_style = user_preferences["learning_style"] +challenge_level = user_preferences["challenge_level"] + + +# Curriculum Design Prompt +CURRICULUM_DESIGN_PROMPT = f""" +Develop a semester-long curriculum tailored to student interests in {subjects}. Focus on incorporating diverse teaching methods suitable for a {learning_style} learning style. +The curriculum should challenge students at a {challenge_level} level, integrating both theoretical knowledge and practical applications. Provide a detailed structure, including weekly topics, +key objectives, and essential resources needed. +""" + +# Interactive Learning Session Prompt +INTERACTIVE_LEARNING_PROMPT = f""" +You are being given a curriculum from another agent, please design an interactive learning sessions for the {subjects} curriculum that cater to a {learning_style} learning style. Incorporate +engaging elements like gamification, interactive quizzes, and hands-on activities. The sessions should dynamically adjust to the student's engagement and understanding, emphasizing key concepts +and practical skills. +""" + +# Sample Lesson Prompt +SAMPLE_TEST_PROMPT = f""" +Create a comprehensive sample test for the first week of the {subjects} curriculum, tailored for a {learning_style} learning style and at a {challenge_level} challenge level. +""" + +# Image Generation for Education Prompt +IMAGE_GENERATION_PROMPT = f""" +Develop a stable diffusion prompt for an educational image/visual aid that align with the {subjects} curriculum, specifically designed to enhance understanding for students with a {learning_style} +learning style. This might include diagrams, infographics, and illustrative representations to simplify complex concepts. Ensure you output a 10/10 descriptive image generation prompt only. +""" + From 870530b9223dd83dcab2dcd0bcc9a7e8b5018624 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sat, 2 Dec 2023 13:48:13 -0800 Subject: [PATCH 14/32] Update education.py --- swarms/prompts/education.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/swarms/prompts/education.py b/swarms/prompts/education.py index 5016c0f8..aa41716b 100644 --- a/swarms/prompts/education.py +++ b/swarms/prompts/education.py @@ -13,15 +13,13 @@ challenge_level = user_preferences["challenge_level"] # Curriculum Design Prompt CURRICULUM_DESIGN_PROMPT = f""" Develop a semester-long curriculum tailored to student interests in {subjects}. Focus on incorporating diverse teaching methods suitable for a {learning_style} learning style. -The curriculum should challenge students at a {challenge_level} level, integrating both theoretical knowledge and practical applications. Provide a detailed structure, including weekly topics, -key objectives, and essential resources needed. +The curriculum should challenge students at a {challenge_level} level, integrating both theoretical knowledge and practical applications. Provide a detailed structure, including +weekly topics, key objectives, and essential resources needed. """ # Interactive Learning Session Prompt INTERACTIVE_LEARNING_PROMPT = f""" -You are being given a curriculum from another agent, please design an interactive learning sessions for the {subjects} curriculum that cater to a {learning_style} learning style. Incorporate -engaging elements like gamification, interactive quizzes, and hands-on activities. The sessions should dynamically adjust to the student's engagement and understanding, emphasizing key concepts -and practical skills. +Create an interactive lesson for a student of {subjects} that caters to a {learning_style} learning style. Incorporate engaging elements and hands-on activities. """ # Sample Lesson Prompt From f50907ab3ed496439e6e112bc7d147d882ed5c5d Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sat, 2 Dec 2023 13:48:57 -0800 Subject: [PATCH 15/32] Update education.py --- swarms/prompts/education.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swarms/prompts/education.py b/swarms/prompts/education.py index aa41716b..0e7742d9 100644 --- a/swarms/prompts/education.py +++ b/swarms/prompts/education.py @@ -19,7 +19,7 @@ weekly topics, key objectives, and essential resources needed. # Interactive Learning Session Prompt INTERACTIVE_LEARNING_PROMPT = f""" -Create an interactive lesson for a student of {subjects} that caters to a {learning_style} learning style. Incorporate engaging elements and hands-on activities. +Basedon the curriculum, generate an interactive lesson plan for a student of {subjects} that caters to a {learning_style} learning style. Incorporate engaging elements and hands-on activities. """ # Sample Lesson Prompt From 090a3687285bd24ff445517314fd97ec5dd359d9 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Sat, 2 Dec 2023 15:12:34 -0800 Subject: [PATCH 16/32] Update gpt4_vision_api.py --- swarms/models/gpt4_vision_api.py | 83 ++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/swarms/models/gpt4_vision_api.py b/swarms/models/gpt4_vision_api.py index b589fe70..cd6e5ddb 100644 --- a/swarms/models/gpt4_vision_api.py +++ b/swarms/models/gpt4_vision_api.py @@ -15,7 +15,10 @@ from termcolor import colored try: import cv2 except ImportError: - print("OpenCV not installed. Please install OpenCV to use this model.") + print( + "OpenCV not installed. Please install OpenCV to use this" + " model." + ) raise ImportError # Load environment variables @@ -100,29 +103,24 @@ class GPT4VisionAPI: if self.meta_prompt: self.system_prompt = self.meta_prompt_init() - def encode_image(self, img_path: str): + def encode_image(self, img: str): """Encode image to base64.""" - if not os.path.exists(img_path): - print(f"Image file not found: {img_path}") + if not os.path.exists(img): + print(f"Image file not found: {img}") return None - with open(img_path, "rb") as image_file: + with open(img, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8") - - def download_img_then_encode(self, img: str): """Download image from URL then encode image to base64 using requests""" pass # Function to handle vision tasks - def run( - self, - image_path, - task): + def run(self, img, task): """Run the model.""" try: - base64_image = self.encode_image(image_path) + base64_image = self.encode_image(img) headers = { "Content-Type": "application/json", "Authorization": f"Bearer {self.openai_api_key}", @@ -130,22 +128,36 @@ class GPT4VisionAPI: payload = { "model": self.model_name, "messages": [ - {"role": "system", "content": [self.system_prompt]}, + { + "role": "system", + "content": [self.system_prompt], + }, { "role": "user", "content": [ {"type": "text", "text": task}, - {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}} + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{base64_image}" + }, + }, ], }, ], "max_tokens": self.max_tokens, } - response = requests.post(self.openai_proxy, headers=headers, json=payload) + response = requests.post( + self.openai_proxy, headers=headers, json=payload + ) out = response.json() - if 'choices' in out and out['choices']: - content = out["choices"][0].get("message", {}).get("content", None) + if "choices" in out and out["choices"]: + content = ( + out["choices"][0] + .get("message", {}) + .get("content", None) + ) return content else: print("No valid response in 'choices'") @@ -227,7 +239,9 @@ class GPT4VisionAPI: if not success: break _, buffer = cv2.imencode(".jpg", frame) - base64_frames.append(base64.b64encode(buffer).decode("utf-8")) + base64_frames.append( + base64.b64encode(buffer).decode("utf-8") + ) video.release() print(len(base64_frames), "frames read.") @@ -252,7 +266,10 @@ class GPT4VisionAPI: payload = { "model": self.model_name, "messages": [ - {"role": "system", "content": [self.system_prompt]}, + { + "role": "system", + "content": [self.system_prompt], + }, { "role": "user", "content": [ @@ -260,9 +277,7 @@ class GPT4VisionAPI: { "type": "image_url", "image_url": { - "url": ( - f"data:image/jpeg;base64,{base64_image}" - ) + "url": f"data:image/jpeg;base64,{base64_image}" }, }, ], @@ -312,7 +327,9 @@ class GPT4VisionAPI: """ # Instantiate the thread pool executor - with ThreadPoolExecutor(max_workers=self.max_workers) as executor: + with ThreadPoolExecutor( + max_workers=self.max_workers + ) as executor: results = executor.map(self.run, tasks, imgs) # Print the results for debugging @@ -358,9 +375,7 @@ class GPT4VisionAPI: { "type": "image_url", "image_url": { - "url": ( - f"data:image/jpeg;base64,{base64_image}" - ) + "url": f"data:image/jpeg;base64,{base64_image}" }, }, ], @@ -370,7 +385,9 @@ class GPT4VisionAPI: } async with aiohttp.ClientSession() as session: async with session.post( - self.openai_proxy, headers=headers, data=json.dumps(payload) + self.openai_proxy, + headers=headers, + data=json.dumps(payload), ) as response: out = await response.json() content = out["choices"][0]["message"]["content"] @@ -379,7 +396,9 @@ class GPT4VisionAPI: print(f"Error with the request {error}") raise error - def run_batch(self, tasks_images: List[Tuple[str, str]]) -> List[str]: + def run_batch( + self, tasks_images: List[Tuple[str, str]] + ) -> List[str]: """Process a batch of tasks and images""" with concurrent.futures.ThreadPoolExecutor() as executor: futures = [ @@ -406,7 +425,9 @@ class GPT4VisionAPI: """Process a batch of tasks and images asynchronously with retries""" loop = asyncio.get_event_loop() futures = [ - loop.run_in_executor(None, self.run_with_retries, task, img) + loop.run_in_executor( + None, self.run_with_retries, task, img + ) for task, img in tasks_images ] return await asyncio.gather(*futures) @@ -414,7 +435,9 @@ class GPT4VisionAPI: def health_check(self): """Health check for the GPT4Vision model""" try: - response = requests.get("https://api.openai.com/v1/engines") + response = requests.get( + "https://api.openai.com/v1/engines" + ) return response.status_code == 200 except requests.RequestException as error: print(f"Health check failed: {error}") From f554b299aca700389fb96087db91cb6da0b76ffe Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 19:54:40 -0800 Subject: [PATCH 17/32] [FEAT][Agent update] [DEMO][Grupa Software GPT] --- playground/demos/grupa/app.py | 78 +++++++++++++++++++++ playground/demos/grupa/run__software_gpt.sh | 13 ++++ playground/demos/grupa/test_bash.bash | 13 ++++ pyproject.toml | 2 +- sequential_workflow_example.py | 7 +- swarms/structs/agent.py | 32 ++++++++- swarms/utils/parse_code.py | 34 ++++++--- 7 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 playground/demos/grupa/app.py create mode 100755 playground/demos/grupa/run__software_gpt.sh create mode 100755 playground/demos/grupa/test_bash.bash diff --git a/playground/demos/grupa/app.py b/playground/demos/grupa/app.py new file mode 100644 index 00000000..5f09999b --- /dev/null +++ b/playground/demos/grupa/app.py @@ -0,0 +1,78 @@ +import os + +from dotenv import load_dotenv +from fastapi import FastAPI +from pydantic import BaseModel + +from swarms.models import OpenAIChat +from swarms.prompts.code_interpreter import CODE_INTERPRETER +from swarms.structs import Agent + + +class AgentInput(BaseModel): + feature: str + codebase: str + + +app = FastAPI() + +load_dotenv() + +# Load the environment variables +api_key = os.getenv("OPENAI_API_KEY") + +# Initialize the language agent +llm = OpenAIChat( + model_name="gpt-4", + openai_api_key=api_key, + temperature=0.5, + max_tokens=2000, +) + +# Product Manager Agent init +product_manager_agent = Agent( + llm=llm, max_loops=1, sop=CODE_INTERPRETER, autosave=True +) + +# Initialize the agent with the language agent +feature_implementer_frontend = Agent( + llm=llm, max_loops=1, sop=CODE_INTERPRETER, autosave=True +) + +# Create another agent for a different task +feature_implementer_backend = Agent( + llm=llm, max_loops=1, sop=CODE_INTERPRETER, autosave=True +) + + +# ##################### FastAPI ##################### + + +def feature_codebase_product_agentprompt( + feature: str, codebase: str +) -> str: + prompt = ( + "Create an algorithmic pseudocode for an all-new feature:" + f" {feature} based on this codebase: {codebase}" + ) + return prompt + + +# @app.post("/agent/") +# async def run_feature_implementer_frontend(item: AgentInput): +# agent1_out = feature_implementer_frontend.run( +# f"Create the backend code for {item.feature} in markdown" +# " based off of this algorithmic pseudocode:" +# f" {product_manager_agent.run(feature_codebase_product_agentprompt(item.feature, item.codebase))} write" +# f" the logic based on the following codebase: {item.codebase}" +# ) +# return {"output": agent1_out} + +def software_gpt(feature: str, codebase: str) -> str: + agent1_out = feature_implementer_frontend.run( + f"Create the backend code for {feature} in markdown" + " based off of this algorithmic pseudocode:" + f" {product_manager_agent.run(feature_codebase_product_agentprompt(feature, codebase))} write" + f" the logic based on the following codebase: {codebase}" + ) + print(agent1_out) \ No newline at end of file diff --git a/playground/demos/grupa/run__software_gpt.sh b/playground/demos/grupa/run__software_gpt.sh new file mode 100755 index 00000000..7ae5b190 --- /dev/null +++ b/playground/demos/grupa/run__software_gpt.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Define the base URL +base_url="http://localhost:8000" + +# Define the JSON payload +payload='{"feature": "login system", "codebase": "existing codebase here"}' + +# Send POST request +echo "Sending request to /agent/ endpoint..." +response=$(curl -s -X POST "$base_url/agent/" -H "Content-Type: application/json" -d "$payload") + +echo "Response: $response" \ No newline at end of file diff --git a/playground/demos/grupa/test_bash.bash b/playground/demos/grupa/test_bash.bash new file mode 100755 index 00000000..7ae5b190 --- /dev/null +++ b/playground/demos/grupa/test_bash.bash @@ -0,0 +1,13 @@ +#!/bin/bash + +# Define the base URL +base_url="http://localhost:8000" + +# Define the JSON payload +payload='{"feature": "login system", "codebase": "existing codebase here"}' + +# Send POST request +echo "Sending request to /agent/ endpoint..." +response=$(curl -s -X POST "$base_url/agent/" -H "Content-Type: application/json" -d "$payload") + +echo "Response: $response" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 61fa2834..b630536c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "swarms" -version = "2.5.4" +version = "2.5.6" description = "Swarms - Pytorch" license = "MIT" authors = ["Kye Gomez "] diff --git a/sequential_workflow_example.py b/sequential_workflow_example.py index a17a6ad6..1742f49c 100644 --- a/sequential_workflow_example.py +++ b/sequential_workflow_example.py @@ -14,12 +14,15 @@ api_key = os.getenv("OPENAI_API_KEY") llm = OpenAIChat( openai_api_key=api_key, temperature=0.5, - max_tokens=3000, + max_tokens=2000, ) # Initialize the agent with the language agent -agent1 = Agent(llm=llm, max_loops=1) +agent1 = Agent( + llm=llm, + max_loops=1, +) # Create another agent for a different task agent2 = Agent(llm=llm, max_loops=1) diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index b7339878..30faef6e 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -252,6 +252,14 @@ class Agent: if preset_stopping_token: self.stopping_token = "" + # If memory then add the json to the memory vector database + if memory: + # Add all of the state to the memory + self.add_message_to_memory_db( + {"message": self.state_to_str()}, + {"agent_id": self.id}, + ) + def provide_feedback(self, feedback: str) -> None: """Allow users to provide feedback on the responses.""" self.feedback.append(feedback) @@ -1125,7 +1133,7 @@ class Agent: "agent_description": self.agent_description, "system_prompt": self.system_prompt, "sop": self.sop, - "memory": self.short_memory, + "short_memory": self.short_memory, "loop_interval": self.loop_interval, "retry_attempts": self.retry_attempts, "retry_interval": self.retry_interval, @@ -1143,6 +1151,28 @@ class Agent: saved = colored(f"Saved agent state to: {file_path}", "green") print(saved) + def state_to_str(self): + """Transform the JSON into a string""" + state = { + "agent_id": str(self.id), + "agent_name": self.agent_name, + "agent_description": self.agent_description, + "system_prompt": self.system_prompt, + "sop": self.sop, + "short_memory": self.short_memory, + "loop_interval": self.loop_interval, + "retry_attempts": self.retry_attempts, + "retry_interval": self.retry_interval, + "interactive": self.interactive, + "dashboard": self.dashboard, + "dynamic_temperature": self.dynamic_temperature_enabled, + "autosave": self.autosave, + "saved_state_path": self.saved_state_path, + "max_loops": self.max_loops, + } + out = str(state) + return out + def load_state(self, file_path: str): """ Loads the state of the agent from a json file and restores the configuration and memory. diff --git a/swarms/utils/parse_code.py b/swarms/utils/parse_code.py index 747bd0b6..2e0fa438 100644 --- a/swarms/utils/parse_code.py +++ b/swarms/utils/parse_code.py @@ -1,15 +1,31 @@ import re +# def extract_code_in_backticks_in_string(s: str) -> str: +# """ +# Extracts code blocks from a markdown string. -def extract_code_in_backticks_in_string(message: str) -> str: +# Args: +# s (str): The markdown string to extract code from. + +# Returns: +# list: A list of tuples. Each tuple contains the language of the code block (if specified) and the code itself. +# """ +# pattern = r"```([\w\+\#\-\.\s]*)\n(.*?)```" +# matches = re.findall(pattern, s, re.DOTALL) +# out = [(match[0], match[1].strip()) for match in matches] +# print(out) + + +def extract_code_in_backticks_in_string(s: str) -> str: """ - To extract code from a string in markdown and return a string + Extracts code blocks from a markdown string. + + Args: + s (str): The markdown string to extract code from. + Returns: + str: A string containing all the code blocks. """ - pattern = ( # Non-greedy match between six backticks - r"`` ``(.*?)`` " - ) - match = re.search( - pattern, message, re.DOTALL - ) # re.DOTALL to match newline chars - return match.group(1).strip() if match else None + pattern = r"```([\w\+\#\-\.\s]*)(.*?)```" + matches = re.findall(pattern, s, re.DOTALL) + return "\n".join(match[1].strip() for match in matches) From f41a9761fa62c2e0b5e9a8d4fce366035954f0c4 Mon Sep 17 00:00:00 2001 From: Kye Date: Sat, 2 Dec 2023 20:22:33 -0800 Subject: [PATCH 18/32] [DEMO][Software GPT] --- flow_state.json | 15 +++ playground/demos/education/education.py | 40 ++++++-- playground/demos/grupa/app.py | 123 +++++++++++++++++++----- swarms/prompts/education.py | 1 - 4 files changed, 143 insertions(+), 36 deletions(-) create mode 100644 flow_state.json diff --git a/flow_state.json b/flow_state.json new file mode 100644 index 00000000..f8a05b5c --- /dev/null +++ b/flow_state.json @@ -0,0 +1,15 @@ +{ + "memory": [ + [ + "Human:: Document the following code: In order to implement the signup system in TypeScript using Supabase based on the provided algorithmic pseudocode and codebase, we need to follow these steps:\n\n1. Import necessary modules and dependencies.\n2. Implement the `useEffect` hook to check if a user is already authenticated when the `MainPanel` component renders.\n3. Define a function `handleFormSubmit` to handle form submission.\n4. Implement the form for user signup in the `UpperPanel` component.\n5. Implement the `LowerPanel` component which will display a message or instructions based on `promptInstruction` state.\n\nLet's start by importing the necessary modules and dependencies. \n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\nNext, we'll add the `useEffect` hook inside the `MainPanel` component to check if a user is already authenticated when the component renders. If a user is found, we'll update the `user` state with the returned user.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nNow, let's define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nWe'll continue with the next steps in the following code blocks.", + "AI: # TypeScript Signup System with Supabase\n\nThis documentation provides a comprehensive guide and explanation of the TypeScript signup system using Supabase. The system consists of several components including MainPanel, UpperPanel, and LowerPanel, as well as the use of the Supabase client for authentication. \n\n## Overview\n\nThe signup system is designed to authenticate users using Supabase, a modern and open-source backend service. The system is built with TypeScript and React, utilizing React's useState and useEffect hooks for state management and side effects respectively.\n\nThe system is divided into three main components:\n\n- `MainPanel`: This is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n- `UpperPanel`: This component contains the form for user signup.\n- `LowerPanel`: This component displays a message or instructions based on the `promptInstruction` state.\n\n## Importing Modules and Dependencies\n\nThe first step is to import the necessary modules and dependencies. We import React, useState, and useEffect from the 'react' library. We also import Auth from '@supabase/ui', the UI library for Supabase, and our initialized Supabase client from './supabaseClient'. Finally, we import our UpperPanel and LowerPanel components.\n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\n## The MainPanel Component\n\nThe `MainPanel` component is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nIn the `MainPanel` component, we define four pieces of state:\n\n- `user`: This is initially set to null and will hold the authenticated user, if one exists.\n- `promptInstructionForLowerPanel`: This holds the instructions or messages to be displayed in the `LowerPanel` component.\n- `formData`: This is initially an empty string and will hold the form data from the signup form.\n- `isLoading`: This is initially set to false and will be used to manage the loading state of the form.\n\nThe useEffect hook checks if a user is already authenticated when the component renders. If a user is found, the `user` state is updated with the returned user.\n\n## The handleFormSubmit Function\n\nNext, we define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nIn the `handleFormSubmit` function, we first prevent the default form submission behavior with `event.preventDefault()`. We then set `isLoading` to true to indicate that the form is being submitted. \n\nWe then call `supabase.auth.signUp` with the `formData` as an argument. This function returns a promise that resolves to an object containing the user and any error that might have occurred during the signup process.\n\nIf an error occurs during the signup process, we update `promptInstructionForLowerPanel` with the error message. If the signup is successful, we update the `user` state with the returned user. Finally, we set `isLoading` to false to indicate that the form submission has completed.\n\n## Next Steps\n\nThe implementation of the `UpperPanel` and `LowerPanel` components will be covered in the following sections. The `UpperPanel` component will contain the form for user signup, while the `LowerPanel` component will display a message or instructions based on the `promptInstructionForLowerPanel` state.", + "# TypeScript Signup System with Supabase\n\nThis documentation provides a comprehensive guide and explanation of the TypeScript signup system using Supabase. The system consists of several components including MainPanel, UpperPanel, and LowerPanel, as well as the use of the Supabase client for authentication. \n\n## Overview\n\nThe signup system is designed to authenticate users using Supabase, a modern and open-source backend service. The system is built with TypeScript and React, utilizing React's useState and useEffect hooks for state management and side effects respectively.\n\nThe system is divided into three main components:\n\n- `MainPanel`: This is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n- `UpperPanel`: This component contains the form for user signup.\n- `LowerPanel`: This component displays a message or instructions based on the `promptInstruction` state.\n\n## Importing Modules and Dependencies\n\nThe first step is to import the necessary modules and dependencies. We import React, useState, and useEffect from the 'react' library. We also import Auth from '@supabase/ui', the UI library for Supabase, and our initialized Supabase client from './supabaseClient'. Finally, we import our UpperPanel and LowerPanel components.\n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\n## The MainPanel Component\n\nThe `MainPanel` component is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nIn the `MainPanel` component, we define four pieces of state:\n\n- `user`: This is initially set to null and will hold the authenticated user, if one exists.\n- `promptInstructionForLowerPanel`: This holds the instructions or messages to be displayed in the `LowerPanel` component.\n- `formData`: This is initially an empty string and will hold the form data from the signup form.\n- `isLoading`: This is initially set to false and will be used to manage the loading state of the form.\n\nThe useEffect hook checks if a user is already authenticated when the component renders. If a user is found, the `user` state is updated with the returned user.\n\n## The handleFormSubmit Function\n\nNext, we define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nIn the `handleFormSubmit` function, we first prevent the default form submission behavior with `event.preventDefault()`. We then set `isLoading` to true to indicate that the form is being submitted. \n\nWe then call `supabase.auth.signUp` with the `formData` as an argument. This function returns a promise that resolves to an object containing the user and any error that might have occurred during the signup process.\n\nIf an error occurs during the signup process, we update `promptInstructionForLowerPanel` with the error message. If the signup is successful, we update the `user` state with the returned user. Finally, we set `isLoading` to false to indicate that the form submission has completed.\n\n## Next Steps\n\nThe implementation of the `UpperPanel` and `LowerPanel` components will be covered in the following sections. The `UpperPanel` component will contain the form for user signup, while the `LowerPanel` component will display a message or instructions based on the `promptInstructionForLowerPanel` state." + ] + ], + "loop_interval": 1, + "retry_attempts": 3, + "retry_interval": 1, + "interactive": false, + "dashboard": false, + "dynamic_temperature": false +} \ No newline at end of file diff --git a/playground/demos/education/education.py b/playground/demos/education/education.py index 5b9d9df7..77f16f1b 100644 --- a/playground/demos/education/education.py +++ b/playground/demos/education/education.py @@ -11,7 +11,9 @@ api_key = os.getenv("OPENAI_API_KEY") stability_api_key = os.getenv("STABILITY_API_KEY") # Initialize language model -llm = OpenAIChat(openai_api_key=api_key, temperature=0.5, max_tokens=3000) +llm = OpenAIChat( + openai_api_key=api_key, temperature=0.5, max_tokens=3000 +) # Initialize Stable Diffusion sd_api = StableDiffusion(api_key=stability_api_key) @@ -20,18 +22,28 @@ sd_api = StableDiffusion(api_key=stability_api_key) user_preferences = { "subjects": "Cognitive Architectures", "learning_style": "Visual", - "challenge_level": "Moderate" + "challenge_level": "Moderate", } # Formatted prompts from user preferences -curriculum_prompt = edu_prompts.CURRICULUM_DESIGN_PROMPT.format(**user_preferences) -interactive_prompt = edu_prompts.INTERACTIVE_LEARNING_PROMPT.format(**user_preferences) -sample_prompt = edu_prompts.SAMPLE_TEST_PROMPT.format(**user_preferences) -image_prompt = edu_prompts.IMAGE_GENERATION_PROMPT.format(**user_preferences) +curriculum_prompt = edu_prompts.CURRICULUM_DESIGN_PROMPT.format( + **user_preferences +) +interactive_prompt = edu_prompts.INTERACTIVE_LEARNING_PROMPT.format( + **user_preferences +) +sample_prompt = edu_prompts.SAMPLE_TEST_PROMPT.format( + **user_preferences +) +image_prompt = edu_prompts.IMAGE_GENERATION_PROMPT.format( + **user_preferences +) # Initialize agents for different educational tasks curriculum_agent = Agent(llm=llm, max_loops=1, sop=curriculum_prompt) -interactive_learning_agent = Agent(llm=llm, max_loops=1, sop=interactive_prompt) +interactive_learning_agent = Agent( + llm=llm, max_loops=1, sop=interactive_prompt +) sample_lesson_agent = Agent(llm=llm, max_loops=1, sop=sample_prompt) # Create Sequential Workflow @@ -39,7 +51,9 @@ workflow = SequentialWorkflow(max_loops=1) # Add tasks to workflow with personalized prompts workflow.add(curriculum_agent, "Generate a curriculum") -workflow.add(interactive_learning_agent, "Generate an interactive lesson") +workflow.add( + interactive_learning_agent, "Generate an interactive lesson" +) workflow.add(sample_lesson_agent, "Generate a practice test") # Execute the workflow for text-based tasks @@ -50,7 +64,13 @@ image_result = sd_api.run(image_prompt) # Output results for each task for task in workflow.tasks: - print(f"Task Description: {task.description}\nResult: {task.result}\n") + print( + f"Task Description: {task.description}\nResult:" + f" {task.result}\n" + ) # Output image result -print(f"Image Generation Task: Generate an image for the interactive lesson\nResult: {image_result}") +print( + "Image Generation Task: Generate an image for the interactive" + f" lesson\nResult: {image_result}" +) diff --git a/playground/demos/grupa/app.py b/playground/demos/grupa/app.py index 5f09999b..c1760b7b 100644 --- a/playground/demos/grupa/app.py +++ b/playground/demos/grupa/app.py @@ -1,22 +1,47 @@ import os from dotenv import load_dotenv -from fastapi import FastAPI -from pydantic import BaseModel from swarms.models import OpenAIChat from swarms.prompts.code_interpreter import CODE_INTERPRETER from swarms.structs import Agent +from swarms.prompts.programming import TEST_SOP, DOCUMENTATION_SOP +from termcolor import colored + +load_dotenv() -class AgentInput(BaseModel): - feature: str - codebase: str +FEATURE = ( + "Implement an all-new signup system in typescript using supabase" +) +CODEBASE = """ -app = FastAPI() -load_dotenv() +import React, { useState } from 'react'; +import UpperPanel from './UpperPanel'; +import LowerPanel from './LowerPanel'; + +const MainPanel = () => { + const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); + const [formData, setFormData] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + return ( +
+ + +
+ ); +}; + +export default MainPanel; + + +""" # Load the environment variables api_key = os.getenv("OPENAI_API_KEY") @@ -44,10 +69,18 @@ feature_implementer_backend = Agent( llm=llm, max_loops=1, sop=CODE_INTERPRETER, autosave=True ) +# Create another agent for a different task +tester_agent = Agent( + llm=llm, max_loops=1, sop=TEST_SOP, autosave=True +) -# ##################### FastAPI ##################### +# Create another agent for a different task +documenting_agent = Agent( + llm=llm, max_loops=1, sop=DOCUMENTATION_SOP, autosave=True +) +# Product Agent prompt def feature_codebase_product_agentprompt( feature: str, codebase: str ) -> str: @@ -58,21 +91,61 @@ def feature_codebase_product_agentprompt( return prompt -# @app.post("/agent/") -# async def run_feature_implementer_frontend(item: AgentInput): -# agent1_out = feature_implementer_frontend.run( -# f"Create the backend code for {item.feature} in markdown" -# " based off of this algorithmic pseudocode:" -# f" {product_manager_agent.run(feature_codebase_product_agentprompt(item.feature, item.codebase))} write" -# f" the logic based on the following codebase: {item.codebase}" -# ) -# return {"output": agent1_out} - -def software_gpt(feature: str, codebase: str) -> str: - agent1_out = feature_implementer_frontend.run( - f"Create the backend code for {feature} in markdown" - " based off of this algorithmic pseudocode:" - f" {product_manager_agent.run(feature_codebase_product_agentprompt(feature, codebase))} write" - f" the logic based on the following codebase: {codebase}" +# Product Manager Agent +product_manager_out = product_manager_agent.run( + feature_codebase_product_agentprompt(FEATURE, CODEBASE) +) +print( + colored( + ( + "---------------------------- Product Manager Plan:" + f" {product_manager_out}" + ), + "cyan", + ) +) + +# Feature Implementer Agent +agent1_out = feature_implementer_frontend.run( + f"Create the backend code for {FEATURE} in markdown based off of" + f" this algorithmic pseudocode: {product_manager_out} the logic" + f" based on the following codebase: {CODEBASE}" +) +print( + colored( + ( + "--------------------- Feature Implementer Code logic:" + f" {agent1_out}" + ), + "cyan", + ) +) + +# Tester agent +tester_agent_out = tester_agent.run( + f"Create tests for the following code: {agent1_out}" +) +print( + colored( + ( + "---------------------------- Tests for the logic:" + f" {tester_agent_out}" + ), + "green", ) - print(agent1_out) \ No newline at end of file +) + + +# Documentation Agent +documenter_agent_out = documenting_agent.run( + f"Document the following code: {agent1_out}" +) +print( + colored( + ( + "---------------------------- Documentation for the" + f" logic: {documenter_agent_out}" + ), + "yellow", + ) +) diff --git a/swarms/prompts/education.py b/swarms/prompts/education.py index 0e7742d9..1963128d 100644 --- a/swarms/prompts/education.py +++ b/swarms/prompts/education.py @@ -32,4 +32,3 @@ IMAGE_GENERATION_PROMPT = f""" Develop a stable diffusion prompt for an educational image/visual aid that align with the {subjects} curriculum, specifically designed to enhance understanding for students with a {learning_style} learning style. This might include diagrams, infographics, and illustrative representations to simplify complex concepts. Ensure you output a 10/10 descriptive image generation prompt only. """ - From 085d19a8a703f315f6a7de72adbbc84baeadbc94 Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 01:18:18 -0800 Subject: [PATCH 19/32] [DEMO] --- flow_state.json | 15 ------ playground/demos/grupa/app.py | 6 +-- .../demos/swarm_of_mma_manufacturing/main.py | 51 ++++++++++++++++--- 3 files changed, 45 insertions(+), 27 deletions(-) delete mode 100644 flow_state.json diff --git a/flow_state.json b/flow_state.json deleted file mode 100644 index f8a05b5c..00000000 --- a/flow_state.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "memory": [ - [ - "Human:: Document the following code: In order to implement the signup system in TypeScript using Supabase based on the provided algorithmic pseudocode and codebase, we need to follow these steps:\n\n1. Import necessary modules and dependencies.\n2. Implement the `useEffect` hook to check if a user is already authenticated when the `MainPanel` component renders.\n3. Define a function `handleFormSubmit` to handle form submission.\n4. Implement the form for user signup in the `UpperPanel` component.\n5. Implement the `LowerPanel` component which will display a message or instructions based on `promptInstruction` state.\n\nLet's start by importing the necessary modules and dependencies. \n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\nNext, we'll add the `useEffect` hook inside the `MainPanel` component to check if a user is already authenticated when the component renders. If a user is found, we'll update the `user` state with the returned user.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nNow, let's define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nWe'll continue with the next steps in the following code blocks.", - "AI: # TypeScript Signup System with Supabase\n\nThis documentation provides a comprehensive guide and explanation of the TypeScript signup system using Supabase. The system consists of several components including MainPanel, UpperPanel, and LowerPanel, as well as the use of the Supabase client for authentication. \n\n## Overview\n\nThe signup system is designed to authenticate users using Supabase, a modern and open-source backend service. The system is built with TypeScript and React, utilizing React's useState and useEffect hooks for state management and side effects respectively.\n\nThe system is divided into three main components:\n\n- `MainPanel`: This is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n- `UpperPanel`: This component contains the form for user signup.\n- `LowerPanel`: This component displays a message or instructions based on the `promptInstruction` state.\n\n## Importing Modules and Dependencies\n\nThe first step is to import the necessary modules and dependencies. We import React, useState, and useEffect from the 'react' library. We also import Auth from '@supabase/ui', the UI library for Supabase, and our initialized Supabase client from './supabaseClient'. Finally, we import our UpperPanel and LowerPanel components.\n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\n## The MainPanel Component\n\nThe `MainPanel` component is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nIn the `MainPanel` component, we define four pieces of state:\n\n- `user`: This is initially set to null and will hold the authenticated user, if one exists.\n- `promptInstructionForLowerPanel`: This holds the instructions or messages to be displayed in the `LowerPanel` component.\n- `formData`: This is initially an empty string and will hold the form data from the signup form.\n- `isLoading`: This is initially set to false and will be used to manage the loading state of the form.\n\nThe useEffect hook checks if a user is already authenticated when the component renders. If a user is found, the `user` state is updated with the returned user.\n\n## The handleFormSubmit Function\n\nNext, we define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nIn the `handleFormSubmit` function, we first prevent the default form submission behavior with `event.preventDefault()`. We then set `isLoading` to true to indicate that the form is being submitted. \n\nWe then call `supabase.auth.signUp` with the `formData` as an argument. This function returns a promise that resolves to an object containing the user and any error that might have occurred during the signup process.\n\nIf an error occurs during the signup process, we update `promptInstructionForLowerPanel` with the error message. If the signup is successful, we update the `user` state with the returned user. Finally, we set `isLoading` to false to indicate that the form submission has completed.\n\n## Next Steps\n\nThe implementation of the `UpperPanel` and `LowerPanel` components will be covered in the following sections. The `UpperPanel` component will contain the form for user signup, while the `LowerPanel` component will display a message or instructions based on the `promptInstructionForLowerPanel` state.", - "# TypeScript Signup System with Supabase\n\nThis documentation provides a comprehensive guide and explanation of the TypeScript signup system using Supabase. The system consists of several components including MainPanel, UpperPanel, and LowerPanel, as well as the use of the Supabase client for authentication. \n\n## Overview\n\nThe signup system is designed to authenticate users using Supabase, a modern and open-source backend service. The system is built with TypeScript and React, utilizing React's useState and useEffect hooks for state management and side effects respectively.\n\nThe system is divided into three main components:\n\n- `MainPanel`: This is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n- `UpperPanel`: This component contains the form for user signup.\n- `LowerPanel`: This component displays a message or instructions based on the `promptInstruction` state.\n\n## Importing Modules and Dependencies\n\nThe first step is to import the necessary modules and dependencies. We import React, useState, and useEffect from the 'react' library. We also import Auth from '@supabase/ui', the UI library for Supabase, and our initialized Supabase client from './supabaseClient'. Finally, we import our UpperPanel and LowerPanel components.\n\n```typescript\nimport React, { useState, useEffect } from 'react';\nimport { Auth } from '@supabase/ui';\nimport { supabase } from './supabaseClient';\nimport UpperPanel from './UpperPanel';\nimport LowerPanel from './LowerPanel';\n```\n\n## The MainPanel Component\n\nThe `MainPanel` component is the parent component that holds the state for the user, prompt instructions, form data, and loading status. It also contains the useEffect hook to check if a user is already authenticated when the component renders.\n\n```typescript\nconst MainPanel = () => {\n const [user, setUser] = useState(null);\n const [promptInstructionForLowerPanel, setPromptInstructionForLowerPanel] = useState(''); \n const [formData, setFormData] = useState('');\n const [isLoading, setIsLoading] = useState(false); \n\n useEffect(() => {\n const user = supabase.auth.user();\n if (user) {\n setUser(user);\n }\n }, []);\n\n return (\n
\n \n \n
\n );\n};\n```\n\nIn the `MainPanel` component, we define four pieces of state:\n\n- `user`: This is initially set to null and will hold the authenticated user, if one exists.\n- `promptInstructionForLowerPanel`: This holds the instructions or messages to be displayed in the `LowerPanel` component.\n- `formData`: This is initially an empty string and will hold the form data from the signup form.\n- `isLoading`: This is initially set to false and will be used to manage the loading state of the form.\n\nThe useEffect hook checks if a user is already authenticated when the component renders. If a user is found, the `user` state is updated with the returned user.\n\n## The handleFormSubmit Function\n\nNext, we define a function `handleFormSubmit` to handle form submission. This function will be passed as a prop to the `UpperPanel` component.\n\n```typescript\nconst handleFormSubmit = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n const { user, error } = await supabase.auth.signUp(formData);\n if (error) {\n setPromptInstructionForLowerPanel(error.message);\n } else {\n setUser(user);\n }\n setIsLoading(false);\n};\n```\n\nIn the `handleFormSubmit` function, we first prevent the default form submission behavior with `event.preventDefault()`. We then set `isLoading` to true to indicate that the form is being submitted. \n\nWe then call `supabase.auth.signUp` with the `formData` as an argument. This function returns a promise that resolves to an object containing the user and any error that might have occurred during the signup process.\n\nIf an error occurs during the signup process, we update `promptInstructionForLowerPanel` with the error message. If the signup is successful, we update the `user` state with the returned user. Finally, we set `isLoading` to false to indicate that the form submission has completed.\n\n## Next Steps\n\nThe implementation of the `UpperPanel` and `LowerPanel` components will be covered in the following sections. The `UpperPanel` component will contain the form for user signup, while the `LowerPanel` component will display a message or instructions based on the `promptInstructionForLowerPanel` state." - ] - ], - "loop_interval": 1, - "retry_attempts": 3, - "retry_interval": 1, - "interactive": false, - "dashboard": false, - "dynamic_temperature": false -} \ No newline at end of file diff --git a/playground/demos/grupa/app.py b/playground/demos/grupa/app.py index c1760b7b..3ab52e22 100644 --- a/playground/demos/grupa/app.py +++ b/playground/demos/grupa/app.py @@ -14,10 +14,8 @@ load_dotenv() FEATURE = ( "Implement an all-new signup system in typescript using supabase" ) -CODEBASE = """ - - +CODEBASE = """ import React, { useState } from 'react'; import UpperPanel from './UpperPanel'; import LowerPanel from './LowerPanel'; @@ -51,7 +49,7 @@ llm = OpenAIChat( model_name="gpt-4", openai_api_key=api_key, temperature=0.5, - max_tokens=2000, + max_tokens=4000, ) # Product Manager Agent init diff --git a/playground/demos/swarm_of_mma_manufacturing/main.py b/playground/demos/swarm_of_mma_manufacturing/main.py index 802647b5..05b0e8e5 100644 --- a/playground/demos/swarm_of_mma_manufacturing/main.py +++ b/playground/demos/swarm_of_mma_manufacturing/main.py @@ -13,16 +13,19 @@ Efficiency agent: Agent that monitors the efficiency of the factory: input image Agent: health security agent -> quality control agent -> productivity agent -> safety agent -> security agent -> sustainability agent -> efficiency agent """ -from swarms.structs import Agent import os + from dotenv import load_dotenv +from termcolor import colored + from swarms.models import GPT4VisionAPI +from swarms.structs import Agent load_dotenv() api_key = os.getenv("OPENAI_API_KEY") - -llm = GPT4VisionAPI(openai_api_key=api_key) +# GPT4VisionAPI +llm = GPT4VisionAPI(openai_api_key=api_key, max_tokens=2000) assembly_line = ( "playground/demos/swarm_of_mma_manufacturing/assembly_line.jpg" @@ -81,41 +84,73 @@ efficiency_prompt = tasks["efficiency"] health_security_agent = Agent( llm=llm, sop_list=health_safety_prompt, - max_loops=2, + max_loops=1, multi_modal=True, ) # Quality control agent productivity_check_agent = Agent( - llm=llm, sop=productivity_prompt, max_loops=2, multi_modal=True + llm=llm, + sop=productivity_prompt, + max_loops=1, + multi_modal=True, + autosave=True, ) # Security agent security_check_agent = Agent( - llm=llm, sop=security_prompt, max_loops=2, multi_modal=True + llm=llm, + sop=security_prompt, + max_loops=1, + multi_modal=True, + autosave=True, ) # Efficiency agent efficiency_check_agent = Agent( - llm=llm, sop=efficiency_prompt, max_loops=2, multi_modal=True + llm=llm, + sop=efficiency_prompt, + max_loops=1, + multi_modal=True, + autosave=True, ) +print(colored("Running the agents...", "green")) + +print(colored("Running health check agent initializing...", "cyan")) # Add the first task to the health_security_agent health_check = health_security_agent.run( "Analyze the safety of this factory", robots ) + +print( + colored( + "--------------- Productivity agents initializing...", "green" + ) +) # Add the third task to the productivity_check_agent productivity_check = productivity_check_agent.run( health_check, assembly_line ) +print( + colored( + "--------------- Security agents initializing...", "green" + ) +) # Add the fourth task to the security_check_agent -security_check = security_check_agent.add( +security_check = security_check_agent.run( productivity_check, red_robots ) + +print( + colored( + "--------------- Efficiency agents initializing...", "cyan" + ) +) # Add the fifth task to the efficiency_check_agent efficiency_check = efficiency_check_agent.run( security_check, tesla_assembly_line From 61a06d0eddff1e4eca6775df12aaabe800ff23d6 Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 01:41:42 -0800 Subject: [PATCH 20/32] [FEAT][SequentialWorkflow Concurrency] [FEAT][SequentialWorkflow Error handling] --- pyproject.toml | 2 +- swarms/structs/sequential_workflow.py | 157 +++++++++++++++++--------- 2 files changed, 103 insertions(+), 56 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b630536c..f051bdb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "swarms" -version = "2.5.6" +version = "2.5.7" description = "Swarms - Pytorch" license = "MIT" authors = ["Kye Gomez "] diff --git a/swarms/structs/sequential_workflow.py b/swarms/structs/sequential_workflow.py index f48adb6f..01c569f6 100644 --- a/swarms/structs/sequential_workflow.py +++ b/swarms/structs/sequential_workflow.py @@ -1,22 +1,8 @@ -""" -TODO: -- Add a method to update the arguments of a task -- Add a method to get the results of each task -- Add a method to get the results of a specific task -- Add a method to get the results of the workflow -- Add a method to get the results of the workflow as a dataframe - - -- Add a method to run the workflow in parallel with a pool of workers and a queue and a dashboard -- Add a dashboard to visualize the workflow -- Add async support -- Add context manager support -- Add workflow history -""" +import concurrent.futures import json from dataclasses import dataclass, field from typing import Any, Callable, Dict, List, Optional, Union - +import logging from termcolor import colored from swarms.structs.agent import Agent @@ -118,11 +104,11 @@ class SequentialWorkflow: """ + name: str = None + description: str = None tasks: List[Task] = field(default_factory=list) max_loops: int = 1 autosave: bool = False - name: str = (None,) - description: str = (None,) saved_state_filepath: Optional[str] = ( "sequential_workflow_state.json" ) @@ -146,21 +132,28 @@ class SequentialWorkflow: *args: Additional arguments to pass to the task execution. **kwargs: Additional keyword arguments to pass to the task execution. """ - # If the agent is a Agent instance, we include the task in kwargs for Agent.run() - if isinstance(agent, Agent): - kwargs["task"] = ( - task # Set the task as a keyword argument for Agent - ) + try: + # If the agent is a Agent instance, we include the task in kwargs for Agent.run() + if isinstance(agent, Agent): + kwargs["task"] = ( + task # Set the task as a keyword argument for Agent + ) - # Append the task to the tasks list - self.tasks.append( - Task( - description=task, - agent=agent, - args=list(args), - kwargs=kwargs, + # Append the task to the tasks list + self.tasks.append( + Task( + description=task, + agent=agent, + args=list(args), + kwargs=kwargs, + ) + ) + except Exception as error: + print( + colored( + f"Error adding task to workflow: {error}", "red" + ), ) - ) def reset_workflow(self) -> None: """Resets the workflow by clearing the results of each task.""" @@ -205,12 +198,57 @@ class SequentialWorkflow: {'max_tokens': 1000} """ - for task in self.tasks: - if task.description == task: - task.kwargs.update(updates) - break - else: - raise ValueError(f"Task {task} not found in workflow.") + try: + for task in self.tasks: + if task.description == task: + task.kwargs.update(updates) + break + else: + raise ValueError( + f"Task {task} not found in workflow." + ) + except Exception as error: + print( + colored( + f"Error updating task in workflow: {error}", "red" + ), + ) + + def concurrent_run(self): + """ + Concurrently run the workflow using a pool of workers. + + Examples: + >>> from swarms.models import OpenAIChat + >>> from swarms.structs import SequentialWorkflow + >>> llm = OpenAIChat(openai_api_key="") + >>> workflow = SequentialWorkflow(max_loops=1) + + """ + try: + with concurrent.futures.ThreadPoolExecutor() as executor: + futures_to_task = { + executor.submit(task.run): task + for task in self.tasks + } + results = [] + for future in concurrent.futures.as_completed( + futures_to_task + ): + task = futures_to_task[future] + + try: + result = future.result() + except Exception as error: + print(f"Error running workflow: {error}") + else: + results.append(result) + print( + f"Task {task} completed successfully with" + f" result: {result}" + ) + except Exception as error: + print(colored(f"Error running workflow: {error}", "red")) def save_workflow_state( self, @@ -232,26 +270,35 @@ class SequentialWorkflow: >>> workflow.add("Create a report on these metrics", llm) >>> workflow.save_workflow_state("sequential_workflow_state.json") """ - filepath = filepath or self.saved_state_filepath - - with open(filepath, "w") as f: - # Saving the state as a json for simplicuty - state = { - "tasks": [ - { - "description": task.description, - "args": task.args, - "kwargs": task.kwargs, - "result": task.result, - "history": task.history, - } - for task in self.tasks - ], - "max_loops": self.max_loops, - } - json.dump(state, f, indent=4) + try: + filepath = filepath or self.saved_state_filepath + + with open(filepath, "w") as f: + # Saving the state as a json for simplicuty + state = { + "tasks": [ + { + "description": task.description, + "args": task.args, + "kwargs": task.kwargs, + "result": task.result, + "history": task.history, + } + for task in self.tasks + ], + "max_loops": self.max_loops, + } + json.dump(state, f, indent=4) + except Exception as error: + print( + colored( + f"Error saving workflow state: {error}", + "red", + ) + ) def workflow_bootup(self, **kwargs) -> None: + """Boots up the workflow.""" print( colored( """ From d295cc44fd87489d74dfc77127656cf82b0bb667 Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 01:44:44 -0800 Subject: [PATCH 21/32] [FEAT][SequentialWorkflow handling] --- swarms/structs/sequential_workflow.py | 199 ++++++++++++++++---------- 1 file changed, 127 insertions(+), 72 deletions(-) diff --git a/swarms/structs/sequential_workflow.py b/swarms/structs/sequential_workflow.py index 01c569f6..cba591da 100644 --- a/swarms/structs/sequential_workflow.py +++ b/swarms/structs/sequential_workflow.py @@ -157,8 +157,16 @@ class SequentialWorkflow: def reset_workflow(self) -> None: """Resets the workflow by clearing the results of each task.""" - for task in self.tasks: - task.result = None + try: + + for task in self.tasks: + task.result = None + except Exception as error: + print( + colored( + f"Error resetting workflow: {error}", "red" + ), + ) def get_task_results(self) -> Dict[str, Any]: """ @@ -167,13 +175,29 @@ class SequentialWorkflow: Returns: Dict[str, Any]: The results of each task in the workflow """ - return {task.description: task.result for task in self.tasks} + try: + return { + task.description: task.result for task in self.tasks + } + except Exception as error: + print( + colored( + f"Error getting task results: {error}", "red" + ), + ) def remove_task(self, task: str) -> None: """Remove tasks from sequential workflow""" - self.tasks = [ - task for task in self.tasks if task.description != task - ] + try: + self.tasks = [ + task for task in self.tasks if task.description != task + ] + except Exception as error: + print( + colored( + f"Error removing task from workflow: {error}", "red" + ), + ) def update_task(self, task: str, **updates) -> None: """ @@ -359,22 +383,31 @@ class SequentialWorkflow: def add_objective_to_workflow(self, task: str, **kwargs) -> None: """Adds an objective to the workflow.""" - print( - colored( - """ - Adding Objective to Workflow...""", - "green", - attrs=["bold", "underline"], + try: + + print( + colored( + """ + Adding Objective to Workflow...""", + "green", + attrs=["bold", "underline"], + ) ) - ) - task = Task( - description=task, - agent=kwargs["agent"], - args=list(kwargs["args"]), - kwargs=kwargs["kwargs"], - ) - self.tasks.append(task) + task = Task( + description=task, + agent=kwargs["agent"], + args=list(kwargs["args"]), + kwargs=kwargs["kwargs"], + ) + self.tasks.append(task) + except Exception as error: + print( + colored( + f"Error adding objective to workflow: {error}", + "red", + ) + ) def load_workflow_state( self, filepath: str = None, **kwargs @@ -396,22 +429,31 @@ class SequentialWorkflow: >>> workflow.load_workflow_state("sequential_workflow_state.json") """ - filepath = filepath or self.restore_state_filepath - - with open(filepath, "r") as f: - state = json.load(f) - self.max_loops = state["max_loops"] - self.tasks = [] - for task_state in state["tasks"]: - task = Task( - description=task_state["description"], - agent=task_state["agent"], - args=task_state["args"], - kwargs=task_state["kwargs"], - result=task_state["result"], - history=task_state["history"], + try: + + filepath = filepath or self.restore_state_filepath + + with open(filepath, "r") as f: + state = json.load(f) + self.max_loops = state["max_loops"] + self.tasks = [] + for task_state in state["tasks"]: + task = Task( + description=task_state["description"], + agent=task_state["agent"], + args=task_state["args"], + kwargs=task_state["kwargs"], + result=task_state["result"], + history=task_state["history"], + ) + self.tasks.append(task) + except Exception as error: + print( + colored( + f"Error loading workflow state: {error}", + "red", ) - self.tasks.append(task) + ) def run(self) -> None: """ @@ -486,43 +528,56 @@ class SequentialWorkflow: ValueError: If a Agent instance is used as a task and the 'task' argument is not provided. """ - for _ in range(self.max_loops): - for task in self.tasks: - # Check if the current task can be executed - if task.result is None: - # Check if the agent is a Agent and a 'task' argument is needed - if isinstance(task.agent, Agent): - # Ensure that 'task' is provided in the kwargs - if "task" not in task.kwargs: - raise ValueError( - "The 'task' argument is required for" - " the Agent agent execution in" - f" '{task.description}'" + try: + for _ in range(self.max_loops): + for task in self.tasks: + # Check if the current task can be executed + if task.result is None: + # Check if the agent is a Agent and a 'task' argument is needed + if isinstance(task.agent, Agent): + # Ensure that 'task' is provided in the kwargs + if "task" not in task.kwargs: + raise ValueError( + "The 'task' argument is required for" + " the Agent agent execution in" + f" '{task.description}'" + ) + # Separate the 'task' argument from other kwargs + flow_task_arg = task.kwargs.pop("task") + task.result = await task.agent.arun( + flow_task_arg, *task.args, **task.kwargs ) - # Separate the 'task' argument from other kwargs - flow_task_arg = task.kwargs.pop("task") - task.result = await task.agent.arun( - flow_task_arg, *task.args, **task.kwargs - ) - else: - # If it's not a Agent instance, call the agent directly - task.result = await task.agent( - *task.args, **task.kwargs - ) - - # Pass the result as an argument to the next task if it exists - next_task_index = self.tasks.index(task) + 1 - if next_task_index < len(self.tasks): - next_task = self.tasks[next_task_index] - if isinstance(next_task.agent, Agent): - # For Agent flows, 'task' should be a keyword argument - next_task.kwargs["task"] = task.result else: - # For other callable flows, the result is added to args - next_task.args.insert(0, task.result) + # If it's not a Agent instance, call the agent directly + task.result = await task.agent( + *task.args, **task.kwargs + ) - # Autosave the workflow state - if self.autosave: - self.save_workflow_state( - "sequential_workflow_state.json" - ) + # Pass the result as an argument to the next task if it exists + next_task_index = self.tasks.index(task) + 1 + if next_task_index < len(self.tasks): + next_task = self.tasks[next_task_index] + if isinstance(next_task.agent, Agent): + # For Agent flows, 'task' should be a keyword argument + next_task.kwargs["task"] = task.result + else: + # For other callable flows, the result is added to args + next_task.args.insert(0, task.result) + + # Autosave the workflow state + if self.autosave: + self.save_workflow_state( + "sequential_workflow_state.json" + ) + except Exception as e: + print( + colored( + ( + "Error initializing the Sequential workflow:" + f" {e} try optimizing your inputs like the" + " agent class and task description" + ), + "red", + attrs=["bold", "underline"], + ) + ) \ No newline at end of file From 4097a9b703b3e575980ce2b5b38086feb1e2107b Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 03:46:21 -0800 Subject: [PATCH 22/32] [FEAT][Extensive Error handling] --- swarms/structs/agent.py | 350 ++++++++++++++++---------- swarms/structs/sequential_workflow.py | 69 +++-- 2 files changed, 275 insertions(+), 144 deletions(-) diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index 30faef6e..9987d9e3 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -267,9 +267,17 @@ class Agent: def _check_stopping_condition(self, response: str) -> bool: """Check if the stopping condition is met.""" - if self.stopping_condition: - return self.stopping_condition(response) - return False + try: + if self.stopping_condition: + return self.stopping_condition(response) + return False + except Exception as error: + print( + colored( + f"Error checking stopping condition: {error}", + "red", + ) + ) def dynamic_temperature(self): """ @@ -278,12 +286,19 @@ class Agent: 3. If the temperature is present, then dynamically change the temperature 4. for every loop you can randomly change the temperature on a scale from 0.0 to 1.0 """ - if hasattr(self.llm, "temperature"): - # Randomly change the temperature attribute of self.llm object - self.llm.temperature = random.uniform(0.0, 1.0) - else: - # Use a default temperature - self.llm.temperature = 0.7 + try: + if hasattr(self.llm, "temperature"): + # Randomly change the temperature attribute of self.llm object + self.llm.temperature = random.uniform(0.0, 1.0) + else: + # Use a default temperature + self.llm.temperature = 0.7 + except Exception as error: + print( + colored( + f"Error dynamically changing temperature: {error}" + ) + ) def format_prompt(self, template, **kwargs: Any) -> str: """Format the template with the provided kwargs using f-string interpolation.""" @@ -407,11 +422,25 @@ class Agent: def add_task_to_memory(self, task: str): """Add the task to the memory""" - self.short_memory.append([f"{self.user_name}: {task}"]) + try: + self.short_memory.append([f"{self.user_name}: {task}"]) + except Exception as error: + print( + colored( + f"Error adding task to memory: {error}", "red" + ) + ) def add_message_to_memory(self, message: str): """Add the message to the memory""" - self.short_memory[-1].append(message) + try: + self.short_memory[-1].append(message) + except Exception as error: + print( + colored( + f"Error adding message to memory: {error}", "red" + ) + ) def add_message_to_memory_and_truncate(self, message: str): """Add the message to the memory and truncate""" @@ -466,8 +495,15 @@ class Agent: message (Dict[str, Any]): _description_ metadata (Dict[str, Any]): _description_ """ - if self.memory is not None: - self.memory.add(message, metadata) + try: + if self.memory is not None: + self.memory.add(message, metadata) + except Exception as error: + print( + colored( + f"Error adding message to memory: {error}", "red" + ) + ) def query_memorydb( self, @@ -715,88 +751,105 @@ class Agent: 5. Repeat until stopping condition is met or max_loops is reached """ - # Activate Autonomous agent message - self.activate_autonomous_agent() + try: + # Activate Autonomous agent message + self.activate_autonomous_agent() - response = task - history = [f"{self.user_name}: {task}"] + response = task + history = [f"{self.user_name}: {task}"] - # If dashboard = True then print the dashboard - if self.dashboard: - self.print_dashboard(task) + # If dashboard = True then print the dashboard + if self.dashboard: + self.print_dashboard(task) - loop_count = 0 - # for i in range(self.max_loops): - while self.max_loops == "auto" or loop_count < self.max_loops: - loop_count += 1 - print( - colored( - f"\nLoop {loop_count} of {self.max_loops}", "blue" + loop_count = 0 + # for i in range(self.max_loops): + while ( + self.max_loops == "auto" + or loop_count < self.max_loops + ): + loop_count += 1 + print( + colored( + f"\nLoop {loop_count} of {self.max_loops}", + "blue", + ) ) - ) - print("\n") + print("\n") - if self._check_stopping_condition( - response - ) or parse_done_token(response): - break + if self._check_stopping_condition( + response + ) or parse_done_token(response): + break - # Adjust temperature, comment if no work - if self.dynamic_temperature_enabled: - self.dynamic_temperature() + # Adjust temperature, comment if no work + if self.dynamic_temperature_enabled: + self.dynamic_temperature() - # Preparing the prompt - task = self.agent_history_prompt( - FLOW_SYSTEM_PROMPT, response - ) + # Preparing the prompt + task = self.agent_history_prompt( + FLOW_SYSTEM_PROMPT, response + ) - attempt = 0 - while attempt < self.retry_attempts: - try: - response = self.llm( - task**kwargs, + attempt = 0 + while attempt < self.retry_attempts: + try: + response = self.llm( + task**kwargs, + ) + if self.interactive: + print(f"AI: {response}") + history.append(f"AI: {response}") + response = input("You: ") + history.append(f"Human: {response}") + else: + print(f"AI: {response}") + history.append(f"AI: {response}") + print(response) + break + except Exception as e: + logging.error( + f"Error generating response: {e}" + ) + attempt += 1 + time.sleep(self.retry_interval) + history.append(response) + time.sleep(self.loop_interval) + self.memory.append(history) + + if self.autosave: + print( + colored( + ( + "Autosaving agent state to" + f" {self.saved_state_path}" + ), + "green", ) - if self.interactive: - print(f"AI: {response}") - history.append(f"AI: {response}") - response = input("You: ") - history.append(f"Human: {response}") - else: - print(f"AI: {response}") - history.append(f"AI: {response}") - print(response) - break - except Exception as e: - logging.error(f"Error generating response: {e}") - attempt += 1 - time.sleep(self.retry_interval) - history.append(response) - time.sleep(self.loop_interval) - self.memory.append(history) - - if self.autosave: + ) + self.save_state(self.saved_state_path) + + if self.return_history: + return response, history + + return response + except Exception as error: print( colored( - ( - "Autosaving agent state to" - f" {self.saved_state_path}" - ), - "green", + f"Error asynchronous running agent: {error}", + "red", ) ) - self.save_state(self.saved_state_path) - - if self.return_history: - return response, history - - return response def _run(self, **kwargs: Any) -> str: """Generate a result using the provided keyword args.""" - task = self.format_prompt(**kwargs) - response, history = self._generate(task, task) - logging.info(f"Message history: {history}") - return response + try: + task = self.format_prompt(**kwargs) + response, history = self._generate(task, task) + logging.info(f"Message history: {history}") + return response + except Exception as error: + print(colored(f"Error running agent: {error}", "red")) def agent_history_prompt( self, @@ -844,15 +897,29 @@ class Agent: Args: tasks (List[str]): A list of tasks to run. """ - task_coroutines = [ - self.run_async(task, **kwargs) for task in tasks - ] - completed_tasks = await asyncio.gather(*task_coroutines) - return completed_tasks + try: + task_coroutines = [ + self.run_async(task, **kwargs) for task in tasks + ] + completed_tasks = await asyncio.gather(*task_coroutines) + return completed_tasks + except Exception as error: + print( + colored( + ( + f"Error running agent: {error} while running" + " concurrently" + ), + "red", + ) + ) def bulk_run(self, inputs: List[Dict[str, Any]]) -> List[str]: - """Generate responses for multiple input sets.""" - return [self.run(**input_data) for input_data in inputs] + try: + """Generate responses for multiple input sets.""" + return [self.run(**input_data) for input_data in inputs] + except Exception as error: + print(colored(f"Error running bulk run: {error}", "red")) @staticmethod def from_llm_and_template(llm: Any, template: str) -> "Agent": @@ -874,9 +941,14 @@ class Agent: Args: file_path (_type_): _description_ """ - with open(file_path, "w") as f: - json.dump(self.short_memory, f) - print(f"Saved agent history to {file_path}") + try: + with open(file_path, "w") as f: + json.dump(self.short_memory, f) + print(f"Saved agent history to {file_path}") + except Exception as error: + print( + colored(f"Error saving agent history: {error}", "red") + ) def load(self, file_path: str): """ @@ -1127,51 +1199,70 @@ class Agent: Example: >>> agent.save_state('saved_flow.json') """ - state = { - "agent_id": str(self.id), - "agent_name": self.agent_name, - "agent_description": self.agent_description, - "system_prompt": self.system_prompt, - "sop": self.sop, - "short_memory": self.short_memory, - "loop_interval": self.loop_interval, - "retry_attempts": self.retry_attempts, - "retry_interval": self.retry_interval, - "interactive": self.interactive, - "dashboard": self.dashboard, - "dynamic_temperature": self.dynamic_temperature_enabled, - "autosave": self.autosave, - "saved_state_path": self.saved_state_path, - "max_loops": self.max_loops, - } + try: + state = { + "agent_id": str(self.id), + "agent_name": self.agent_name, + "agent_description": self.agent_description, + "system_prompt": self.system_prompt, + "sop": self.sop, + "short_memory": self.short_memory, + "loop_interval": self.loop_interval, + "retry_attempts": self.retry_attempts, + "retry_interval": self.retry_interval, + "interactive": self.interactive, + "dashboard": self.dashboard, + "dynamic_temperature": ( + self.dynamic_temperature_enabled + ), + "autosave": self.autosave, + "saved_state_path": self.saved_state_path, + "max_loops": self.max_loops, + } - with open(file_path, "w") as f: - json.dump(state, f, indent=4) + with open(file_path, "w") as f: + json.dump(state, f, indent=4) - saved = colored(f"Saved agent state to: {file_path}", "green") - print(saved) + saved = colored( + f"Saved agent state to: {file_path}", "green" + ) + print(saved) + except Exception as error: + print( + colored(f"Error saving agent state: {error}", "red") + ) def state_to_str(self): """Transform the JSON into a string""" - state = { - "agent_id": str(self.id), - "agent_name": self.agent_name, - "agent_description": self.agent_description, - "system_prompt": self.system_prompt, - "sop": self.sop, - "short_memory": self.short_memory, - "loop_interval": self.loop_interval, - "retry_attempts": self.retry_attempts, - "retry_interval": self.retry_interval, - "interactive": self.interactive, - "dashboard": self.dashboard, - "dynamic_temperature": self.dynamic_temperature_enabled, - "autosave": self.autosave, - "saved_state_path": self.saved_state_path, - "max_loops": self.max_loops, - } - out = str(state) - return out + try: + state = { + "agent_id": str(self.id), + "agent_name": self.agent_name, + "agent_description": self.agent_description, + "system_prompt": self.system_prompt, + "sop": self.sop, + "short_memory": self.short_memory, + "loop_interval": self.loop_interval, + "retry_attempts": self.retry_attempts, + "retry_interval": self.retry_interval, + "interactive": self.interactive, + "dashboard": self.dashboard, + "dynamic_temperature": ( + self.dynamic_temperature_enabled + ), + "autosave": self.autosave, + "saved_state_path": self.saved_state_path, + "max_loops": self.max_loops, + } + out = str(state) + return out + except Exception as error: + print( + colored( + f"Error transforming state to string: {error}", + "red", + ) + ) def load_state(self, file_path: str): """ @@ -1358,6 +1449,7 @@ class Agent: # Response ‘‘‘ """ + return PROMPT def self_healing(self, **kwargs): """ diff --git a/swarms/structs/sequential_workflow.py b/swarms/structs/sequential_workflow.py index cba591da..93165aee 100644 --- a/swarms/structs/sequential_workflow.py +++ b/swarms/structs/sequential_workflow.py @@ -2,7 +2,7 @@ import concurrent.futures import json from dataclasses import dataclass, field from typing import Any, Callable, Dict, List, Optional, Union -import logging + from termcolor import colored from swarms.structs.agent import Agent @@ -43,6 +43,7 @@ class Task: kwargs: Dict[str, Any] = field(default_factory=dict) result: Any = None history: List[Any] = field(default_factory=list) + # logger = logging.getLogger(__name__) def execute(self): """ @@ -158,14 +159,11 @@ class SequentialWorkflow: def reset_workflow(self) -> None: """Resets the workflow by clearing the results of each task.""" try: - for task in self.tasks: task.result = None except Exception as error: print( - colored( - f"Error resetting workflow: {error}", "red" - ), + colored(f"Error resetting workflow: {error}", "red"), ) def get_task_results(self) -> Dict[str, Any]: @@ -188,14 +186,17 @@ class SequentialWorkflow: def remove_task(self, task: str) -> None: """Remove tasks from sequential workflow""" - try: + try: self.tasks = [ - task for task in self.tasks if task.description != task + task + for task in self.tasks + if task.description != task ] except Exception as error: print( colored( - f"Error removing task from workflow: {error}", "red" + f"Error removing task from workflow: {error}", + "red", ), ) @@ -238,6 +239,44 @@ class SequentialWorkflow: ), ) + def delete_task(self, task: str) -> None: + """ + Delete a task from the workflow. + + Args: + task (str): The description of the task to delete. + + Raises: + ValueError: If the task is not found in the workflow. + + Examples: + >>> from swarms.models import OpenAIChat + >>> from swarms.structs import SequentialWorkflow + >>> llm = OpenAIChat(openai_api_key="") + >>> workflow = SequentialWorkflow(max_loops=1) + >>> workflow.add("What's the weather in miami", llm) + >>> workflow.add("Create a report on these metrics", llm) + >>> workflow.delete_task("What's the weather in miami") + >>> workflow.tasks + [Task(description='Create a report on these metrics', agent=Agent(llm=OpenAIChat(openai_api_key=''), max_loops=1, dashboard=False), args=[], kwargs={}, result=None, history=[])] + """ + try: + for task in self.tasks: + if task.description == task: + self.tasks.remove(task) + break + else: + raise ValueError( + f"Task {task} not found in workflow." + ) + except Exception as error: + print( + colored( + f"Error deleting task from workflow: {error}", + "red", + ), + ) + def concurrent_run(self): """ Concurrently run the workflow using a pool of workers. @@ -384,7 +423,6 @@ class SequentialWorkflow: def add_objective_to_workflow(self, task: str, **kwargs) -> None: """Adds an objective to the workflow.""" try: - print( colored( """ @@ -430,7 +468,6 @@ class SequentialWorkflow: """ try: - filepath = filepath or self.restore_state_filepath with open(filepath, "r") as f: @@ -538,14 +575,16 @@ class SequentialWorkflow: # Ensure that 'task' is provided in the kwargs if "task" not in task.kwargs: raise ValueError( - "The 'task' argument is required for" - " the Agent agent execution in" - f" '{task.description}'" + "The 'task' argument is required" + " for the Agent agent execution" + f" in '{task.description}'" ) # Separate the 'task' argument from other kwargs flow_task_arg = task.kwargs.pop("task") task.result = await task.agent.arun( - flow_task_arg, *task.args, **task.kwargs + flow_task_arg, + *task.args, + **task.kwargs, ) else: # If it's not a Agent instance, call the agent directly @@ -580,4 +619,4 @@ class SequentialWorkflow: "red", attrs=["bold", "underline"], ) - ) \ No newline at end of file + ) From 9ef126e8cf3e0c1c08629e898c611740d91aa9a8 Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 13:59:35 -0800 Subject: [PATCH 23/32] [AGENT CLEANUP] --- playground/structs/flow_tools.py | 67 ------ playground/structs/tool_utils.py | 19 ++ playground/tools/agent_with_tools.py | 40 ++++ swarms/prompts/agent_system_prompts.py | 17 +- swarms/prompts/tools.py | 72 +++++- swarms/structs/agent.py | 300 +++++-------------------- swarms/tools/tool_utils.py | 47 ++++ 7 files changed, 234 insertions(+), 328 deletions(-) delete mode 100644 playground/structs/flow_tools.py create mode 100644 playground/structs/tool_utils.py create mode 100644 playground/tools/agent_with_tools.py create mode 100644 swarms/tools/tool_utils.py diff --git a/playground/structs/flow_tools.py b/playground/structs/flow_tools.py deleted file mode 100644 index 5ec51f59..00000000 --- a/playground/structs/flow_tools.py +++ /dev/null @@ -1,67 +0,0 @@ -from swarms.models import Anthropic -from swarms.structs import Agent -from swarms.tools.tool import tool - -import asyncio - - -llm = Anthropic( - anthropic_api_key="", -) - - -async def async_load_playwright(url: str) -> str: - """Load the specified URLs using Playwright and parse using BeautifulSoup.""" - from bs4 import BeautifulSoup - from playwright.async_api import async_playwright - - results = "" - async with async_playwright() as p: - browser = await p.chromium.launch(headless=True) - try: - page = await browser.new_page() - await page.goto(url) - - page_source = await page.content() - soup = BeautifulSoup(page_source, "html.parser") - - for script in soup(["script", "style"]): - script.extract() - - text = soup.get_text() - lines = (line.strip() for line in text.splitlines()) - chunks = ( - phrase.strip() - for line in lines - for phrase in line.split(" ") - ) - results = "\n".join(chunk for chunk in chunks if chunk) - except Exception as e: - results = f"Error: {e}" - await browser.close() - return results - - -def run_async(coro): - event_loop = asyncio.get_event_loop() - return event_loop.run_until_complete(coro) - - -@tool -def browse_web_page(url: str) -> str: - """Verbose way to scrape a whole webpage. Likely to cause issues parsing.""" - return run_async(async_load_playwright(url)) - - -## Initialize the workflow -agent = Agent( - llm=llm, - max_loops=5, - tools=[browse_web_page], - dashboard=True, -) - -out = agent.run( - "Generate a 10,000 word blog on mental clarity and the benefits" - " of meditation." -) diff --git a/playground/structs/tool_utils.py b/playground/structs/tool_utils.py new file mode 100644 index 00000000..8ded363a --- /dev/null +++ b/playground/structs/tool_utils.py @@ -0,0 +1,19 @@ +from swarms.tools.tool import tool +from swarms.tools.tool_func_doc_scraper import scrape_tool_func_docs + + +@tool +def search_api(query: str) -> str: + """Search API + + Args: + query (str): _description_ + + Returns: + str: _description_ + """ + print(f"Searching API for {query}") + + +tool_docs = scrape_tool_func_docs(search_api) +print(tool_docs) \ No newline at end of file diff --git a/playground/tools/agent_with_tools.py b/playground/tools/agent_with_tools.py new file mode 100644 index 00000000..9436d5a6 --- /dev/null +++ b/playground/tools/agent_with_tools.py @@ -0,0 +1,40 @@ +import os +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.tools.tool import tool +from dotenv import load_dotenv + +load_dotenv() + +api_key = os.environ.get("OPENAI_API_KEY") + + +llm = OpenAIChat( + api_key=api_key +) + +# @tool +# def search_api(query: str) -> str: +# """Search API + +# Args: +# query (str): _description_ + +# Returns: +# str: _description_ +# """ +# print(f"Searching API for {query}") + + +## Initialize the workflow +agent = Agent( + llm=llm, + max_loops=5, + # tools=[search_api], + dashboard=True, +) + +out = agent.run( + "Use the search api to find the best restaurants in New York City." +) +print(out) \ No newline at end of file diff --git a/swarms/prompts/agent_system_prompts.py b/swarms/prompts/agent_system_prompts.py index 9f0b00e8..7ff9faeb 100644 --- a/swarms/prompts/agent_system_prompts.py +++ b/swarms/prompts/agent_system_prompts.py @@ -66,15 +66,10 @@ def agent_system_prompt_2(name: str): """ return AGENT_SYSTEM_PROMPT_2 - -def agent_system_prompt_3(agent_name: str = None, sop: str = None): - AGENT_SYSTEM_PROMPT_3 = f""" - You are {agent_name}, an fully autonomous agent LLM backed agent. - for a specific use case. Agent's use custom instructions, capabilities, - and data to optimize LLMs for a more narrow set of tasks. You yourself are an agent created by a user, - and your name is {agent_name}. +AGENT_SYSTEM_PROMPT_3 = f""" + You are a fully autonomous agent serving the user in automating tasks, workflows, and activities. + Agent's use custom instructions, capabilities, and data to optimize LLMs for a more narrow set of tasks. - Here are instructions from the user outlining your goals and how you should respond: - {sop} - """ - return AGENT_SYSTEM_PROMPT_3 + You will have internal dialogues with yourself and or interact with the user to aid in these tasks. + Your responses should be coherent, contextually relevant, and tailored to the task at hand. +""" diff --git a/swarms/prompts/tools.py b/swarms/prompts/tools.py index db6c5807..a27706e3 100644 --- a/swarms/prompts/tools.py +++ b/swarms/prompts/tools.py @@ -46,7 +46,7 @@ commands: { } "tool2: "tool_name", "params": { - "tool1": "inputs", + "parameter": "inputs", "tool1": "inputs" } "tool3: "tool_name", @@ -58,3 +58,73 @@ commands: { } """ + + +def tools_prompt_prep( + tool_docs: str = None, tool_few_shot_examples: str = None +): + """ + Tools prompt prep + + Args: + docs (str, optional): _description_. Defaults to None. + scenarios (str, optional): _description_. Defaults to None. + + Returns: + _type_: _description_ + """ + PROMPT = f""" + # Task + You will be provided with a list of APIs. These APIs will have a + description and a list of parameters and return types for each tool. Your + task involves creating varied, complex, and detailed user scenarios + that require to call API calls. You must select what api to call based on + the context of the task and the scenario. + + For instance, given the APIs: SearchHotels, BookHotel, CancelBooking, + GetNFLNews. Given that GetNFLNews is explicitly provided, your scenario + should articulate something akin to: + + "The user wants to see if the Broncos won their last game (GetNFLNews). + They then want to see if that qualifies them for the playoffs and who + they will be playing against (GetNFLNews). The Broncos did make it into + the playoffs, so the user wants watch the game in person. They want to + look for hotels where the playoffs are occurring (GetNBANews + + SearchHotels). After looking at the options, the user chooses to book a + 3-day stay at the cheapest 4-star option (BookHotel)." + 13 + + This scenario exemplifies a scenario using 5 API calls. The scenario is + complex, detailed, and concise as desired. The scenario also includes two + APIs used in tandem, the required API, GetNBANews to search for the + playoffs location and SearchHotels to find hotels based on the returned + location. Usage of multiple APIs in tandem is highly desirable and will + receive a higher score. Ideally each scenario should contain one or more + instances of multiple APIs being used in tandem. + + Note that this scenario does not use all the APIs given and re-uses the " + GetNBANews" API. Re-using APIs is allowed, but each scenario should + involve as many different APIs as the user demands. Note that API usage is also included + in the scenario, but exact parameters ar necessary. You must use a + different combination of APIs for each scenario. All APIs must be used in + at least one scenario. You can only use the APIs provided in the APIs + section. + + Note that API calls are not explicitly mentioned and their uses are + included in parentheses. This behaviour should be mimicked in your + response. + + Output the tool usage in a strict json format with the function name and input to + the function. For example, Deliver your response in this format: + + ‘‘‘ + {tool_few_shot_examples} + ‘‘‘ + # APIs + ‘‘‘ + {tool_docs} + ‘‘‘ + # Response + ‘‘‘ + """ + return PROMPT diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index 9987d9e3..d51d6975 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -13,6 +13,7 @@ from termcolor import colored from swarms.memory.base_vector_db import VectorDatabase from swarms.prompts.agent_system_prompts import ( FLOW_SYSTEM_PROMPT, + AGENT_SYSTEM_PROMPT_3, agent_system_prompt_2, ) from swarms.prompts.multi_modal_autonomous_instruction_prompt import ( @@ -22,6 +23,7 @@ from swarms.prompts.tools import ( SCENARIOS, ) from swarms.tools.tool import BaseTool +from swarms.tools.tool_func_doc_scraper import scrape_tool_func_docs from swarms.utils.code_interpreter import SubprocessCodeInterpreter from swarms.utils.parse_code import ( extract_code_in_backticks_in_string, @@ -173,7 +175,7 @@ class Agent: dashboard: bool = False, agent_name: str = "Autonomous-Agent-XYZ1B", agent_description: str = None, - system_prompt: str = FLOW_SYSTEM_PROMPT, + system_prompt: str = AGENT_SYSTEM_PROMPT_3, tools: List[BaseTool] = None, dynamic_temperature_enabled: Optional[bool] = False, sop: Optional[str] = None, @@ -212,7 +214,9 @@ class Agent: self.context_length = context_length self.sop = sop self.sop_list = sop_list + self.sop_list = [] self.tools = tools or [] + self.tool_docs = [] self.system_prompt = system_prompt self.agent_name = agent_name self.agent_description = agent_description @@ -229,6 +233,8 @@ class Agent: self.memory = memory self.preset_stopping_token = preset_stopping_token + # self.system_prompt = AGENT_SYSTEM_PROMPT_3 + # The max_loops will be set dynamically if the dynamic_loop if self.dynamic_loops: self.max_loops = "auto" @@ -260,6 +266,20 @@ class Agent: {"agent_id": self.id}, ) + # If tools exist then add the tool docs usage to the sop + if self.tools: + self.sop_list.append(self.tools_prompt_prep( + self.tool_docs, SCENARIOS + ) + ) + + def set_system_prompt(self, system_prompt: str): + """Set the system prompt""" + self.system_prompt = system_prompt + + + + def provide_feedback(self, feedback: str) -> None: """Allow users to provide feedback on the responses.""" self.feedback.append(feedback) @@ -347,19 +367,6 @@ class Agent: for tool in self.tools: if tool.name == name: return tool - return None - - def construct_dynamic_prompt(self): - """Construct the dynamic prompt""" - tools_description = self.get_tool_description() - - tool_prompt = self.tool_prompt_prep( - tools_description, SCENARIOS - ) - - return tool_prompt - - # return DYNAMICAL_TOOL_USAGE.format(tools=tools_description) def extract_tool_commands(self, text: str): """ @@ -388,14 +395,7 @@ class Agent: except Exception as error: print(f"Error parsing JSON command: {error}") - def parse_and_execute_tools(self, response: str): - """Parse and execute the tools""" - json_commands = self.extract_tool_commands(response) - for command in json_commands: - tool_name = command.get("tool") - params = command.get("parmas", {}) - self.execute_tool(tool_name, params) - + def execute_tools(self, tool_name, params): """Execute the tool with the provided params""" tool = self.tool_find_by_name(tool_name) @@ -403,6 +403,16 @@ class Agent: # Execute the tool with the provided parameters tool_result = tool.run(**params) print(tool_result) + + + def parse_and_execute_tools(self, response: str): + """Parse and execute the tools""" + json_commands = self.extract_tool_commands(response) + for command in json_commands: + tool_name = command.get("tool") + params = command.get("parmas", {}) + self.execute_tools(tool_name, params) + def truncate_history(self): """ @@ -447,6 +457,12 @@ class Agent: self.short_memory[-1].append(message) self.truncate_history() + def parse_tool_docs(self): + """Parse the tool docs""" + for tool in self.tools: + docs = self.tool_docs.append(scrape_tool_func_docs(tool)) + return str(docs) + def print_dashboard(self, task: str): """Print dashboard""" model_config = self.get_llm_init_params() @@ -486,43 +502,6 @@ class Agent: ) ) - def add_message_to_memory_db( - self, message: Dict[str, Any], metadata: Dict[str, Any] - ) -> None: - """Add the message to the memory - - Args: - message (Dict[str, Any]): _description_ - metadata (Dict[str, Any]): _description_ - """ - try: - if self.memory is not None: - self.memory.add(message, metadata) - except Exception as error: - print( - colored( - f"Error adding message to memory: {error}", "red" - ) - ) - - def query_memorydb( - self, - message: Dict[str, Any], - num_results: int = 100, - ) -> Dict[str, Any]: - """Query the memory database - - Args: - message (Dict[str, Any]): _description_ - num_results (int): _description_ - - Returns: - Dict[str, Any]: _description_ - """ - if self.memory is not None: - return self.memory.query(message, num_results) - else: - return {} def activate_autonomous_agent(self): """Print the autonomous agent activation message""" @@ -536,8 +515,6 @@ class Agent: "yellow", ) ) - # print(colored("Loading modules...", "yellow")) - # print(colored("Modules loaded successfully.", "green")) print( colored( "Autonomous Agent Activated.", @@ -662,7 +639,7 @@ class Agent: # Preparing the prompt task = self.agent_history_prompt( - FLOW_SYSTEM_PROMPT, response + AGENT_SYSTEM_PROMPT_3, response ) attempt = 0 @@ -736,111 +713,6 @@ class Agent: print(f"Error running agent: {error}") raise - async def arun(self, task: str, **kwargs): - """ - Run the autonomous agent loop aschnronously - - Args: - task (str): The initial task to run - - Agent: - 1. Generate a response - 2. Check stopping condition - 3. If stopping condition is met, stop - 4. If stopping condition is not met, generate a response - 5. Repeat until stopping condition is met or max_loops is reached - - """ - try: - # Activate Autonomous agent message - self.activate_autonomous_agent() - - response = task - history = [f"{self.user_name}: {task}"] - - # If dashboard = True then print the dashboard - if self.dashboard: - self.print_dashboard(task) - - loop_count = 0 - # for i in range(self.max_loops): - while ( - self.max_loops == "auto" - or loop_count < self.max_loops - ): - loop_count += 1 - print( - colored( - f"\nLoop {loop_count} of {self.max_loops}", - "blue", - ) - ) - print("\n") - - if self._check_stopping_condition( - response - ) or parse_done_token(response): - break - - # Adjust temperature, comment if no work - if self.dynamic_temperature_enabled: - self.dynamic_temperature() - - # Preparing the prompt - task = self.agent_history_prompt( - FLOW_SYSTEM_PROMPT, response - ) - - attempt = 0 - while attempt < self.retry_attempts: - try: - response = self.llm( - task**kwargs, - ) - if self.interactive: - print(f"AI: {response}") - history.append(f"AI: {response}") - response = input("You: ") - history.append(f"Human: {response}") - else: - print(f"AI: {response}") - history.append(f"AI: {response}") - print(response) - break - except Exception as e: - logging.error( - f"Error generating response: {e}" - ) - attempt += 1 - time.sleep(self.retry_interval) - history.append(response) - time.sleep(self.loop_interval) - self.memory.append(history) - - if self.autosave: - print( - colored( - ( - "Autosaving agent state to" - f" {self.saved_state_path}" - ), - "green", - ) - ) - self.save_state(self.saved_state_path) - - if self.return_history: - return response, history - - return response - except Exception as error: - print( - colored( - f"Error asynchronous running agent: {error}", - "red", - ) - ) - def _run(self, **kwargs: Any) -> str: """Generate a result using the provided keyword args.""" try: @@ -853,7 +725,7 @@ class Agent: def agent_history_prompt( self, - system_prompt: str = FLOW_SYSTEM_PROMPT, + system_prompt: str = AGENT_SYSTEM_PROMPT_3, history=None, ): """ @@ -944,7 +816,7 @@ class Agent: try: with open(file_path, "w") as f: json.dump(self.short_memory, f) - print(f"Saved agent history to {file_path}") + # print(f"Saved agent history to {file_path}") except Exception as error: print( colored(f"Error saving agent history: {error}", "red") @@ -1320,8 +1192,6 @@ class Agent: SYSTEM_PROMPT: {self.system_prompt} History: {history} - - Your response: """ response = self.llm(prompt, **kwargs) return {"role": self.agent_name, "content": response} @@ -1385,7 +1255,7 @@ class Agent: return text def tools_prompt_prep( - self, docs: str = None, scenarios: str = None + self, docs: str = None, scenarios: str = SCENARIOS ): """ Tools prompt prep @@ -1401,10 +1271,9 @@ class Agent: # Task You will be provided with a list of APIs. These APIs will have a description and a list of parameters and return types for each tool. Your - task involves creating 3 varied, complex, and detailed user scenarios - that require at least 5 API calls to complete involving at least 3 - different APIs. One of these APIs will be explicitly provided and the - other two will be chosen by you. + task involves creating varied, complex, and detailed user scenarios + that require to call API calls. You must select what api to call based on + the context of the task and the scenario. For instance, given the APIs: SearchHotels, BookHotel, CancelBooking, GetNFLNews. Given that GetNFLNews is explicitly provided, your scenario @@ -1429,8 +1298,8 @@ class Agent: Note that this scenario does not use all the APIs given and re-uses the " GetNBANews" API. Re-using APIs is allowed, but each scenario should - involve at least 3 different APIs. Note that API usage is also included - in the scenario, but exact parameters are not necessary. You must use a + involve as many different APIs as the user demands. Note that API usage is also included + in the scenario, but exact parameters ar necessary. You must use a different combination of APIs for each scenario. All APIs must be used in at least one scenario. You can only use the APIs provided in the APIs section. @@ -1438,7 +1307,10 @@ class Agent: Note that API calls are not explicitly mentioned and their uses are included in parentheses. This behaviour should be mimicked in your response. - Deliver your response in this format: + + Output the tool usage in a strict json format with the function name and input to + the function. For example, Deliver your response in this format: + ‘‘‘ {scenarios} ‘‘‘ @@ -1450,73 +1322,3 @@ class Agent: ‘‘‘ """ return PROMPT - - def self_healing(self, **kwargs): - """ - Self healing by debugging errors and refactoring its own code - - Args: - **kwargs (Any): Any additional keyword arguments - """ - pass - - def refactor_code( - self, file: str, changes: List, confirm: bool = False - ): - """_summary_ - - Args: - file (str): _description_ - changes (List): _description_ - confirm (bool, optional): _description_. Defaults to False. - """ - # with open(file) as f: - # original_file_lines = f.readlines() - - # # Filter out the changes that are not confirmed - # operation_changes = [ - # change for change in changes if "operation" in change - # ] - # explanations = [ - # change["explanation"] for change in changes if "explanation" in change - # ] - - # Sort the changes in reverse line order - # explanations.sort(key=lambda x: x["line", reverse=True]) - pass - - def error_prompt_inject( - self, - file_path: str, - args: List, - error: str, - ): - """ - Error prompt injection - - Args: - file_path (str): _description_ - args (List): _description_ - error (str): _description_ - - """ - # with open(file_path, "r") as f: - # file_lines = f.readlines() - - # file_with_lines = [] - # for i, line in enumerate(file_lines): - # file_with_lines.append(str(i + 1) + "" + line) - # file_with_lines = "".join(file_with_lines) - - # prompt = f""" - # Here is the script that needs fixing:\n\n - # {file_with_lines}\n\n - # Here are the arguments it was provided:\n\n - # {args}\n\n - # Here is the error message:\n\n - # {error}\n - # "Please provide your suggested changes, and remember to stick to the " - # exact format as described above. - # """ - # print(prompt) - pass diff --git a/swarms/tools/tool_utils.py b/swarms/tools/tool_utils.py new file mode 100644 index 00000000..d66ad6f7 --- /dev/null +++ b/swarms/tools/tool_utils.py @@ -0,0 +1,47 @@ +import re +import json + + +def extract_tool_commands(self, text: str): + """ + Extract the tool commands from the text + + Example: + ```json + { + "tool": "tool_name", + "params": { + "tool1": "inputs", + "param2": "value2" + } + } + ``` + + """ + # Regex to find JSON like strings + pattern = r"```json(.+?)```" + matches = re.findall(pattern, text, re.DOTALL) + json_commands = [] + for match in matches: + try: + json_commands = json.loads(match) + json_commands.append(json_commands) + except Exception as error: + print(f"Error parsing JSON command: {error}") + +def parse_and_execute_tools(response: str): + """Parse and execute the tools""" + json_commands = extract_tool_commands(response) + for command in json_commands: + tool_name = command.get("tool") + params = command.get("parmas", {}) + execute_tools(tool_name, params) + +def execute_tools(self, tool_name, params): + """Execute the tool with the provided params""" + tool = self.tool_find_by_name(tool_name) + if tool: + # Execute the tool with the provided parameters + tool_result = tool.run(**params) + print(tool_result) + From 915fd0641bea259e310dc0715a0f6180702108e4 Mon Sep 17 00:00:00 2001 From: Kye Date: Sun, 3 Dec 2023 14:03:47 -0800 Subject: [PATCH 24/32] [CHORE][pydantic] --- pyproject.toml | 2 +- requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f051bdb2..7069a7c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ ratelimit = "*" beautifulsoup4 = "*" cohere = "*" huggingface-hub = "*" -pydantic = "*" +pydantic = "1.10.12" tenacity = "*" Pillow = "*" chromadb = "*" diff --git a/requirements.txt b/requirements.txt index 936157e5..576650cd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,6 +17,7 @@ faiss-cpu openai==0.28.0 attrs datasets +pydantic==1.10.12 soundfile huggingface-hub google-generativeai From 0b6c58df1e52803490d4ecf9bab50669c2bb65d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:45:27 +0000 Subject: [PATCH 25/32] Bump actions/first-interaction from 1.2.0 to 1.3.0 Bumps [actions/first-interaction](https://github.com/actions/first-interaction) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/actions/first-interaction/releases) - [Commits](https://github.com/actions/first-interaction/compare/v1.2.0...v1.3.0) --- updated-dependencies: - dependency-name: actions/first-interaction dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/welcome.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/welcome.yml b/.github/workflows/welcome.yml index 52a4e9d0..3dcd5bb1 100644 --- a/.github/workflows/welcome.yml +++ b/.github/workflows/welcome.yml @@ -12,7 +12,7 @@ jobs: permissions: write-all runs-on: ubuntu-latest steps: - - uses: actions/first-interaction@v1.2.0 + - uses: actions/first-interaction@v1.3.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} issue-message: "Hello there, thank you for opening an Issue ! 🙏🏻 The team was notified and they will get back to you asap." From 199248a206de9f4e7f90efd00067b21bedcb513d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:45:31 +0000 Subject: [PATCH 26/32] Bump pypa/gh-action-pypi-publish from 1.8.10 to 1.8.11 Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.10 to 1.8.11. - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/b7f401de30cb6434a1e19f805ff006643653240e...2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf) --- updated-dependencies: - dependency-name: pypa/gh-action-pypi-publish dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/python-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 9fc16341..81df64a3 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -26,7 +26,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@b7f401de30cb6434a1e19f805ff006643653240e + uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From af0e3e34f628dd8e7e518ec5b14af20371d91884 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:45:36 +0000 Subject: [PATCH 27/32] Bump docker/metadata-action from 5.0.0 to 5.3.0 Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.0.0 to 5.3.0. - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](https://github.com/docker/metadata-action/compare/96383f45573cb7f253c731d3b3ab81c87ef81934...31cebacef4805868f9ce9a0cb03ee36c32df2ac4) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index beea13b0..17c14973 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -65,7 +65,7 @@ jobs: # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta - uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 + uses: docker/metadata-action@31cebacef4805868f9ce9a0cb03ee36c32df2ac4 # v5.3.0 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} From 145f274a1806c05cab431fe3a2f2e021ab5197be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:54:54 +0000 Subject: [PATCH 28/32] Update ruff requirement from ^0.0.249 to >=0.0.249,<0.1.7 Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.0.249...v0.1.6) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7069a7c9..5db7d35d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,7 @@ torchvision = "*" rich = "*" [tool.poetry.group.lint.dependencies] -ruff = "^0.0.249" +ruff = ">=0.0.249,<0.1.7" types-toml = "^0.10.8.1" types-redis = "^4.3.21.6" types-pytz = "^2023.3.0.0" From 10ec261730d3b16782f4f3778432e89d34a24eb3 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:18:34 -0800 Subject: [PATCH 29/32] Create urban_planning.py --- .../demos/urban_planning/urban_planning.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 playground/demos/urban_planning/urban_planning.py diff --git a/playground/demos/urban_planning/urban_planning.py b/playground/demos/urban_planning/urban_planning.py new file mode 100644 index 00000000..3dd06114 --- /dev/null +++ b/playground/demos/urban_planning/urban_planning.py @@ -0,0 +1,47 @@ +import os +from dotenv import load_dotenv +from swarms.models import OpenAIChat, GPT4VisionAPI +from swarms.structs import Agent, SequentialWorkflow +import swarms.prompts.urban_planning as upp + +# Load environment variables +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") +stability_api_key = os.getenv("STABILITY_API_KEY") + +# Initialize language model +llm = OpenAIChat(openai_api_key=api_key, temperature=0.5, max_tokens=3000) + +# Initialize Vision model +vision_api = GPT4VisionAPI(api_key=api_key) + +# Initialize agents for urban planning tasks +architecture_analysis_agent = Agent(llm=llm, max_loops=1, sop=upp.ARCHITECTURE_ANALYSIS_PROMPT) +infrastructure_evaluation_agent = Agent(llm=llm, max_loops=1, sop=upp.INFRASTRUCTURE_EVALUATION_PROMPT) +traffic_flow_analysis_agent = Agent(llm=llm, max_loops=1, sop=upp.TRAFFIC_FLOW_ANALYSIS_PROMPT) +environmental_impact_assessment_agent = Agent(llm=llm, max_loops=1, sop=upp.ENVIRONMENTAL_IMPACT_ASSESSMENT_PROMPT) +public_space_utilization_agent = Agent(llm=llm, max_loops=1, sop=upp.PUBLIC_SPACE_UTILIZATION_PROMPT) +socioeconomic_impact_analysis_agent = Agent(llm=llm, max_loops=1, sop=upp.SOCIOECONOMIC_IMPACT_ANALYSIS_PROMPT) + +# Initialize the final planning agent +final_plan_agent = Agent(llm=llm, max_loops=1, sop=upp.FINAL_URBAN_IMPROVEMENT_PLAN_PROMPT) + +# Create Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to workflow with personalized prompts +workflow.add(architecture_analysis_agent, "Architecture Analysis") +workflow.add(infrastructure_evaluation_agent, "Infrastructure Evaluation") +workflow.add(traffic_flow_analysis_agent, "Traffic Flow Analysis") +workflow.add(environmental_impact_assessment_agent, "Environmental Impact Assessment") +workflow.add(public_space_utilization_agent, "Public Space Utilization") +workflow.add(socioeconomic_impact_analysis_agent, "Socioeconomic Impact Analysis") +workflow.add(final_plan_agent, "Generate the final urban improvement plan based on all previous agent's findings") +# Run the workflow for individual analysis tasks + +# Execute the workflow for the final planning +workflow.run() + +# Output results for each task and the final plan +for task in workflow.tasks: + print(f"Task Description: {task.description}\nResult: {task.result}\n") From eb6ce123b8001c7c6e9f66ecc820f7bd047deda6 Mon Sep 17 00:00:00 2001 From: pliny <133052465+elder-plinius@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:19:01 +0200 Subject: [PATCH 30/32] Add files via upload --- playground/demos/urban_planning/urban_area.jpg | Bin 0 -> 462247 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 playground/demos/urban_planning/urban_area.jpg diff --git a/playground/demos/urban_planning/urban_area.jpg b/playground/demos/urban_planning/urban_area.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7eca028cc35c1653caaced34308b5a45256864b6 GIT binary patch literal 462247 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%0AQnMWl}#mwZN*V?$~=3XV7>l)O`U?5Aw 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�v?X?-@ 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�tkc|XO8{;IO}h&~ek}Rh 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 wn-i$&)z) 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�DZ^+o~3eYd7s3| zdAIh@kAt{tMiZKyzvX&uzw;Z@{7GqyKEH%4@EE~3?Wx1_i9ut@-9*rH`q_sC z4BUuBBajB1c2(IA(h1xzCM3{(TkaTygRGs~xp}{FT1x{43Cg^emltiqaomtT-7D`; zy?vO|6*BSzWX#))>X}T|P^lvJq5+ROr!}X>RCBU6;Hd}9*MfcP+_*JM=$M{;V3kSb}jjOepcV3K zSt6wsmV5#}$xh2X9#lo2ZMZlMO@kau(Y~*;SvwBIzaT`3Gy&XE_B?kSh~0?_Ngj9H z^`d&88rL}Z-Rz0REJUkS7wm4T#!L+$)W@b$_uT~r5%zWGz)8~JF^o>bZMNxXOAe)k zy~E5-r22WIiq}8--Qvps0KFR?;~)tZ=Iyka(i_!hQmnIjIkdp33XG*xD-N-Y&vxUF zkRrH6TfFh)i)qu5AwH1Dbq=gmfg~R!fxg4g{)+XEpO1$*QdPciMekme=7%VQ-6`BG z?TfhrIIKd=0)P|&)eF?Gk8Q)qN!X33wXE6rkP$5KX|YkoM$AYnxFCXhPuHf>TQlE2 zSs<%kiC_$KL$whz=s-M7WQnGmW5QIv4Dsq~T094Bu9%#tld4V@$SsiHQoL#+plp1W z0Cu12?~^Q|(@bfb#9kDQ@Ol z$~*FQ1$nb@al5MpWFx>lhZ8gDJtvmPX_<-M?z&}6_t4jt$AUc9h?rg7yNHA`mMS>` zQgR>tyZHRBg(lUg*xar3u2}(#i~Q%;h?@;H=To3 zWVt<>%(7Nu=tI*HsSuG+d z$bzc=2nyrTl1x^nHeNJwX_D(FpMF(I!IYGR9Mg-jQV<$1@pYeikJ62Y ziJaK5le;c84prYIXLhA-Oqj^&AoqzvG8E01gK;`!*-ICb{S}E-o2fvcDCN4|-Fl|D**S36H1;F+FDv3C}ZAVV*L zwJ7h|+1T^?c{M(+ig3Grqbc`Jvzj9#aP0Q}wrHqcqxRDJjj**{KPcc|8b}rn`5nik zO1>Az;XJBeE~?^O>iFmO8@vURs<^Z_5TX$ac;Uw64N$T(KPPJmBRO z>R_TX0o9mn0y_7*kELrg&Z3OnA0VncGSpW1J2x4B!wT>5%Fc0c+?p88T0a(M@idsU6Ev|c%0D$*vET!??T`KC7|Nh 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∓5QcN!A{Q6Z7 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 Date: Mon, 4 Dec 2023 10:19:44 -0800 Subject: [PATCH 31/32] Create urban_planning.py --- swarms/prompts/urban_planning.py | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 swarms/prompts/urban_planning.py diff --git a/swarms/prompts/urban_planning.py b/swarms/prompts/urban_planning.py new file mode 100644 index 00000000..bc42f04a --- /dev/null +++ b/swarms/prompts/urban_planning.py @@ -0,0 +1,40 @@ +# urban_planning_prompts.py + +# Architecture Analysis Prompt +ARCHITECTURE_ANALYSIS_PROMPT = """ +Analyze the architectural styles, building designs, and construction materials visible in the urban area image provided. Provide insights on the historical influences, modern trends, and architectural diversity observed. +""" + +# Infrastructure Evaluation Prompt +INFRASTRUCTURE_EVALUATION_PROMPT = """ +Evaluate the infrastructure in the urban area image, focusing on roads, bridges, public transport, utilities, and communication networks. Assess their condition, capacity, and how they meet the needs of the urban population. +""" + +# Traffic Flow Analysis Prompt +TRAFFIC_FLOW_ANALYSIS_PROMPT = """ +Analyze the traffic flow and transportation systems visible in the urban area image. Identify key traffic routes, congestion points, and the effectiveness of public transportation in addressing urban mobility. +""" + +# Environmental Impact Assessment Prompt +ENVIRONMENTAL_IMPACT_ASSESSMENT_PROMPT = """ +Assess the environmental impact of the urban area shown in the image. Look for green spaces, pollution sources, and sustainability practices. Provide insights into the balance between urban development and environmental conservation. +""" + +# Public Space Utilization Prompt +PUBLIC_SPACE_UTILIZATION_PROMPT = """ +Evaluate the public spaces in the urban area, such as parks, squares, and recreational areas, as shown in the image. Assess their accessibility, condition, and how they contribute to the community's quality of life. +""" + +# Socioeconomic Impact Analysis Prompt +SOCIOECONOMIC_IMPACT_ANALYSIS_PROMPT = """ +Analyze the socioeconomic impact of the urban environment as depicted in the image. Consider factors such as housing, employment opportunities, commercial activities, and social disparities. +""" + +# Final Urban Improvement Plan Prompt +FINAL_URBAN_IMPROVEMENT_PLAN_PROMPT = """ +Based on the architecture analysis, infrastructure evaluation, traffic flow analysis, environmental impact assessment, public space utilization, and socioeconomic impact analysis provided by the previous agents, develop a comprehensive urban improvement plan. The plan should address key issues identified, propose practical solutions, and outline strategies to enhance the overall quality of life, sustainability, and efficiency of the urban area. +""" + + + +# Additional or custom prompts can be added below as needed. From 4eb60fea4da25bd34e5267f3485776c674e932d5 Mon Sep 17 00:00:00 2001 From: Kye Date: Mon, 4 Dec 2023 12:10:38 -0800 Subject: [PATCH 32/32] [DEMO][MultiModal ToT] --- .gitignore | 1 + playground/demos/idea_2_img/idea2img.py | 96 ---------- playground/demos/idea_2_img/main.py | 7 - playground/demos/multimodal_tot/idea2img.py | 185 ++++++++++++++++++++ playground/demos/multimodal_tot/main.py | 114 ++++++++++++ playground/structs/tool_utils.py | 6 +- playground/tools/agent_with_tools.py | 9 +- swarms/models/stable_diffusion.py | 4 +- swarms/prompts/agent_system_prompts.py | 1 + swarms/structs/agent.py | 18 +- swarms/tools/tool_utils.py | 3 +- 11 files changed, 318 insertions(+), 126 deletions(-) delete mode 100644 playground/demos/idea_2_img/idea2img.py delete mode 100644 playground/demos/idea_2_img/main.py create mode 100644 playground/demos/multimodal_tot/idea2img.py create mode 100644 playground/demos/multimodal_tot/main.py diff --git a/.gitignore b/.gitignore index 716dc148..6fc93744 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ video/ dataframe/ static/generated +runs swarms/__pycache__ venv .DS_Store diff --git a/playground/demos/idea_2_img/idea2img.py b/playground/demos/idea_2_img/idea2img.py deleted file mode 100644 index c6be45f0..00000000 --- a/playground/demos/idea_2_img/idea2img.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import datetime -from dotenv import load_dotenv -from swarms.models.stable_diffusion import StableDiffusion -from swarms.models.gpt4_vision_api import GPT4VisionAPI -from swarms.models import OpenAIChat -from swarms.structs import Agent - -# Load environment variables -load_dotenv() -openai_api_key = os.getenv("OPENAI_API_KEY") -stability_api_key = os.getenv("STABILITY_API_KEY") - -# Initialize the models -vision_api = GPT4VisionAPI(api_key=openai_api_key) -sd_api = StableDiffusion(api_key=stability_api_key) -gpt_api = OpenAIChat(openai_api_key=openai_api_key) - - -class Idea2Image(Agent): - def __init__(self, llm, vision_api): - super().__init__(llm=llm) - self.vision_api = vision_api - - def run(self, initial_prompt, num_iterations, run_folder): - current_prompt = initial_prompt - - for i in range(num_iterations): - print(f"Iteration {i}: Image generation and analysis") - - if i == 0: - current_prompt = self.enrich_prompt(current_prompt) - print(f"Enriched Prompt: {current_prompt}") - - img = sd_api.generate_and_move_image( - current_prompt, i, run_folder - ) - if not img: - print("Failed to generate image") - break - print(f"Generated image at: {img}") - - analysis = ( - self.vision_api.run(img, current_prompt) - if img - else None - ) - if analysis: - current_prompt += ( - ". " + analysis[:500] - ) # Ensure the analysis is concise - print(f"Image Analysis: {analysis}") - else: - print(f"Failed to analyze image at: {img}") - - def enrich_prompt(self, prompt): - enrichment_task = ( - "Create a concise and effective image generation prompt" - " within 400 characters or less, based on Stable" - " Diffusion and Dalle best practices. Starting prompt:" - f" \n\n'{prompt}'\n\nImprove the prompt with any" - " applicable details or keywords by considering the" - " following aspects: \n1. Subject details (like actions," - " emotions, environment) \n2. Artistic style (such as" - " surrealism, hyperrealism) \n3. Medium (digital" - " painting, oil on canvas) \n4. Color themes and" - " lighting (like warm colors, cinematic lighting) \n5." - " Composition and framing (close-up, wide-angle) \n6." - " Additional elements (like a specific type of" - " background, weather conditions) \n7. Any other" - " artistic or thematic details that can make the image" - " more vivid and compelling." - ) - llm_result = self.llm.generate([enrichment_task]) - return ( - llm_result.generations[0][0].text[:500] - if llm_result.generations - else None - ) - - -# User input and setup -user_prompt = input("Prompt for image generation: ") -num_iterations = int( - input("Enter the number of iterations for image improvement: ") -) -run_folder = os.path.join( - "runs", datetime.datetime.now().strftime("%Y%m%d_%H%M%S") -) -os.makedirs(run_folder, exist_ok=True) - -# Initialize and run the agent -idea2image_agent = Idea2Image(gpt_api, vision_api) -idea2image_agent.run(user_prompt, num_iterations, run_folder) - -print("Image improvement process completed.") diff --git a/playground/demos/idea_2_img/main.py b/playground/demos/idea_2_img/main.py deleted file mode 100644 index 84ce67ab..00000000 --- a/playground/demos/idea_2_img/main.py +++ /dev/null @@ -1,7 +0,0 @@ -""" -Idea 2 img - -task -> gpt4 text -> dalle3 img -> gpt4vision img + text analyze img -> dalle3 img -> loop - -""" -from swarms.models.gpt4_vision_api import GPT4VisionAPI diff --git a/playground/demos/multimodal_tot/idea2img.py b/playground/demos/multimodal_tot/idea2img.py new file mode 100644 index 00000000..4a6c1da3 --- /dev/null +++ b/playground/demos/multimodal_tot/idea2img.py @@ -0,0 +1,185 @@ +import datetime +import os + +import streamlit as st +from dotenv import load_dotenv + +from swarms.models import OpenAIChat +from swarms.models.gpt4_vision_api import GPT4VisionAPI +from swarms.models.stable_diffusion import StableDiffusion +from swarms.structs import Agent + +# Load environment variables +load_dotenv() +openai_api_key = os.getenv("OPENAI_API_KEY") +stability_api_key = os.getenv("STABLE_API_KEY") + +# Initialize the models +vision_api = GPT4VisionAPI(api_key=openai_api_key) +sd_api = StableDiffusion(api_key=stability_api_key) +gpt_api = OpenAIChat(openai_api_key=openai_api_key) + + +class Idea2Image(Agent): + def __init__(self, llm, vision_api): + super().__init__(llm=llm) + self.vision_api = vision_api + + def run(self, initial_prompt, num_iterations, run_folder): + current_prompt = initial_prompt + + for i in range(num_iterations): + print(f"Iteration {i}: Image generation and analysis") + + if i == 0: + current_prompt = self.enrich_prompt(current_prompt) + print(f"Enriched Prompt: {current_prompt}") + + img = sd_api.generate_and_move_image( + current_prompt, i, run_folder + ) + if not img: + print("Failed to generate image") + break + print(f"Generated image at: {img}") + + analysis = ( + self.vision_api.run(img, current_prompt) + if img + else None + ) + if analysis: + current_prompt += ( + ". " + analysis[:500] + ) # Ensure the analysis is concise + print(f"Image Analysis: {analysis}") + else: + print(f"Failed to analyze image at: {img}") + + def enrich_prompt(self, prompt): + enrichment_task = ( + "Create a concise and effective image generation prompt" + " within 400 characters or less, based on Stable" + " Diffusion and Dalle best practices to help it create" + " much better images. Starting prompt:" + f" \n\n'{prompt}'\n\nImprove the prompt with any" + " applicable details or keywords by considering the" + " following aspects: \n1. Subject details (like actions," + " emotions, environment) \n2. Artistic style (such as" + " surrealism, hyperrealism) \n3. Medium (digital" + " painting, oil on canvas) \n4. Color themes and" + " lighting (like warm colors, cinematic lighting) \n5." + " Composition and framing (close-up, wide-angle) \n6." + " Additional elements (like a specific type of" + " background, weather conditions) \n7. Any other" + " artistic or thematic details that can make the image" + " more vivid and compelling. Help the image generator" + " create better images by enriching the prompt." + ) + llm_result = self.llm.generate([enrichment_task]) + return ( + llm_result.generations[0][0].text[:500] + if llm_result.generations + else None + ) + + def run_gradio(self, initial_prompt, num_iterations, run_folder): + results = [] + current_prompt = initial_prompt + + for i in range(num_iterations): + enriched_prompt = ( + self.enrich_prompt(current_prompt) + if i == 0 + else current_prompt + ) + img_path = sd_api.generate_and_move_image( + enriched_prompt, i, run_folder + ) + analysis = ( + self.vision_api.run(img_path, enriched_prompt) + if img_path + else None + ) + + if analysis: + current_prompt += ( + ". " + analysis[:500] + ) # Ensuring the analysis is concise + results.append((enriched_prompt, img_path, analysis)) + + return results + + +# print( +# colored("---------------------------------------- MultiModal Tree of Thought agents for Image Generation", "cyan", attrs=["bold"]) +# ) +# # User input and setup +# user_prompt = input("Prompt for image generation: ") +# num_iterations = int( +# input("Enter the number of iterations for image improvement: ") +# ) +# run_folder = os.path.join( +# "runs", datetime.datetime.now().strftime("%Y%m%d_%H%M%S") +# ) +# os.makedirs(run_folder, exist_ok=True) + +# print( +# colored( +# f"---------------------------------- Running Multi-Modal Tree of thoughts agent with {num_iterations} iterations", "green" +# ) +# ) +# # Initialize and run the agent +# idea2image_agent = Idea2Image(gpt_api, vision_api) +# idea2image_agent.run(user_prompt, num_iterations, run_folder) + +# print("Idea space has been traversed.") + + +# Load environment variables and initialize the models +load_dotenv() +openai_api_key = os.getenv("OPENAI_API_KEY") +stability_api_key = os.getenv("STABLE_API_KEY") +vision_api = GPT4VisionAPI(api_key=openai_api_key) +sd_api = StableDiffusion(api_key=stability_api_key) +gpt_api = OpenAIChat(openai_api_key=openai_api_key) + +# Define the modified Idea2Image class here + +# Streamlit UI layout +st.title( + "Explore the infinite Multi-Modal Idea Space with Idea2Image" +) +user_prompt = st.text_input("Prompt for image generation:") +num_iterations = st.number_input( + "Enter the number of iterations for image improvement:", + min_value=1, + step=1, +) + +if st.button("Generate Image"): + run_folder = os.path.join( + "runs", datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + ) + os.makedirs(run_folder, exist_ok=True) + idea2image_agent = Idea2Image(gpt_api, vision_api) + + results = idea2image_agent.run_gradio( + user_prompt, num_iterations, run_folder + ) + + for i, (enriched_prompt, img_path, analysis) in enumerate( + results + ): + st.write(f"Iteration {i+1}:") + st.write("Enriched Prompt:", enriched_prompt) + if img_path: + st.image(img_path, caption="Generated Image") + else: + st.error("Failed to generate image") + if analysis: + st.write("Image Analysis:", analysis) + + st.success("Idea space has been traversed.") + +# [Add any additional necessary code adjustments] diff --git a/playground/demos/multimodal_tot/main.py b/playground/demos/multimodal_tot/main.py new file mode 100644 index 00000000..2d5ed653 --- /dev/null +++ b/playground/demos/multimodal_tot/main.py @@ -0,0 +1,114 @@ +""" +Multi Modal tree of thoughts that leverages the GPT-4 language model and the +Stable Diffusion model to generate a multimodal output and evaluate the +output based a metric from 0.0 to 1.0 and then run a search algorithm using DFS and BFS and return the best output. + + +task: Generate an image of a swarm of bees -> Image generator -> GPT4V evaluates the img from 0.0 to 1.0 -> DFS/BFS -> return the best output + + +- GPT4Vision will evaluate the image from 0.0 to 1.0 based on how likely it accomplishes the task +- DFS/BFS will search for the best output based on the evaluation from GPT4Vision +- The output will be a multimodal output that is a combination of the image and the text +- The output will be evaluated by GPT4Vision +- The prompt to the image generator will be optimized from the output of GPT4Vision and the search + +""" + +import os +from dotenv import load_dotenv +from swarms.models.gpt4_vision_api import GPT4VisionAPI +from swarms.models.stable_diffusion import StableDiffusion +from termcolor import colored + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") +stable_api_key = os.environ.get("STABLE_API_KEY") + + +# Initialize the language model +llm = GPT4VisionAPI( + openai_api_key=api_key, + max_tokens=500, +) + +# IMG Generator +img_generator = StableDiffusion(api_key=stable_api_key) + + +# Initialize the language model +task = "Garden of Eden futuristic city graphic art" + + +def evaluate_img(llm, task: str, img: str): + EVAL_IMG = f""" + Evaluate the image: {img} on a scale from 0.0 to 1.0 based on how likely it accomplishes the task: {task}. Output nothing than the float representing the evaluated img. + """ + out = llm.run(task=EVAL_IMG, img=img) + out = float(out) + return out + + +def enrichment_prompt(starting_prompt: str, evaluated_img: str): + enrichment_task = ( + "Create a concise and effective image generation prompt" + " within 400 characters or less, based on Stable Diffusion" + " and Dalle best practices. Starting prompt:" + f" \n\n'{starting_prompt}'\n\nImprove the prompt with any" + " applicable details or keywords by considering the" + " following aspects: \n1. Subject details (like actions," + " emotions, environment) \n2. Artistic style (such as" + " surrealism, hyperrealism) \n3. Medium (digital painting," + " oil on canvas) \n4. Color themes and lighting (like warm" + " colors, cinematic lighting) \n5. Composition and framing" + " (close-up, wide-angle) \n6. Additional elements (like a" + " specific type of background, weather conditions) \n7. Any" + " other artistic or thematic details that can make the image" + " more vivid and compelling. 8. Based on the evaluation of" + " the first generated prompt used by the first prompt:" + f" {evaluated_img} Enrich the prompt to generate a more" + " compelling image. Output only a new prompt to create a" + " better image" + ) + return enrichment_task + + +# Main loop +max_iterations = 10 # Define the maximum number of iterations +best_score = 0 +best_image = None + +for _ in range(max_iterations): + # Generate an image and get its path + print(colored(f"Generating img for Task: {task}", "purple")) + + img_path = img_generator.run( + task=task + ) # This should return the file path of the generated image + img_path = img_path[0] + print(colored(f"Generated Image Path: {img_path}", "green")) + + # Evaluate the image by passing the file path + score = evaluate_img(llm, task, img_path) + print( + colored( + f"Evaluated Image Score: {score} for {img_path}", "cyan" + ) + ) + + # Update the best score and image path if necessary + if score > best_score: + best_score = score + best_image_path = img_path + + # Enrich the prompt based on the evaluation + prompt = enrichment_prompt(task, score) + print(colored(f"Enrichment Prompt: {prompt}", "yellow")) + + +# Output the best result +print("Best Image Path:", best_image_path) +print("Best Score:", best_score) diff --git a/playground/structs/tool_utils.py b/playground/structs/tool_utils.py index 8ded363a..ff7e17c2 100644 --- a/playground/structs/tool_utils.py +++ b/playground/structs/tool_utils.py @@ -13,7 +13,7 @@ def search_api(query: str) -> str: str: _description_ """ print(f"Searching API for {query}") - - + + tool_docs = scrape_tool_func_docs(search_api) -print(tool_docs) \ No newline at end of file +print(tool_docs) diff --git a/playground/tools/agent_with_tools.py b/playground/tools/agent_with_tools.py index 9436d5a6..ee4a8ef7 100644 --- a/playground/tools/agent_with_tools.py +++ b/playground/tools/agent_with_tools.py @@ -9,9 +9,7 @@ load_dotenv() api_key = os.environ.get("OPENAI_API_KEY") -llm = OpenAIChat( - api_key=api_key -) +llm = OpenAIChat(api_key=api_key) # @tool # def search_api(query: str) -> str: @@ -35,6 +33,7 @@ agent = Agent( ) out = agent.run( - "Use the search api to find the best restaurants in New York City." + "Use the search api to find the best restaurants in New York" + " City." ) -print(out) \ No newline at end of file +print(out) diff --git a/swarms/models/stable_diffusion.py b/swarms/models/stable_diffusion.py index 6256987e..7b363d02 100644 --- a/swarms/models/stable_diffusion.py +++ b/swarms/models/stable_diffusion.py @@ -8,6 +8,8 @@ from typing import List load_dotenv() +stable_api_key = os.environ.get("STABLE_API_KEY") + class StableDiffusion: """ @@ -45,7 +47,7 @@ class StableDiffusion: def __init__( self, - api_key: str, + api_key: str = stable_api_key, api_host: str = "https://api.stability.ai", cfg_scale: int = 7, height: int = 1024, diff --git a/swarms/prompts/agent_system_prompts.py b/swarms/prompts/agent_system_prompts.py index 7ff9faeb..3cf8447b 100644 --- a/swarms/prompts/agent_system_prompts.py +++ b/swarms/prompts/agent_system_prompts.py @@ -66,6 +66,7 @@ def agent_system_prompt_2(name: str): """ return AGENT_SYSTEM_PROMPT_2 + AGENT_SYSTEM_PROMPT_3 = f""" You are a fully autonomous agent serving the user in automating tasks, workflows, and activities. Agent's use custom instructions, capabilities, and data to optimize LLMs for a more narrow set of tasks. diff --git a/swarms/structs/agent.py b/swarms/structs/agent.py index d51d6975..9d490877 100644 --- a/swarms/structs/agent.py +++ b/swarms/structs/agent.py @@ -234,7 +234,7 @@ class Agent: self.preset_stopping_token = preset_stopping_token # self.system_prompt = AGENT_SYSTEM_PROMPT_3 - + # The max_loops will be set dynamically if the dynamic_loop if self.dynamic_loops: self.max_loops = "auto" @@ -268,17 +268,13 @@ class Agent: # If tools exist then add the tool docs usage to the sop if self.tools: - self.sop_list.append(self.tools_prompt_prep( - self.tool_docs, SCENARIOS + self.sop_list.append( + self.tools_prompt_prep(self.tool_docs, SCENARIOS) ) - ) - + def set_system_prompt(self, system_prompt: str): """Set the system prompt""" self.system_prompt = system_prompt - - - def provide_feedback(self, feedback: str) -> None: """Allow users to provide feedback on the responses.""" @@ -395,7 +391,6 @@ class Agent: except Exception as error: print(f"Error parsing JSON command: {error}") - def execute_tools(self, tool_name, params): """Execute the tool with the provided params""" tool = self.tool_find_by_name(tool_name) @@ -403,8 +398,7 @@ class Agent: # Execute the tool with the provided parameters tool_result = tool.run(**params) print(tool_result) - - + def parse_and_execute_tools(self, response: str): """Parse and execute the tools""" json_commands = self.extract_tool_commands(response) @@ -413,7 +407,6 @@ class Agent: params = command.get("parmas", {}) self.execute_tools(tool_name, params) - def truncate_history(self): """ Take the history and truncate it to fit into the model context length @@ -502,7 +495,6 @@ class Agent: ) ) - def activate_autonomous_agent(self): """Print the autonomous agent activation message""" try: diff --git a/swarms/tools/tool_utils.py b/swarms/tools/tool_utils.py index d66ad6f7..c189c9f5 100644 --- a/swarms/tools/tool_utils.py +++ b/swarms/tools/tool_utils.py @@ -29,6 +29,7 @@ def extract_tool_commands(self, text: str): except Exception as error: print(f"Error parsing JSON command: {error}") + def parse_and_execute_tools(response: str): """Parse and execute the tools""" json_commands = extract_tool_commands(response) @@ -37,6 +38,7 @@ def parse_and_execute_tools(response: str): params = command.get("parmas", {}) execute_tools(tool_name, params) + def execute_tools(self, tool_name, params): """Execute the tool with the provided params""" tool = self.tool_find_by_name(tool_name) @@ -44,4 +46,3 @@ def execute_tools(self, tool_name, params): # Execute the tool with the provided parameters tool_result = tool.run(**params) print(tool_result) -