TuringsSolutions's picture
Update app.py
d19c2e9 verified
import gradio as gr
import os
import json
import numpy as np
import requests
from openai import OpenAI
import time
def call_gpt3_5(prompt, api_key):
client = OpenAI(api_key=api_key)
try:
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a Python expert capable of implementing specific functions for a Swarm Neural Network (SNN). Return only the Python code for the requested function, without any additional text."},
{"role": "user", "content": prompt}
]
)
code = response.choices[0].message.content
# Clean up the code: remove leading/trailing whitespace and any markdown code blocks
code = code.strip()
if code.startswith("```python"):
code = code[10:]
if code.endswith("```"):
code = code[:-3]
return code.strip()
except Exception as e:
return f"Error calling GPT-3.5: {str(e)}"
class Agent:
def __init__(self, api_url):
self.api_url = api_url
self.data = None
self.processing_time = 0
def make_api_call(self):
try:
start_time = time.time()
response = requests.get(self.api_url)
if response.status_code == 200:
self.data = response.json()
else:
self.data = {"error": f"API call failed with status code {response.status_code}"}
self.processing_time = time.time() - start_time
except Exception as e:
self.data = {"error": str(e)}
self.processing_time = time.time() - start_time
class SwarmNeuralNetwork:
def __init__(self, api_url, num_agents, calls_per_agent, special_config):
self.api_url = api_url
self.num_agents = num_agents
self.calls_per_agent = calls_per_agent
self.special_config = special_config
self.agents = [Agent(api_url) for _ in range(num_agents)]
self.execution_time = 0
def run(self):
start_time = time.time()
for agent in self.agents:
for _ in range(self.calls_per_agent):
agent.make_api_call()
self.execution_time = time.time() - start_time
def process_data(self):
# This function will be implemented by GPT-3.5
pass
def execute_snn(api_url, openai_api_key, num_agents, calls_per_agent, special_config):
prompt = f"""
Implement the process_data method for the SwarmNeuralNetwork class. The method should:
1. Analyze the data collected by all agents (accessible via self.agents[i].data)
2. Generate a summary of the collected data
3. Derive insights from the collective behavior
4. Calculate performance metrics
5. Return a dictionary with keys 'data_summary', 'insights', and 'performance'
Consider the following parameters:
- API URL: {api_url}
- Number of Agents: {num_agents}
- Calls per Agent: {calls_per_agent}
- Special Configuration: {special_config if special_config else 'None'}
Provide only the Python code for the process_data method, without any additional text or markdown formatting.
"""
process_data_code = call_gpt3_5(prompt, openai_api_key)
if not process_data_code.startswith("Error"):
try:
# Create the SNN instance
snn = SwarmNeuralNetwork(api_url, num_agents, calls_per_agent, special_config)
# Add the process_data method to the SNN class
exec(process_data_code, globals())
SwarmNeuralNetwork.process_data = process_data
# Run the SNN
snn.run()
# Process the data and get results
result = snn.process_data()
return f"Results from the swarm neural network:\n\n{json.dumps(result, indent=2)}"
except Exception as e:
return f"Error executing SNN: {str(e)}\n\nGenerated process_data code:\n{process_data_code}"
else:
return process_data_code
# Define the Gradio interface
iface = gr.Interface(
fn=execute_snn,
inputs=[
gr.Textbox(label="API URL for your task"),
gr.Textbox(label="OpenAI API Key", type="password"),
gr.Number(label="Number of Agents", minimum=1, maximum=100, step=1),
gr.Number(label="Calls per Agent", minimum=1, maximum=100, step=1),
gr.Textbox(label="Special Configuration (optional)")
],
outputs="text",
title="Swarm Neural Network Simulator",
description="Enter the parameters for your Swarm Neural Network (SNN) simulation. The SNN will be constructed and executed based on your inputs.",
examples=[
["https://meowfacts.herokuapp.com/", "your-api-key-here", 3, 1, ""],
["https://api.publicapis.org/entries", "your-api-key-here", 5, 2, "category=Animals"]
]
)
# Launch the interface
iface.launch()