diff --git a/src/crewai/knowledge/source/pdf_knowledge_source.py b/src/crewai/knowledge/source/pdf_knowledge_source.py index a33320b99..a08f16e5d 100644 --- a/src/crewai/knowledge/source/pdf_knowledge_source.py +++ b/src/crewai/knowledge/source/pdf_knowledge_source.py @@ -16,8 +16,9 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource): def load_content(self) -> Dict[Path, str]: """Load and preprocess PDF file content.""" - pdfplumber = self._import_pdfplumber() - + if not PDFPLUMBER_AVAILABLE: + return {} + content = {} for path in self.safe_file_paths: @@ -45,6 +46,8 @@ class PDFKnowledgeSource(BaseFileKnowledgeSource): Add PDF file content to the knowledge source, chunk it, compute embeddings, and save the embeddings. """ + self._import_pdfplumber() + for _, text in self.content.items(): new_chunks = self._chunk_text(text) self.chunks.extend(new_chunks) diff --git a/src/crewai/telemetry/telemetry.py b/src/crewai/telemetry/telemetry.py index 09e37098d..7e756cd5b 100644 --- a/src/crewai/telemetry/telemetry.py +++ b/src/crewai/telemetry/telemetry.py @@ -72,6 +72,15 @@ class SafeOTLPSpanExporter: except Exception as e: logger.error(e) return SpanExportResult.FAILURE if SpanExportResult else None + + def shutdown(self): + """Shutdown the exporter.""" + if OPENTELEMETRY_AVAILABLE and self._exporter and hasattr(self._exporter, 'shutdown'): + try: + return self._exporter.shutdown() + except Exception as e: + logger.error(f"Error during exporter shutdown: {e}") + return None class Telemetry: @@ -107,6 +116,7 @@ class Telemetry: self._initialized: bool = True if self._is_telemetry_disabled() or not OPENTELEMETRY_AVAILABLE: + self.ready = False return try: