From 31eca6658232abddb7b6ce81c51a184e9a9a571e Mon Sep 17 00:00:00 2001 From: Kye Gomez Date: Thu, 23 Jan 2025 12:53:33 -0500 Subject: [PATCH] [0.0.4] --- .gitignore | 2 + .../models/lstm_transformer_model.py | 37 ----------- AdvancedTimeSeriesModel/model.py | 46 -------------- .../models/time_series_model.py | 48 -------------- .../model/lstm_transformer.py | 45 -------------- .../TimeSeriesModel/hybrid_model.py | 48 -------------- .../TimeSeriesModel/model.py | 56 ----------------- .../TimeSeriesModel/train.py | 53 ---------------- .../TimeSeriesModel/utils.py | 37 ----------- .../time_series_project/data_prep.py | 23 ------- .../time_series_project/model.py | 51 --------------- .../models/time_series_model.py | 0 .../time_series_project/time_series_model.py | 59 ------------------ .../time_series_transformer_lstm/model.py | 0 .../time_series_transformer_lstm/train.py | 0 .../time_series_transformer_lstm/utils.py | 0 .../time_series_project/train.py | 43 ------------- .../time_series_project/utils.py | 24 ------- .../utils/data_processing.py | 0 AdvancedTimeSeriesModel/utils.py | 9 --- agentverse/__init__.py | 12 +++- agentverse/griptape_agent.py | 62 +++++++++++++++++++ agentverse/multion_agent.py | 5 +- agentverse/{main.py => open_interpreter.py} | 47 +++++++++++++- example.py | 53 +++++++++++++--- pyproject.toml | 9 ++- scripts/code_quality.sh | 19 ------ scripts/merge_all_prs.sh | 33 ---------- scripts/test_name.sh | 8 --- scripts/tests.sh | 1 - 30 files changed, 169 insertions(+), 661 deletions(-) delete mode 100644 AdvancedTimeSeriesModel/TimeSeriesProject/models/lstm_transformer_model.py delete mode 100644 AdvancedTimeSeriesModel/model.py delete mode 100644 AdvancedTimeSeriesModel/models/time_series_model.py delete mode 100644 AdvancedTimeSeriesModel/my_time_series_project/model/lstm_transformer.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/hybrid_model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/train.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/utils.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/data_prep.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/models/time_series_model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/time_series_model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/model.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/train.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/utils.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/train.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/utils.py delete mode 100644 AdvancedTimeSeriesModel/time_series_project/utils/data_processing.py delete mode 100644 AdvancedTimeSeriesModel/utils.py create mode 100644 agentverse/griptape_agent.py rename agentverse/{main.py => open_interpreter.py} (78%) delete mode 100755 scripts/code_quality.sh delete mode 100755 scripts/merge_all_prs.sh delete mode 100755 scripts/test_name.sh delete mode 100644 scripts/tests.sh diff --git a/.gitignore b/.gitignore index 36b36ef..d49d139 100644 --- a/.gitignore +++ b/.gitignore @@ -8,12 +8,14 @@ __pycache__/ .vscode/ .vscode +experiments/ # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ +agent_workspace/ eggs/ .eggs/ lib/ diff --git a/AdvancedTimeSeriesModel/TimeSeriesProject/models/lstm_transformer_model.py b/AdvancedTimeSeriesModel/TimeSeriesProject/models/lstm_transformer_model.py deleted file mode 100644 index efff9e2..0000000 --- a/AdvancedTimeSeriesModel/TimeSeriesProject/models/lstm_transformer_model.py +++ /dev/null @@ -1,37 +0,0 @@ -# Import necessary libraries -import torch.nn as nn - - -class LSTMTransformerModel(nn.Module): - def __init__( - self, - input_size, - lstm_hidden_size, - transformer_hidden_size, - nhead, - num_layers, - output_size, - ): - super(LSTMTransformerModel, self).__init__() - - self.lstm = nn.LSTM( - input_size, lstm_hidden_size, batch_first=True - ) - - self.transformer_layer = nn.TransformerEncoderLayer( - d_model=lstm_hidden_size, nhead=nhead - ) - self.transformer = nn.TransformerEncoder( - self.transformer_layer, num_layers=num_layers - ) - - self.fc = nn.Linear(lstm_hidden_size, output_size) - - def forward(self, x): - lstm_out, _ = self.lstm(x) - - transformer_out = self.transformer(lstm_out) - - output = self.fc(transformer_out.mean(dim=1)) - - return output diff --git a/AdvancedTimeSeriesModel/model.py b/AdvancedTimeSeriesModel/model.py deleted file mode 100644 index b969a81..0000000 --- a/AdvancedTimeSeriesModel/model.py +++ /dev/null @@ -1,46 +0,0 @@ -import torch.nn as nn -from transformers import BertModel - - -class TimeSeriesTransformerLSTM(nn.Module): - def __init__( - self, - transformer_model_name="bert-base-uncased", - lstm_hidden_size=128, - num_lstm_layers=2, - output_size=1, - ): - super(TimeSeriesTransformerLSTM, self).__init__() - - # Load a pre-trained transformer model - self.transformer = BertModel.from_pretrained( - transformer_model_name - ) - - # Define LSTM layer - self.lstm = nn.LSTM( - input_size=self.transformer.config.hidden_size, - hidden_size=lstm_hidden_size, - num_layers=num_lstm_layers, - batch_first=True, - ) - - # Define a fully connected layer for the output - self.fc = nn.Linear(lstm_hidden_size, output_size) - - def forward(self, x): - # Pass the input data through the transformer - transformer_outputs = self.transformer( - input_ids=x, return_dict=True - ) - - # Get the last hidden state - hidden_state = transformer_outputs.last_hidden_state - - # Pass the hidden state through the LSTM - lstm_out, _ = self.lstm(hidden_state) - - # Get the output from the last time step - out = self.fc(lstm_out[:, -1, :]) - - return out diff --git a/AdvancedTimeSeriesModel/models/time_series_model.py b/AdvancedTimeSeriesModel/models/time_series_model.py deleted file mode 100644 index 1b07382..0000000 --- a/AdvancedTimeSeriesModel/models/time_series_model.py +++ /dev/null @@ -1,48 +0,0 @@ -import torch.nn as nn - - -class TransformerLSTMTimeSeriesModel(nn.Module): - def __init__( - self, - input_size, - lstm_hidden_size, - lstm_num_layers, - transformer_heads, - transformer_layers, - ): - super(TransformerLSTMTimeSeriesModel, self).__init__() - - # LSTM Layer - self.lstm = nn.LSTM( - input_size, - lstm_hidden_size, - lstm_num_layers, - batch_first=True, - ) - - # Transformer Layer - self.transformer_layer = nn.TransformerEncoderLayer( - d_model=lstm_hidden_size, nhead=transformer_heads - ) - self.transformer = nn.TransformerEncoder( - self.transformer_layer, num_layers=transformer_layers - ) - - # Output Layer - self.output_layer = nn.Linear( - lstm_hidden_size, 1 - ) # Assuming single regression output - - def forward(self, x): - # LSTM Forward Pass - lstm_out, _ = self.lstm(x) - - # Transformer Forward Pass - transformer_out = self.transformer(lstm_out) - - # Output Layer - out = self.output_layer( - transformer_out[:, -1, :] - ) # Use the last output for prediction - - return out diff --git a/AdvancedTimeSeriesModel/my_time_series_project/model/lstm_transformer.py b/AdvancedTimeSeriesModel/my_time_series_project/model/lstm_transformer.py deleted file mode 100644 index 90a0d29..0000000 --- a/AdvancedTimeSeriesModel/my_time_series_project/model/lstm_transformer.py +++ /dev/null @@ -1,45 +0,0 @@ -import torch.nn as nn - - -class LSTMTransformer(nn.Module): - def __init__( - self, - input_dim, - lstm_hidden_dim, - lstm_layers, - transformer_hidden_dim, - nhead, - num_transformer_layers, - output_dim, - ): - super(LSTMTransformer, self).__init__() - - # LSTM layer - self.lstm = nn.LSTM( - input_dim, lstm_hidden_dim, lstm_layers, batch_first=True - ) - - # Transformer Encoder layer - transformer_layer = nn.TransformerEncoderLayer( - d_model=lstm_hidden_dim, - nhead=nhead, - dim_feedforward=transformer_hidden_dim, - ) - self.transformer_encoder = nn.TransformerEncoder( - transformer_layer, num_layers=num_transformer_layers - ) - - # Output layer - self.fc = nn.Linear(lstm_hidden_dim, output_dim) - - def forward(self, x): - # Pass data through LSTM - lstm_out, _ = self.lstm(x) - - # Pass the LSTM output through the Transformer encoder - transformer_out = self.transformer_encoder(lstm_out) - - # Feed the output of the transformer encoder to a fully connected layer - output = self.fc(transformer_out) - - return output diff --git a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/hybrid_model.py b/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/hybrid_model.py deleted file mode 100644 index 712a53b..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/hybrid_model.py +++ /dev/null @@ -1,48 +0,0 @@ -import torch.nn as nn - - -class TimeSeriesHybridModel(nn.Module): - def __init__( - self, - input_size, - lstm_hidden_size, - lstm_layers, - transformer_layers, - transformer_heads, - transformer_dim_feedforward, - output_size, - ): - super(TimeSeriesHybridModel, self).__init__() - - # LSTM layer - self.lstm = nn.LSTM( - input_size, - lstm_hidden_size, - lstm_layers, - batch_first=True, - ) - - # Transformer layer - encoder_layer = nn.TransformerEncoderLayer( - d_model=lstm_hidden_size, - nhead=transformer_heads, - dim_feedforward=transformer_dim_feedforward, - ) - self.transformer = nn.TransformerEncoder( - encoder_layer, num_layers=transformer_layers - ) - - # Fully connected layer - self.fc = nn.Linear(lstm_hidden_size, output_size) - - def forward(self, x): - # Pass data through LSTM - lstm_out, _ = self.lstm(x) - - # Pass data through the Transformer - transformer_out = self.transformer(lstm_out) - - # Flatten the output for the linear layer - out = self.fc(transformer_out[:, -1, :]) - - return out diff --git a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/model.py b/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/model.py deleted file mode 100644 index f165682..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/model.py +++ /dev/null @@ -1,56 +0,0 @@ -import torch -import torch.nn as nn - - -class TimeSeriesModel(nn.Module): - def __init__( - self, - input_size, - lstm_hidden_size, - transformer_hidden_size, - output_size, - num_layers=1, - ): - super(TimeSeriesModel, self).__init__() - - # LSTM part - self.lstm = nn.LSTM( - input_size, lstm_hidden_size, num_layers, batch_first=True - ) - - # Transformer part - encoder_layer = nn.TransformerEncoderLayer( - d_model=transformer_hidden_size, - nhead=4, - dim_feedforward=512, - ) - self.transformer = nn.TransformerEncoder( - encoder_layer, num_layers=4 - ) - - # Linear to output - self.fc = nn.Linear( - lstm_hidden_size + transformer_hidden_size, output_size - ) - - def forward(self, x): - # LSTM - lstm_out, _ = self.lstm(x) - lstm_out = lstm_out[:, -1, :] # Get the last output of LSTM - - # Transformer - transformer_input = x.permute( - 1, 0, 2 - ) # Change to (seq_len, batch, input_size) - transformer_out = self.transformer(transformer_input) - transformer_out = transformer_out[ - -1, :, : - ] # Get the last output of Transformer - - # Concatenate LSTM and Transformer outputs - combined = torch.cat((lstm_out, transformer_out), dim=1) - - # Fully connected layer - output = self.fc(combined) - - return output diff --git a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/train.py b/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/train.py deleted file mode 100644 index 88b5d4f..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/train.py +++ /dev/null @@ -1,53 +0,0 @@ - -import torch -import torch.nn as nn -import torch.optim as optim -from AdvancedTimeSeriesModel.model import TimeSeriesModel -import AdvancedTimeSeriesModel.utils as utils - -# Hyperparameters -input_size = 1 -lstm_hidden_size = 64 -transformer_hidden_size = 64 -output_size = 1 -num_layers = 1 -batch_size = 32 -num_epochs = 10 -learning_rate = 0.001 - -# Generate synthetic data -data X, Y = utils.generate_synthetic_data() - -# Create data loaders -train_loader, val_loader = utils.create_dataloaders(X, Y) - -# Initialize model, loss, and optimizer -model = TimeSeriesModel(input_size, lstm_hidden_size, transformer_hidden_size, output_size, num_layers) -criterion = nn.MSELoss() -optimizer = optim.Adam(model.parameters(), lr=learning_rate) - -# Training loop -def train(model, train_loader, optimizer, criterion): - model.train() - running_loss = 0.0 - for X_batch, Y_batch in train_loader: - optimizer.zero_grad() - X_batch = torch.tensor(X_batch, dtype=torch.float32) - Y_batch = torch.tensor(Y_batch, dtype=torch.float32) - - # Forward pass - output = model(X_batch) - loss = criterion(output, Y_batch) - - # Backward pass and optimize - loss.backward() - optimizer.step() - running_loss += loss.item() - return running_loss / len(train_loader) - - -# Training the model -for epoch in range(num_epochs): - train_loss = train(model, train_loader, optimizer, criterion) - print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {train_loss:.4f}") - diff --git a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/utils.py b/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/utils.py deleted file mode 100644 index 1162776..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/TimeSeriesModel/utils.py +++ /dev/null @@ -1,37 +0,0 @@ -import numpy as np - -torch - - -def generate_synthetic_data(seq_length=50, num_samples=1000): - X = np.random.rand(num_samples, seq_length, 1) - Y = np.sum(X, axis=1) + np.random.normal(0, 0.1, (num_samples, 1)) - return X, Y - - -def create_dataloaders(X, Y, batch_size=32, split_ratio=0.8): - dataset_size = len(X) - indices = list(range(dataset_size)) - split = int(np.floor(split_ratio * dataset_size)) - - train_indices, val_indices = indices[:split], indices[split:] - - # Creating data samplers - train_sampler = torch.utils.data.SubsetRandomSampler( - train_indices - ) - val_sampler = torch.utils.data.SubsetRandomSampler(val_indices) - - # Creating data loaders - train_loader = torch.utils.data.DataLoader( - dataset=list(zip(X, Y)), - batch_size=batch_size, - sampler=train_sampler, - ) - val_loader = torch.utils.data.DataLoader( - dataset=list(zip(X, Y)), - batch_size=batch_size, - sampler=val_sampler, - ) - - return train_loader, val_loader diff --git a/AdvancedTimeSeriesModel/time_series_project/data_prep.py b/AdvancedTimeSeriesModel/time_series_project/data_prep.py deleted file mode 100644 index e6e0837..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/data_prep.py +++ /dev/null @@ -1,23 +0,0 @@ -import pandas as pd - - -# Load your data here -def load_data(file_path): - # Example: Use pandas to read a CSV - df = pd.read_csv(file_path) - return df - - -# Preprocess your data here -def preprocess_data(df): - # Normalize or standardize your data - # Create sequences for LSTM/Transformer - return df - - -if __name__ == "__main__": - # Sample usage - file_path = "your_data.csv" # Example path - data = load_data(file_path) - processed_data = preprocess_data(data) - print(processed_data.head()) diff --git a/AdvancedTimeSeriesModel/time_series_project/model.py b/AdvancedTimeSeriesModel/time_series_project/model.py deleted file mode 100644 index 18a9680..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/model.py +++ /dev/null @@ -1,51 +0,0 @@ -import torch.nn as nn - - -class TimeSeriesModel(nn.Module): - def __init__( - self, - input_dim, - hidden_dim, - lstm_layers, - transformer_layers, - dropout=0.1, - ): - super(TimeSeriesModel, self).__init__() - - # LSTM layer - self.lstm = nn.LSTM( - input_dim, - hidden_dim, - num_layers=lstm_layers, - batch_first=True, - dropout=dropout, - ) - - # Transformer layer - encoder_layer = nn.TransformerEncoderLayer( - d_model=hidden_dim, nhead=4, dropout=dropout - ) - self.transformer = nn.TransformerEncoder( - encoder_layer, num_layers=transformer_layers - ) - - # Final linear layer for output - self.linear = nn.Linear( - hidden_dim, 1 - ) # Adjust the output dimension as necessary - - def forward(self, x): - # LSTM - lstm_out, _ = self.lstm(x) - - # Transformer - transformer_out = self.transformer( - lstm_out.permute(1, 0, 2) - ) # Transformer expects input of shape (seq_len, batch, dim) - - # Final linear layer - output = self.linear( - transformer_out[-1, :, :] - ) # Use the last time step for prediction - - return output diff --git a/AdvancedTimeSeriesModel/time_series_project/models/time_series_model.py b/AdvancedTimeSeriesModel/time_series_project/models/time_series_model.py deleted file mode 100644 index e69de29..0000000 diff --git a/AdvancedTimeSeriesModel/time_series_project/time_series_model.py b/AdvancedTimeSeriesModel/time_series_project/time_series_model.py deleted file mode 100644 index 1bbdd98..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/time_series_model.py +++ /dev/null @@ -1,59 +0,0 @@ -import torch -import torch.nn as nn - - -class TimeSeriesModel(nn.Module): - def __init__( - self, - input_dim, - hidden_dim, - lstm_layers, - transformer_layers, - output_dim, - ): - super(TimeSeriesModel, self).__init__() - - # LSTM layer - self.lstm = nn.LSTM( - input_dim, hidden_dim, lstm_layers, batch_first=True - ) - - # Transformer encoder layer - self.transformer_layer = nn.TransformerEncoderLayer( - d_model=hidden_dim, nhead=4 - ) - self.transformer = nn.TransformerEncoder( - self.transformer_layer, num_layers=transformer_layers - ) - - # Fully connected layer - self.fc = nn.Linear(hidden_dim, output_dim) - - def forward(self, x): - # Pass through LSTM - lstm_out, _ = self.lstm(x) - - # Pass through transformer encoder - transformer_out = self.transformer(lstm_out) - - # Pass through fully connected layer - out = self.fc( - transformer_out[:, -1, :] - ) # take the last element for sequence prediction - return out - - -# Test the model with random input -if __name__ == "__main__": - model = TimeSeriesModel( - input_dim=10, - hidden_dim=128, - lstm_layers=2, - transformer_layers=2, - output_dim=1, - ) - test_input = torch.randn( - 32, 5, 10 - ) # batch_size=32, sequence_length=5, input_dim=10 - test_output = model(test_input) - print("Output shape:", test_output.shape) diff --git a/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/model.py b/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/model.py deleted file mode 100644 index e69de29..0000000 diff --git a/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/train.py b/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/train.py deleted file mode 100644 index e69de29..0000000 diff --git a/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/utils.py b/AdvancedTimeSeriesModel/time_series_project/time_series_transformer_lstm/utils.py deleted file mode 100644 index e69de29..0000000 diff --git a/AdvancedTimeSeriesModel/time_series_project/train.py b/AdvancedTimeSeriesModel/time_series_project/train.py deleted file mode 100644 index dab3aea..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/train.py +++ /dev/null @@ -1,43 +0,0 @@ -import torch.nn as nn -import torch.optim as optim -from torch.utils.data import DataLoader, TensorDataset - -from AdvancedTimeSeriesModel.model import TimeSeriesModel -from AdvancedTimeSeriesModel.utils import preprocess_data - -# Hyperparameters -input_dim = 1 # Number of features -hidden_dim = 64 # Hidden dimension for LSTM -lstm_layers = 2 # Number of LSTM layers -transformer_layers = 2 -learning_rate = 0.001 -n_steps = 5 # Number of time steps for sequences -batch_size = 16 -num_epochs = 50 - -# Sample synthetic data (replace with your data) -data = np.array([[i] for i in range(100)]) # Example sequential data - -# Preprocess data -X, y, scaler = preprocess_data(data, n_steps) - -dataset = TensorDataset(X, y) -dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True) - -# Initialize model, loss, and optimizer -model = TimeSeriesModel( - input_dim, hidden_dim, lstm_layers, transformer_layers -) -criterion = nn.MSELoss() -optimizer = optim.Adam(model.parameters(), lr=learning_rate) - -# Training loop -for epoch in range(num_epochs): - for batch in dataloader: - inputs, targets = batch - optimizer.zero_grad() - output = model(inputs) - loss = criterion(output.squeeze(), targets) - loss.backward() - optimizer.step() - print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}") diff --git a/AdvancedTimeSeriesModel/time_series_project/utils.py b/AdvancedTimeSeriesModel/time_series_project/utils.py deleted file mode 100644 index cfacc7a..0000000 --- a/AdvancedTimeSeriesModel/time_series_project/utils.py +++ /dev/null @@ -1,24 +0,0 @@ -import numpy as np -import torch -from sklearn.preprocessing import MinMaxScaler - - -def split_sequences(sequences, n_steps): - X, y = list(), list() - for i in range(len(sequences)): - end_ix = i + n_steps - if end_ix > len(sequences) - 1: - break - seq_x, seq_y = sequences[i:end_ix], sequences[end_ix] - X.append(seq_x) - y.append(seq_y) - return np.array(X), np.array(y) - - -def preprocess_data(data, n_steps): - scaler = MinMaxScaler(feature_range=(0, 1)) - data_scaled = scaler.fit_transform(data) - X, y = split_sequences(data_scaled, n_steps) - X = torch.tensor(X, dtype=torch.float32) - y = torch.tensor(y, dtype=torch.float32) - return X, y, scaler diff --git a/AdvancedTimeSeriesModel/time_series_project/utils/data_processing.py b/AdvancedTimeSeriesModel/time_series_project/utils/data_processing.py deleted file mode 100644 index e69de29..0000000 diff --git a/AdvancedTimeSeriesModel/utils.py b/AdvancedTimeSeriesModel/utils.py deleted file mode 100644 index 3f4e4e4..0000000 --- a/AdvancedTimeSeriesModel/utils.py +++ /dev/null @@ -1,9 +0,0 @@ -# Placeholder for utility functions like data preprocessing or any other helpers - - -def preprocess_data(data_path): - # Implement data loading and preprocessing - pass - - -# e.g., normalization, sequence generation, etc. diff --git a/agentverse/__init__.py b/agentverse/__init__.py index e1de46c..6d5f57d 100644 --- a/agentverse/__init__.py +++ b/agentverse/__init__.py @@ -1,4 +1,10 @@ -from agentverse.main import OpenInterpreterAgent -from agentverse.multion_agent import MultiOnAgent, MultiOnRetrieverAgent +from dotenv import load_dotenv -__all__ = ["OpenInterpreterAgent", "MultiOnAgent", "MultiOnRetrieverAgent"] \ No newline at end of file +load_dotenv() + +from agentverse.open_interpreter import OpenInterpreterAgent + + +__all__ = [ + "OpenInterpreterAgent", +] diff --git a/agentverse/griptape_agent.py b/agentverse/griptape_agent.py new file mode 100644 index 0000000..1dcb192 --- /dev/null +++ b/agentverse/griptape_agent.py @@ -0,0 +1,62 @@ +from swarms import ( + Agent as SwarmsAgent, +) # Import the base Agent class from Swarms +from griptape.structures import Agent as GriptapeAgent +from typing import Any, List + + +class GriptapeSwarmsAgent(SwarmsAgent): + """ + A custom agent class that inherits from SwarmsAgent, designed to execute tasks involving web scraping, summarization, and file management. + """ + + def __init__( + self, + name: str = "Griptape Agent", + description: str = "A custom agent class that inherits from SwarmsAgent, designed to execute tasks involving web scraping, summarization, and file management.", + system_prompt: str = None, + tools: List[Any] = [], + *args, + **kwargs, + ): + """ + Initialize the GriptapeSwarmsAgent with its tools. + + Args: + *args: Additional positional arguments to pass to the GriptapeAgent. + **kwargs: Additional keyword arguments to pass to the GriptapeAgent. + """ + self.name = name + self.description = description + self.system_prompt = system_prompt + self.tools = tools + # Initialize the Griptape agent with its tools + self.agent = GriptapeAgent( + input="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.", + tools=tools, + *args, + **kwargs, + ) + + def run(self, task: str) -> str: + """ + Execute a task using the Griptape agent. + + Args: + task (str): The task to be executed, formatted as "URL, filename". + + Returns: + str: The final result of the task execution as a string. + + Raises: + ValueError: If the task string does not contain exactly one comma. + """ + result = self.agent.run(self.system_prompt + task) + # Return the final result as a string + return str(result) + + +# # Example usage: +# griptape_swarms_agent = GriptapeSwarmsAgent(system_prompt="What is the weather in Tokyo?") +# output = griptape_swarms_agent.run("What is the weather in Tokyo?") +# print(output) diff --git a/agentverse/multion_agent.py b/agentverse/multion_agent.py index a0c4f5f..a4261c8 100644 --- a/agentverse/multion_agent.py +++ b/agentverse/multion_agent.py @@ -8,7 +8,6 @@ from multion.client import MultiOn - class SessionStatus(str, Enum): """Enum for session status values""" @@ -356,7 +355,9 @@ def run( api_key = os.getenv("MULTION_API_KEY") if not api_key: - raise ValueError("MULTION_API_KEY not found in environment variables") + raise ValueError( + "MULTION_API_KEY not found in environment variables" + ) agent = MultiOnAgent(api_key=api_key) retriever = MultiOnRetrieverAgent(api_key=api_key) diff --git a/agentverse/main.py b/agentverse/open_interpreter.py similarity index 78% rename from agentverse/main.py rename to agentverse/open_interpreter.py index 5908703..46444ed 100644 --- a/agentverse/main.py +++ b/agentverse/open_interpreter.py @@ -1,7 +1,8 @@ +import json from typing import Generator, List, Union from interpreter import interpreter from loguru import logger -from agentverse.formatter import ConversationParser +from agentverse.utils import log_agent_data # Configure loguru logger logger.add("app.log", rotation="500 MB") @@ -26,7 +27,7 @@ def __init__( self, name: str = "interpreter-agent-01", description: str = "An interpreter for the open-interpreter package", - model: str = "gpt-3.5-turbo", + model: str = "gpt-4o-mini", auto_install: bool = True, auto_run: bool = True, system_prompt: str = "", @@ -55,6 +56,12 @@ def __init__( f"OpenInterpreterAgent initialized with model: {model}" ) + self.interpreter.loop = True + self.interpreter.model = model + self.interpreter.safe_mode = "auto" + + log_agent_data(self.to_dict()) + def __call__(self, task: str, **kwargs) -> Union[List, Generator]: """ Allow the class to be called directly. @@ -101,9 +108,13 @@ def run( output = str(output) else: output = str(output) - return ConversationParser.extract_conversation(output) + log_agent_data(self.to_dict()) + # log_agent_data(self.interpreter.messages.__dict__) + return output except Exception as e: logger.error(f"Error executing task: {str(e)}") + log_agent_data(self.to_dict()) + # log_agent_data(self.interpreter.messages.__dict__) raise def reset(self): @@ -159,3 +170,33 @@ def system_message(self, message: str): if self.interpreter: self.interpreter.system_message = message logger.info("System message updated") + + def to_dict(self): + """ + Convert agent attributes to a serializable dictionary. + Automatically filters out non-serializable objects. + """ + + def is_json_serializable(obj): + try: + json.dumps(obj) + return True + except (TypeError, OverflowError): + return False + + return { + key: value + for key, value in self.__dict__.items() + if is_json_serializable(value) + } + + def to_json(self): + return json.dumps(self.to_dict()) + + def save(self, filename: str): + with open(filename, "w") as f: + f.write(self.to_json()) + + def load(self, filename: str): + with open(filename, "r") as f: + self.__dict__ = json.load(f) diff --git a/example.py b/example.py index 69b574b..a404426 100644 --- a/example.py +++ b/example.py @@ -1,13 +1,50 @@ -from agentverse.main import OpenInterpreterAgent +from agentverse.open_interpreter import OpenInterpreterAgent +from loguru import logger -ai_architect = OpenInterpreterAgent( - name="AI-Architect", +# Create screen control agent +screen_controller = OpenInterpreterAgent( + name="ScreenController", auto_run=True, - system_prompt="You are an expert AI architect specializing in creating innovative and efficient neural network architectures. Your task is to design and implement novel time series models using PyTorch, combining advanced techniques like transformers and LSTMs. Always strive for originality, efficiency, and state-of-the-art performance in your designs.", + system_prompt="""You are an expert in computer vision and screen automation. + You can: + - Capture and analyze screen content + - Control mouse movements and clicks + - Send keyboard inputs + - Detect and interact with UI elements + - Process visual information in real-time + + Use computer vision and automation to interact with on-screen elements accurately and reliably. + """, ) -print( - ai_architect.run( - "Design and implement a new, cutting-edge time series model architecture using transformers, LSTMs, and any other relevant techniques in PyTorch. Create a new project folder and write the complete Python code for the model, including any necessary utility functions or classes." - ) +# Run the screen controller +controller_output = screen_controller.run( + """ +Create a Python program that: +1. Captures the current screen state using screenshot +2. Processes the image to: + - Detect UI elements and controls + - Identify text and clickable areas + - Track cursor position + - Monitor screen changes +3. Implements screen interaction functions: + - Mouse movement and clicking + - Keyboard input + - Window management + - Element detection +4. Provides real-time visual feedback +5. Maintains a log of: + - Screen states + - User interactions + - System events + - Performance metrics +""" ) + +print("Screen Controller Status:") +print(controller_output) + +logger.info("Saving screen_controller.json") +screen_controller.save("screen_controller.json") +# logger.info("Loading screen_controller.json") +# screen_controller.load("screen_controller.json") diff --git a/pyproject.toml b/pyproject.toml index 6c22b03..0227c64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,14 +4,14 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "agentverse" -version = "0.0.2" +version = "0.0.3" description = "AgentVerse - A framework for building and evaluating agents" license = "MIT" authors = ["Kye Gomez "] -homepage = "https://github.com/kyegomez/agentverse" -documentation = "https://github.com/kyegomez/agentverse" # Add this if you have documentation. +homepage = "https://github.com/The-Swarm-Corporation/agentverse" +documentation = "https://github.com/The-Swarm-Corporation/agentverse" # Add this if you have documentation. readme = "README.md" # Assuming you have a README.md -repository = "https://github.com/kyegomez/agentverse" +repository = "https://github.com/The-Swarm-Corporation/agentverse" keywords = ["artificial intelligence", "deep learning", "optimizers", "Prompt Engineering"] classifiers = [ "Development Status :: 4 - Beta", @@ -27,7 +27,6 @@ swarms = "*" loguru = "*" open-interpreter = "*" multion = "*" -python-dotenv = "*" [tool.poetry.group.lint.dependencies] diff --git a/scripts/code_quality.sh b/scripts/code_quality.sh deleted file mode 100755 index dcebf05..0000000 --- a/scripts/code_quality.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Navigate to the directory containing the 'package' folder -# cd /path/to/your/code/directory - -# Run autopep8 with max aggressiveness (-aaa) and in-place modification (-i) -# on all Python files (*.py) under the 'package' directory. -autopep8 --in-place --aggressive --aggressive --recursive --experimental --list-fixes package/ - -# Run black with default settings, since black does not have an aggressiveness level. -# Black will format all Python files it finds in the 'package' directory. -black --experimental-string-processing package/ - -# Run ruff on the 'package' directory. -# Add any additional flags if needed according to your version of ruff. -ruff --unsafe_fix - -# YAPF -yapf --recursive --in-place --verbose --style=google --parallel package diff --git a/scripts/merge_all_prs.sh b/scripts/merge_all_prs.sh deleted file mode 100755 index 1135823..0000000 --- a/scripts/merge_all_prs.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# Check if we are inside a Git repository -if ! git rev-parse --git-dir > /dev/null 2>&1; then - echo "Error: Must be run inside a Git repository." - exit 1 -fi - -# Fetch all open pull requests -echo "Fetching open PRs..." -prs=$(gh pr list --state open --json number --jq '.[].number') - -# Check if there are PRs to merge -if [ -z "$prs" ]; then - echo "No open PRs to merge." - exit 0 -fi - -echo "Found PRs: $prs" - -# Loop through each pull request number and merge it -for pr in $prs; do - echo "Attempting to merge PR #$pr" - merge_output=$(gh pr merge $pr --auto --merge) - merge_status=$? - if [ $merge_status -ne 0 ]; then - echo "Failed to merge PR #$pr. Error: $merge_output" - else - echo "Successfully merged PR #$pr" - fi -done - -echo "Processing complete." diff --git a/scripts/test_name.sh b/scripts/test_name.sh deleted file mode 100755 index cdc6a01..0000000 --- a/scripts/test_name.sh +++ /dev/null @@ -1,8 +0,0 @@ -find ./tests -name "*.py" -type f | while read file -do - filename=$(basename "$file") - dir=$(dirname "$file") - if [[ $filename != test_* ]]; then - mv "$file" "$dir/test_$filename" - fi -done \ No newline at end of file diff --git a/scripts/tests.sh b/scripts/tests.sh deleted file mode 100644 index 13f4111..0000000 --- a/scripts/tests.sh +++ /dev/null @@ -1 +0,0 @@ -find ./tests -name '*.py' -exec pytest {} \; \ No newline at end of file