| from ..config.logfire_config import get_logger |
| from ..repositories.knowledge_repository import KnowledgeRepository |
| from ..services.source_management_service import SourceManagementService |
| from ..utils import get_supabase_client |
| from .knowledge.chunking_service import KnowledgeChunkingService |
| from .librarian.business_archiver import BusinessArchiver |
| from .librarian.file_archiver import FileArchiver |
| from .librarian.web_archiver import WebArchiver |
|
|
| logger = get_logger(__name__) |
|
|
|
|
| class LibrarianService: |
| """ |
| Facade for Librarian operations, delegating to specialized archivers. |
| """ |
|
|
| def __init__(self): |
| self.supabase = get_supabase_client() |
| self.source_service = SourceManagementService(self.supabase) |
| self.repo = KnowledgeRepository(self.supabase) |
| self.chunker = KnowledgeChunkingService() |
|
|
| self.file_archiver = FileArchiver(self.supabase, self.repo, self.chunker) |
| self.web_archiver = WebArchiver(self.supabase, self.repo, self.file_archiver) |
| self.business_archiver = BusinessArchiver(self.supabase, self.repo) |
|
|
| async def archive_any_url(self, url: str, user_role: str = "member", depth: int = 0, max_depth: int = 1) -> str: |
| return await self.web_archiver.archive_any_url(url, user_role, depth, max_depth) |
|
|
| async def archive_web_research(self, query: str, content: str, references: list[str]) -> str: |
| return await self.web_archiver.archive_web_research(query, content, references) |
|
|
| async def archive_file( |
| self, |
| file_name: str, |
| content: str, |
| file_path: str, |
| knowledge_type: str = "technical", |
| authority_level: str = "normal", |
| ) -> str: |
| return await self.file_archiver.archive_file(file_name, content, file_path, knowledge_type, authority_level) |
|
|
| async def archive_sales_pitch(self, company: str, job_title: str, content: str, references: list[str]) -> str: |
| return await self.business_archiver.archive_sales_pitch(company, job_title, content, references) |
|
|
| async def get_style_constraints(self, category: str = "marketing") -> str: |
| return await self.business_archiver.get_style_constraints(category) |
|
|
| async def archive_failure_case( |
| self, content: str, reason: str, company: str, job_title: str, metadata: dict | None = None |
| ) -> str: |
| return await self.business_archiver.archive_failure_case(content, reason, company, job_title, metadata) |
|
|
| async def archive_style_critique(self, post_title: str, original_content: str, review_notes: str) -> str: |
| return await self.business_archiver.archive_style_critique(post_title, original_content, review_notes) |
|
|