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.
- scrapegraphai-2.2.0b6/.github/workflows/test-suite.yml +51 -0
- scrapegraphai-2.2.0b6/AGENTS.md +136 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CHANGELOG.md +110 -2
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/PKG-INFO +35 -6
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/README.md +33 -4
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/pyproject.toml +2 -2
- scrapegraphai-2.2.0b6/scrapegraphai/docloaders/__init__.py +30 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/chromium.py +9 -2
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/abstract_graph.py +12 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/models_tokens.py +7 -3
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/__init__.py +2 -1
- scrapegraphai-2.2.0b6/scrapegraphai/models/atlascloud.py +22 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/minimax.py +5 -1
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_node.py +1 -1
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/robots_node.py +1 -1
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/custom_callback.py +48 -12
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/llm_callback_manager.py +9 -1
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/model_costs.py +81 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/research_web.py +42 -7
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/conftest.py +15 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/abstract_graph_test.py +55 -0
- scrapegraphai-2.2.0b6/tests/test_atlascloud_model.py +48 -0
- scrapegraphai-2.2.0b6/tests/test_minimax_models.py +274 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/uv.lock +269 -1449
- scrapegraphai-2.2.0b4/.github/workflows/test-suite.yml +0 -34
- scrapegraphai-2.2.0b4/scrapegraphai/docloaders/__init__.py +0 -15
- scrapegraphai-2.2.0b4/tests/test_minimax_models.py +0 -62
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.gitattributes +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/FUNDING.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/custom.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/codeql.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/dependency-review.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.github/workflows/release.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.gitignore +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.pre-commit-config.yaml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.releaserc.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/.semantic-commits-applied +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CODE_OF_CONDUCT.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/CONTRIBUTING.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/Dockerfile +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/LICENSE +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/Makefile +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/PullRequests/PR_1027_reviews.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/SECURITY.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/SEMANTIC_COMMITS.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/TESTING_INFRASTRUCTURE.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/citation.cff +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/codebeaver.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docker-compose.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/api-banner.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/api_banner.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_1.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_2.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_3.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/apikey_4.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/browserbase_logo.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/codespaces-badge.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/histogram.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/omniscrapergraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/omnisearchgraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/project_overview_diagram.fig +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/project_overview_diagram.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scrapegraphai_logo.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scrapegraphai_logo.svg +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/scriptcreatorgraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/searchgraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/sgai-hero.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/smartscrapergraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/assets/speechgraph.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/chinese.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/french.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/german.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/italian.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/japanese.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/korean.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/portuguese.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/russian.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/spanish.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/timeout_configuration.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/docs/turkish.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/ScrapegraphAI_cookbook.ipynb +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/ollama/code_generator_graph_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/code_generator_graph/openai/code_generator_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/csv_scraper_graph_multi_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/csv_scraper_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/ollama/inputs/username.csv +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/csv_scraper_graph_multi_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/csv_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/csv_scraper_graph/openai/inputs/username.csv +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/ollama/custom_graph_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/custom_graph/openai/custom_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/ollama/depth_search_graph_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/depth_search_graph/openai/depth_search_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/ollama/document_scraper_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/ollama/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/document_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/inputs/markdown_example.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/document_scraper_graph/openai/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/Savedscreenshots/test_image.jpeg +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/authenticated_playwright.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/browser_base_integration.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/chromium_selenium.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/cond_smartscraper_usage.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/conditional_usage.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/custom_prompt.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/example.yml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/force_mode.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/html_mode.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/load_yml.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/no_cut.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/proxy_rotation.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/rag_caching.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/reasoning.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/scrape_do.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/screenshot_scaping.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/serch_graph_scehma.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/slow_mo.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/extras/undected_playwright.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/inputs/example.json +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/json_scraper_multi_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/ollama/json_scraper_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/inputs/example.json +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/json_scraper_multi_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/json_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/md_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/json_scraper_graph/openai/omni_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/markdownify_scrapegraphai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/markdownify_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/markdownify/readme.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/omni_scraper_graph/omni_search_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/readme.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/ollama/script_generator_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/ollama/script_multi_generator_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_multi_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/script_generator_graph/openai/script_generator_schema_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/ollama/search_graph_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/ollama/search_graph_schema_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_graph_schema_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/openai/search_link_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/readme.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/nvidia/smart_scraper_nvidia.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_lite_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_concat_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_lite_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_multi_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/ollama/smart_scraper_schema_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_lite_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_concat_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_lite_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_multi_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/openai/smart_scraper_schema_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/readme.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/speech_graph/speech_graph_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/README.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/inputs/books.xml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/xml_scraper_graph_multi_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/ollama/xml_scraper_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/inputs/books.xml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/xml_scraper_graph_multi_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/examples/xml_scraper_graph/openai/xml_scraper_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/media/banner.png +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/pytest.ini +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/builders/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/builders/graph_builder.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/browser_base.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/plasmate.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/docloaders/scrape_do.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/base_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/code_generator_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/csv_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/csv_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/depth_search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/document_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/document_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/json_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/json_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/markdownify_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/omni_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/omni_search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/screenshot_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/script_creator_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/script_creator_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/search_link_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_lite_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_batch_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_concat_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/smart_scraper_multi_lite_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/speech_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/xml_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/graphs/xml_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/default_filters.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/nodes_metadata.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/robots.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/helpers/schemas.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/burr_bridge.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/indexify_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/integrations/scrapegraph_py_compat.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/clod.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/deepseek.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/nvidia.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/oneapi.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/openai_itt.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/openai_tts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/models/xai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/base_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/batch_generate_answer_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/concat_answers_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/conditional_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/description_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_node_level_k.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/fetch_screen_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_csv_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_from_image_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_node_k_level.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_answer_omni_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_code_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/generate_scraper_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/get_probable_tags_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/graph_iterator_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/html_analyzer_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/image_to_text_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/markdownify_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/merge_answers_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/merge_generated_scripts_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/parse_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/parse_node_depth_k_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/prompt_refiner_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/rag_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/reasoning_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_internet_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_link_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/search_node_with_context.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/nodes/text_to_speech_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/description_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_csv_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_omni_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_pdf_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_answer_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/generate_code_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/get_probable_tags_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/html_analyzer_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/merge_answer_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/merge_generated_scripts_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/prompt_refiner_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/reasoning_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/robots_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_internet_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_link_node_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/prompts/search_node_with_context_prompts.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/telemetry/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/telemetry/telemetry.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/batch_api.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/cleanup_code.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/cleanup_html.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/code_error_analysis.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/code_error_correction.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/convert_to_md.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/copy.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/data_export.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/dict_content_compare.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/logging.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/output_parser.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/parse_state_keys.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/prettify_exec_info.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/proxy_rotation.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/save_audio_from_bytes.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/save_code_to_file.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/schema_trasform.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/screenshot_preparation.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/screenshot_scraping/text_detection.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/split_text_into_chunks.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/sys_dynamic_import.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizer.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_mistral.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/scrapegraphai/utils/tokenizers/tokenizer_openai.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/test +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/QUICKSTART.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/README_TESTING.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/Readme.md +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/benchmarking.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/helpers.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/mock_server/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/fixtures/mock_server/server.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/.env.example +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/code_generator_graph_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/depth_search_graph_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/books.xml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/example.json +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/inputs/username.csv +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/scrape_plain_text_mistral_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/scrape_xml_ollama_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/screenshot_scraper_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/script_generator_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/search_graph_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/search_link_ollama.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_clod_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_ernie_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_fireworks_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_multi_lite_graph_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_ollama_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/smart_scraper_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/graphs/xml_scraper_openai_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/books.xml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/example.json +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/inputs/username.csv +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/__init__.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_file_formats_integration.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_multi_graph_integration.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/integration/test_smart_scraper_integration.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/fetch_node_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/books.xml +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/example.json +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/inputs/username.csv +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/robot_node_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/search_internet_node_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/nodes/search_link_node_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_batch_api.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_chromium.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_cleanup_html.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_csv_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_depth_search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_fetch_node_timeout.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_generate_answer_node.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_json_scraper_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_json_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_models_tokens.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_omni_search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_plasmate.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_scrape_do.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_script_creator_multi_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_search_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/test_smart_scraper_multi_concat_graph.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/convert_to_md_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/copy_utils_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/output_parser_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/parse_state_keys_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/research_web_test.py +0 -0
- {scrapegraphai-2.2.0b4 → scrapegraphai-2.2.0b6}/tests/utils/test_proxy_rotation.py +0 -0
- {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.
|
|
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:
|
|
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
|
-
<
|
|
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
|
[](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
|
[](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://
|
|
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
|
-
[](https://
|
|
253
|
+
[](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
|
-
<
|
|
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
|
[](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
|
[](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://
|
|
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
|
-
[](https://
|
|
208
|
+
[](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.
|
|
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
|
-
"
|
|
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
|
|
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":
|
|
412
|
-
"MiniMax-M2.7":
|
|
413
|
-
"MiniMax-M2.7-highspeed":
|
|
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"]
|