77from dotenv import load_dotenv
88from litellm import completion
99from datetime import datetime
10-
11- from litemultiagent .core .agent_system import AgentSystem
10+ from supabase import create_client , Client
11+ import os
12+ import csv
1213
1314_ = load_dotenv ()
1415
3940 },
4041}
4142
43+ # Initialize Supabase client
44+ url = os .getenv ("SUPABASE_URL" )
45+ key = os .getenv ("SUPABASE_ANON_KEY" )
46+ supabase : Optional [Client ] = None
47+ if url and key :
48+ try :
49+ supabase = create_client (url , key )
50+ except Exception as e :
51+ logger .error (f"Failed to initialize Supabase client: { e } " )
52+
4253class BaseAgent :
4354 def __init__ (self , agent_name : str , agent_description , parameter_description , tools : List [Dict [str , Any ]],
4455 available_tools : Dict [str , callable ],
@@ -82,10 +93,10 @@ def send_prompt(self, goal: str) -> str:
8293 self .goal = goal
8394 return self ._send_completion_request (plan = goal , depth = 0 )
8495
85- def set_system (self , system : AgentSystem ):
86- self .system = system
87- self .model_name = self .model_name or self .system . model_name
88- self .tool_choice = self .tool_choice or self .system . tool_choice
96+ def set_shared_config (self , shared_config ):
97+ self .shared_config = shared_config
98+ self .model_name = self .model_name or self .shared_config [ " model_name" ]
99+ self .tool_choice = self .tool_choice or self .shared_config [ " tool_choice" ]
89100
90101 def _send_completion_request (self , plan , depth : int = 0 ) -> str :
91102 pass
@@ -129,16 +140,17 @@ def _log_response(self, response, depth):
129140 logger .info (f'Agent: { self .agent_name } , depth: { depth } , response: { response } ' )
130141
131142 def _save_response (self , response , depth ):
132- if self .system . save_to == "supabase" :
143+ if self .shared_config [ " save_to" ] == "supabase" :
133144 self ._save_to_supabase (response , depth )
134- if self .system . save_to == "csv" :
145+ if self .shared_config [ " save_to" ] == "csv" :
135146 self ._save_to_csv (response , depth )
136147
137148 def _save_to_csv (self , response , depth ):
138149 usage_dict = self ._extract_cost (response )
139150 data = {
140- "meta_task_id" : self .system .meta_task_id ,
141- "task_id" : self .system .task_id ,
151+ "system_name" : self .shared_config ["system_name" ],
152+ "system_runtime_id" : self .shared_config ["system_runtime_id" ],
153+ "task_id" : self .shared_config ["task_id" ],
142154 "agent" : self .agent_name ,
143155 "depth" : depth ,
144156 "role" : "assistant" ,
@@ -151,13 +163,34 @@ def _save_to_csv(self, response, depth):
151163 "model_name" : self .model_name ,
152164 "timestamp" : datetime .now ().isoformat ()
153165 }
154- self .system .save_to_csv (data )
166+ filename = os .path .join (self .shared_config ["log_dir" ], f"multiagent_data_{ datetime .now ().strftime ('%Y%m%d' )} .csv" )
167+ file_exists = os .path .isfile (filename )
168+
169+ # Ensure the directory exists
170+ os .makedirs (os .path .dirname (filename ), exist_ok = True )
171+
172+ # If file doesn't exist, create it with header
173+ if not file_exists :
174+ with open (filename , 'w' , newline = '' ) as csvfile :
175+ fieldnames = list (data .keys ())
176+ writer = csv .DictWriter (csvfile , fieldnames = fieldnames )
177+ writer .writeheader ()
178+ logger .info (f"Created new CSV file with header: { filename } " )
179+
180+ # Append data to the file
181+ with open (filename , 'a' , newline = '' ) as csvfile :
182+ fieldnames = list (data .keys ())
183+ writer = csv .DictWriter (csvfile , fieldnames = fieldnames )
184+ writer .writerow (data )
185+
186+ logger .info (f"Data saved to CSV: { filename } " )
155187
156188 def _save_to_supabase (self , response , depth ):
157189 usage_dict = self ._extract_cost (response )
158190 data = {
159- "meta_task_id" : self .system .meta_task_id ,
160- "task_id" : self .system .task_id ,
191+ "system_name" : self .shared_config ["system_name" ],
192+ "system_runtime_id" : self .shared_config ["system_runtime_id" ],
193+ "task_id" : self .shared_config ["task_id" ],
161194 "agent" : self .agent_name ,
162195 "depth" : depth ,
163196 "role" : "assistant" ,
@@ -169,7 +202,13 @@ def _save_to_supabase(self, response, depth):
169202 "total_cost" : usage_dict ["total_cost" ],
170203 "model_name" : self .model_name ,
171204 }
172- self .system .save_to_csv (data )
205+ if supabase is None :
206+ logger .warning ("Supabase client is not initialized. Skipping database save." )
207+ return
208+ try :
209+ supabase .table ("multiagent" ).insert (data ).execute ()
210+ except Exception as e :
211+ logger .error (f"Failed to save data to Supabase: { e } " )
173212
174213 def _extract_cost (self , response ):
175214 prompt_tokens = response .usage .prompt_tokens
0 commit comments