70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
import tkinter as tk
|
|
from tkinter import simpledialog, messagebox
|
|
import ollama
|
|
import random
|
|
|
|
class Agent:
|
|
def __init__(self, role):
|
|
self.role = role
|
|
|
|
def analyze_task(self, task):
|
|
response = ollama.chat(
|
|
model='llama3.2-vision',
|
|
messages=[{
|
|
'role': 'user',
|
|
'content': f"As a {self.role}, analyze this task: {task}"
|
|
}]
|
|
)
|
|
return response['message']['content']
|
|
|
|
class Supervisor:
|
|
def __init__(self):
|
|
self.agents = []
|
|
|
|
def add_agent(self, agent):
|
|
self.agents.append(agent)
|
|
|
|
def assign_task(self, task):
|
|
for agent in self.agents:
|
|
analysis = agent.analyze_task(task)
|
|
response = ollama.chat(
|
|
model='llama3.2-vision',
|
|
messages=[{
|
|
'role': 'user',
|
|
'content': f"As a supervisor, is this analysis satisfactory? Analysis: {analysis}"
|
|
}]
|
|
)
|
|
if "yes" in response['message']['content'].lower():
|
|
return f"Task solved by {agent.role}"
|
|
return "Task not solved satisfactorily"
|
|
|
|
def create_multi_agent_system():
|
|
roles = ['Detective', 'Scientist', 'Artist', 'Engineer', 'Philosopher']
|
|
num_agents = simpledialog.askinteger("Input", "How many agents? (2-5)", minvalue=2, maxvalue=5)
|
|
|
|
supervisor = Supervisor()
|
|
|
|
for _ in range(num_agents):
|
|
role = simpledialog.askstring("Input", f"Choose a role for agent {_+1}:\n" + "\n".join(roles))
|
|
if role in roles:
|
|
supervisor.add_agent(Agent(role))
|
|
roles.remove(role)
|
|
else:
|
|
messagebox.showerror("Error", "Invalid role selected")
|
|
return None
|
|
|
|
return supervisor
|
|
|
|
def main():
|
|
root = tk.Tk()
|
|
root.withdraw()
|
|
|
|
system = create_multi_agent_system()
|
|
if system:
|
|
task = simpledialog.askstring("Input", "Enter the task:")
|
|
result = system.assign_task(task)
|
|
messagebox.showinfo("Result", result)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|