11import os
2- from typing import Any , Dict , List , Optional
2+ from typing import Any
33
44from pydantic import BaseModel , ConfigDict , Field
55
66from crewai .knowledge .source .base_knowledge_source import BaseKnowledgeSource
77from crewai .knowledge .storage .knowledge_storage import KnowledgeStorage
8+ from crewai .rag .types import SearchResult
89
910os .environ ["TOKENIZERS_PARALLELISM" ] = "false" # removes logging from fastembed
1011
@@ -13,23 +14,23 @@ class Knowledge(BaseModel):
1314 """
1415 Knowledge is a collection of sources and setup for the vector store to save and query relevant context.
1516 Args:
16- sources: List [BaseKnowledgeSource] = Field(default_factory=list)
17- storage: Optional[ KnowledgeStorage] = Field(default=None)
18- embedder: Optional[Dict[ str, Any]] = None
17+ sources: list [BaseKnowledgeSource] = Field(default_factory=list)
18+ storage: KnowledgeStorage | None = Field(default=None)
19+ embedder: dict[ str, Any] | None = None
1920 """
2021
21- sources : List [BaseKnowledgeSource ] = Field (default_factory = list )
22+ sources : list [BaseKnowledgeSource ] = Field (default_factory = list )
2223 model_config = ConfigDict (arbitrary_types_allowed = True )
23- storage : Optional [ KnowledgeStorage ] = Field (default = None )
24- embedder : Optional [ Dict [ str , Any ]] = None
25- collection_name : Optional [ str ] = None
24+ storage : KnowledgeStorage | None = Field (default = None )
25+ embedder : dict [ str , Any ] | None = None
26+ collection_name : str | None = None
2627
2728 def __init__ (
2829 self ,
2930 collection_name : str ,
30- sources : List [BaseKnowledgeSource ],
31- embedder : Optional [ Dict [ str , Any ]] = None ,
32- storage : Optional [ KnowledgeStorage ] = None ,
31+ sources : list [BaseKnowledgeSource ],
32+ embedder : dict [ str , Any ] | None = None ,
33+ storage : KnowledgeStorage | None = None ,
3334 ** data ,
3435 ):
3536 super ().__init__ (** data )
@@ -40,11 +41,10 @@ def __init__(
4041 embedder = embedder , collection_name = collection_name
4142 )
4243 self .sources = sources
43- self .storage .initialize_knowledge_storage ()
4444
4545 def query (
46- self , query : List [str ], results_limit : int = 3 , score_threshold : float = 0.35
47- ) -> List [ Dict [ str , Any ] ]:
46+ self , query : list [str ], results_limit : int = 3 , score_threshold : float = 0.35
47+ ) -> list [ SearchResult ]:
4848 """
4949 Query across all knowledge sources to find the most relevant information.
5050 Returns the top_k most relevant chunks.
@@ -55,12 +55,11 @@ def query(
5555 if self .storage is None :
5656 raise ValueError ("Storage is not initialized." )
5757
58- results = self .storage .search (
58+ return self .storage .search (
5959 query ,
6060 limit = results_limit ,
6161 score_threshold = score_threshold ,
6262 )
63- return results
6463
6564 def add_sources (self ):
6665 try :
0 commit comments