scrapegraphai 2.2.0b4__tar.gz → 2.2.0b6__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 (391) hide show
  1. scrapegraphai-2.2.0b6/.github/workflows/test-suite.yml +51 -0
  2. scrapegraphai-2.2.0b6/AGENTS.md +136 -0
  3. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CHANGELOG.md +110 -2
  4. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/PKG-INFO +35 -6
  5. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/README.md +33 -4
  6. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/pyproject.toml +2 -2
  7. scrapegraphai-2.2.0b6/scrapegraphai/docloaders/__init__.py +30 -0
  8. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/chromium.py +9 -2
  9. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/abstract_graph.py +12 -0
  10. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/models_tokens.py +7 -3
  11. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/__init__.py +2 -1
  12. scrapegraphai-2.2.0b6/scrapegraphai/models/atlascloud.py +22 -0
  13. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/minimax.py +5 -1
  14. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_node.py +1 -1
  15. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/robots_node.py +1 -1
  16. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/custom_callback.py +48 -12
  17. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/llm_callback_manager.py +9 -1
  18. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/model_costs.py +81 -0
  19. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/research_web.py +42 -7
  20. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/conftest.py +15 -0
  21. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/abstract_graph_test.py +55 -0
  22. scrapegraphai-2.2.0b6/tests/test_atlascloud_model.py +48 -0
  23. scrapegraphai-2.2.0b6/tests/test_minimax_models.py +274 -0
  24. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/uv.lock +269 -1449
  25. scrapegraphai-2.2.0b4/.github/workflows/test-suite.yml +0 -34
  26. scrapegraphai-2.2.0b4/scrapegraphai/docloaders/__init__.py +0 -15
  27. scrapegraphai-2.2.0b4/tests/test_minimax_models.py +0 -62
  28. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.gitattributes +0 -0
  29. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/FUNDING.yml +0 -0
  30. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  31. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/custom.md +0 -0
  32. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  33. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/codeql.yml +0 -0
  34. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/dependency-review.yml +0 -0
  35. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/release.yml +0 -0
  36. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.gitignore +0 -0
  37. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.pre-commit-config.yaml +0 -0
  38. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.releaserc.yml +0 -0
  39. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.semantic-commits-applied +0 -0
  40. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CODE_OF_CONDUCT.md +0 -0
  41. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CONTRIBUTING.md +0 -0
  42. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/Dockerfile +0 -0
  43. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/LICENSE +0 -0
  44. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/Makefile +0 -0
  45. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/PullRequests/PR_1027_reviews.md +0 -0
  46. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/SECURITY.md +0 -0
  47. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/SEMANTIC_COMMITS.md +0 -0
  48. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/TESTING_INFRASTRUCTURE.md +0 -0
  49. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/citation.cff +0 -0
  50. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/codebeaver.yml +0 -0
  51. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docker-compose.yml +0 -0
  52. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/api-banner.png +0 -0
  53. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/api_banner.png +0 -0
  54. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_1.png +0 -0
  55. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_2.png +0 -0
  56. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_3.png +0 -0
  57. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_4.png +0 -0
  58. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/browserbase_logo.png +0 -0
  59. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/codespaces-badge.png +0 -0
  60. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/histogram.png +0 -0
  61. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/omniscrapergraph.png +0 -0
  62. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/omnisearchgraph.png +0 -0
  63. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/project_overview_diagram.fig +0 -0
  64. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/project_overview_diagram.png +0 -0
  65. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scrapegraphai_logo.png +0 -0
  66. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scrapegraphai_logo.svg +0 -0
  67. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scriptcreatorgraph.png +0 -0
  68. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/searchgraph.png +0 -0
  69. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/sgai-hero.png +0 -0
  70. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/smartscrapergraph.png +0 -0
  71. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/speechgraph.png +0 -0
  72. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/chinese.md +0 -0
  73. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/french.md +0 -0
  74. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/german.md +0 -0
  75. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/italian.md +0 -0
  76. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/japanese.md +0 -0
  77. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/korean.md +0 -0
  78. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/portuguese.md +0 -0
  79. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/russian.md +0 -0
  80. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/spanish.md +0 -0
  81. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/timeout_configuration.md +0 -0
  82. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/turkish.md +0 -0
  83. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/ScrapegraphAI_cookbook.ipynb +0 -0
  84. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/.env.example +0 -0
  85. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/README.md +0 -0
  86. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/ollama/code_generator_graph_ollama.py +0 -0
  87. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/openai/code_generator_graph_openai.py +0 -0
  88. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/.env.example +0 -0
  89. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/README.md +0 -0
  90. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/csv_scraper_graph_multi_ollama.py +0 -0
  91. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/csv_scraper_ollama.py +0 -0
  92. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/inputs/username.csv +0 -0
  93. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/csv_scraper_graph_multi_openai.py +0 -0
  94. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/csv_scraper_openai.py +0 -0
  95. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/inputs/username.csv +0 -0
  96. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/.env.example +0 -0
  97. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/README.md +0 -0
  98. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/ollama/custom_graph_ollama.py +0 -0
  99. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/openai/custom_graph_openai.py +0 -0
  100. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/.env.example +0 -0
  101. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/README.md +0 -0
  102. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/ollama/depth_search_graph_ollama.py +0 -0
  103. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/openai/depth_search_graph_openai.py +0 -0
  104. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/.env.example +0 -0
  105. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/README.md +0 -0
  106. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/ollama/document_scraper_ollama.py +0 -0
  107. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/ollama/inputs/plain_html_example.txt +0 -0
  108. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/document_scraper_openai.py +0 -0
  109. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/inputs/markdown_example.md +0 -0
  110. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/inputs/plain_html_example.txt +0 -0
  111. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/.env.example +0 -0
  112. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/Savedscreenshots/test_image.jpeg +0 -0
  113. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/authenticated_playwright.py +0 -0
  114. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/browser_base_integration.py +0 -0
  115. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/chromium_selenium.py +0 -0
  116. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/cond_smartscraper_usage.py +0 -0
  117. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/conditional_usage.py +0 -0
  118. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/custom_prompt.py +0 -0
  119. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/example.yml +0 -0
  120. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/force_mode.py +0 -0
  121. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/html_mode.py +0 -0
  122. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/load_yml.py +0 -0
  123. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/no_cut.py +0 -0
  124. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/proxy_rotation.py +0 -0
  125. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/rag_caching.py +0 -0
  126. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/reasoning.py +0 -0
  127. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/scrape_do.py +0 -0
  128. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/screenshot_scaping.py +0 -0
  129. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/serch_graph_scehma.py +0 -0
  130. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/slow_mo.py +0 -0
  131. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/undected_playwright.py +0 -0
  132. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/.env.example +0 -0
  133. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/README.md +0 -0
  134. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/inputs/example.json +0 -0
  135. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/json_scraper_multi_ollama.py +0 -0
  136. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/json_scraper_ollama.py +0 -0
  137. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/inputs/example.json +0 -0
  138. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/json_scraper_multi_openai.py +0 -0
  139. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/json_scraper_openai.py +0 -0
  140. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/md_scraper_openai.py +0 -0
  141. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/omni_scraper_openai.py +0 -0
  142. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/.env.example +0 -0
  143. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/markdownify_scrapegraphai.py +0 -0
  144. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/markdownify_scrapegraphai_v3.py +0 -0
  145. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/readme.md +0 -0
  146. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/.env.example +0 -0
  147. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/README.md +0 -0
  148. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/omni_search_openai.py +0 -0
  149. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/readme.md +0 -0
  150. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/.env.example +0 -0
  151. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/README.md +0 -0
  152. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/ollama/script_generator_ollama.py +0 -0
  153. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/ollama/script_multi_generator_ollama.py +0 -0
  154. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_multi_openai.py +0 -0
  155. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_openai.py +0 -0
  156. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_schema_openai.py +0 -0
  157. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/.env.example +0 -0
  158. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/README.md +0 -0
  159. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/ollama/search_graph_ollama.py +0 -0
  160. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/ollama/search_graph_schema_ollama.py +0 -0
  161. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_graph_openai.py +0 -0
  162. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_graph_schema_openai.py +0 -0
  163. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_link_graph_openai.py +0 -0
  164. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/.env.example +0 -0
  165. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/readme.md +0 -0
  166. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai.py +0 -0
  167. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai_v3.py +0 -0
  168. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/.env.example +0 -0
  169. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/nvidia/smart_scraper_nvidia.py +0 -0
  170. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_lite_ollama.py +0 -0
  171. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_concat_ollama.py +0 -0
  172. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_lite_ollama.py +0 -0
  173. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_ollama.py +0 -0
  174. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_ollama.py +0 -0
  175. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_schema_ollama.py +0 -0
  176. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_lite_openai.py +0 -0
  177. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_concat_openai.py +0 -0
  178. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_lite_openai.py +0 -0
  179. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_openai.py +0 -0
  180. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_openai.py +0 -0
  181. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_schema_openai.py +0 -0
  182. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/.env.example +0 -0
  183. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/readme.md +0 -0
  184. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai.py +0 -0
  185. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai_v3.py +0 -0
  186. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/.env.example +0 -0
  187. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/README.md +0 -0
  188. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/speech_graph_openai.py +0 -0
  189. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/.env.example +0 -0
  190. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/README.md +0 -0
  191. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/inputs/books.xml +0 -0
  192. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/xml_scraper_graph_multi_ollama.py +0 -0
  193. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/xml_scraper_ollama.py +0 -0
  194. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/inputs/books.xml +0 -0
  195. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/xml_scraper_graph_multi_openai.py +0 -0
  196. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/xml_scraper_openai.py +0 -0
  197. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/media/banner.png +0 -0
  198. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/pytest.ini +0 -0
  199. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/__init__.py +0 -0
  200. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/builders/__init__.py +0 -0
  201. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/builders/graph_builder.py +0 -0
  202. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/browser_base.py +0 -0
  203. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/plasmate.py +0 -0
  204. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/scrape_do.py +0 -0
  205. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/__init__.py +0 -0
  206. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/base_graph.py +0 -0
  207. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/code_generator_graph.py +0 -0
  208. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/csv_scraper_graph.py +0 -0
  209. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/csv_scraper_multi_graph.py +0 -0
  210. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/depth_search_graph.py +0 -0
  211. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/document_scraper_graph.py +0 -0
  212. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/document_scraper_multi_graph.py +0 -0
  213. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/json_scraper_graph.py +0 -0
  214. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/json_scraper_multi_graph.py +0 -0
  215. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/markdownify_graph.py +0 -0
  216. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/omni_scraper_graph.py +0 -0
  217. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/omni_search_graph.py +0 -0
  218. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/screenshot_scraper_graph.py +0 -0
  219. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/script_creator_graph.py +0 -0
  220. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/script_creator_multi_graph.py +0 -0
  221. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/search_graph.py +0 -0
  222. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/search_link_graph.py +0 -0
  223. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_graph.py +0 -0
  224. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_lite_graph.py +0 -0
  225. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_batch_graph.py +0 -0
  226. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_concat_graph.py +0 -0
  227. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_graph.py +0 -0
  228. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_lite_graph.py +0 -0
  229. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/speech_graph.py +0 -0
  230. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/xml_scraper_graph.py +0 -0
  231. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/xml_scraper_multi_graph.py +0 -0
  232. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/__init__.py +0 -0
  233. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/default_filters.py +0 -0
  234. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/nodes_metadata.py +0 -0
  235. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/robots.py +0 -0
  236. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/schemas.py +0 -0
  237. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/__init__.py +0 -0
  238. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/burr_bridge.py +0 -0
  239. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/indexify_node.py +0 -0
  240. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/scrapegraph_py_compat.py +0 -0
  241. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/clod.py +0 -0
  242. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/deepseek.py +0 -0
  243. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/nvidia.py +0 -0
  244. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/oneapi.py +0 -0
  245. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/openai_itt.py +0 -0
  246. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/openai_tts.py +0 -0
  247. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/xai.py +0 -0
  248. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/__init__.py +0 -0
  249. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/base_node.py +0 -0
  250. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/batch_generate_answer_node.py +0 -0
  251. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/concat_answers_node.py +0 -0
  252. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/conditional_node.py +0 -0
  253. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/description_node.py +0 -0
  254. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_node_level_k.py +0 -0
  255. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_screen_node.py +0 -0
  256. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_csv_node.py +0 -0
  257. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_from_image_node.py +0 -0
  258. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_node.py +0 -0
  259. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_node_k_level.py +0 -0
  260. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_omni_node.py +0 -0
  261. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_code_node.py +0 -0
  262. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_scraper_node.py +0 -0
  263. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/get_probable_tags_node.py +0 -0
  264. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/graph_iterator_node.py +0 -0
  265. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/html_analyzer_node.py +0 -0
  266. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/image_to_text_node.py +0 -0
  267. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/markdownify_node.py +0 -0
  268. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/merge_answers_node.py +0 -0
  269. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/merge_generated_scripts_node.py +0 -0
  270. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/parse_node.py +0 -0
  271. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/parse_node_depth_k_node.py +0 -0
  272. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/prompt_refiner_node.py +0 -0
  273. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/rag_node.py +0 -0
  274. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/reasoning_node.py +0 -0
  275. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_internet_node.py +0 -0
  276. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_link_node.py +0 -0
  277. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_node_with_context.py +0 -0
  278. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/text_to_speech_node.py +0 -0
  279. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/__init__.py +0 -0
  280. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/description_node_prompts.py +0 -0
  281. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_csv_prompts.py +0 -0
  282. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_omni_prompts.py +0 -0
  283. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_pdf_prompts.py +0 -0
  284. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_prompts.py +0 -0
  285. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_code_node_prompts.py +0 -0
  286. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/get_probable_tags_node_prompts.py +0 -0
  287. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/html_analyzer_node_prompts.py +0 -0
  288. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/merge_answer_node_prompts.py +0 -0
  289. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/merge_generated_scripts_prompts.py +0 -0
  290. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/prompt_refiner_node_prompts.py +0 -0
  291. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/reasoning_node_prompts.py +0 -0
  292. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/robots_node_prompts.py +0 -0
  293. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_internet_node_prompts.py +0 -0
  294. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_link_node_prompts.py +0 -0
  295. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_node_with_context_prompts.py +0 -0
  296. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/telemetry/__init__.py +0 -0
  297. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/telemetry/telemetry.py +0 -0
  298. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/__init__.py +0 -0
  299. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/batch_api.py +0 -0
  300. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/cleanup_code.py +0 -0
  301. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/cleanup_html.py +0 -0
  302. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/code_error_analysis.py +0 -0
  303. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/code_error_correction.py +0 -0
  304. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/convert_to_md.py +0 -0
  305. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/copy.py +0 -0
  306. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/data_export.py +0 -0
  307. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/dict_content_compare.py +0 -0
  308. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/logging.py +0 -0
  309. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/output_parser.py +0 -0
  310. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/parse_state_keys.py +0 -0
  311. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/prettify_exec_info.py +0 -0
  312. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/proxy_rotation.py +0 -0
  313. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/save_audio_from_bytes.py +0 -0
  314. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/save_code_to_file.py +0 -0
  315. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/schema_trasform.py +0 -0
  316. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/__init__.py +0 -0
  317. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/screenshot_preparation.py +0 -0
  318. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/text_detection.py +0 -0
  319. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/split_text_into_chunks.py +0 -0
  320. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/sys_dynamic_import.py +0 -0
  321. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizer.py +0 -0
  322. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_mistral.py +0 -0
  323. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_ollama.py +0 -0
  324. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_openai.py +0 -0
  325. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/test +0 -0
  326. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/QUICKSTART.md +0 -0
  327. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/README_TESTING.md +0 -0
  328. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/Readme.md +0 -0
  329. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/benchmarking.py +0 -0
  330. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/helpers.py +0 -0
  331. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/mock_server/__init__.py +0 -0
  332. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/mock_server/server.py +0 -0
  333. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/.env.example +0 -0
  334. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/code_generator_graph_openai_test.py +0 -0
  335. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/depth_search_graph_openai_test.py +0 -0
  336. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/books.xml +0 -0
  337. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/example.json +0 -0
  338. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/plain_html_example.txt +0 -0
  339. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/username.csv +0 -0
  340. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/scrape_plain_text_mistral_test.py +0 -0
  341. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/scrape_xml_ollama_test.py +0 -0
  342. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/screenshot_scraper_test.py +0 -0
  343. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/script_generator_test.py +0 -0
  344. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/search_graph_openai_test.py +0 -0
  345. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/search_link_ollama.py +0 -0
  346. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_clod_test.py +0 -0
  347. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_ernie_test.py +0 -0
  348. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_fireworks_test.py +0 -0
  349. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_multi_lite_graph_openai_test.py +0 -0
  350. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_ollama_test.py +0 -0
  351. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_openai_test.py +0 -0
  352. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/xml_scraper_openai_test.py +0 -0
  353. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/books.xml +0 -0
  354. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/example.json +0 -0
  355. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/plain_html_example.txt +0 -0
  356. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/username.csv +0 -0
  357. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/__init__.py +0 -0
  358. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_file_formats_integration.py +0 -0
  359. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_multi_graph_integration.py +0 -0
  360. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_smart_scraper_integration.py +0 -0
  361. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/fetch_node_test.py +0 -0
  362. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/books.xml +0 -0
  363. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/example.json +0 -0
  364. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/plain_html_example.txt +0 -0
  365. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/username.csv +0 -0
  366. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/robot_node_test.py +0 -0
  367. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/search_internet_node_test.py +0 -0
  368. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/search_link_node_test.py +0 -0
  369. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_batch_api.py +0 -0
  370. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_chromium.py +0 -0
  371. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_cleanup_html.py +0 -0
  372. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_csv_scraper_multi_graph.py +0 -0
  373. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_depth_search_graph.py +0 -0
  374. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_fetch_node_timeout.py +0 -0
  375. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_generate_answer_node.py +0 -0
  376. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_json_scraper_graph.py +0 -0
  377. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_json_scraper_multi_graph.py +0 -0
  378. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_models_tokens.py +0 -0
  379. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_omni_search_graph.py +0 -0
  380. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_plasmate.py +0 -0
  381. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_scrape_do.py +0 -0
  382. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_script_creator_multi_graph.py +0 -0
  383. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_search_graph.py +0 -0
  384. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_smart_scraper_multi_concat_graph.py +0 -0
  385. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/convert_to_md_test.py +0 -0
  386. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/copy_utils_test.py +0 -0
  387. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/output_parser_test.py +0 -0
  388. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/parse_state_keys_test.py +0 -0
  389. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/research_web_test.py +0 -0
  390. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/test_proxy_rotation.py +0 -0
  391. {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/test_sys_dynamic_import.py +0 -0
@@ -0,0 +1,51 @@
1
+ name: Test Suite
2
+
3
+ on:
4
+ push:
5
+ branches: [main, pre/beta, dev]
6
+ pull_request:
7
+ branches: [main, pre/beta]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ unit-tests:
12
+ name: Unit Tests
13
+ runs-on: ubuntu-latest
14
+ # Hard cap so a hanging test can never burn the full 6h runner budget again.
15
+ timeout-minutes: 15
16
+
17
+ steps:
18
+ - name: Checkout code
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: '3.12'
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v4
28
+
29
+ - name: Install dependencies
30
+ run: uv sync
31
+
32
+ # Run only the deterministic, mock-based unit suites. The provider graph
33
+ # tests (tests/graphs/*), integration tests (tests/integration/*) and the
34
+ # browser/network suites (e.g. tests/test_chromium.py) require real API
35
+ # keys or live network/browsers, so in CI they either fail or hang
36
+ # indefinitely. They should be re-added here once mocked or gated behind
37
+ # markers + secrets.
38
+ - name: Run unit tests
39
+ run: >
40
+ uv run pytest
41
+ tests/test_atlascloud_model.py
42
+ tests/test_batch_api.py
43
+ tests/test_csv_scraper_multi_graph.py
44
+ tests/test_depth_search_graph.py
45
+ tests/test_json_scraper_graph.py
46
+ tests/test_minimax_models.py
47
+ tests/test_scrape_do.py
48
+ tests/test_search_graph.py
49
+ tests/utils/convert_to_md_test.py
50
+ tests/utils/output_parser_test.py
51
+ tests/utils/parse_state_keys_test.py
@@ -0,0 +1,136 @@
1
+ # AGENTS.md
2
+
3
+ Instructions for AI coding agents (Claude Code, Codex, Cursor, Copilot agents, …)
4
+ working on **ScrapeGraphAI**. Human contributors should read
5
+ [CONTRIBUTING.md](CONTRIBUTING.md); everything here is in addition to it.
6
+
7
+ ---
8
+
9
+ ## 1. Golden rule: everything goes to `pre/beta`
10
+
11
+ **`main` is never written to directly. All work is based on and merged into `pre/beta`.**
12
+
13
+ `pre/beta` is the prerelease branch: pushes to it publish a `beta` prerelease via
14
+ semantic-release (see `.releaserc.yml`). `main` only receives releases when a
15
+ maintainer promotes `pre/beta`.
16
+
17
+ ```bash
18
+ # 1. always start from an up-to-date pre/beta
19
+ git fetch origin
20
+ git checkout -b feat/my-change origin/pre/beta
21
+
22
+ # 2. commit your work
23
+ git add <only the files you touched>
24
+ git commit -m "feat(nodes): add X"
25
+
26
+ # 3. push and open the PR against pre/beta
27
+ git push -u origin feat/my-change
28
+ gh pr create --base pre/beta --title "feat(nodes): add X" --body "..."
29
+ ```
30
+
31
+ Checklist before you commit:
32
+
33
+ - [ ] The branch is based on `origin/pre/beta` (`git merge-base --is-ancestor origin/pre/beta HEAD`).
34
+ - [ ] The PR base is `pre/beta`, **not** `main`.
35
+ - [ ] No commits directly on `main` or `pre/beta`, no force-push to either.
36
+ - [ ] One logical change per branch/PR.
37
+
38
+ If a task genuinely requires targeting `main` (e.g. a hotfix on a released
39
+ version), stop and ask a maintainer first.
40
+
41
+ ## 2. Environment setup
42
+
43
+ Python `>=3.12`, dependencies managed with [uv](https://docs.astral.sh/uv/):
44
+
45
+ ```bash
46
+ uv sync # create the venv and install deps
47
+ uv run pre-commit install # install the git hooks
48
+ ```
49
+
50
+ Never hand-edit `uv.lock`; regenerate it with `uv lock` / `uv sync` and commit
51
+ the result only when you actually changed dependencies in `pyproject.toml`.
52
+
53
+ ## 3. Checks to run before pushing
54
+
55
+ ```bash
56
+ make lint # ruff + black --check + isort --check-only
57
+ make type-check # mypy (strict)
58
+ make test # pytest with coverage
59
+ make pre-commit # run all hooks on all files
60
+ ```
61
+
62
+ Run at least `make lint` and the tests covering what you touched. Report the
63
+ real result: if something fails or you skipped a step, say so in the PR
64
+ description instead of implying a clean run.
65
+
66
+ Style: PEP 8 + Google Python docstrings, `black` formatting, line length 88.
67
+ Match the conventions of the surrounding file rather than introducing new ones.
68
+
69
+ ## 4. Commit messages
70
+
71
+ Commits are parsed by semantic-release (Conventional Commits, `conventionalcommits`
72
+ preset), so the message decides the next version number. Use:
73
+
74
+ ```
75
+ feat: ✨ new feature -> minor bump
76
+ fix: 🐛 bug fix -> patch bump
77
+ docs: 📚 documentation
78
+ style: 💅 formatting only
79
+ refactor: ♻️ no behaviour change
80
+ perf: ⚡ performance
81
+ test: 🧪 tests
82
+ build: 📦 build system / deps
83
+ ci: 🤖 CI configuration
84
+ chore: 🧹 everything else
85
+ ```
86
+
87
+ Format: `type(optional-scope): imperative summary`, optional body, and
88
+ `BREAKING CHANGE:` in the footer for incompatible changes. Reference issues with
89
+ `Fixes #123`.
90
+
91
+ ## 5. Files agents must not touch
92
+
93
+ - `CHANGELOG.md` and the `version` field in `pyproject.toml` — owned by
94
+ semantic-release; editing them by hand breaks releases.
95
+ - Git tags and release notes on GitHub.
96
+ - `.github/workflows/*` — only when the task is explicitly about CI.
97
+ - Anything under `htmlcov/`, `coverage.xml`, `.pytest_cache/`, `__pycache__/`:
98
+ build artifacts, never commit them.
99
+
100
+ Also: never commit secrets. API keys go in a local `.env` (git-ignored) and are
101
+ read via `os.getenv`; examples and tests must use placeholders such as
102
+ `OPENAI_APIKEY` from the environment.
103
+
104
+ ## 6. Repository layout
105
+
106
+ ```
107
+ scrapegraphai/
108
+ ├── graphs/ # pipelines (SmartScraperGraph, SearchGraph, …)
109
+ ├── nodes/ # single graph steps (FetchNode, ParseNode, GenerateAnswerNode, …)
110
+ ├── models/ # LLM wrappers and token/model metadata
111
+ ├── docloaders/ # loaders (ChromiumLoader, …)
112
+ ├── prompts/ # prompt templates
113
+ ├── helpers/ # shared constants and schemas
114
+ ├── integrations/ # third-party / managed-API integrations
115
+ └── utils/ # utilities (html cleanup, tokenization, …)
116
+ examples/ # runnable usage examples, one folder per graph
117
+ tests/ # pytest suite, mirrors the package layout
118
+ docs/ # documentation sources
119
+ ```
120
+
121
+ When adding a node or graph, register it in the corresponding `__init__.py` and
122
+ add a test under `tests/` next to the existing ones for that layer. New
123
+ user-facing features need an entry in `examples/` and, when they change public
124
+ behaviour, a docs update.
125
+
126
+ ## 7. Working style expected from agents
127
+
128
+ - Prefer small, reviewable diffs; do not reformat or "clean up" untouched files.
129
+ - Do not add dependencies unless the task requires it — say why in the PR.
130
+ - Write all commits, PR titles/bodies, issue comments, code comments and
131
+ docstrings **in English**.
132
+ - Do not delete or rewrite existing tests to make a change pass.
133
+ - If a test is already failing on `pre/beta`, mention it rather than silently
134
+ fixing unrelated things in the same PR.
135
+ - Never commit other people's in-progress work: check `git status` and stage
136
+ only the files belonging to your change.
@@ -1,3 +1,113 @@
1
+ ## [2.2.0-beta.6](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0-beta.5...v2.2.0-beta.6) (2026-08-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **graph:** expose when the 8192 token fallback was used ([470da9d](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/470da9d51d6220a8020ee8a1d91b618d3d622042)), closes [#1121](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1121)
7
+ * lazy imports to prevent torchcodec FFmpeg DLL crash on Windows ([#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089)) ([#1092](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1092)) ([e5c2a42](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5c2a4292174bae948731379c88aafb14197ec6c))
8
+ * pop model_tokens so it is not forwarded to the model client ([#1100](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1100)) ([d2b970c](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/d2b970ca77da64b6b6b91fa2353f2e41b9cfe105))
9
+ * **search:** restore SearchGraph by migrating DuckDuckGo backend to ddgs ([#1083](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1083)) ([2139e37](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/2139e37c0addfb9039e3b985bb33801f20e4e05b)), closes [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082) [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082)
10
+ * update MiniMax model metadata and endpoints ([#1103](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1103)) ([e5f8f2b](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5f8f2bf008cd7ce7f3d5980bf6f98e6153b2264))
11
+
12
+
13
+ ### Docs
14
+
15
+ * add AGENTS.md with contribution rules for AI agents ([3b2f986](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/3b2f986612bbc70879a0337197a1064cf5875245))
16
+ * **readme:** add Open Source vs Managed API comparison ([#1091](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1091)) ([ef3523b](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/ef3523b1e1c62052b5c0e6b14cebe7933441a7e5))
17
+ * swap Integrations infographic for new API banner; fix CTA links ([71ab440](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/71ab4406867ef02c22349c2dedc18c57d8bdfdec))
18
+
19
+
20
+ ### CI
21
+
22
+ * **release:** 2.1.3 [skip ci] ([cfb815f](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/cfb815fb0bba3dfc8262a24a7ddab28e22e13893)), closes [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082) [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082)
23
+ * **release:** 2.1.4 [skip ci] ([7fc9c57](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/7fc9c57a0bb861d829f38ed672e35c5ba0e6c79c)), closes [#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089) [#1092](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1092)
24
+ * **release:** 2.1.5 [skip ci] ([c9e0bd0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/c9e0bd036a1f5def8ac92759cda90ba52e3b35e5)), closes [#1100](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1100) [#1091](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1091) [#1095](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1095)
25
+ * **release:** 2.1.6 [skip ci] ([27d9d28](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/27d9d289f964844a28006f6d7d1518e293fd49ff)), closes [#1103](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1103)
26
+ * **release:** 2.1.7 [skip ci] ([ca112db](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/ca112db4d8b1bd34961e9f1b7e3adf0c7d600c01)), closes [#1121](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1121)
27
+ * run only deterministic unit suites in Test Suite workflow ([#1095](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1095)) ([037a42e](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/037a42ed73354c8b3eabd9dcc28236152602ef9e))
28
+ * run the two new deterministic unit suites ([23e3d06](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/23e3d064e3850de222bcfc13907695278ca3bba9)), closes [#1104](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1104) [#1085](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1085)
29
+
30
+ ## [2.1.7](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.6...v2.1.7) (2026-08-19)
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * **graph:** expose when the 8192 token fallback was used ([470da9d](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/470da9d51d6220a8020ee8a1d91b618d3d622042)), closes [#1121](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1121)
36
+
37
+ ## [2.1.6](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.5...v2.1.6) (2026-07-20)
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * update MiniMax model metadata and endpoints ([#1103](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1103)) ([e5f8f2b](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5f8f2bf008cd7ce7f3d5980bf6f98e6153b2264))
43
+
44
+ ## [2.1.5](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.4...v2.1.5) (2026-07-08)
45
+
46
+
47
+ ### Bug Fixes
48
+
49
+ * pop model_tokens so it is not forwarded to the model client ([#1100](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1100)) ([d2b970c](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/d2b970ca77da64b6b6b91fa2353f2e41b9cfe105))
50
+
51
+
52
+ ### Docs
53
+
54
+ * **readme:** add Open Source vs Managed API comparison ([#1091](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1091)) ([ef3523b](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/ef3523b1e1c62052b5c0e6b14cebe7933441a7e5))
55
+
56
+
57
+ ### CI
58
+
59
+ * run only deterministic unit suites in Test Suite workflow ([#1095](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1095)) ([037a42e](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/037a42ed73354c8b3eabd9dcc28236152602ef9e))
60
+
61
+ ## [2.1.4](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.3...v2.1.4) (2026-06-23)
62
+
63
+
64
+ ### Bug Fixes
65
+
66
+ * lazy imports to prevent torchcodec FFmpeg DLL crash on Windows ([#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089)) ([#1092](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1092)) ([e5c2a42](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5c2a4292174bae948731379c88aafb14197ec6c))
67
+
68
+
69
+ ### Docs
70
+
71
+ * swap Integrations infographic for new API banner; fix CTA links ([71ab440](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/71ab4406867ef02c22349c2dedc18c57d8bdfdec))
72
+
73
+ ## [2.1.3](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.2...v2.1.3) (2026-06-02)
74
+
75
+
76
+ ### Bug Fixes
77
+
78
+ * **search:** restore SearchGraph by migrating DuckDuckGo backend to ddgs ([#1083](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1083)) ([2139e37](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/2139e37c0addfb9039e3b985bb33801f20e4e05b)), closes [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082) [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082)
79
+
80
+ ## [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)
81
+
82
+
83
+ ### Bug Fixes
84
+
85
+ * **nodes:** update outdated ChatOllama import path to langchain_ollama ([#1076](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1076)) ([e6054cb](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e6054cbf19a7fe940899ea70b30706f676f86fa7))
86
+
87
+
88
+ ### Docs
89
+
90
+ * 📚 Standardize and fix links across translated READMEs ([#1074](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1074)) ([458d36a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/458d36a6b83f4a412206cdbe9935a059e9d47f57))
91
+
92
+
93
+ ### CI
94
+
95
+ * **release:** 2.1.2 [skip ci] ([210c992](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/210c99280048863774fa27053412185a5c18150d)), closes [#1076](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1076) [#1074](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1074)
96
+
97
+ ## [2.2.0-beta.2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.2.0-beta.1...v2.2.0-beta.2) (2026-06-01)
98
+
99
+
100
+ ### Features
101
+
102
+ * upgrade MiniMax default model to M3 ([#1080](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1080)) ([1b16c26](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/1b16c268f4e9044c1386ccfaf67b38692b487e5a))
103
+
104
+ ## [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)
105
+
106
+
107
+ ### Bug Fixes
108
+
109
+ * 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))
110
+
1
111
  ## [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)
2
112
 
3
113
 
@@ -1565,7 +1675,6 @@ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1565
1675
 
1566
1676
  * implement ScrapeGraph class for only web scraping automation ([612c644](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/612c644623fa6f4fe77a64a5f1a6a4d6cd5f4254))
1567
1677
  * Implement SmartScraperMultiParseMergeFirstGraph class that scrapes a list of URLs and merge the content first and finally generates answers to a given prompt. ([3e3e1b2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/3e3e1b2f3ae8ed803d03b3b44b199e139baa68d4))
1568
- =======
1569
1678
  ## [1.26.7](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.26.6...v1.26.7) (2024-10-19)
1570
1679
 
1571
1680
 
@@ -3639,7 +3748,6 @@ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3639
3748
  * **release:** 1.6.1 [skip ci] ([44fbd71](https://github.com/VinciGit00/Scrapegraph-ai/commit/44fbd71742a57a4b10f22ed33781bb67aa77e58d))
3640
3749
 
3641
3750
  ## [1.6.1](https://github.com/VinciGit00/Scrapegraph-ai/compare/v1.6.0...v1.6.1) (2024-06-15)
3642
- =======
3643
3751
 
3644
3752
 
3645
3753
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: scrapegraphai
3
- Version: 2.2.0b4
3
+ Version: 2.2.0b6
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
@@ -11,7 +11,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
11
11
  Requires-Python: <4.0,>=3.12
12
12
  Requires-Dist: async-timeout>=4.0.0
13
13
  Requires-Dist: beautifulsoup4>=4.14.3
14
- Requires-Dist: duckduckgo-search>=8.1.1
14
+ Requires-Dist: ddgs>=9.0.0
15
15
  Requires-Dist: free-proxy>=1.1.3
16
16
  Requires-Dist: html2text>=2025.4.15
17
17
  Requires-Dist: jsonschema>=4.25.1
@@ -81,7 +81,9 @@ Just say which information you want to extract and the library will do it for yo
81
81
  ScrapeGraphAI offers seamless integration with popular frameworks and tools to enhance your scraping capabilities. Whether you're building with Python or Node.js, using LLM frameworks, or working with no-code platforms, we've got you covered with our comprehensive integration options..
82
82
 
83
83
  <p align="center">
84
- <img src="https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/sgai-hero.png" alt="ScrapeGraphAI Hero" style="width: 100%;">
84
+ <a href="https://scrapegraphai.com">
85
+ <img src="https://raw.githubusercontent.com/ScrapeGraphAI/.github/main/profile/assets/api_banner.png" alt="Web data extraction at scale? Try ScrapeGraphAI cloud" style="width: 100%;">
86
+ </a>
85
87
  </p>
86
88
 
87
89
  You can find more informations at the following [link](https://scrapegraphai.com)
@@ -93,6 +95,7 @@ You can find more informations at the following [link](https://scrapegraphai.com
93
95
  - **Low-code Frameworks**: [Pipedream](https://pipedream.com/apps/scrapegraphai), [Bubble](https://bubble.io/plugin/scrapegraphai-1745408893195x213542371433906180), [Zapier](https://zapier.com/apps/scrapegraphai/integrations), [n8n](http://localhost:5001/dashboard), [Dify](https://dify.ai), [Toolhouse](https://app.toolhouse.ai/mcp-servers/scrapegraph_smartscraper)
94
96
  - **MCP server**: [Link](https://smithery.ai/server/@ScrapeGraphAI/scrapegraph-mcp)
95
97
 
98
+
96
99
  ## 🚀 Quick install
97
100
 
98
101
  The reference page for Scrapegraph-ai is available on the official page of PyPI: [pypi](https://pypi.org/project/scrapegraphai/).
@@ -197,7 +200,7 @@ There are other pipelines that can be used to extract information from multiple
197
200
 
198
201
  For each of these graphs there is the multi version. It allows to make calls of the LLM in parallel.
199
202
 
200
- It is possible to use different LLM through APIs, such as **OpenAI**, **Groq**, **Azure**, **Gemini**, **MiniMax** and more, or local models using **Ollama**.
203
+ It is possible to use different LLM through APIs, such as **OpenAI**, **Groq**, **Azure**, **Gemini**, **[MiniMax](docs/minimax.md)** and more, or local models using **Ollama**.
201
204
 
202
205
  Remember to have [Ollama](https://ollama.com/) installed and download the models using the **ollama pull** command, if you want to use local models.
203
206
 
@@ -207,6 +210,32 @@ Remember to have [Ollama](https://ollama.com/) installed and download the models
207
210
  [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1sEZBonBMGP44CtO6GQTwAlL0BGJXjtfd?usp=sharing)
208
211
 
209
212
  The documentation for ScrapeGraphAI can be found [here](https://docs.scrapegraphai.com/introduction).
213
+ ## 🆚 Open Source vs Managed API
214
+
215
+ ScrapeGraphAI comes in two flavours: **this open-source library**, which you run yourself, and the **managed cloud API** (used via the [Python](https://github.com/ScrapeGraphAI/scrapegraph-py) and [JS/TS](https://github.com/ScrapeGraphAI/scrapegraph-js) SDKs). This table explains the difference so you can pick the right one.
216
+
217
+ | | Open Source (`scrapegraphai`) | Managed API (`scrapegraph-py` / `scrapegraph-js`) |
218
+ |---|---|---|
219
+ | **What it is** | A Python library you run yourself | A hosted cloud service you call via SDK |
220
+ | **Where it runs** | Your own infrastructure (self-hosted) | ScrapeGraphAI cloud |
221
+ | **LLM** | Bring your own (OpenAI, Groq, Gemini, Azure, local via Ollama) | Managed for you |
222
+ | **Browser / JS rendering** | You configure it (Playwright) | Managed (stealth, `auto`/`fast`/`js` modes) |
223
+ | **Proxies & anti-bot** | Your responsibility | Included |
224
+ | **Scaling & maintenance** | Your responsibility | Fully managed |
225
+ | **Cost model** | LLM tokens + your own infra | Pay-as-you-go credits |
226
+ | **Auth** | Your own LLM keys | `SGAI_API_KEY` |
227
+ | **Capabilities** | Graph pipelines (SmartScraper, Search, Speech, ScriptCreator…) | Scrape, Extract, Search, Crawl, Monitor, History |
228
+ | **Setup effort** | More configuration | Minimal — API key + one call |
229
+ | **License** | MIT | SDK is MIT; the API service is paid |
230
+
231
+ **Choose the open-source library** if you want full control, on-prem/self-hosted data, local LLMs (Ollama), or fine-grained cost tuning — and you're happy to manage browsers, proxies and scaling yourself.
232
+
233
+ **Choose the managed API** if you want zero infrastructure, managed JS rendering & anti-bot, built-in **Crawl** and scheduled **Monitor** jobs, and the fastest path to production — billed per credit.
234
+
235
+ - Open-source library: https://github.com/ScrapeGraphAI/Scrapegraph-ai
236
+ - Python SDK: https://github.com/ScrapeGraphAI/scrapegraph-py
237
+ - JS/TS SDK: https://github.com/ScrapeGraphAI/scrapegraph-js
238
+ - API docs: https://docs.scrapegraphai.com/introduction
210
239
 
211
240
  ## 🤝 Contributing
212
241
 
@@ -219,9 +248,9 @@ Please see the [contributing guidelines](https://github.com/ScrapeGraphAI/Scrape
219
248
  [![My Skills](https://skillicons.dev/icons?i=twitter)](https://twitter.com/scrapegraphai)
220
249
 
221
250
  ## 🔗 ScrapeGraph API & SDKs
222
- If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://dashboard.scrapegraphai.com/login)
251
+ If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://scrapegraphai.com)
223
252
 
224
- [![API Banner](https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/api_banner.png)](https://dashboard.scrapegraphai.com/login)
253
+ [![API Banner](https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/api_banner.png)](https://scrapegraphai.com)
225
254
 
226
255
  We offer SDKs in both Python and Node.js, making it easy to integrate into your projects. Check them out below:
227
256
 
@@ -36,7 +36,9 @@ Just say which information you want to extract and the library will do it for yo
36
36
  ScrapeGraphAI offers seamless integration with popular frameworks and tools to enhance your scraping capabilities. Whether you're building with Python or Node.js, using LLM frameworks, or working with no-code platforms, we've got you covered with our comprehensive integration options..
37
37
 
38
38
  <p align="center">
39
- <img src="https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/sgai-hero.png" alt="ScrapeGraphAI Hero" style="width: 100%;">
39
+ <a href="https://scrapegraphai.com">
40
+ <img src="https://raw.githubusercontent.com/ScrapeGraphAI/.github/main/profile/assets/api_banner.png" alt="Web data extraction at scale? Try ScrapeGraphAI cloud" style="width: 100%;">
41
+ </a>
40
42
  </p>
41
43
 
42
44
  You can find more informations at the following [link](https://scrapegraphai.com)
@@ -48,6 +50,7 @@ You can find more informations at the following [link](https://scrapegraphai.com
48
50
  - **Low-code Frameworks**: [Pipedream](https://pipedream.com/apps/scrapegraphai), [Bubble](https://bubble.io/plugin/scrapegraphai-1745408893195x213542371433906180), [Zapier](https://zapier.com/apps/scrapegraphai/integrations), [n8n](http://localhost:5001/dashboard), [Dify](https://dify.ai), [Toolhouse](https://app.toolhouse.ai/mcp-servers/scrapegraph_smartscraper)
49
51
  - **MCP server**: [Link](https://smithery.ai/server/@ScrapeGraphAI/scrapegraph-mcp)
50
52
 
53
+
51
54
  ## 🚀 Quick install
52
55
 
53
56
  The reference page for Scrapegraph-ai is available on the official page of PyPI: [pypi](https://pypi.org/project/scrapegraphai/).
@@ -152,7 +155,7 @@ There are other pipelines that can be used to extract information from multiple
152
155
 
153
156
  For each of these graphs there is the multi version. It allows to make calls of the LLM in parallel.
154
157
 
155
- It is possible to use different LLM through APIs, such as **OpenAI**, **Groq**, **Azure**, **Gemini**, **MiniMax** and more, or local models using **Ollama**.
158
+ It is possible to use different LLM through APIs, such as **OpenAI**, **Groq**, **Azure**, **Gemini**, **[MiniMax](docs/minimax.md)** and more, or local models using **Ollama**.
156
159
 
157
160
  Remember to have [Ollama](https://ollama.com/) installed and download the models using the **ollama pull** command, if you want to use local models.
158
161
 
@@ -162,6 +165,32 @@ Remember to have [Ollama](https://ollama.com/) installed and download the models
162
165
  [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1sEZBonBMGP44CtO6GQTwAlL0BGJXjtfd?usp=sharing)
163
166
 
164
167
  The documentation for ScrapeGraphAI can be found [here](https://docs.scrapegraphai.com/introduction).
168
+ ## 🆚 Open Source vs Managed API
169
+
170
+ ScrapeGraphAI comes in two flavours: **this open-source library**, which you run yourself, and the **managed cloud API** (used via the [Python](https://github.com/ScrapeGraphAI/scrapegraph-py) and [JS/TS](https://github.com/ScrapeGraphAI/scrapegraph-js) SDKs). This table explains the difference so you can pick the right one.
171
+
172
+ | | Open Source (`scrapegraphai`) | Managed API (`scrapegraph-py` / `scrapegraph-js`) |
173
+ |---|---|---|
174
+ | **What it is** | A Python library you run yourself | A hosted cloud service you call via SDK |
175
+ | **Where it runs** | Your own infrastructure (self-hosted) | ScrapeGraphAI cloud |
176
+ | **LLM** | Bring your own (OpenAI, Groq, Gemini, Azure, local via Ollama) | Managed for you |
177
+ | **Browser / JS rendering** | You configure it (Playwright) | Managed (stealth, `auto`/`fast`/`js` modes) |
178
+ | **Proxies & anti-bot** | Your responsibility | Included |
179
+ | **Scaling & maintenance** | Your responsibility | Fully managed |
180
+ | **Cost model** | LLM tokens + your own infra | Pay-as-you-go credits |
181
+ | **Auth** | Your own LLM keys | `SGAI_API_KEY` |
182
+ | **Capabilities** | Graph pipelines (SmartScraper, Search, Speech, ScriptCreator…) | Scrape, Extract, Search, Crawl, Monitor, History |
183
+ | **Setup effort** | More configuration | Minimal — API key + one call |
184
+ | **License** | MIT | SDK is MIT; the API service is paid |
185
+
186
+ **Choose the open-source library** if you want full control, on-prem/self-hosted data, local LLMs (Ollama), or fine-grained cost tuning — and you're happy to manage browsers, proxies and scaling yourself.
187
+
188
+ **Choose the managed API** if you want zero infrastructure, managed JS rendering & anti-bot, built-in **Crawl** and scheduled **Monitor** jobs, and the fastest path to production — billed per credit.
189
+
190
+ - Open-source library: https://github.com/ScrapeGraphAI/Scrapegraph-ai
191
+ - Python SDK: https://github.com/ScrapeGraphAI/scrapegraph-py
192
+ - JS/TS SDK: https://github.com/ScrapeGraphAI/scrapegraph-js
193
+ - API docs: https://docs.scrapegraphai.com/introduction
165
194
 
166
195
  ## 🤝 Contributing
167
196
 
@@ -174,9 +203,9 @@ Please see the [contributing guidelines](https://github.com/ScrapeGraphAI/Scrape
174
203
  [![My Skills](https://skillicons.dev/icons?i=twitter)](https://twitter.com/scrapegraphai)
175
204
 
176
205
  ## 🔗 ScrapeGraph API & SDKs
177
- If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://dashboard.scrapegraphai.com/login)
206
+ If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://scrapegraphai.com)
178
207
 
179
- [![API Banner](https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/api_banner.png)](https://dashboard.scrapegraphai.com/login)
208
+ [![API Banner](https://raw.githubusercontent.com/ScrapeGraphAI/Scrapegraph-ai/main/docs/assets/api_banner.png)](https://scrapegraphai.com)
180
209
 
181
210
  We offer SDKs in both Python and Node.js, making it easy to integrate into your projects. Check them out below:
182
211
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "scrapegraphai"
3
3
 
4
- version = "2.2.0b4"
4
+ version = "2.2.0b6"
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 = [
@@ -30,7 +30,7 @@ dependencies = [
30
30
  "async-timeout>=4.0.0",
31
31
  "simpleeval>=1.0.3",
32
32
  "jsonschema>=4.25.1",
33
- "duckduckgo-search>=8.1.1",
33
+ "ddgs>=9.0.0",
34
34
  "pydantic>=2.12.5",
35
35
  "scrapegraph-py>=2.0.0",
36
36
  ]
@@ -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.
@@ -64,6 +64,9 @@ class AbstractGraph(ABC):
64
64
  self.source = source
65
65
  self.config = config
66
66
  self.schema = schema
67
+ # Set to True when no token limit is known for the configured model and
68
+ # the 8192 fallback is used; see _create_llm.
69
+ self.model_tokens_defaulted = False
67
70
  self.llm_model = self._create_llm(config["llm"])
68
71
  self.verbose = False if config is None else config.get("verbose", False)
69
72
  self.headless = True if self.config is None else config.get("headless", True)
@@ -218,9 +221,18 @@ class AbstractGraph(ABC):
218
221
  llm_params["model"],
219
222
  )
220
223
  self.model_token = 8192
224
+ # A silent 8192 window truncates long pages and changes the
225
+ # answer without failing. The log line alone is not reachable
226
+ # from the returned object, so callers that batch runs (or
227
+ # capture stdout only) have no way to tell a real limit from
228
+ # the fallback. Record it so it can be asserted on.
229
+ self.model_tokens_defaulted = True
221
230
  else:
222
231
  self.model_token = llm_params["model_tokens"]
223
232
 
233
+ # Consumed by ScrapeGraphAI; must not be forwarded to the model client.
234
+ llm_params.pop("model_tokens", None)
235
+
224
236
  try:
225
237
  if llm_params["model_provider"] not in {
226
238
  "oneapi",
@@ -335,6 +335,10 @@ models_tokens = {
335
335
  "deepseek-ai/DeepSeek-V2-Chat": 131072,
336
336
  "claude-3-haiku": 200000,
337
337
  },
338
+ "atlascloud": {
339
+ "deepseek-ai/deepseek-v4-pro": 1048576,
340
+ "qwen/qwen3.5-flash": 1000000,
341
+ },
338
342
  "deepseek": {
339
343
  "deepseek-chat": 128000,
340
344
  "deepseek-coder": 128000,
@@ -408,8 +412,8 @@ models_tokens = {
408
412
  "grok-beta": 128000,
409
413
  },
410
414
  "minimax": {
411
- "MiniMax-M3": 524288,
412
- "MiniMax-M2.7": 204000,
413
- "MiniMax-M2.7-highspeed": 204000,
415
+ "MiniMax-M3": 1000000,
416
+ "MiniMax-M2.7": 204800,
417
+ "MiniMax-M2.7-highspeed": 204800,
414
418
  },
415
419
  }
@@ -2,6 +2,7 @@
2
2
  This module contains the model definitions used in the ScrapeGraphAI application.
3
3
  """
4
4
 
5
+ from .atlascloud import AtlasCloud
5
6
  from .clod import CLoD
6
7
  from .deepseek import DeepSeek
7
8
  from .minimax import MiniMax
@@ -11,4 +12,4 @@ from .openai_itt import OpenAIImageToText
11
12
  from .openai_tts import OpenAITextToSpeech
12
13
  from .xai import XAI
13
14
 
14
- __all__ = ["DeepSeek", "MiniMax", "OneApi", "OpenAIImageToText", "OpenAITextToSpeech", "CLoD", "XAI", "Nvidia"]
15
+ __all__ = ["AtlasCloud", "DeepSeek", "MiniMax", "OneApi", "OpenAIImageToText", "OpenAITextToSpeech", "CLoD", "XAI", "Nvidia"]