1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15- from typing import BinaryIO , Literal , TextIO
15+ from typing import Any , BinaryIO , Literal , TextIO
16+
17+ from pydantic import BaseModel
1618
1719from veadk .database .database_adapter import get_knowledgebase_database_adapter
1820from veadk .database .database_factory import DatabaseFactory
@@ -25,23 +27,23 @@ def build_knowledgebase_index(app_name: str):
2527 return f"veadk_kb_{ app_name } "
2628
2729
28- class KnowledgeBase :
29- def __init__ (
30- self ,
31- backend : Literal ["local" , "opensearch" , "viking" , "redis" , "mysql" ] = "local" ,
32- top_k : int = 10 ,
33- db_config = None ,
34- ):
35- logger .info (f"Initializing knowledgebase: backend={ backend } top_k={ top_k } " )
30+ class KnowledgeBase (BaseModel ):
31+ backend : Literal ["local" , "opensearch" , "viking" , "redis" , "mysql" ] = "local"
32+ top_k : int = 10
33+ db_config : Any | None = None
3634
37- self .backend = backend
38- self .top_k = top_k
35+ def model_post_init (self , __context : Any ) -> None :
36+ logger .info (
37+ f"Initializing knowledgebase: backend={ self .backend } top_k={ self .top_k } "
38+ )
3939
40- self .db_client = DatabaseFactory .create (backend = backend , config = db_config )
41- self .adapter = get_knowledgebase_database_adapter (self .db_client )
40+ self ._db_client = DatabaseFactory .create (
41+ backend = self .backend , config = self .db_config
42+ )
43+ self ._adapter = get_knowledgebase_database_adapter (self ._db_client )
4244
4345 logger .info (
44- f"Initialized knowledgebase: db_client={ self .db_client .__class__ .__name__ } adapter={ self .adapter } "
46+ f"Initialized knowledgebase: db_client={ self ._db_client .__class__ .__name__ } adapter={ self ._adapter } "
4547 )
4648
4749 def add (
@@ -67,7 +69,7 @@ def add(
6769
6870 logger .info (f"Adding documents to knowledgebase: index={ index } " )
6971
70- self .adapter .add (data = data , index = index )
72+ self ._adapter .add (data = data , index = index )
7173
7274 def search (self , query : str , app_name : str , top_k : int | None = None ) -> list [str ]:
7375 top_k = self .top_k if top_k is None else top_k
@@ -76,7 +78,7 @@ def search(self, query: str, app_name: str, top_k: int | None = None) -> list[st
7678 f"Searching knowledgebase: app_name={ app_name } query={ query } top_k={ top_k } "
7779 )
7880 index = build_knowledgebase_index (app_name )
79- result = self .adapter .query (query = query , index = index , top_k = top_k )
81+ result = self ._adapter .query (query = query , index = index , top_k = top_k )
8082 if len (result ) == 0 :
8183 logger .warning (f"No documents found in knowledgebase. Query: { query } " )
8284 return result
@@ -87,8 +89,8 @@ def delete(self, app_name: str) -> bool:
8789
8890 def delete_doc (self , app_name : str , id : str ) -> bool :
8991 index = build_knowledgebase_index (app_name )
90- return self .adapter .delete_doc (index = index , id = id )
92+ return self ._adapter .delete_doc (index = index , id = id )
9193
9294 def list_docs (self , app_name : str , offset : int = 0 , limit : int = 100 ) -> list [dict ]:
9395 index = build_knowledgebase_index (app_name )
94- return self .adapter .list_docs (index = index , offset = offset , limit = limit )
96+ return self ._adapter .list_docs (index = index , offset = offset , limit = limit )
0 commit comments