44from uuid import uuid4
55import datetime
66import json
7+ import pandas as pd
78
89from mindsdb_sdk .databases import Databases
910from mindsdb_sdk .knowledge_bases import KnowledgeBase , KnowledgeBases
@@ -382,14 +383,50 @@ def add_database(self, name: str, database: str, tables: List[str], description:
382383 agent .skills .append (database_sql_skill )
383384 self .update (agent .name , agent )
384385
386+ def _create_ml_engine_if_not_exists (self , name : str = 'langchain' ):
387+ try :
388+ _ = self .ml_engines .get ('langchain' )
389+ except Exception :
390+ # Create the engine if it doesn't exist.
391+ _ = self .ml_engines .create ('langchain' , handler = 'langchain' )
392+
393+ def _create_model_if_not_exists (self , name : str , model : Union [Model , dict , str ]) -> str :
394+ # Create langchain engine if it doesn't exist.
395+ self ._create_ml_engine_if_not_exists ()
396+ # Create a default model if it doesn't exist.
397+ default_model_params = {
398+ 'predict' : 'answer' ,
399+ 'engine' : 'langchain' ,
400+ 'prompt_template' : 'Answer the user"s question in a helpful way: {{question}}' ,
401+ # Use GPT-4 by default.
402+ 'provider' : 'openai' ,
403+ 'model_name' : 'gpt-4'
404+ }
405+
406+ if isinstance (model , dict ):
407+ default_model_params .update (model )
408+ # Create model with passed in params.
409+ return self .models .create (
410+ f'{ name } _default_model' ,
411+ ** default_model_params
412+ ).name
413+
414+ if model is None :
415+ # Create model with default params.
416+ return _DEFAULT_LLM_MODEL
417+
418+ if isinstance (model , Model ):
419+ return model .name
420+
421+ return model
422+
385423 def create (
386424 self ,
387425 name : str ,
388426 model : Union [Model , dict , str ] = None ,
389427 provider : str = None ,
390428 skills : List [Union [Skill , str ]] = None ,
391- params : dict = None ,
392- ** kwargs ) -> Agent :
429+ params : dict = None ) -> Agent :
393430 """
394431 Create new agent and return it
395432
@@ -412,14 +449,7 @@ def create(
412449 _ = self .skills .create (skill .name , skill .type , skill .params )
413450 skill_names .append (skill .name )
414451
415- if model is None :
416- model = _DEFAULT_LLM_MODEL
417-
418- if params is None :
419- params = {}
420- params .update (kwargs )
421- if 'prompt_template' not in params :
422- params ['prompt_template' ] = 'Answer the user"s question in a helpful way: {{question}}'
452+ model = self ._create_model_if_not_exists (name , model )
423453
424454 data = self .api .create_agent (self .project , name , model , provider , skill_names , params )
425455 return Agent .from_json (data , self )
0 commit comments