Skip to content

Commit bf6fbce

Browse files
committed
Update example
1 parent 83f6951 commit bf6fbce

File tree

2 files changed

+153
-164
lines changed

2 files changed

+153
-164
lines changed

bindings/ceylon/tests/tasks/llm_software_agency.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
from textwrap import dedent
23

34
from langchain_openai import ChatOpenAI
45

@@ -9,9 +10,11 @@
910
# Define the main task
1011
task_management_app = Task(
1112
name="Create Task Management App",
12-
description="Develop a advanced task management application with features for adding, "
13-
"listing, and completing tasks. and with priority from list.also need to download list of tasks by date.and need to check finished tasks"
14-
" no need to use DB. only UI base output is enough"
13+
description=dedent("""
14+
Develop a advanced task management application with features for adding, listing, and completing tasks.
15+
and with priority from list.also need to download list of tasks by date.and need to check finished tasks
16+
no need to use DB. only UI base output is enough. final output must be python script.
17+
""")
1518
)
1619

1720
tasks = [task_management_app]
@@ -30,10 +33,6 @@
3033
context="Experienced in developing backend systems, API design, and database integration.",
3134
skills=[
3235
"Python Programming",
33-
"API Development",
34-
"Database Design",
35-
"Backend Architecture",
36-
"Data Modeling"
3736
],
3837
tools=[],
3938
llm=code_llm
@@ -45,8 +44,7 @@
4544
skills=[
4645
"UI Design",
4746
"User Experience",
48-
"Frontend Development",
49-
"Python GUI Frameworks"
47+
"Python GUI Frameworks like Tkinter",
5048
],
5149
tools=[],
5250
llm=code_llm
@@ -56,8 +54,19 @@
5654
# enable_log("INFO")
5755
# Initialize TaskManager
5856
task_manager = LLMTaskCoordinator(tasks, agents, tool_llm=tool_llm, llm=llm,
59-
team_goal="Develop and deliver innovative, secure, and scalable software solutions that drive business value, achieve 95% client satisfaction, and are completed on time and within budget",
60-
context="Utilize agile methodologies to gather and analyze client requirements, architect robust solutions, implement clean and efficient code, conduct thorough testing (including unit, integration, and user acceptance), and deploy using CI/CD practices. Emphasize code quality, performance optimization, and adherence to industry standards throughout the development lifecycle.",
57+
team_goal=dedent("""
58+
Develop and deliver straightforward, secure, and efficient Python-based
59+
software solutions that provide clear business value,
60+
achieve 95% client satisfaction, and are completed on time and within budget
61+
"""),
62+
context=dedent("""
63+
Employ agile methodologies to gather and analyze client requirements, design simple yet
64+
robust solutions, implement clean and readable Python code, conduct thorough testing,
65+
and deploy using streamlined CI/CD practices. Prioritize code simplicity,
66+
maintainability, and adherence to Python best practices
67+
throughout the development lifecycle, following the principle that
68+
'simple is better than complex'.
69+
"""),
6170
)
6271
# task_manager.visualize_team_network(output_file=None)
6372
# Execute tasks
Lines changed: 133 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -1,193 +1,173 @@
1+
import tkinter as tk
2+
from tkinter import messagebox, END, filedialog
3+
import csv
14
from datetime import datetime
25

36

47
class Task:
5-
def __init__(self, title, due_date, description, priority='Medium'):
6-
self.title = title
7-
self.due_date = due_date
8+
def __init__(self, description, date):
89
self.description = description
9-
self.priority = priority
1010
self.completed = False
11-
12-
def __repr__(self):
13-
status = "Completed" if self.completed else "Pending"
14-
return f"Task(title={self.title}, due_date={self.due_date}, description={self.description}, priority={self.priority}, status={status})"
15-
16-
17-
import csv
11+
self.date = date # New date attribute
1812

1913

2014
class TaskManager:
2115
def __init__(self):
2216
self.tasks = []
2317

24-
def add_task(self, title, due_date, description, priority='Medium'):
25-
new_task = Task(title, due_date, description, priority)
26-
self.tasks.append(new_task)
27-
print(f"Task '{title}' added successfully.")
18+
def add_task(self, description, date):
19+
task = Task(description, date)
20+
self.tasks.append(task)
2821

