@@ -314,23 +314,22 @@ def _create_default_knowledge_base(self, agent: Agent, name: str) -> KnowledgeBa
314314 "Please set your default embedding model in MindsDB settings or provide an existing knowledge base name."
315315 )
316316
317- def add_files (self , name : str , file_paths : List [str ], description : str , knowledge_base : str = None ):
317+ def add_files (self , name : str , file_paths : List [str ], description : str = None ):
318318 """
319319 Add a list of files to the agent for retrieval.
320320
321321 :param name: Name of the agent
322322 :param file_paths: List of paths or URLs to the files to be added.
323323 :param description: Description of the file. Used by agent to know when to do retrieval
324- :param knowledge_base: Name of an existing knowledge base to be used. Will create a default knowledge base if not given.
325324 """
326325 if not file_paths :
327326 return
327+
328+ agent = self .get (name )
328329 filename_no_extension = ''
329- all_filenames = []
330330 for file_path in file_paths :
331331 filename = file_path .split ('/' )[- 1 ].lower ()
332332 filename_no_extension = filename .split ('.' )[0 ]
333- all_filenames .append (filename_no_extension )
334333 try :
335334 _ = self .api .get_file_metadata (filename_no_extension )
336335 except HTTPError as e :
@@ -339,43 +338,31 @@ def add_files(self, name: str, file_paths: List[str], description: str, knowledg
339338 # upload file to mindsdb
340339 self .api .upload_file (filename , file_path )
341340
342- # Insert uploaded files into new knowledge base .
343- agent = self . get ( name )
344- if knowledge_base is not None :
345- kb = self . knowledge_bases . get ( knowledge_base )
346- else :
347- kb_name = f' { name . lower () } _ { filename_no_extension } _ { uuid4 (). hex } _kb'
348- kb = self . _create_default_knowledge_base (agent , kb_name )
341+ # Add file to agent's data if it hasn't been added already .
342+ if 'tables' not in agent . data or f'files. { filename_no_extension } ' not in agent . data [ 'tables' ]:
343+ agent . data . setdefault ( 'tables' , []). append ( f'files. { filename_no_extension } ' )
344+
345+ # Add the description provided to the agent's prompt template.
346+ if description :
347+ agent . prompt_template = (agent . prompt_template or '' ) + f' \n { description } '
349348
350- # Insert the entire file.
351- kb .insert_files (all_filenames )
352-
353- # Make sure skill name is unique.
354- skill_name = f'{ filename_no_extension } _retrieval_skill_{ uuid4 ().hex } '
355- retrieval_params = {
356- 'source' : kb .name ,
357- 'description' : description ,
358- }
359- file_retrieval_skill = self .skills .create (skill_name , 'retrieval' , retrieval_params )
360- agent .skills .append (file_retrieval_skill )
361349 self .update (agent .name , agent )
362350
363- def add_file (self , name : str , file_path : str , description : str , knowledge_base : str = None ):
351+ def add_file (self , name : str , file_path : str , description : str = None ):
364352 """
365353 Add a file to the agent for retrieval.
366354
367355 :param name: Name of the agent
368356 :param file_path: Path to the file to be added, or name of existing file.
369357 :param description: Description of the file. Used by agent to know when to do retrieval
370- :param knowledge_base: Name of an existing knowledge base to be used. Will create a default knowledge base if not given.
371358 """
372- self .add_files (name , [file_path ], description , knowledge_base )
359+ self .add_files (name , [file_path ], description )
373360
374361 def add_webpages (
375362 self ,
376363 name : str ,
377364 urls : List [str ],
378- description : str ,
365+ description : str = None ,
379366 knowledge_base : str = None ,
380367 crawl_depth : int = 1 ,
381368 limit : int = None ,
@@ -407,20 +394,21 @@ def add_webpages(
407394 # Insert crawled webpage.
408395 kb .insert_webpages (urls , crawl_depth = crawl_depth , filters = filters , limit = limit )
409396
410- # Add knowledge base to agent's data if it hasn't been added yet .
397+ # Add knowledge base to agent's data if it hasn't been added already .
411398 if 'knowledge_bases' not in agent .data or kb .name not in agent .data ['knowledge_bases' ]:
412399 agent .data .setdefault ('knowledge_bases' , []).append (kb .name )
413400
414401 # Add the description provided to the agent's prompt template.
415- agent .prompt_template = (agent .prompt_template or '' ) + f'\n { description } '
402+ if description :
403+ agent .prompt_template = (agent .prompt_template or '' ) + f'\n { description } '
416404
417405 self .update (agent .name , agent )
418406
419407 def add_webpage (
420408 self ,
421409 name : str ,
422410 url : str ,
423- description : str ,
411+ description : str = None ,
424412 knowledge_base : str = None ,
425413 crawl_depth : int = 1 ,
426414 limit : int = None ,
@@ -440,40 +428,40 @@ def add_webpage(
440428 self .add_webpages (name , [url ], description , knowledge_base = knowledge_base ,
441429 crawl_depth = crawl_depth , limit = limit , filters = filters )
442430
443- def add_database (self , name : str , database : str , tables : List [str ], description : str ):
431+ def add_database (self , name : str , database : str , tables : List [str ] = None , description : str = None ):
444432 """
445433 Add a database to the agent for retrieval.
446434
447435 :param name: Name of the agent
448436 :param database: Name of the database to be added.
449- :param tables: List of tables to be added.
437+ :param tables: List of tables to be added. If not provided, the entire database will be added.
450438 :param description: Description of the database. Used by agent to know when to do retrieval.
451439 """
452440 # Make sure database exists.
453441 db = self .databases .get (database )
454- # Make sure tables exist.
455- all_table_names = set ([t .name for t in db .tables .list ()])
456- for t in tables :
457- if t not in all_table_names :
458- raise ValueError (f'Table { t } does not exist in database { database } .' )
459-
460- # Make sure skill name is unique.
461- skill_name = f'{ database } _sql_skill_{ uuid4 ().hex } '
462- sql_params = {
463- 'database' : database ,
464- 'tables' : tables ,
465- 'description' : description ,
466- }
467- database_sql_skill = self .skills .create (skill_name , 'sql' , sql_params )
442+
468443 agent = self .get (name )
469444
470- if not agent .params :
471- agent .params = {}
472- if 'prompt_template' not in agent .params :
473- # Set default prompt template. This is for langchain agent check.
474- agent .params ['prompt_template' ] = 'using mindsdb sqltoolbox'
445+ if tables :
446+ # Ensure the tables exist.
447+ all_table_names = set ([t .name for t in db .tables .list ()])
448+ for t in tables :
449+ if t not in all_table_names :
450+ raise ValueError (f'Table { t } does not exist in database { database } .' )
451+
452+ # Add table to agent's data if it hasn't been added already.
453+ if 'tables' not in agent .data or f'{ database } .{ t } ' not in agent .data ['tables' ]:
454+ agent .data .setdefault ('tables' , []).append (f'{ database } .{ t } ' )
455+
456+ else :
457+ # If no tables are provided, add the database itself.
458+ if 'tables' not in agent .data or f'{ database } .*' not in agent .data ['tables' ]:
459+ agent .data .setdefault ('tables' , []).append (f'{ database } .*' )
460+
461+ # Add the description provided to the agent's prompt template.
462+ if description :
463+ agent .prompt_template = (agent .prompt_template or '' ) + f'\n { description } '
475464
476- agent .skills .append (database_sql_skill )
477465 self .update (agent .name , agent )
478466
479467 def create (
0 commit comments