[CODE QUALITY]

pull/362/head^2
Kye 1 year ago
parent 1b15753424
commit 8113d6ddbc

@ -18,7 +18,7 @@ worker = Worker(
tools=[], tools=[],
temperature=0.5, temperature=0.5,
llm=OpenAIChat(openai_api_key=api_key), llm=OpenAIChat(openai_api_key=api_key),
verbose = True, verbose=True,
) )
# Running the worker with a prompt # Running the worker with a prompt

@ -2,4 +2,3 @@
This tutorial shows you how to integrate swarms with Langchain This tutorial shows you how to integrate swarms with Langchain
""" """

@ -1,18 +1,19 @@
from swarms.structs.agent import Agent from swarms.structs.agent import Agent
def agent_wrapper(ClassToWrap): def agent_wrapper(ClassToWrap):
""" """
This function takes a class 'ClassToWrap' and returns a new class that This function takes a class 'ClassToWrap' and returns a new class that
inherits from both 'ClassToWrap' and 'Agent'. The new class overrides inherits from both 'ClassToWrap' and 'Agent'. The new class overrides
the '__init__' method of 'Agent' to call the '__init__' method of 'ClassToWrap'. the '__init__' method of 'Agent' to call the '__init__' method of 'ClassToWrap'.
Args: Args:
ClassToWrap (type): The class to be wrapped and made to inherit from 'Agent'. ClassToWrap (type): The class to be wrapped and made to inherit from 'Agent'.
Returns: Returns:
type: The new class that inherits from both 'ClassToWrap' and 'Agent'. type: The new class that inherits from both 'ClassToWrap' and 'Agent'.
""" """
class WrappedClass(ClassToWrap, Agent): class WrappedClass(ClassToWrap, Agent):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
try: try:
@ -21,5 +22,5 @@ def agent_wrapper(ClassToWrap):
except Exception as e: except Exception as e:
print(f"Error initializing WrappedClass: {e}") print(f"Error initializing WrappedClass: {e}")
raise e raise e
return WrappedClass return WrappedClass

@ -9,6 +9,7 @@ from langchain_experimental.autonomous_agents import AutoGPT
from swarms.utils.decorators import error_decorator, timing_decorator from swarms.utils.decorators import error_decorator, timing_decorator
class Worker: class Worker:
""" """
The Worker class represents an autonomous agent that can perform tassks through The Worker class represents an autonomous agent that can perform tassks through
@ -164,7 +165,7 @@ class Worker:
# @log_decorator # @log_decorator
@error_decorator @error_decorator
@timing_decorator @timing_decorator
def run(self, task: str = None, img = None, *args, **kwargs): def run(self, task: str = None, img=None, *args, **kwargs):
""" """
Run the autonomous agent on a given task. Run the autonomous agent on a given task.

@ -112,5 +112,4 @@ __all__ = [
"LavaMultiModal", "LavaMultiModal",
"QwenVLMultiModal", "QwenVLMultiModal",
"CLIPQ", "CLIPQ",
] ]

