scrapegraphai 2.1.2__tar.gz → 2.1.4__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.1.2 → scrapegraphai-2.1.4}/CHANGELOG.md +43 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/PKG-INFO +7 -5
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/README.md +5 -3
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/pyproject.toml +2 -2
- scrapegraphai-2.1.4/scrapegraphai/docloaders/__init__.py +30 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/docloaders/chromium.py +9 -2
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/models_tokens.py +1 -5
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/fetch_node.py +1 -1
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/robots_node.py +1 -1
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/research_web.py +42 -7
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/conftest.py +15 -0
- scrapegraphai-2.1.4/tests/test_minimax_models.py +62 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/uv.lock +269 -1449
- scrapegraphai-2.1.2/scrapegraphai/docloaders/__init__.py +0 -15
- scrapegraphai-2.1.2/tests/test_minimax_models.py +0 -55
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.gitattributes +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/FUNDING.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/ISSUE_TEMPLATE/custom.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/workflows/codeql.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/workflows/dependency-review.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/workflows/release.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.github/workflows/test-suite.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.gitignore +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.pre-commit-config.yaml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.releaserc.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/.semantic-commits-applied +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/CODE_OF_CONDUCT.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/CONTRIBUTING.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/Dockerfile +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/LICENSE +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/Makefile +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/PullRequests/PR_1027_reviews.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/SECURITY.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/SEMANTIC_COMMITS.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/TESTING_INFRASTRUCTURE.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/citation.cff +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/codebeaver.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docker-compose.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/api-banner.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/api_banner.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/apikey_1.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/apikey_2.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/apikey_3.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/apikey_4.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/browserbase_logo.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/codespaces-badge.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/histogram.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/omniscrapergraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/omnisearchgraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/project_overview_diagram.fig +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/project_overview_diagram.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/scrapegraphai_logo.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/scrapegraphai_logo.svg +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/scriptcreatorgraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/searchgraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/sgai-hero.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/smartscrapergraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/assets/speechgraph.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/chinese.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/french.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/german.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/italian.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/japanese.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/korean.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/portuguese.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/russian.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/spanish.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/timeout_configuration.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/docs/turkish.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/ScrapegraphAI_cookbook.ipynb +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/code_generator_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/code_generator_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/code_generator_graph/ollama/code_generator_graph_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/code_generator_graph/openai/code_generator_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/ollama/csv_scraper_graph_multi_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/ollama/csv_scraper_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/ollama/inputs/username.csv +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/openai/csv_scraper_graph_multi_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/openai/csv_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/csv_scraper_graph/openai/inputs/username.csv +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/custom_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/custom_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/custom_graph/ollama/custom_graph_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/custom_graph/openai/custom_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/depth_search_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/depth_search_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/depth_search_graph/ollama/depth_search_graph_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/depth_search_graph/openai/depth_search_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/ollama/document_scraper_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/ollama/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/openai/document_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/openai/inputs/markdown_example.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/document_scraper_graph/openai/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/Savedscreenshots/test_image.jpeg +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/authenticated_playwright.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/browser_base_integration.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/chromium_selenium.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/cond_smartscraper_usage.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/conditional_usage.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/custom_prompt.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/example.yml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/force_mode.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/html_mode.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/load_yml.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/no_cut.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/proxy_rotation.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/rag_caching.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/reasoning.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/scrape_do.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/screenshot_scaping.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/serch_graph_scehma.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/slow_mo.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/extras/undected_playwright.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/ollama/inputs/example.json +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/ollama/json_scraper_multi_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/ollama/json_scraper_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/openai/inputs/example.json +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/openai/json_scraper_multi_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/openai/json_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/openai/md_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/json_scraper_graph/openai/omni_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/markdownify/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/markdownify/markdownify_scrapegraphai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/markdownify/markdownify_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/markdownify/readme.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/omni_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/omni_scraper_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/omni_scraper_graph/omni_search_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/readme.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/ollama/script_generator_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/ollama/script_multi_generator_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/openai/script_generator_multi_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/openai/script_generator_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/script_generator_graph/openai/script_generator_schema_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/ollama/search_graph_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/ollama/search_graph_schema_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/openai/search_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/openai/search_graph_schema_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/openai/search_link_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/scrapegraphai/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/scrapegraphai/readme.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/search_graph/scrapegraphai/searchscraper_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/nvidia/smart_scraper_nvidia.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_lite_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_multi_concat_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_multi_lite_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_multi_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/ollama/smart_scraper_schema_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_lite_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_multi_concat_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_multi_lite_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_multi_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/openai/smart_scraper_schema_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/scrapegraphai/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/scrapegraphai/readme.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/smart_scraper_graph/scrapegraphai/smartscraper_scrapegraphai_v3.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/speech_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/speech_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/speech_graph/speech_graph_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/README.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/ollama/inputs/books.xml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/ollama/xml_scraper_graph_multi_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/ollama/xml_scraper_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/openai/inputs/books.xml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/openai/xml_scraper_graph_multi_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/examples/xml_scraper_graph/openai/xml_scraper_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/media/banner.png +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/pytest.ini +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/builders/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/builders/graph_builder.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/docloaders/browser_base.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/docloaders/plasmate.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/docloaders/scrape_do.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/abstract_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/base_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/code_generator_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/csv_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/csv_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/depth_search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/document_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/document_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/json_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/json_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/markdownify_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/omni_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/omni_search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/screenshot_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/script_creator_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/script_creator_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/search_link_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_lite_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_multi_batch_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_multi_concat_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/smart_scraper_multi_lite_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/speech_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/xml_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/graphs/xml_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/default_filters.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/nodes_metadata.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/robots.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/helpers/schemas.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/integrations/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/integrations/burr_bridge.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/integrations/indexify_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/integrations/scrapegraph_py_compat.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/clod.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/deepseek.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/minimax.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/nvidia.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/oneapi.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/openai_itt.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/openai_tts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/models/xai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/base_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/batch_generate_answer_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/concat_answers_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/conditional_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/description_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/fetch_node_level_k.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/fetch_screen_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_answer_csv_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_answer_from_image_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_answer_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_answer_node_k_level.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_answer_omni_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_code_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/generate_scraper_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/get_probable_tags_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/graph_iterator_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/html_analyzer_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/image_to_text_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/markdownify_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/merge_answers_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/merge_generated_scripts_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/parse_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/parse_node_depth_k_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/prompt_refiner_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/rag_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/reasoning_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/search_internet_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/search_link_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/search_node_with_context.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/nodes/text_to_speech_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/description_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/generate_answer_node_csv_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/generate_answer_node_omni_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/generate_answer_node_pdf_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/generate_answer_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/generate_code_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/get_probable_tags_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/html_analyzer_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/merge_answer_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/merge_generated_scripts_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/prompt_refiner_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/reasoning_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/robots_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/search_internet_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/search_link_node_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/prompts/search_node_with_context_prompts.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/telemetry/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/telemetry/telemetry.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/batch_api.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/cleanup_code.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/cleanup_html.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/code_error_analysis.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/code_error_correction.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/convert_to_md.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/copy.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/custom_callback.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/data_export.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/dict_content_compare.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/llm_callback_manager.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/logging.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/model_costs.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/output_parser.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/parse_state_keys.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/prettify_exec_info.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/proxy_rotation.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/save_audio_from_bytes.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/save_code_to_file.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/schema_trasform.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/screenshot_scraping/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/screenshot_scraping/screenshot_preparation.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/screenshot_scraping/text_detection.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/split_text_into_chunks.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/sys_dynamic_import.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/tokenizer.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/tokenizers/tokenizer_mistral.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/tokenizers/tokenizer_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/scrapegraphai/utils/tokenizers/tokenizer_openai.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/test +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/QUICKSTART.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/README_TESTING.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/Readme.md +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/fixtures/benchmarking.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/fixtures/helpers.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/fixtures/mock_server/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/fixtures/mock_server/server.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/.env.example +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/abstract_graph_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/code_generator_graph_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/depth_search_graph_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/inputs/books.xml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/inputs/example.json +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/inputs/username.csv +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/scrape_plain_text_mistral_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/scrape_xml_ollama_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/screenshot_scraper_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/script_generator_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/search_graph_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/search_link_ollama.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_clod_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_ernie_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_fireworks_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_multi_lite_graph_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_ollama_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/smart_scraper_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/graphs/xml_scraper_openai_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/inputs/books.xml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/inputs/example.json +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/inputs/username.csv +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/integration/__init__.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/integration/test_file_formats_integration.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/integration/test_multi_graph_integration.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/integration/test_smart_scraper_integration.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/fetch_node_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/inputs/books.xml +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/inputs/example.json +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/inputs/plain_html_example.txt +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/inputs/username.csv +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/robot_node_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/search_internet_node_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/nodes/search_link_node_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_batch_api.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_chromium.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_cleanup_html.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_csv_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_depth_search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_fetch_node_timeout.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_generate_answer_node.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_json_scraper_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_json_scraper_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_models_tokens.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_omni_search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_plasmate.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_scrape_do.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_script_creator_multi_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_search_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/test_smart_scraper_multi_concat_graph.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/convert_to_md_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/copy_utils_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/parse_state_keys_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/research_web_test.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/test_proxy_rotation.py +0 -0
- {scrapegraphai-2.1.2 → scrapegraphai-2.1.4}/tests/utils/test_sys_dynamic_import.py +0 -0
|
@@ -1,3 +1,46 @@
|
|
|
1
|
+
## [2.1.4](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.3...v2.1.4) (2026-06-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* lazy imports to prevent torchcodec FFmpeg DLL crash on Windows ([#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089)) ([#1092](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1092)) ([e5c2a42](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5c2a4292174bae948731379c88aafb14197ec6c))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Docs
|
|
10
|
+
|
|
11
|
+
* swap Integrations infographic for new API banner; fix CTA links ([71ab440](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/71ab4406867ef02c22349c2dedc18c57d8bdfdec))
|
|
12
|
+
|
|
13
|
+
## [2.1.3](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.2...v2.1.3) (2026-06-02)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **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)
|
|
19
|
+
|
|
20
|
+
## [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)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* **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))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Docs
|
|
29
|
+
|
|
30
|
+
* 📚 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))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### CI
|
|
34
|
+
|
|
35
|
+
* **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)
|
|
36
|
+
|
|
37
|
+
## [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)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* upgrade MiniMax default model to M3 ([#1080](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1080)) ([1b16c26](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/1b16c268f4e9044c1386ccfaf67b38692b487e5a))
|
|
43
|
+
|
|
1
44
|
## [2.1.2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.1...v2.1.2) (2026-06-01)
|
|
2
45
|
|
|
3
46
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: scrapegraphai
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.4
|
|
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)
|
|
@@ -219,9 +221,9 @@ Please see the [contributing guidelines](https://github.com/ScrapeGraphAI/Scrape
|
|
|
219
221
|
[](https://twitter.com/scrapegraphai)
|
|
220
222
|
|
|
221
223
|
## 🔗 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://
|
|
224
|
+
If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://scrapegraphai.com)
|
|
223
225
|
|
|
224
|
-
[](https://
|
|
226
|
+
[](https://scrapegraphai.com)
|
|
225
227
|
|
|
226
228
|
We offer SDKs in both Python and Node.js, making it easy to integrate into your projects. Check them out below:
|
|
227
229
|
|
|
@@ -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)
|
|
@@ -174,9 +176,9 @@ Please see the [contributing guidelines](https://github.com/ScrapeGraphAI/Scrape
|
|
|
174
176
|
[](https://twitter.com/scrapegraphai)
|
|
175
177
|
|
|
176
178
|
## 🔗 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://
|
|
179
|
+
If you are looking for a quick solution to integrate ScrapeGraph in your system, check out our powerful API [here!](https://scrapegraphai.com)
|
|
178
180
|
|
|
179
|
-
[](https://
|
|
181
|
+
[](https://scrapegraphai.com)
|
|
180
182
|
|
|
181
183
|
We offer SDKs in both Python and Node.js, making it easy to integrate into your projects. Check them out below:
|
|
182
184
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "scrapegraphai"
|
|
3
3
|
|
|
4
|
-
version = "2.1.
|
|
4
|
+
version = "2.1.4"
|
|
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.
|
|
@@ -408,12 +408,8 @@ models_tokens = {
|
|
|
408
408
|
"grok-beta": 128000,
|
|
409
409
|
},
|
|
410
410
|
"minimax": {
|
|
411
|
+
"MiniMax-M3": 524288,
|
|
411
412
|
"MiniMax-M2.7": 204000,
|
|
412
413
|
"MiniMax-M2.7-highspeed": 204000,
|
|
413
|
-
"MiniMax-M1": 1000000,
|
|
414
|
-
"MiniMax-M1-40k": 40000,
|
|
415
|
-
"MiniMax-M2": 204000,
|
|
416
|
-
"MiniMax-M2.5": 204000,
|
|
417
|
-
"MiniMax-M2.5-highspeed": 204000,
|
|
418
414
|
},
|
|
419
415
|
}
|
|
@@ -7,7 +7,6 @@ from typing import List, Optional
|
|
|
7
7
|
import concurrent.futures
|
|
8
8
|
|
|
9
9
|
import requests
|
|
10
|
-
from langchain_community.document_loaders import PyPDFLoader
|
|
11
10
|
from langchain_core.documents import Document
|
|
12
11
|
from langchain_openai import AzureChatOpenAI, ChatOpenAI
|
|
13
12
|
|
|
@@ -182,6 +181,7 @@ class FetchNode(BaseNode):
|
|
|
182
181
|
"""
|
|
183
182
|
|
|
184
183
|
if input_type == "pdf":
|
|
184
|
+
from langchain_community.document_loaders import PyPDFLoader
|
|
185
185
|
loader = PyPDFLoader(source)
|
|
186
186
|
# PyPDFLoader.load() can be blocking for large PDFs. Run it in a thread and
|
|
187
187
|
# enforce the configured timeout if provided.
|
|
@@ -7,7 +7,6 @@ from urllib.parse import urlparse
|
|
|
7
7
|
|
|
8
8
|
from langchain_core.output_parsers import CommaSeparatedListOutputParser
|
|
9
9
|
from langchain_core.prompts import PromptTemplate
|
|
10
|
-
from langchain_community.document_loaders import AsyncChromiumLoader
|
|
11
10
|
|
|
12
11
|
from ..helpers import robots_dictionary
|
|
13
12
|
from ..prompts import TEMPLATE_ROBOT
|
|
@@ -90,6 +89,7 @@ class RobotsNode(BaseNode):
|
|
|
90
89
|
else:
|
|
91
90
|
parsed_url = urlparse(source)
|
|
92
91
|
base_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
|
|
92
|
+
from langchain_community.document_loaders import AsyncChromiumLoader
|
|
93
93
|
loader = AsyncChromiumLoader(f"{base_url}/robots.txt")
|
|
94
94
|
document = loader.load()
|
|
95
95
|
if "ollama" in self.llm_model.model:
|
|
@@ -11,7 +11,6 @@ from typing import Dict, List, Optional, Union
|
|
|
11
11
|
|
|
12
12
|
import requests
|
|
13
13
|
from bs4 import BeautifulSoup
|
|
14
|
-
from langchain_community.tools import DuckDuckGoSearchResults
|
|
15
14
|
from pydantic import BaseModel, Field, validator
|
|
16
15
|
|
|
17
16
|
|
|
@@ -215,12 +214,9 @@ def search_on_web(
|
|
|
215
214
|
|
|
216
215
|
results = []
|
|
217
216
|
if config.search_engine == "duckduckgo":
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
res = research.run(config.query)
|
|
222
|
-
# Extract URLs using regex
|
|
223
|
-
results = re.findall(r"https?://[^\s,\]]+", res)
|
|
217
|
+
results = _search_duckduckgo(
|
|
218
|
+
config.query, config.max_results, formatted_proxy
|
|
219
|
+
)
|
|
224
220
|
|
|
225
221
|
elif config.search_engine == "bing":
|
|
226
222
|
results = _search_bing(
|
|
@@ -247,6 +243,45 @@ def search_on_web(
|
|
|
247
243
|
raise SearchConfigError(f"Invalid search configuration: {str(e)}")
|
|
248
244
|
|
|
249
245
|
|
|
246
|
+
def _search_duckduckgo(
|
|
247
|
+
query: str, max_results: int, proxy: Optional[str] = None
|
|
248
|
+
) -> List[str]:
|
|
249
|
+
"""
|
|
250
|
+
Helper function for DuckDuckGo search using the ``ddgs`` package.
|
|
251
|
+
|
|
252
|
+
The ``duckduckgo-search`` package was renamed to ``ddgs``; recent
|
|
253
|
+
``langchain-community`` releases import ``from ddgs import DDGS``, which
|
|
254
|
+
silently broke the previous langchain-based implementation. This calls
|
|
255
|
+
``ddgs`` directly so results no longer depend on parsing a formatted string.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
query (str): Search query
|
|
259
|
+
max_results (int): Maximum number of results to return
|
|
260
|
+
proxy (str, optional): Proxy configuration
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
List[str]: List of URLs from search results
|
|
264
|
+
"""
|
|
265
|
+
try:
|
|
266
|
+
from ddgs import DDGS
|
|
267
|
+
except ImportError as e:
|
|
268
|
+
raise ImportError(
|
|
269
|
+
"Could not import the 'ddgs' package required for DuckDuckGo "
|
|
270
|
+
"search. Please install it with `pip install -U ddgs`."
|
|
271
|
+
) from e
|
|
272
|
+
|
|
273
|
+
try:
|
|
274
|
+
with DDGS(proxy=proxy) as ddgs:
|
|
275
|
+
results = [
|
|
276
|
+
result["href"]
|
|
277
|
+
for result in ddgs.text(query, max_results=max_results)
|
|
278
|
+
if result.get("href")
|
|
279
|
+
]
|
|
280
|
+
return results
|
|
281
|
+
except Exception as e:
|
|
282
|
+
raise SearchRequestError(f"DuckDuckGo search failed: {str(e)}")
|
|
283
|
+
|
|
284
|
+
|
|
250
285
|
def _search_bing(
|
|
251
286
|
query: str, max_results: int, timeout: int, proxy: Optional[str] = None
|
|
252
287
|
) -> List[str]:
|
|
@@ -14,9 +14,24 @@ from pathlib import Path
|
|
|
14
14
|
from typing import Any, Dict
|
|
15
15
|
from unittest.mock import Mock
|
|
16
16
|
|
|
17
|
+
import sys
|
|
18
|
+
import types
|
|
19
|
+
|
|
17
20
|
import pytest
|
|
18
21
|
from dotenv import load_dotenv
|
|
19
22
|
|
|
23
|
+
# Mock torchcodec to prevent FFmpeg DLL crashes at import time.
|
|
24
|
+
# sentence_transformers -> torchcodec -> FFmpeg native DLLs can't load on some systems.
|
|
25
|
+
_tc = types.ModuleType("torchcodec")
|
|
26
|
+
_tc.__version__ = "0.0.0"
|
|
27
|
+
_tc.__file__ = "<mock>"
|
|
28
|
+
_tc.__spec__ = types.ModuleType("spec")
|
|
29
|
+
_tc.__spec__.name = "torchcodec"
|
|
30
|
+
_tc.__spec__.loader = None
|
|
31
|
+
_tc.__spec__.submodule_search_locations = []
|
|
32
|
+
if "torchcodec" not in sys.modules:
|
|
33
|
+
sys.modules["torchcodec"] = _tc
|
|
34
|
+
|
|
20
35
|
# Load environment variables
|
|
21
36
|
load_dotenv()
|
|
22
37
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Tests for MiniMax model configuration."""
|
|
2
|
+
|
|
3
|
+
import importlib.util
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture(scope="module")
|
|
11
|
+
def models_tokens():
|
|
12
|
+
"""Import models_tokens directly to avoid triggering the full package init."""
|
|
13
|
+
spec = importlib.util.spec_from_file_location(
|
|
14
|
+
"models_tokens",
|
|
15
|
+
os.path.join(
|
|
16
|
+
os.path.dirname(__file__),
|
|
17
|
+
"..",
|
|
18
|
+
"scrapegraphai",
|
|
19
|
+
"helpers",
|
|
20
|
+
"models_tokens.py",
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
module = importlib.util.module_from_spec(spec)
|
|
24
|
+
spec.loader.exec_module(module)
|
|
25
|
+
return module.models_tokens
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_minimax_m3_in_model_list(models_tokens):
|
|
29
|
+
"""MiniMax-M3 should be in the model list."""
|
|
30
|
+
minimax_models = models_tokens["minimax"]
|
|
31
|
+
assert "MiniMax-M3" in minimax_models
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_minimax_m3_listed_first(models_tokens):
|
|
35
|
+
"""MiniMax-M3 should be the first (default) model in the minimax dict."""
|
|
36
|
+
minimax_models = list(models_tokens["minimax"].keys())
|
|
37
|
+
assert minimax_models[0] == "MiniMax-M3"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def test_minimax_m27_still_available(models_tokens):
|
|
41
|
+
"""MiniMax-M2.7 and its highspeed variant should remain as legacy options."""
|
|
42
|
+
minimax_models = models_tokens["minimax"]
|
|
43
|
+
assert "MiniMax-M2.7" in minimax_models
|
|
44
|
+
assert "MiniMax-M2.7-highspeed" in minimax_models
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_minimax_deprecated_models_removed(models_tokens):
|
|
48
|
+
"""Older deprecated MiniMax models should be removed from the list."""
|
|
49
|
+
minimax_models = models_tokens["minimax"]
|
|
50
|
+
assert "MiniMax-M2.5" not in minimax_models
|
|
51
|
+
assert "MiniMax-M2.5-highspeed" not in minimax_models
|
|
52
|
+
assert "MiniMax-M2" not in minimax_models
|
|
53
|
+
assert "MiniMax-M1" not in minimax_models
|
|
54
|
+
assert "MiniMax-M1-40k" not in minimax_models
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_minimax_token_limits(models_tokens):
|
|
58
|
+
"""MiniMax model token limits should match upstream documentation."""
|
|
59
|
+
minimax_models = models_tokens["minimax"]
|
|
60
|
+
assert minimax_models["MiniMax-M3"] == 524288
|
|
61
|
+
assert minimax_models["MiniMax-M2.7"] == 204000
|
|
62
|
+
assert minimax_models["MiniMax-M2.7-highspeed"] == 204000
|