|
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 |
|
|
|
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): |
|
|
|
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: |
|
|
|
snn = SwarmNeuralNetwork(api_url, num_agents, calls_per_agent, special_config) |
|
|
|
|
|
exec(process_data_code, globals()) |
|
SwarmNeuralNetwork.process_data = process_data |
|
|
|
|
|
snn.run() |
|
|
|
|
|
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 |
|
|
|
|
|
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"] |
|
] |
|
) |
|
|
|
|
|
iface.launch() |