11from mindsdb_sql_parser .ast .base import ASTNode
2+ from mindsdb_sql_parser .ast import Identifier
23from mindsdb_sql_parser .utils import indent
34
45
@@ -106,6 +107,7 @@ def get_string(self, *args, **kwargs):
106107 out_str = f'DROP KNOWLEDGE_BASE { "IF EXISTS " if self .if_exists else "" } { self .name .to_string ()} '
107108 return out_str
108109
110+
109111class CreateKnowledgeBaseIndex (ASTNode ):
110112 """
111113 Create a new index in the knowledge base
@@ -127,6 +129,7 @@ def get_string(self, *args, **kwargs):
127129 out_str = f'CREATE INDEX ON KNOWLEDGE_BASE { self .name .to_string ()} '
128130 return out_str
129131
132+
130133class DropKnowledgeBaseIndex (ASTNode ):
131134 """
132135 Delete an index in the knowledge base
@@ -146,4 +149,65 @@ def to_tree(self, *args, level=0, **kwargs):
146149
147150 def get_string (self , * args , ** kwargs ):
148151 out_str = f'DROP INDEX ON KNOWLEDGE_BASE { self .name .to_string ()} '
149- return out_str
152+ return out_str
153+
154+
155+ class EvaluateKnowledgeBase (ASTNode ):
156+ """
157+ Evaluate a knowledge base.
158+ """
159+ def __init__ (
160+ self ,
161+ name : Identifier ,
162+ test_table : Identifier ,
163+ llm : dict ,
164+ save_to : Identifier ,
165+ generate_data : dict = None ,
166+ * args ,
167+ ** kwargs ):
168+ """
169+ Args:
170+ name: Identifier -- name of the knowledge base.
171+ test_table: Identifier -- name of the table to use for testing.
172+ llm: dict -- parameters for the LLM to use for evaluation.
173+ save_to: Identifier -- name of the table to save the results to.
174+ generate_data: dict -- parameters for generating data, if available.
175+ """
176+ super ().__init__ (* args , ** kwargs )
177+ self .name = name
178+ self .test_table = test_table
179+ self .llm = llm
180+ self .save_to = save_to
181+ self .generate_data = generate_data
182+
183+ def to_tree (self , * args , level = 0 , ** kwargs ):
184+ ind = indent (level )
185+ generate_data_str = f"{ ind } generate_data={ self .generate_data } ,\n " if self .generate_data else ""
186+ out_str = f"""
187+ { ind } EvaluateKnowledgeBase(
188+ { ind } name={ self .name .to_string ()} ,
189+ { ind } test_table={ self .test_table .to_string ()} ,
190+ { ind } llm={ self .llm } ,
191+ { ind } save_to={ self .save_to .to_string ()} ,
192+ { generate_data_str } { ind } )
193+ """
194+ return out_str
195+
196+ def get_string (self , * args , ** kwargs ):
197+ using_args = [
198+ f"LLM={ repr (self .llm )} " ,
199+ f"TEST_TABLE={ self .test_table .to_string ()} " ,
200+ f"SAVE_TO={ self .save_to .to_string ()} "
201+ ]
202+
203+ if self .generate_data :
204+ using_args .append (f"GENERATE_DATA={ repr (self .generate_data )} " )
205+
206+ using_str = "USING " + ", " .join (using_args )
207+
208+ output_str = (
209+ f"EVALUATE KNOWLEDGE_BASE { self .name .to_string ()} "
210+ f"{ using_str } "
211+ )
212+
213+ return output_str .strip ()
0 commit comments