29-
def list_tasks(self, completed=None):
30-
if completed is None:
31-
return self.tasks
32-
elif completed:
33-
return [task for task in self.tasks if task.completed]
34-
else:
35-
return [task for task in self.tasks if not task.completed]
36-
37-
def complete_task(self, title):
38-
for task in self.tasks:
39-
if task.title == title and not task.completed:
40-
task.completed = True
41-
print(f"Task '{title}' marked as completed.")
42-
return
43-
print(f"Task '{title}' not found or already completed.")
44-
45-
def delete_task(self, title):
46-
for task in self.tasks:
47-
if task.title == title:
48-
self.tasks.remove(task)
49-
print(f"Task '{title}' deleted successfully.")
50-
return
51-
print(f"Task '{title}' not found.")
52-
53-
def set_task_priority(self, title, new_priority):
54-
for task in self.tasks:
55-
if task.title == title:
56-
task.priority = new_priority
57-
print(f"Priority for task '{title}' set to '{new_priority}'.")
58-
return
59-
print(f"Task '{title}' not found.")
60-
61-
def filter_tasks_by_date(self, date):
62-
return [task for task in self.tasks if task.due_date.date() == date]
63-
64-
def export_tasks_to_csv(self, tasks, filename):
65-
with open(filename, 'w', newline='') as csvfile:
66-
fieldnames = ['title', 'due_date', 'description', 'priority', 'status']
67-
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
68-
69-
writer.writeheader()
70-
for task in tasks:
71-
writer.writerow({
72-
'title': task.title,
73-
'due_date': task.due_date.strftime('%Y-%m-%d %H:%M:%S'),
74-
'description': task.description,
75-
'priority': task.priority,
76-
'status': 'Completed' if task.completed else 'Pending'
77-
})
78-
print(f"Tasks exported to {filename} successfully.")
79-
80-
81-
def download_tasks_by_date(manager, date, filename):
82-
tasks = manager.filter_tasks_by_date(date)
83-
manager.export_tasks_to_csv(tasks, filename)
22+
def complete_task(self, index):
23+
if 0 <= index < len(self.tasks):
24+
self.tasks[index].completed = True
25+
return self.tasks[index].description
26+
return None
8427

28+
def delete_task(self, index):
29+
if 0 <= index < len(self.tasks):
30+
return self.tasks.pop(index).description
31+
return None
8532

86-
import tkinter as tk
87-
from tkinter import ttk, filedialog, simpledialog
33+
def get_task_list(self):
34+
return [(task.description, task.completed, task.date) for task in self.tasks]
35+
36+
def get_finished_tasks(self):
37+
return [(task.description, task.completed, task.date) for task in self.tasks if task.completed]
38+
39+
def get_tasks_filtered_by_date(self, filter_date):
40+
return [(task.description, task.completed, task.date) for task in self.tasks if task.date == filter_date]
8841

8942

90-
class TaskApp:
91-
def __init__(self, root, task_manager):
92-
self.root = root
93-
self.task_manager = task_manager
94-
self.root.title("Task Manager")
43+
class TaskManagerApp:
44+
def __init__(self, master):
45+
self.master = master
46+
self.task_manager = TaskManager()
47+
master.title("Task Management Application")
9548

96-
self.create_widgets()
97-
self.update_task_list()
49+
# Task Entry Section
50+
self.task_label = tk.Label(master, text="Enter Task:")
51+
self.task_label.pack()
9852

99-
def create_widgets(self):
100-
self.frame = tk.Frame(self.root)
101-
self.frame.pack()
53+
self.task_entry = tk.Entry(master, width=50)
54+
self.task_entry.pack()
10255

103-
self.task_listbox = tk.Listbox(self.frame, width=100, height=20)
104-
self.task_listbox.pack(side=tk.LEFT)
56+
self.date_label = tk.Label(master, text="Enter Date (YYYY-MM-DD):")
57+
self.date_label.pack()
10558

