3
3
import minds .utils as utils
4
4
import minds .exceptions as exc
5
5
from minds .datasources import Datasource , DatabaseConfig
6
+ from minds .knowledge_bases import KnowledgeBase , KnowledgeBaseConfig
6
7
7
8
DEFAULT_PROMPT_TEMPLATE = 'Use your database tools to answer the user\' s question: {{question}}'
8
9
@@ -13,6 +14,7 @@ def __init__(
13
14
provider = None ,
14
15
parameters = None ,
15
16
datasources = None ,
17
+ knowledge_bases = None ,
16
18
created_at = None ,
17
19
updated_at = None ,
18
20
** kwargs
@@ -36,6 +38,7 @@ def __init__(
36
38
base_url = base_url
37
39
)
38
40
self .datasources = datasources
41
+ self .knowledge_bases = knowledge_bases
39
42
40
43
def __repr__ (self ):
41
44
return (f'Mind(name={ self .name } , '
@@ -44,6 +47,7 @@ def __repr__(self):
44
47
f'created_at="{ self .created_at } ", '
45
48
f'updated_at="{ self .updated_at } ", '
46
49
f'parameters={ self .parameters } , '
50
+ f'knowledge_bases={ self .knowledge_bases } , '
47
51
f'datasources={ self .datasources } )' )
48
52
49
53
def update (
@@ -53,6 +57,7 @@ def update(
53
57
provider = None ,
54
58
prompt_template = None ,
55
59
datasources = None ,
60
+ knowledge_bases = None ,
56
61
parameters = None ,
57
62
):
58
63
"""
@@ -65,11 +70,17 @@ def update(
65
70
- Datasource object (minds.datasources.Database)
66
71
- datasource config (minds.datasources.DatabaseConfig), in this case datasource will be created
67
72
73
+ Knowledge base can be passed as
74
+ - name, str
75
+ - KnowledgeBase object (minds.knowledge_bases.KnowledgeBase)
76
+ - Knowledge base config (minds.knowledge_bases.KnowledgeBaseConfig), in this case knowledge base will be created
77
+
68
78
:param name: new name of the mind, optional
69
79
:param model_name: new llm model name, optional
70
80
:param provider: new llm provider, optional
71
81
:param prompt_template: new prompt template, optional
72
82
:param datasources: alter list of datasources used by mind, optional
83
+ :param knowledge_bases: alter list of knowledge bases used by mind, optional
73
84
:param parameters, dict: alter other parameters of the mind, optional
74
85
"""
75
86
data = {}
@@ -84,6 +95,13 @@ def update(
84
95
ds_names .append (ds )
85
96
data ['datasources' ] = ds_names
86
97
98
+ if knowledge_bases is not None :
99
+ kb_names = []
100
+ for kb in knowledge_bases :
101
+ kb = self .client .minds ._check_knowledge_base (kb )
102
+ kb_names .append (kb )
103
+ data ['knowledge_bases' ] = kb_names
104
+
87
105
if name is not None :
88
106
data ['name' ] = name
89
107
if model_name is not None :
@@ -149,6 +167,50 @@ def del_datasource(self, datasource: Union[Datasource, str]):
149
167
150
168
self .datasources = updated .datasources
151
169
170
+ def add_knowledge_base (self , knowledge_base : Union [str , KnowledgeBase , KnowledgeBaseConfig ]):
171
+ """
172
+ Add knowledge base to mind
173
+ Knowledge base can be passed as
174
+ - name, str
175
+ - Knowledge base object (minds.knowledge_bases.KnowledgeBase)
176
+ - Knowledge base config (minds.knowledge_bases.KnowledgeBaseConfig), in this case knowledge base will be created
177
+
178
+ :param knowledge_base: input knowledge base
179
+ """
180
+
181
+ kb_name = self .client .minds ._check_knowledge_base (knowledge_base )
182
+
183
+ self .api .post (
184
+ f'/projects/{ self .project } /minds/{ self .name } /knowledge_bases' ,
185
+ data = {
186
+ 'name' : kb_name ,
187
+ }
188
+ )
189
+ updated = self .client .minds .get (self .name )
190
+
191
+ self .knowledge_bases = updated .knowledge_bases
192
+
193
+ def del_knowledge_base (self , knowledge_base : Union [KnowledgeBase , str ]):
194
+ """
195
+ Delete knowledge base from mind
196
+
197
+ Knowledge base can be passed as
198
+ - name, str
199
+ - KnowledgeBase object (minds.knowledge_bases.KnowledgeBase)
200
+
201
+ :param knowledge_base: Knowledge base to delete
202
+ """
203
+ if isinstance (knowledge_base , KnowledgeBase ):
204
+ knowledge_base = knowledge_base .name
205
+ elif not isinstance (knowledge_base , str ):
206
+ raise ValueError (f'Unknown type of knowledge base: { knowledge_base } ' )
207
+ self .api .delete (
208
+ f'/projects/{ self .project } /minds/{ self .name } /knowledge_bases/{ knowledge_base } ' ,
209
+ )
210
+ updated = self .client .minds .get (self .name )
211
+
212
+ self .knowledge_bases = updated .knowledge_bases
213
+
152
214
def completion (self , message : str , stream : bool = False ) -> Union [str , Iterable [object ]]:
153
215
"""
154
216
Call mind completion
@@ -221,12 +283,28 @@ def _check_datasource(self, ds) -> str:
221
283
raise ValueError (f'Unknown type of datasource: { ds } ' )
222
284
return ds
223
285
286
+ def _check_knowledge_base (self , knowledge_base ) -> str :
287
+ if isinstance (knowledge_base , KnowledgeBase ):
288
+ knowledge_base = knowledge_base .name
289
+ elif isinstance (knowledge_base , KnowledgeBaseConfig ):
290
+ # if not exists - create
291
+ try :
292
+ self .client .knowledge_bases .get (knowledge_base .name )
293
+ except exc .ObjectNotFound :
294
+ self .client .knowledge_bases .create (knowledge_base )
295
+
296
+ knowledge_base = knowledge_base .name
297
+ elif not isinstance (knowledge_base , str ):
298
+ raise ValueError (f'Unknown type of knowledge base: { knowledge_base } ' )
299
+ return knowledge_base
300
+
224
301
def create (
225
302
self , name ,
226
303
model_name = None ,
227
304
provider = None ,
228
305
prompt_template = None ,
229
306
datasources = None ,
307
+ knowledge_bases = None ,
230
308
parameters = None ,
231
309
replace = False ,
232
310
update = False ,
@@ -239,11 +317,17 @@ def create(
239
317
- Datasource object (minds.datasources.Database)
240
318
- datasource config (minds.datasources.DatabaseConfig), in this case datasource will be created
241
319
320
+ Knowledge base can be passed as
321
+ - name, str
322
+ - KnowledgeBase object (minds.knowledge_bases.KnowledgeBase)
323
+ - Knowledge base config (minds.knowledge_bases.KnowledgeBaseConfig), in this case knowledge base will be created
324
+
242
325
:param name: name of the mind
243
326
:param model_name: llm model name, optional
244
327
:param provider: llm provider, optional
245
328
:param prompt_template: instructions to llm, optional
246
329
:param datasources: list of datasources used by mind, optional
330
+ :param knowledge_bases: alter list of knowledge bases used by mind, optional
247
331
:param parameters, dict: other parameters of the mind, optional
248
332
:param replace: if true - to remove existing mind, default is false
249
333
:param update: if true - to update mind if exists, default is false
@@ -267,6 +351,12 @@ def create(
267
351
268
352
ds_names .append (ds )
269
353
354
+ kb_names = []
355
+ if knowledge_bases :
356
+ for kb in knowledge_bases :
357
+ kb = self ._check_knowledge_base (kb )
358
+ kb_names .append (kb )
359
+
270
360
if parameters is None :
271
361
parameters = {}
272
362
@@ -290,6 +380,7 @@ def create(
290
380
'provider' : provider ,
291
381
'parameters' : parameters ,
292
382
'datasources' : ds_names ,
383
+ 'knowledge_bases' : kb_names
293
384
}
294
385
)
295
386
mind = self .get (name )
0 commit comments