Skip to content

Commit

Permalink
fix: Change storage initialization to None for KnowledgeStorage (#1804)
Browse files Browse the repository at this point in the history
* fix: Change storage initialization to None for KnowledgeStorage

* refactor: Change storage field to optional and improve error handling when saving documents

---------

Co-authored-by: João Moura <[email protected]>
  • Loading branch information
ericklima-ca and joaomdmoura authored Dec 28, 2024
1 parent 409892d commit 97fc44c
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
4 changes: 2 additions & 2 deletions src/crewai/knowledge/knowledge.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ class Knowledge(BaseModel):
Knowledge is a collection of sources and setup for the vector store to save and query relevant context.
Args:
sources: List[BaseKnowledgeSource] = Field(default_factory=list)
storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
storage: Optional[KnowledgeStorage] = Field(default=None)
embedder_config: Optional[Dict[str, Any]] = None
"""

sources: List[BaseKnowledgeSource] = Field(default_factory=list)
model_config = ConfigDict(arbitrary_types_allowed=True)
storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
storage: Optional[KnowledgeStorage] = Field(default=None)
embedder_config: Optional[Dict[str, Any]] = None
collection_name: Optional[str] = None

Expand Down
7 changes: 5 additions & 2 deletions src/crewai/knowledge/source/base_file_knowledge_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class BaseFileKnowledgeSource(BaseKnowledgeSource, ABC):
default_factory=list, description="The path to the file"
)
content: Dict[Path, str] = Field(init=False, default_factory=dict)
storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
storage: Optional[KnowledgeStorage] = Field(default=None)
safe_file_paths: List[Path] = Field(default_factory=list)

@field_validator("file_path", "file_paths", mode="before")
Expand Down Expand Up @@ -62,7 +62,10 @@ def validate_content(self):

def _save_documents(self):
"""Save the documents to the storage."""
self.storage.save(self.chunks)
if self.storage:
self.storage.save(self.chunks)
else:
raise ValueError("No storage found to save documents.")

def convert_to_path(self, path: Union[Path, str]) -> Path:
"""Convert a path to a Path object."""
Expand Down
7 changes: 5 additions & 2 deletions src/crewai/knowledge/source/base_knowledge_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class BaseKnowledgeSource(BaseModel, ABC):
chunk_embeddings: List[np.ndarray] = Field(default_factory=list)

model_config = ConfigDict(arbitrary_types_allowed=True)
storage: KnowledgeStorage = Field(default_factory=KnowledgeStorage)
storage: Optional[KnowledgeStorage] = Field(default=None)
metadata: Dict[str, Any] = Field(default_factory=dict) # Currently unused
collection_name: Optional[str] = Field(default=None)

Expand Down Expand Up @@ -46,4 +46,7 @@ def _save_documents(self):
Save the documents to the storage.
This method should be called after the chunks and embeddings are generated.
"""
self.storage.save(self.chunks)
if self.storage:
self.storage.save(self.chunks)
else:
raise ValueError("No storage found to save documents.")

0 comments on commit 97fc44c

Please sign in to comment.