@ -10,17 +10,17 @@ from transformers import CLIPModel, CLIPProcessor
class CLIPQ: class CLIPQ:
""" """
ClipQ is an CLIQ based model that can be used to generate captions for images. ClipQ is an CLIQ based model that can be used to generate captions for images.
Attributes: Attributes:
model_name (str): The name of the model to be used. model_name (str): The name of the model to be used.
query_text (str): The query text to be used for the model. query_text (str): The query text to be used for the model.
Args: Args:
model_name (str): The name of the model to be used. model_name (str): The name of the model to be used.
query_text (str): The query text to be used for the model. query_text (str): The query text to be used for the model.
""" """
@ -30,13 +30,15 @@ class CLIPQ:
model_name: str = "openai/clip-vit-base-patch16", model_name: str = "openai/clip-vit-base-patch16",
query_text: str = "A photo ", query_text: str = "A photo ",
*args, *args,
**kwargs **kwargs,
): ):
self.model = CLIPModel.from_pretrained(model_name, *args, **kwargs) self.model = CLIPModel.from_pretrained(
model_name, *args, **kwargs
)
self.processor = CLIPProcessor.from_pretrained(model_name) self.processor = CLIPProcessor.from_pretrained(model_name)
self.query_text = query_text self.query_text = query_text
def fetch_image_from_url(self, url = "https://picsum.photos/800"): def fetch_image_from_url(self, url="https://picsum.photos/800"):
"""Fetches an image from the given url""" """Fetches an image from the given url"""
response = requests.get(url) response = requests.get(url)
if response.status_code != 200: if response.status_code != 200:
@ -48,7 +50,9 @@ class CLIPQ:
"""Loads an image from the given path""" """Loads an image from the given path"""
return Image.open(path) return Image.open(path)
def split_image(self, image, h_splits: int = 2, v_splits: int = 2): def split_image(
self, image, h_splits: int = 2, v_splits: int = 2
):
"""Splits the given image into h_splits x v_splits parts""" """Splits the given image into h_splits x v_splits parts"""
width, height = image.size width, height = image.size
w_step, h_step = width // h_splits, height // v_splits w_step, h_step = width // h_splits, height // v_splits
@ -57,7 +61,12 @@ class CLIPQ:
for i in range(v_splits): for i in range(v_splits):
for j in range(h_splits): for j in range(h_splits):
slice = image.crop( slice = image.crop(
(j * w_step, i * h_step, (j + 1) * w_step, (i + 1) * h_step) (
j * w_step,
i * h_step,
(j + 1) * w_step,
(i + 1) * h_step,
)
) )
slices.append(slice) slices.append(slice)
return slices return slices
@ -74,10 +83,15 @@ class CLIPQ:
for slice in slices: for slice in slices:
inputs = self.processor( inputs = self.processor(
text=self.query_text, images=slice, return_tensors="pt", padding=True text=self.query_text,
images=slice,
return_tensors="pt",
padding=True,
) )
outputs = self.model(**inputs) outputs = self.model(**inputs)
vectors.append(outputs.image_embeds.squeeze().detach().numpy()) vectors.append(
outputs.image_embeds.squeeze().detach().numpy()
)
return vectors return vectors
def run_from_url( def run_from_url(
@ -118,7 +132,9 @@ class CLIPQ:
blur = GaussianBlur(kernel_size) blur = GaussianBlur(kernel_size)
return blur(image) return blur(image)
def run_from_path(self, path: str = None, h_splits: int = 2, v_splits: int = 2): def run_from_path(
self, path: str = None, h_splits: int = 2, v_splits: int = 2
):
"""Runs the model on the image loaded from the given path""" """Runs the model on the image loaded from the given path"""
image = self.load_image_from_path(path) image = self.load_image_from_path(path)
return self.get_vectors(image, h_splits, v_splits) return self.get_vectors(image, h_splits, v_splits)
@ -132,7 +148,9 @@ class CLIPQ:
inputs_text = self.processor( inputs_text = self.processor(
text=candidate_captions, text=candidate_captions,
images=inputs_image.pixel_values[0], # Fix the argument name images=inputs_image.pixel_values[
0
], # Fix the argument name
return_tensors="pt", return_tensors="pt",
padding=True, padding=True,
truncation=True, truncation=True,
@ -142,7 +160,8 @@ class CLIPQ:
pixel_values=inputs_image.pixel_values[0] pixel_values=inputs_image.pixel_values[0]
).image_embeds ).image_embeds
text_embeds = self.model( text_embeds = self.model(
input_ids=inputs_text.input_ids, attention_mask=inputs_text.attention_mask input_ids=inputs_text.input_ids,
attention_mask=inputs_text.attention_mask,
).text_embeds ).text_embeds
# Calculate similarity between image and text # Calculate similarity between image and text
@ -156,6 +175,9 @@ class CLIPQ:
): ):
"""Get the best caption for the given image""" """Get the best caption for the given image"""
slices = self.split_image(image, h_splits, v_splits) slices = self.split_image(image, h_splits, v_splits)
captions = [self.get_captions(slice, candidate_captions) for slice in slices] captions = [
self.get_captions(slice, candidate_captions)
for slice in slices
]
concated_captions = "".join(captions) concated_captions = "".join(captions)
return concated_captions return concated_captions

