TuringsSolutions's picture
Update app.py
d19c2e9 verified
raw
history blame
4.98 kB
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()