106-
self.scrollbar = tk.Scrollbar(self.frame)
107-
self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
108-
self.task_listbox.config(yscrollcommand=self.scrollbar.set)
109-
self.scrollbar.config(command=self.task_listbox.yview)
59+
self.date_entry = tk.Entry(master, width=50)
60+
self.date_entry.pack()
11061

111-
self.add_task_button = tk.Button(self.root, text="Add Task", command=self.add_task)
62+
self.add_task_button = tk.Button(master, text="Add Task", command=self.add_task)
11263
self.add_task_button.pack()
11364

114-
self.complete_task_button = tk.Button(self.root, text="Complete Task", command=self.complete_task)
65+
# Task List Section
66+
self.task_listbox = tk.Listbox(master, width=50, height=10)
67+
self.task_listbox.pack()
68+
69+
self.complete_task_button = tk.Button(master, text="Complete Task", command=self.complete_task)
11570
self.complete_task_button.pack()
11671

117-
self.show_finished_tasks_button = tk.Button(self.root, text="Show Finished Tasks",
118-
command=self.show_finished_tasks)
119-
self.show_finished_tasks_button.pack()
72+
self.delete_task_button = tk.Button(master, text="Delete Task", command=self.delete_task)
73+
self.delete_task_button.pack()
12074

121-
self.show_pending_tasks_button = tk.Button(self.root, text="Show Pending Tasks",
122-
command=self.show_pending_tasks)
123-
self.show_pending_tasks_button.pack()
75+
# Download Section
76+
self.download_button = tk.Button(master, text="Download Tasks", command=self.download_tasks)
77+
self.download_button.pack()
12478

125-
self.show_all_tasks_button = tk.Button(self.root, text="Show All Tasks", command=self.show_all_tasks)
126-
self.show_all_tasks_button.pack()
79+
# Finished Tasks Section
80+
self.view_finished_tasks_button = tk.Button(master, text="View Finished Tasks",
81+
command=self.view_finished_tasks)
82+
self.view_finished_tasks_button.pack()
12783

128-
self.download_tasks_button = tk.Button(self.root, text="Download Tasks by Date", command=self.download_tasks)
129-
self.download_tasks_button.pack()
84+
# Status Section
85+
self.status_label = tk.Label(master, text="", fg="green")
86+
self.status_label.pack()
13087

13188
def add_task(self):
132-
title = simpledialog.askstring("Task Title", "Enter task title:")
133-
due_date = simpledialog.askstring("Due Date", "Enter due date (YYYY-MM-DD):")
134-
description = simpledialog.askstring("Description", "Enter task description:")
135-
priority = simpledialog.askstring("Priority", "Enter task priority (Low, Medium, High):", initialvalue="Medium")
136-
137-
if title and due_date and description and priority:
138-
try:
139-
due_date = datetime.strptime(due_date, "%Y-%m-%d")
140-
self.task_manager.add_task(title, due_date, description, priority)
141-
self.update_task_list()
142-
except ValueError:
143-
print("Invalid date format. Please enter date in YYYY-MM-DD format.")
89+
task = self.task_entry.get()
90+
date_str = self.date_entry.get()
91+
if task and self.validate_date(date_str):
92+
self.task_manager.add_task(task, date_str)
93+
self.task_entry.delete(0, END)
94+
self.date_entry.delete(0, END)
95+
self.update_task_listbox()
96+
self.update_status("Task added!")
97+
else:
98+
self.update_status("Please enter a valid task and date.")
14499