@ -670,10 +670,15 @@ class Agent:
""" """
ltr = self.long_term_memory.query(query) ltr = self.long_term_memory.query(query)
return f"""{prompt} context = f"""
################ CONTEXT #################### {prompt}
####### Long Term Memory ################
{ltr} {ltr}
""" """
return self.short_memory.append([f"{context}"])
def add_memory(self, message: str):
return self.short_memory.append([f"{message}"])
async def run_concurrent(self, tasks: List[str], **kwargs): async def run_concurrent(self, tasks: List[str], **kwargs):
""" """

@ -233,7 +233,7 @@ class Task:
if task.description is not None if task.description is not None
else "" else ""
) )
result = ( result = (
task.result if task.result is not None else "" task.result if task.result is not None else ""
) )

@ -89,7 +89,6 @@ def get_package_mismatches(file_path="pyproject.toml"):
return "\n" + "\n".join(mismatches) return "\n" + "\n".join(mismatches)
def system_info(): def system_info():
swarms_verison = get_swarms_verison() swarms_verison = get_swarms_verison()
return { return {
@ -100,4 +99,3 @@ def system_info():
"CPU Info": get_cpu_info(), "CPU Info": get_cpu_info(),
"RAM Info": get_ram_info(), "RAM Info": get_ram_info(),
} }

@ -5,6 +5,7 @@ import socket
from swarms.telemetry.sys_info import system_info from swarms.telemetry.sys_info import system_info
from swarms.telemetry.check_update import check_for_package from swarms.telemetry.check_update import check_for_package
# Helper functions # Helper functions
def generate_user_id(): def generate_user_id():
"""Generate user id """Generate user id
@ -75,7 +76,6 @@ def get_local_ip():
return socket.gethostbyname(socket.gethostname()) return socket.gethostbyname(socket.gethostname())
def get_user_device_data(): def get_user_device_data():
data = { data = {
"ID": generate_user_id(), "ID": generate_user_id(),
@ -85,5 +85,6 @@ def get_user_device_data():
"Swarms [Version]": check_for_package("swarms"), "Swarms [Version]": check_for_package("swarms"),
} }
return data return data
#
#

