data_formatter.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from embedchain.chunkers.docs_site import DocsSiteChunker
  2. from embedchain.chunkers.docx_file import DocxFileChunker
  3. from embedchain.chunkers.pdf_file import PdfFileChunker
  4. from embedchain.chunkers.qna_pair import QnaPairChunker
  5. from embedchain.chunkers.text import TextChunker
  6. from embedchain.chunkers.web_page import WebPageChunker
  7. from embedchain.chunkers.youtube_video import YoutubeVideoChunker
  8. from embedchain.config import AddConfig
  9. from embedchain.loaders.docs_site_loader import DocsSiteLoader
  10. from embedchain.loaders.docx_file import DocxFileLoader
  11. from embedchain.loaders.local_qna_pair import LocalQnaPairLoader
  12. from embedchain.loaders.local_text import LocalTextLoader
  13. from embedchain.loaders.pdf_file import PdfFileLoader
  14. from embedchain.loaders.sitemap import SitemapLoader
  15. from embedchain.loaders.web_page import WebPageLoader
  16. from embedchain.loaders.youtube_video import YoutubeVideoLoader
  17. class DataFormatter:
  18. """
  19. DataFormatter is an internal utility class which abstracts the mapping for
  20. loaders and chunkers to the data_type entered by the user in their
  21. .add or .add_local method call
  22. """
  23. def __init__(self, data_type: str, config: AddConfig):
  24. self.loader = self._get_loader(data_type, config.loader)
  25. self.chunker = self._get_chunker(data_type, config.chunker)
  26. def _get_loader(self, data_type, config):
  27. """
  28. Returns the appropriate data loader for the given data type.
  29. :param data_type: The type of the data to load.
  30. :return: The loader for the given data type.
  31. :raises ValueError: If an unsupported data type is provided.
  32. """
  33. loaders = {
  34. "youtube_video": YoutubeVideoLoader(),
  35. "pdf_file": PdfFileLoader(),
  36. "web_page": WebPageLoader(),
  37. "qna_pair": LocalQnaPairLoader(),
  38. "text": LocalTextLoader(),
  39. "docx": DocxFileLoader(),
  40. "sitemap": SitemapLoader(),
  41. "docs_site": DocsSiteLoader(),
  42. }
  43. if data_type in loaders:
  44. return loaders[data_type]
  45. else:
  46. raise ValueError(f"Unsupported data type: {data_type}")
  47. def _get_chunker(self, data_type, config):
  48. """
  49. Returns the appropriate chunker for the given data type.
  50. :param data_type: The type of the data to chunk.
  51. :return: The chunker for the given data type.
  52. :raises ValueError: If an unsupported data type is provided.
  53. """
  54. chunkers = {
  55. "youtube_video": YoutubeVideoChunker(config),
  56. "pdf_file": PdfFileChunker(config),
  57. "web_page": WebPageChunker(config),
  58. "qna_pair": QnaPairChunker(config),
  59. "text": TextChunker(config),
  60. "docx": DocxFileChunker(config),
  61. "sitemap": WebPageChunker(config),
  62. "docs_site": DocsSiteChunker(config),
  63. }
  64. if data_type in chunkers:
  65. return chunkers[data_type]
  66. else:
  67. raise ValueError(f"Unsupported data type: {data_type}")