145100
def complete_task(self):
146-
selected_task = self.task_listbox.get(tk.ACTIVE)
147-
if selected_task:
148-
title = selected_task.split(",")[0].split("=")[1].strip()
149-
self.task_manager.complete_task(title)
150-
self.update_task_list()
151-
152-
def show_finished_tasks(self):
153-
self.task_listbox.delete(0, tk.END)
154-
for task in self.task_manager.list_tasks(completed=True):
155-
self.task_listbox.insert(tk.END, task)
156-
157-
def show_pending_tasks(self):
158-
self.task_listbox.delete(0, tk.END)
159-
for task in self.task_manager.list_tasks(completed=False):
160-
self.task_listbox.insert(tk.END, task)
161-
162-
def show_all_tasks(self):
163-
self.task_listbox.delete(0, tk.END)
164-
for task in self.task_manager.list_tasks():
165-
self.task_listbox.insert(tk.END, task)
101+
try:
102+
selected_task_index = self.task_listbox.curselection()[0]
103+
completed_task = self.task_manager.complete_task(selected_task_index)
104+
if completed_task:
105+
self.update_task_listbox()
106+
self.update_status(f"Task '{completed_task}' completed!")
107+
else:
108+
self.update_status("Error completing task.")
109+
except IndexError:
110+
self.update_status("Please select a task to complete.")
111+
112+
def delete_task(self):
113+
try:
114+
selected_task_index = self.task_listbox.curselection()[0]
115+
deleted_task = self.task_manager.delete_task(selected_task_index)
116+
if deleted_task:
117+
self.update_task_listbox()
118+
self.update_status(f"Task '{deleted_task}' deleted!")
119+
else:
120+
self.update_status("Error deleting task.")
121+
except IndexError:
122+
self.update_status("Please select a task to delete.")
166123

167124
def download_tasks(self):
168-
date_str = simpledialog.askstring("Task Date", "Enter date (YYYY-MM-DD):")
169-
if date_str:
170-
try:
171-
date = datetime.strptime(date_str, '%Y-%m-%d').date()
172-
filename = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV files", "*.csv")])
173-
if filename:
174-
download_tasks_by_date(self.task_manager, date, filename)
175-
except ValueError:
176-
print("Invalid date format. Please enter date in YYYY-MM-DD format.")
177-
178-
def update_task_list(self):
179-
self.task_listbox.delete(0, tk.END)
180-
for task in self.task_manager.list_tasks():
181-
self.task_listbox.insert(tk.END, task)
125+
filter_date = self.date_entry.get()
126+
if self.validate_date(filter_date):
127+
tasks_to_download = self.task_manager.get_tasks_filtered_by_date(filter_date)
128+
if tasks_to_download:
129+
file_path = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV files", "*.csv")])
130+
if file_path:
131+
with open(file_path, mode='w', newline='') as file:
132+
writer = csv.writer(file)
133+
writer.writerow(["Task Description", "Completed", "Date"])
134+
for task_desc, completed, date in tasks_to_download:
135+
writer.writerow([task_desc, completed, date])
136+
self.update_status("Tasks downloaded successfully!")
137+
else:
138+
self.update_status("Download cancelled.")
139+
else:
140+
self.update_status("No tasks found for this date.")
141+
else:
142+
self.update_status("Please enter a valid date (YYYY-MM-DD).")
143+
144+
def view_finished_tasks(self):
145+
finished_tasks = self.task_manager.get_finished_tasks()
146+
self.task_listbox.delete(0, END)
147+
if finished_tasks:
148+
for task_description, completed, date in finished_tasks:
149+
self.task_listbox.insert(END, f"✔️ {task_description} (Date: {date})")
150+
else:
151+
self.task_listbox.insert(END, "No finished tasks.")
182152

153+
def validate_date(self, date_str):
154+
try:
155+
datetime.strptime(date_str, '%Y-%m-%d')
156+
return True
157+
except ValueError:
158+
return False
183159

184-
if __name__ == "__main__":
185-
root = tk.Tk()
186-
manager = TaskManager()
160+
def update_task_listbox(self):
161+
self.task_listbox.delete(0, END)
162+
for task_description, completed, date in self.task_manager.get_task_list():
163+
status = "✔️" if completed else "❌"
164+
self.task_listbox.insert(END, f"{status} {task_description} (Date: {date})")
165+
166+
def update_status(self, message):
167+
self.status_label.config(text=message)
187168

188-
# Add some sample tasks for testing
189-
manager.add_task("Task 1", datetime(2023, 10, 15), "Description for Task 1", priority='High')
190-
manager.add_task("Task 2", datetime(2023, 10, 20), "Description for Task 2", priority='Low')
191169

192-
app = TaskApp(root, manager)
170+
if __name__ == "__main__":
171+
root = tk.Tk()
172+
app = TaskManagerApp(root)
193173
root.mainloop()

0 commit comments

Comments
 (0)