@ -25,7 +25,7 @@ from swarms.utils.download_weights_from_url import (
from swarms.utils.save_logs import parse_log_file from swarms.utils.save_logs import parse_log_file
######## ########
from swarms.utils.yaml_output_parser import YamlOutputParser from swarms.utils.yaml_output_parser import YamlOutputParser
from swarms.utils.json_output_parser import JsonOutputParser from swarms.utils.json_output_parser import JsonOutputParser
from swarms.utils.remove_json_whitespace import ( from swarms.utils.remove_json_whitespace import (

@ -5,9 +5,11 @@ from pydantic import BaseModel, ValidationError
T = TypeVar("T", bound=BaseModel) T = TypeVar("T", bound=BaseModel)
class JsonParsingException(Exception): class JsonParsingException(Exception):
"""Custom exception for errors in JSON parsing.""" """Custom exception for errors in JSON parsing."""
class JsonOutputParser: class JsonOutputParser:
"""Parse JSON output using a Pydantic model. """Parse JSON output using a Pydantic model.
@ -17,7 +19,7 @@ class JsonOutputParser:
Attributes: Attributes:
pydantic_object: A Pydantic model class for parsing and validation. pydantic_object: A Pydantic model class for parsing and validation.
pattern: A regex pattern to match JSON code blocks. pattern: A regex pattern to match JSON code blocks.
Examples: Examples:
>>> from pydantic import BaseModel >>> from pydantic import BaseModel
>>> from swarms.utils.json_output_parser import JsonOutputParser >>> from swarms.utils.json_output_parser import JsonOutputParser
@ -29,12 +31,14 @@ class JsonOutputParser:
>>> text = "```json\n{\"name\": \"John\", \"age\": 42}\n```" >>> text = "```json\n{\"name\": \"John\", \"age\": 42}\n```"
>>> model = parser.parse(text) >>> model = parser.parse(text)
>>> model.name >>> model.name
""" """
def __init__(self, pydantic_object: Type[T]): def __init__(self, pydantic_object: Type[T]):
self.pydantic_object = pydantic_object self.pydantic_object = pydantic_object
self.pattern = re.compile(r"^```(?:json)?(?P<json>[^`]*)", re.MULTILINE | re.DOTALL) self.pattern = re.compile(
r"^```(?:json)?(?P<json>[^`]*)", re.MULTILINE | re.DOTALL
)
def parse(self, text: str) -> T: def parse(self, text: str) -> T:
"""Parse the provided text to extract and validate JSON data. """Parse the provided text to extract and validate JSON data.
@ -57,7 +61,10 @@ class JsonOutputParser:
except (json.JSONDecodeError, ValidationError) as e: except (json.JSONDecodeError, ValidationError) as e:
name = self.pydantic_object.__name__ name = self.pydantic_object.__name__
msg = f"Failed to parse {name} from text '{text}'. Error: {e}" msg = (
f"Failed to parse {name} from text '{text}'."
f" Error: {e}"
)
raise JsonParsingException(msg) from e raise JsonParsingException(msg) from e
def get_format_instructions(self) -> str: def get_format_instructions(self) -> str:
@ -67,12 +74,19 @@ class JsonOutputParser:
A string containing formatting instructions. A string containing formatting instructions.
""" """
schema = self.pydantic_object.schema() schema = self.pydantic_object.schema()
reduced_schema = {k: v for k, v in schema.items() if k not in ['title', 'type']} reduced_schema = {
k: v
for k, v in schema.items()
if k not in ["title", "type"]
}
schema_str = json.dumps(reduced_schema, indent=4) schema_str = json.dumps(reduced_schema, indent=4)
format_instructions = f"JSON Formatting Instructions:\n{schema_str}" format_instructions = (
f"JSON Formatting Instructions:\n{schema_str}"
)
return format_instructions return format_instructions
# # Example usage # # Example usage
# class ExampleModel(BaseModel): # class ExampleModel(BaseModel):
# field1: int # field1: int

@ -1,6 +1,7 @@
import json import json
import yaml import yaml
def remove_whitespace_from_json(json_string: str) -> str: def remove_whitespace_from_json(json_string: str) -> str:
""" """
Removes unnecessary whitespace from a JSON string. Removes unnecessary whitespace from a JSON string.
@ -15,14 +16,14 @@ def remove_whitespace_from_json(json_string: str) -> str:
str: The JSON string with whitespace removed. str: The JSON string with whitespace removed.
""" """
parsed = json.loads(json_string) parsed = json.loads(json_string)
return json.dumps(parsed, separators=(',', ':')) return json.dumps(parsed, separators=(",", ":"))
# # Example usage for JSON # # Example usage for JSON
# json_string = '{"field1": 123, "field2": "example text"}' # json_string = '{"field1": 123, "field2": "example text"}'
# print(remove_whitespace_from_json(json_string)) # print(remove_whitespace_from_json(json_string))
def remove_whitespace_from_yaml(yaml_string: str) -> str: def remove_whitespace_from_yaml(yaml_string: str) -> str:
""" """
Removes unnecessary whitespace from a YAML string. Removes unnecessary whitespace from a YAML string.
@ -40,6 +41,7 @@ def remove_whitespace_from_yaml(yaml_string: str) -> str:
parsed = yaml.safe_load(yaml_string) parsed = yaml.safe_load(yaml_string)
return yaml.dump(parsed, default_flow_style=True) return yaml.dump(parsed, default_flow_style=True)
# # Example usage for YAML # # Example usage for YAML
# yaml_string = """ # yaml_string = """
# field1: 123 # field1: 123

@ -6,9 +6,11 @@ from pydantic import BaseModel, ValidationError
T = TypeVar("T", bound=BaseModel) T = TypeVar("T", bound=BaseModel)
class YamlParsingException(Exception): class YamlParsingException(Exception):
"""Custom exception for errors in YAML parsing.""" """Custom exception for errors in YAML parsing."""
class YamlOutputParser: class YamlOutputParser:
"""Parse YAML output using a Pydantic model. """Parse YAML output using a Pydantic model.
@ -18,8 +20,8 @@ class YamlOutputParser:
Attributes: Attributes:
pydantic_object: A Pydantic model class for parsing and validation. pydantic_object: A Pydantic model class for parsing and validation.
pattern: A regex pattern to match YAML code blocks. pattern: A regex pattern to match YAML code blocks.
Examples: Examples:
>>> from pydantic import BaseModel >>> from pydantic import BaseModel
>>> from swarms.utils.yaml_output_parser import YamlOutputParser >>> from swarms.utils.yaml_output_parser import YamlOutputParser
@ -31,12 +33,14 @@ class YamlOutputParser:
>>> text = "```yaml\nname: John\nage: 42\n```" >>> text = "```yaml\nname: John\nage: 42\n```"
>>> model = parser.parse(text) >>> model = parser.parse(text)
>>> model.name >>> model.name
""" """
def __init__(self, pydantic_object: Type[T]): def __init__(self, pydantic_object: Type[T]):
self.pydantic_object = pydantic_object self.pydantic_object = pydantic_object
self.pattern = re.compile(r"^```(?:ya?ml)?(?P<yaml>[^`]*)", re.MULTILINE | re.DOTALL) self.pattern = re.compile(
r"^```(?:ya?ml)?(?P<yaml>[^`]*)", re.MULTILINE | re.DOTALL
)
def parse(self, text: str) -> T: def parse(self, text: str) -> T:
"""Parse the provided text to extract and validate YAML data. """Parse the provided text to extract and validate YAML data.
@ -59,7 +63,10 @@ class YamlOutputParser:
except (yaml.YAMLError, ValidationError) as e: except (yaml.YAMLError, ValidationError) as e:
name = self.pydantic_object.__name__ name = self.pydantic_object.__name__
msg = f"Failed to parse {name} from text '{text}'. Error: {e}" msg = (
f"Failed to parse {name} from text '{text}'."
f" Error: {e}"
)
raise YamlParsingException(msg) from e raise YamlParsingException(msg) from e
def get_format_instructions(self) -> str: def get_format_instructions(self) -> str:
@ -69,8 +76,14 @@ class YamlOutputParser:
A string containing formatting instructions. A string containing formatting instructions.
""" """
schema = self.pydantic_object.schema() schema = self.pydantic_object.schema()
reduced_schema = {k: v for k, v in schema.items() if k not in ['title', 'type']} reduced_schema = {
k: v
for k, v in schema.items()
if k not in ["title", "type"]
}
schema_str = json.dumps(reduced_schema, indent=4) schema_str = json.dumps(reduced_schema, indent=4)
format_instructions = f"YAML Formatting Instructions:\n{schema_str}" format_instructions = (
f"YAML Formatting Instructions:\n{schema_str}"
)
return format_instructions return format_instructions

Loading…
Cancel
Save