scrapegraphai 2.2.0b3__tar.gz → 2.2.0b5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/CHANGELOG.md +14 -0
  2. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/PKG-INFO +1 -1
  3. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/pyproject.toml +1 -1
  4. scrapegraphai-2.2.0b5/scrapegraphai/docloaders/__init__.py +30 -0
  5. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/docloaders/chromium.py +9 -2
  6. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/fetch_node.py +1 -1
  7. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_answer_node.py +5 -3
  8. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/robots_node.py +1 -1
  9. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/output_parser.py +41 -1
  10. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/conftest.py +15 -0
  11. scrapegraphai-2.2.0b5/tests/utils/output_parser_test.py +44 -0
  12. scrapegraphai-2.2.0b3/scrapegraphai/docloaders/__init__.py +0 -15
  13. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.gitattributes +0 -0
  14. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/FUNDING.yml +0 -0
  15. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  17. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/workflows/codeql.yml +0 -0
  19. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/workflows/dependency-review.yml +0 -0
  20. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/workflows/release.yml +0 -0
  21. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.github/workflows/test-suite.yml +0 -0
  22. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.gitignore +0 -0
  23. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.pre-commit-config.yaml +0 -0
  24. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.releaserc.yml +0 -0
  25. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/.semantic-commits-applied +0 -0
  26. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/CODE_OF_CONDUCT.md +0 -0
  27. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/CONTRIBUTING.md +0 -0
  28. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/Dockerfile +0 -0
  29. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/LICENSE +0 -0
  30. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/Makefile +0 -0
  31. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/PullRequests/PR_1027_reviews.md +0 -0
  32. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/README.md +0 -0
  33. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/SECURITY.md +0 -0
  34. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/SEMANTIC_COMMITS.md +0 -0
  35. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/TESTING_INFRASTRUCTURE.md +0 -0
  36. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/citation.cff +0 -0
  37. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/codebeaver.yml +0 -0
  38. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docker-compose.yml +0 -0
  39. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/api-banner.png +0 -0
  40. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/api_banner.png +0 -0
  41. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/apikey_1.png +0 -0
  42. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/apikey_2.png +0 -0
  43. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/apikey_3.png +0 -0
  44. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/apikey_4.png +0 -0
  45. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/browserbase_logo.png +0 -0
  46. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/codespaces-badge.png +0 -0
  47. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/histogram.png +0 -0
  48. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/omniscrapergraph.png +0 -0
  49. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/omnisearchgraph.png +0 -0
  50. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/project_overview_diagram.fig +0 -0
  51. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/project_overview_diagram.png +0 -0
  52. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/scrapegraphai_logo.png +0 -0
  53. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/scrapegraphai_logo.svg +0 -0
  54. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/scriptcreatorgraph.png +0 -0
  55. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/searchgraph.png +0 -0
  56. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/sgai-hero.png +0 -0
  57. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/smartscrapergraph.png +0 -0
  58. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/assets/speechgraph.png +0 -0
  59. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/chinese.md +0 -0
  60. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/french.md +0 -0
  61. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/german.md +0 -0
  62. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/italian.md +0 -0
  63. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/japanese.md +0 -0
  64. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/korean.md +0 -0
  65. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/portuguese.md +0 -0
  66. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/russian.md +0 -0
  67. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/spanish.md +0 -0
  68. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/timeout_configuration.md +0 -0
  69. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/docs/turkish.md +0 -0
  70. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/ScrapegraphAI_cookbook.ipynb +0 -0
  71. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/code_generator_graph/.env.example +0 -0
  72. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/code_generator_graph/README.md +0 -0
  73. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/code_generator_graph/ollama/code_generator_graph_ollama.py +0 -0
  74. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/code_generator_graph/openai/code_generator_graph_openai.py +0 -0
  75. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/.env.example +0 -0
  76. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/README.md +0 -0
  77. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/ollama/csv_scraper_graph_multi_ollama.py +0 -0
  78. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/ollama/csv_scraper_ollama.py +0 -0
  79. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/ollama/inputs/username.csv +0 -0
  80. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/openai/csv_scraper_graph_multi_openai.py +0 -0
  81. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/openai/csv_scraper_openai.py +0 -0
  82. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/csv_scraper_graph/openai/inputs/username.csv +0 -0
  83. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/custom_graph/.env.example +0 -0
  84. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/custom_graph/README.md +0 -0
  85. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/custom_graph/ollama/custom_graph_ollama.py +0 -0
  86. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/custom_graph/openai/custom_graph_openai.py +0 -0
  87. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/depth_search_graph/.env.example +0 -0
  88. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/depth_search_graph/README.md +0 -0
  89. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/depth_search_graph/ollama/depth_search_graph_ollama.py +0 -0
  90. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/depth_search_graph/openai/depth_search_graph_openai.py +0 -0
  91. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/.env.example +0 -0
  92. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/README.md +0 -0
  93. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/ollama/document_scraper_ollama.py +0 -0
  94. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/ollama/inputs/plain_html_example.txt +0 -0
  95. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/openai/document_scraper_openai.py +0 -0
  96. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/openai/inputs/markdown_example.md +0 -0
  97. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/document_scraper_graph/openai/inputs/plain_html_example.txt +0 -0
  98. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/.env.example +0 -0
  99. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/Savedscreenshots/test_image.jpeg +0 -0
  100. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/authenticated_playwright.py +0 -0
  101. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/browser_base_integration.py +0 -0
  102. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/chromium_selenium.py +0 -0
  103. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/cond_smartscraper_usage.py +0 -0
  104. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/conditional_usage.py +0 -0
  105. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/custom_prompt.py +0 -0
  106. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/example.yml +0 -0
  107. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/force_mode.py +0 -0
  108. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/html_mode.py +0 -0
  109. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/load_yml.py +0 -0
  110. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/no_cut.py +0 -0
  111. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/proxy_rotation.py +0 -0
  112. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/rag_caching.py +0 -0
  113. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/reasoning.py +0 -0
  114. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/scrape_do.py +0 -0
  115. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/screenshot_scaping.py +0 -0
  116. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/serch_graph_scehma.py +0 -0
  117. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/slow_mo.py +0 -0
  118. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/extras/undected_playwright.py +0 -0
  119. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/.env.example +0 -0
  120. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/README.md +0 -0
  121. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/ollama/inputs/example.json +0 -0
  122. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/ollama/json_scraper_multi_ollama.py +0 -0
  123. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/ollama/json_scraper_ollama.py +0 -0
  124. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/openai/inputs/example.json +0 -0
  125. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/openai/json_scraper_multi_openai.py +0 -0
  126. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/openai/json_scraper_openai.py +0 -0
  127. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/openai/md_scraper_openai.py +0 -0
  128. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/json_scraper_graph/openai/omni_scraper_openai.py +0 -0
  129. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/markdownify/.env.example +0 -0
  130. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/markdownify/markdownify_scrapegraphai.py +0 -0
  131. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/markdownify/markdownify_scrapegraphai_v3.py +0 -0
  132. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/markdownify/readme.md +0 -0
  133. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/omni_scraper_graph/.env.example +0 -0
  134. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/omni_scraper_graph/README.md +0 -0
  135. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/omni_scraper_graph/omni_search_openai.py +0 -0
  136. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/readme.md +0 -0
  137. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/.env.example +0 -0
  138. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/README.md +0 -0
  139. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/ollama/script_generator_ollama.py +0 -0
  140. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/ollama/script_multi_generator_ollama.py +0 -0
  141. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/openai/script_generator_multi_openai.py +0 -0
  142. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/openai/script_generator_openai.py +0 -0
  143. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/script_generator_graph/openai/script_generator_schema_openai.py +0 -0
  144. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/.env.example +0 -0
  145. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/README.md +0 -0
  146. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/ollama/search_graph_ollama.py +0 -0
  147. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/ollama/search_graph_schema_ollama.py +0 -0
  148. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/openai/search_graph_openai.py +0 -0
  149. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/openai/search_graph_schema_openai.py +0 -0
  150. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/openai/search_link_graph_openai.py +0 -0
  151. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/scrapegraphai/.env.example +0 -0
  152. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/scrapegraphai/readme.md +0 -0
  153. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai.py +0 -0
  154. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai_v3.py +0 -0
  155. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/.env.example +0 -0
  156. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/nvidia/smart_scraper_nvidia.py +0 -0
  157. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_lite_ollama.py +0 -0
  158. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_multi_concat_ollama.py +0 -0
  159. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_multi_lite_ollama.py +0 -0
  160. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_multi_ollama.py +0 -0
  161. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_ollama.py +0 -0
  162. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/ollama/smart_scraper_schema_ollama.py +0 -0
  163. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_lite_openai.py +0 -0
  164. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_multi_concat_openai.py +0 -0
  165. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_multi_lite_openai.py +0 -0
  166. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_multi_openai.py +0 -0
  167. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_openai.py +0 -0
  168. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/openai/smart_scraper_schema_openai.py +0 -0
  169. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/scrapegraphai/.env.example +0 -0
  170. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/scrapegraphai/readme.md +0 -0
  171. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai.py +0 -0
  172. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai_v3.py +0 -0
  173. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/speech_graph/.env.example +0 -0
  174. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/speech_graph/README.md +0 -0
  175. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/speech_graph/speech_graph_openai.py +0 -0
  176. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/.env.example +0 -0
  177. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/README.md +0 -0
  178. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/ollama/inputs/books.xml +0 -0
  179. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/ollama/xml_scraper_graph_multi_ollama.py +0 -0
  180. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/ollama/xml_scraper_ollama.py +0 -0
  181. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/openai/inputs/books.xml +0 -0
  182. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/openai/xml_scraper_graph_multi_openai.py +0 -0
  183. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/examples/xml_scraper_graph/openai/xml_scraper_openai.py +0 -0
  184. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/media/banner.png +0 -0
  185. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/pytest.ini +0 -0
  186. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/__init__.py +0 -0
  187. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/builders/__init__.py +0 -0
  188. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/builders/graph_builder.py +0 -0
  189. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/docloaders/browser_base.py +0 -0
  190. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/docloaders/plasmate.py +0 -0
  191. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/docloaders/scrape_do.py +0 -0
  192. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/__init__.py +0 -0
  193. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/abstract_graph.py +0 -0
  194. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/base_graph.py +0 -0
  195. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/code_generator_graph.py +0 -0
  196. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/csv_scraper_graph.py +0 -0
  197. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/csv_scraper_multi_graph.py +0 -0
  198. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/depth_search_graph.py +0 -0
  199. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/document_scraper_graph.py +0 -0
  200. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/document_scraper_multi_graph.py +0 -0
  201. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/json_scraper_graph.py +0 -0
  202. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/json_scraper_multi_graph.py +0 -0
  203. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/markdownify_graph.py +0 -0
  204. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/omni_scraper_graph.py +0 -0
  205. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/omni_search_graph.py +0 -0
  206. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/screenshot_scraper_graph.py +0 -0
  207. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/script_creator_graph.py +0 -0
  208. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/script_creator_multi_graph.py +0 -0
  209. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/search_graph.py +0 -0
  210. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/search_link_graph.py +0 -0
  211. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_graph.py +0 -0
  212. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_lite_graph.py +0 -0
  213. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_multi_batch_graph.py +0 -0
  214. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_multi_concat_graph.py +0 -0
  215. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_multi_graph.py +0 -0
  216. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/smart_scraper_multi_lite_graph.py +0 -0
  217. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/speech_graph.py +0 -0
  218. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/xml_scraper_graph.py +0 -0
  219. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/graphs/xml_scraper_multi_graph.py +0 -0
  220. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/__init__.py +0 -0
  221. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/default_filters.py +0 -0
  222. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/models_tokens.py +0 -0
  223. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/nodes_metadata.py +0 -0
  224. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/robots.py +0 -0
  225. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/helpers/schemas.py +0 -0
  226. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/integrations/__init__.py +0 -0
  227. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/integrations/burr_bridge.py +0 -0
  228. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/integrations/indexify_node.py +0 -0
  229. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/integrations/scrapegraph_py_compat.py +0 -0
  230. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/__init__.py +0 -0
  231. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/clod.py +0 -0
  232. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/deepseek.py +0 -0
  233. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/minimax.py +0 -0
  234. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/nvidia.py +0 -0
  235. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/oneapi.py +0 -0
  236. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/openai_itt.py +0 -0
  237. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/openai_tts.py +0 -0
  238. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/models/xai.py +0 -0
  239. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/__init__.py +0 -0
  240. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/base_node.py +0 -0
  241. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/batch_generate_answer_node.py +0 -0
  242. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/concat_answers_node.py +0 -0
  243. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/conditional_node.py +0 -0
  244. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/description_node.py +0 -0
  245. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/fetch_node_level_k.py +0 -0
  246. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/fetch_screen_node.py +0 -0
  247. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_answer_csv_node.py +0 -0
  248. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_answer_from_image_node.py +0 -0
  249. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_answer_node_k_level.py +0 -0
  250. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_answer_omni_node.py +0 -0
  251. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_code_node.py +0 -0
  252. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/generate_scraper_node.py +0 -0
  253. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/get_probable_tags_node.py +0 -0
  254. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/graph_iterator_node.py +0 -0
  255. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/html_analyzer_node.py +0 -0
  256. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/image_to_text_node.py +0 -0
  257. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/markdownify_node.py +0 -0
  258. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/merge_answers_node.py +0 -0
  259. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/merge_generated_scripts_node.py +0 -0
  260. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/parse_node.py +0 -0
  261. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/parse_node_depth_k_node.py +0 -0
  262. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/prompt_refiner_node.py +0 -0
  263. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/rag_node.py +0 -0
  264. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/reasoning_node.py +0 -0
  265. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/search_internet_node.py +0 -0
  266. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/search_link_node.py +0 -0
  267. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/search_node_with_context.py +0 -0
  268. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/nodes/text_to_speech_node.py +0 -0
  269. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/__init__.py +0 -0
  270. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/description_node_prompts.py +0 -0
  271. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/generate_answer_node_csv_prompts.py +0 -0
  272. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/generate_answer_node_omni_prompts.py +0 -0
  273. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/generate_answer_node_pdf_prompts.py +0 -0
  274. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/generate_answer_node_prompts.py +0 -0
  275. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/generate_code_node_prompts.py +0 -0
  276. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/get_probable_tags_node_prompts.py +0 -0
  277. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/html_analyzer_node_prompts.py +0 -0
  278. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/merge_answer_node_prompts.py +0 -0
  279. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/merge_generated_scripts_prompts.py +0 -0
  280. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/prompt_refiner_node_prompts.py +0 -0
  281. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/reasoning_node_prompts.py +0 -0
  282. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/robots_node_prompts.py +0 -0
  283. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/search_internet_node_prompts.py +0 -0
  284. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/search_link_node_prompts.py +0 -0
  285. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/prompts/search_node_with_context_prompts.py +0 -0
  286. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/telemetry/__init__.py +0 -0
  287. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/telemetry/telemetry.py +0 -0
  288. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/__init__.py +0 -0
  289. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/batch_api.py +0 -0
  290. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/cleanup_code.py +0 -0
  291. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/cleanup_html.py +0 -0
  292. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/code_error_analysis.py +0 -0
  293. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/code_error_correction.py +0 -0
  294. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/convert_to_md.py +0 -0
  295. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/copy.py +0 -0
  296. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/custom_callback.py +0 -0
  297. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/data_export.py +0 -0
  298. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/dict_content_compare.py +0 -0
  299. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/llm_callback_manager.py +0 -0
  300. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/logging.py +0 -0
  301. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/model_costs.py +0 -0
  302. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/parse_state_keys.py +0 -0
  303. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/prettify_exec_info.py +0 -0
  304. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/proxy_rotation.py +0 -0
  305. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/research_web.py +0 -0
  306. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/save_audio_from_bytes.py +0 -0
  307. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/save_code_to_file.py +0 -0
  308. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/schema_trasform.py +0 -0
  309. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/screenshot_scraping/__init__.py +0 -0
  310. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/screenshot_scraping/screenshot_preparation.py +0 -0
  311. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/screenshot_scraping/text_detection.py +0 -0
  312. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/split_text_into_chunks.py +0 -0
  313. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/sys_dynamic_import.py +0 -0
  314. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/tokenizer.py +0 -0
  315. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/tokenizers/tokenizer_mistral.py +0 -0
  316. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/tokenizers/tokenizer_ollama.py +0 -0
  317. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/scrapegraphai/utils/tokenizers/tokenizer_openai.py +0 -0
  318. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/test +0 -0
  319. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/QUICKSTART.md +0 -0
  320. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/README_TESTING.md +0 -0
  321. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/Readme.md +0 -0
  322. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/fixtures/benchmarking.py +0 -0
  323. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/fixtures/helpers.py +0 -0
  324. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/fixtures/mock_server/__init__.py +0 -0
  325. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/fixtures/mock_server/server.py +0 -0
  326. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/.env.example +0 -0
  327. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/abstract_graph_test.py +0 -0
  328. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/code_generator_graph_openai_test.py +0 -0
  329. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/depth_search_graph_openai_test.py +0 -0
  330. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/inputs/books.xml +0 -0
  331. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/inputs/example.json +0 -0
  332. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/inputs/plain_html_example.txt +0 -0
  333. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/inputs/username.csv +0 -0
  334. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/scrape_plain_text_mistral_test.py +0 -0
  335. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/scrape_xml_ollama_test.py +0 -0
  336. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/screenshot_scraper_test.py +0 -0
  337. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/script_generator_test.py +0 -0
  338. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/search_graph_openai_test.py +0 -0
  339. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/search_link_ollama.py +0 -0
  340. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_clod_test.py +0 -0
  341. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_ernie_test.py +0 -0
  342. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_fireworks_test.py +0 -0
  343. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_multi_lite_graph_openai_test.py +0 -0
  344. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_ollama_test.py +0 -0
  345. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/smart_scraper_openai_test.py +0 -0
  346. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/graphs/xml_scraper_openai_test.py +0 -0
  347. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/inputs/books.xml +0 -0
  348. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/inputs/example.json +0 -0
  349. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/inputs/plain_html_example.txt +0 -0
  350. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/inputs/username.csv +0 -0
  351. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/integration/__init__.py +0 -0
  352. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/integration/test_file_formats_integration.py +0 -0
  353. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/integration/test_multi_graph_integration.py +0 -0
  354. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/integration/test_smart_scraper_integration.py +0 -0
  355. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/fetch_node_test.py +0 -0
  356. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/inputs/books.xml +0 -0
  357. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/inputs/example.json +0 -0
  358. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/inputs/plain_html_example.txt +0 -0
  359. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/inputs/username.csv +0 -0
  360. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/robot_node_test.py +0 -0
  361. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/search_internet_node_test.py +0 -0
  362. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/nodes/search_link_node_test.py +0 -0
  363. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_batch_api.py +0 -0
  364. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_chromium.py +0 -0
  365. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_cleanup_html.py +0 -0
  366. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_csv_scraper_multi_graph.py +0 -0
  367. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_depth_search_graph.py +0 -0
  368. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_fetch_node_timeout.py +0 -0
  369. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_generate_answer_node.py +0 -0
  370. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_json_scraper_graph.py +0 -0
  371. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_json_scraper_multi_graph.py +0 -0
  372. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_minimax_models.py +0 -0
  373. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_models_tokens.py +0 -0
  374. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_omni_search_graph.py +0 -0
  375. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_plasmate.py +0 -0
  376. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_scrape_do.py +0 -0
  377. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_script_creator_multi_graph.py +0 -0
  378. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_search_graph.py +0 -0
  379. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/test_smart_scraper_multi_concat_graph.py +0 -0
  380. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/convert_to_md_test.py +0 -0
  381. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/copy_utils_test.py +0 -0
  382. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/parse_state_keys_test.py +0 -0
  383. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/research_web_test.py +0 -0
  384. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/test_proxy_rotation.py +0 -0
  385. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/tests/utils/test_sys_dynamic_import.py +0 -0
  386. {scrapegraphai-2.2.0b3 → scrapegraphai-2.2.0b5}/uv.lock +0 -0
