Skip to content

Commit 9c67be9

Browse files
updated methods for adding files and databases to avoid using skills
1 parent 127aa0f commit 9c67be9

File tree

1 file changed

+39
-51
lines changed

1 file changed

+39
-51
lines changed

mindsdb_sdk/agents.py

Lines changed: 39 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)