@@ -1,3 +1,17 @@
1
+ ## [2.2.0-beta.5](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0-beta.4...v2.2.0-beta.5) (2026-06-23)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * lazy imports to prevent torchcodec FFmpeg DLL crash on Windows ([#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089)) ([2f55377](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/2f55377010fb16c81655aa1c8d08b88daa880797))
7
+
8
+ ## [2.2.0-beta.4](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0-beta.3...v2.2.0-beta.4) (2026-06-11)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **nodes:** tolerate doubled-brace JSON output from models like DeepSeek ([#1085](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1085)) ([aaa5d2c](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/aaa5d2cf6d2657f8e8a3b9020ab8b40cdb311c46))
14
+
1
15
  ## [2.2.0-beta.3](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0-beta.2...v2.2.0-beta.3) (2026-06-01)
2
16
 
3
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scrapegraphai
3
- Version: 2.2.0b3
3
+ Version: 2.2.0b5
4
4
  Summary: A web scraping library based on LangChain which uses LLM and direct graph logic to create scraping pipelines.
5
5
  Author-email: Marco Vinciguerra <mvincig11@gmail.com>, Lorenzo Padoan <lorenzo.padoan977@gmail.com>
6
6
  Keywords: ai,artificial intelligence,gpt,graph,langchain,llm,machine learning,natural language processing,nlp,openai,rag,scrapegraph,scrapegraphai,scraping,web scraping,web scraping library,web scraping tool,webscraping
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "scrapegraphai"
3
3
 
4
- version = "2.2.0b3"
4
+ version = "2.2.0b5"
5
5
 
6
6
  description = "A web scraping library based on LangChain which uses LLM and direct graph logic to create scraping pipelines."
7
7
  authors = [
@@ -0,0 +1,30 @@
1
+ """
2
+ This module handles document loading functionalities for the ScrapeGraphAI application.
3
+
4
+ Note: ChromiumLoader and PlasmateLoader are lazy-imported to avoid triggering
5
+ torchcodec/FFmpeg DLL loading at import time (sentence_transformers -> torchcodec chain).
6
+ """
7
+
8
+ from .browser_base import browser_base_fetch
9
+ from .scrape_do import scrape_do_fetch
10
+
11
+ _LAZY_MODULES = {
12
+ "ChromiumLoader": ".chromium",
13
+ "PlasmateLoader": ".plasmate",
14
+ }
15
+
16
+
17
+ def __getattr__(name):
18
+ if name in _LAZY_MODULES:
19
+ import importlib
20
+ module = importlib.import_module(_LAZY_MODULES[name], __package__)
21
+ return getattr(module, name)
22
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
23
+
24
+
25
+ __all__ = [
26
+ "browser_base_fetch",
27
+ "ChromiumLoader",
28
+ "PlasmateLoader",
29
+ "scrape_do_fetch",
30
+ ]
@@ -3,7 +3,6 @@ from typing import Any, AsyncIterator, Iterator, List, Optional, Union
3
3
 
4
4
  import aiohttp
5
5
  import async_timeout
6
- from langchain_community.document_loaders.base import BaseLoader
7
6
  from langchain_core.documents import Document
8
7
 
9
8
  from ..utils import Proxy, dynamic_import, get_logger, parse_or_search_proxy
@@ -11,7 +10,7 @@ from ..utils import Proxy, dynamic_import, get_logger, parse_or_search_proxy
11
10
  logger = get_logger("web-loader")
12
11
 
13
12
 
14
- class ChromiumLoader(BaseLoader):
13
+ class ChromiumLoader:
15
14
  """Scrapes HTML pages from URLs using a (headless) instance of the
16
15
  Chromium web driver with proxy protection.
17
16
 
@@ -436,6 +435,14 @@ class ChromiumLoader(BaseLoader):
436
435
  finally:
437
436
  await browser.close()
438
437
 
438
+ def load(self) -> List[Document]:
439
+ """Load all documents synchronously."""
440
+ return list(self.lazy_load())
441
+
442
+ async def aload(self) -> List[Document]:
443
+ """Load all documents asynchronously."""
444
+ return [doc async for doc in self.alazy_load()]
445
+
439
446
  def lazy_load(self) -> Iterator[Document]:
440
447
  """
441
448
  Lazily load text content from the provided URLs.
@@ -7,7 +7,6 @@ from typing import List, Optional
7
7
  import concurrent.futures
8
8
 
9
9
  import requests
10
- from langchain_community.document_loaders import PyPDFLoader
11
10
  from langchain_core.documents import Document
12
11
  from langchain_openai import AzureChatOpenAI, ChatOpenAI
13
12
 
@@ -182,6 +181,7 @@ class FetchNode(BaseNode):
182
181
  """
183
182
 
184
183
  if input_type == "pdf":
184
+ from langchain_community.document_loaders import PyPDFLoader
185
185
  loader = PyPDFLoader(source)
186
186
  # PyPDFLoader.load() can be blocking for large PDFs. Run it in a thread and
187
187
  # enforce the configured timeout if provided.
@@ -9,7 +9,6 @@ from typing import List, Optional
9
9
  from langchain_core.prompts import PromptTemplate
10
10
  from langchain_aws import ChatBedrock
11
11
  from langchain_ollama import ChatOllama
12
- from langchain_core.output_parsers import JsonOutputParser
13
12
  from langchain_core.runnables import RunnableParallel
14
13
  from langchain_openai import ChatOpenAI
15
14
  from requests.exceptions import Timeout
@@ -23,7 +22,10 @@ from ..prompts import (
23
22
  TEMPLATE_NO_CHUNKS,
24
23
  TEMPLATE_NO_CHUNKS_MD,
25
24
  )
26
- from ..utils.output_parser import get_pydantic_output_parser
25
+ from ..utils.output_parser import (
26
+ TolerantJsonOutputParser,
27
+ get_pydantic_output_parser,
28
+ )
27
29
  from .base_node import BaseNode
28
30
 
29
31
 
@@ -148,7 +150,7 @@ class GenerateAnswerNode(BaseNode):
148
150
  format_instructions = ""
149
151
  else:
150
152
  if not isinstance(self.llm_model, ChatBedrock):
151
- output_parser = JsonOutputParser()
153
+ output_parser = TolerantJsonOutputParser()
152
154
  format_instructions = (
153
155
  "You must respond with a JSON object. Your response should be formatted as a valid JSON "
154
156
  "with a 'content' field containing your analysis. For example:\n"
@@ -7,7 +7,6 @@ from urllib.parse import urlparse
7
7
 
8
8
  from langchain_core.output_parsers import CommaSeparatedListOutputParser
9
9
  from langchain_core.prompts import PromptTemplate
10
- from langchain_community.document_loaders import AsyncChromiumLoader
11
10
 
12
11
  from ..helpers import robots_dictionary
13
12
  from ..prompts import TEMPLATE_ROBOT
@@ -90,6 +89,7 @@ class RobotsNode(BaseNode):
90
89
  else:
91
90
  parsed_url = urlparse(source)
92
91
  base_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
92
+ from langchain_community.document_loaders import AsyncChromiumLoader
93
93
  loader = AsyncChromiumLoader(f"{base_url}/robots.txt")
94
94
  document = loader.load()
95
95
  if "ollama" in self.llm_model.model:
@@ -2,13 +2,53 @@
2
2
  Functions to retrieve the correct output parser and format instructions for the LLM model.
3
3
  """
4
4
 
5
- from typing import Any, Callable, Dict, Type, Union
5
+ from typing import Any, Callable, Dict, List, Type, Union
6
6
 
7
+ from langchain_core.exceptions import OutputParserException
8
+ from langchain_core.outputs import Generation
7
9
  from langchain_core.output_parsers import JsonOutputParser
8
10
  from pydantic import BaseModel as BaseModelV2
9
11
  from pydantic.v1 import BaseModel as BaseModelV1
10
12
 
11
13
 
14
+ def _strip_doubled_braces(text: str) -> str:
15
+ """Strip one layer of the doubled braces some models echo from the prompt.
16
+
17
+ The default ``format_instructions`` show the expected shape using LangChain's
18
+ escaped braces, e.g. ``{{"content": "..."}}``. Strongly instruction-following
19
+ models (GPT-4o, etc.) emit single braces, but some models (notably DeepSeek)
20
+ copy the doubled braces verbatim, producing ``{{"content": "..."}}`` which is
21
+ not valid JSON. This normalizes that single case and is a no-op otherwise.
22
+ """
23
+ stripped = text.strip()
24
+ if stripped.startswith("{{") and stripped.endswith("}}"):
25
+ return stripped[1:-1]
26
+ return text
27
+
28
+
29
+ class TolerantJsonOutputParser(JsonOutputParser):
30
+ """A :class:`JsonOutputParser` tolerant of doubled-brace output.
31
+
32
+ Behaviour is unchanged on the happy path: valid JSON is parsed by the parent
33
+ parser exactly as before. Only when parsing fails AND the output is wrapped in
34
+ doubled braces (``{{ ... }}``) does it retry once with a single layer of braces
35
+ removed. This keeps providers like DeepSeek working without altering output for
36
+ any model that already returns clean JSON.
37
+ """
38
+
39
+ def parse_result(self, result: List[Generation], *, partial: bool = False) -> Any:
40
+ try:
41
+ return super().parse_result(result, partial=partial)
42
+ except OutputParserException:
43
+ text = result[0].text
44
+ normalized = _strip_doubled_braces(text)
45
+ if normalized != text:
46
+ return super().parse_result(
47
+ [Generation(text=normalized)], partial=partial
48
+ )
49
+ raise
50
+
51
+
12
52
  def get_structured_output_parser(
13
53
  schema: Union[Dict[str, Any], Type[BaseModelV1 | BaseModelV2], Type],
14
54
  ) -> Callable:
@@ -14,9 +14,24 @@ from pathlib import Path
14
14
  from typing import Any, Dict
15
15
  from unittest.mock import Mock
16
16
 
17
+ import sys
18
+ import types
19
+
17
20
  import pytest
18
21
  from dotenv import load_dotenv
19
22
 
23
+ # Mock torchcodec to prevent FFmpeg DLL crashes at import time.
24
+ # sentence_transformers -> torchcodec -> FFmpeg native DLLs can't load on some systems.
25
+ _tc = types.ModuleType("torchcodec")
26
+ _tc.__version__ = "0.0.0"
27
+ _tc.__file__ = "<mock>"
28
+ _tc.__spec__ = types.ModuleType("spec")
29
+ _tc.__spec__.name = "torchcodec"
30
+ _tc.__spec__.loader = None
31
+ _tc.__spec__.submodule_search_locations = []
32
+ if "torchcodec" not in sys.modules:
33
+ sys.modules["torchcodec"] = _tc
34
+
20
35
  # Load environment variables
21
36
  load_dotenv()
22
37
 
@@ -0,0 +1,44 @@
1
+ """Tests for scrapegraphai.utils.output_parser.TolerantJsonOutputParser."""
2
+
3
+ import pytest
4
+
5
+ from scrapegraphai.utils.output_parser import (
6
+ TolerantJsonOutputParser,
7
+ _strip_doubled_braces,
8
+ )
9
+
10
+
11
+ def test_strip_doubled_braces_unwraps_single_layer():
12
+ assert _strip_doubled_braces('{{"content": "hi"}}') == '{"content": "hi"}'
13
+
14
+
15
+ def test_strip_doubled_braces_is_noop_for_clean_json():
16
+ text = '{"content": "hi"}'
17
+ assert _strip_doubled_braces(text) == text
18
+
19
+
20
+ def test_strip_doubled_braces_ignores_unbalanced():
21
+ text = '{{"content": "hi"}'
22
+ assert _strip_doubled_braces(text) == text
23
+
24
+
25
+ def test_tolerant_parser_parses_clean_json_unchanged():
26
+ parser = TolerantJsonOutputParser()
27
+ assert parser.parse('{"content": "hi"}') == {"content": "hi"}
28
+
29
+
30
+ def test_tolerant_parser_recovers_doubled_braces():
31
+ """Models such as DeepSeek echo the prompt's escaped braces verbatim."""
32
+ parser = TolerantJsonOutputParser()
33
+ assert parser.parse('{{"content": "hi"}}') == {"content": "hi"}
34
+
35
+
36
+ def test_tolerant_parser_recovers_doubled_braces_with_whitespace():
37
+ parser = TolerantJsonOutputParser()
38
+ assert parser.parse(' {{"content": "hi"}} ') == {"content": "hi"}
39
+
40
+
41
+ def test_tolerant_parser_still_raises_on_irrecoverable_output():
42
+ parser = TolerantJsonOutputParser()
43
+ with pytest.raises(Exception):
44
+ parser.parse("this is not json at all")
@@ -1,15 +0,0 @@
1
- """
2
- This module handles document loading functionalities for the ScrapeGraphAI application.
3
- """
4
-
5
- from .browser_base import browser_base_fetch
6
- from .chromium import ChromiumLoader
7
- from .plasmate import PlasmateLoader
8
- from .scrape_do import scrape_do_fetch
9
-
10
- __all__ = [
11
- "browser_base_fetch",
12
- "ChromiumLoader",
13
- "PlasmateLoader",
14
- "scrape_do_fetch",
15
- ]
File without changes