gitextract_4wh_v0jg/ ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── custom.md │ │ └── feature_request.md │ └── workflows/ │ ├── code-quality.yml │ ├── codeql.yml │ ├── dependency-review.yml │ ├── release.yml │ └── test-suite.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .readthedocs.yaml ├── .releaserc.yml ├── .semantic-commits-applied ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Makefile ├── PullRequests/ │ └── PR_1027_reviews.md ├── README.md ├── SECURITY.md ├── SEMANTIC_COMMITS.md ├── TESTING_INFRASTRUCTURE.md ├── citation.cff ├── codebeaver.yml ├── docker-compose.yml ├── docs/ │ ├── Makefile │ ├── assets/ │ │ └── project_overview_diagram.fig │ ├── chinese.md │ ├── japanese.md │ ├── korean.md │ ├── make.bat │ ├── portuguese.md │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── russian.md │ ├── source/ │ │ ├── conf.py │ │ ├── getting_started/ │ │ │ ├── examples.rst │ │ │ └── installation.rst │ │ ├── index.rst │ │ ├── introduction/ │ │ │ ├── contributing.rst │ │ │ └── overview.rst │ │ ├── modules/ │ │ │ ├── modules.rst │ │ │ ├── scrapegraphai.builders.rst │ │ │ ├── scrapegraphai.docloaders.rst │ │ │ ├── scrapegraphai.graphs.rst │ │ │ ├── scrapegraphai.helpers.models_tokens.rst │ │ │ ├── scrapegraphai.helpers.rst │ │ │ ├── scrapegraphai.integrations.rst │ │ │ ├── scrapegraphai.models.rst │ │ │ ├── scrapegraphai.nodes.rst │ │ │ ├── scrapegraphai.rst │ │ │ └── scrapegraphai.utils.rst │ │ └── scrapers/ │ │ ├── graph_config.rst │ │ ├── graphs.rst │ │ ├── llm.rst │ │ ├── telemetry.rst │ │ └── types.rst │ ├── timeout_configuration.md │ └── turkish.md ├── examples/ │ ├── ScrapegraphAI_cookbook.ipynb │ ├── code_generator_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ └── code_generator_graph_ollama.py │ │ └── openai/ │ │ └── code_generator_graph_openai.py │ ├── csv_scraper_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ ├── csv_scraper_graph_multi_ollama.py │ │ │ ├── csv_scraper_ollama.py │ │ │ └── inputs/ │ │ │ └── username.csv │ │ └── openai/ │ │ ├── csv_scraper_graph_multi_openai.py │ │ ├── csv_scraper_openai.py │ │ └── inputs/ │ │ └── username.csv │ ├── custom_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ └── custom_graph_ollama.py │ │ └── openai/ │ │ └── custom_graph_openai.py │ ├── depth_search_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ └── depth_search_graph_ollama.py │ │ └── openai/ │ │ └── depth_search_graph_openai.py │ ├── document_scraper_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ ├── document_scraper_ollama.py │ │ │ └── inputs/ │ │ │ └── plain_html_example.txt │ │ └── openai/ │ │ ├── document_scraper_openai.py │ │ └── inputs/ │ │ ├── markdown_example.md │ │ └── plain_html_example.txt │ ├── extras/ │ │ ├── authenticated_playwright.py │ │ ├── browser_base_integration.py │ │ ├── chromium_selenium.py │ │ ├── cond_smartscraper_usage.py │ │ ├── conditional_usage.py │ │ ├── custom_prompt.py │ │ ├── example.yml │ │ ├── force_mode.py │ │ ├── html_mode.py │ │ ├── load_yml.py │ │ ├── no_cut.py │ │ ├── proxy_rotation.py │ │ ├── rag_caching.py │ │ ├── reasoning.py │ │ ├── scrape_do.py │ │ ├── screenshot_scaping.py │ │ ├── serch_graph_scehma.py │ │ ├── slow_mo.py │ │ └── undected_playwright.py │ ├── json_scraper_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ ├── inputs/ │ │ │ │ └── example.json │ │ │ ├── json_scraper_multi_ollama.py │ │ │ └── json_scraper_ollama.py │ │ └── openai/ │ │ ├── inputs/ │ │ │ └── example.json │ │ ├── json_scraper_multi_openai.py │ │ ├── json_scraper_openai.py │ │ ├── md_scraper_openai.py │ │ └── omni_scraper_openai.py │ ├── markdownify/ │ │ ├── markdownify_scrapegraphai.py │ │ └── readme.md │ ├── omni_scraper_graph/ │ │ ├── README.md │ │ └── omni_search_openai.py │ ├── readme.md │ ├── script_generator_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ ├── script_generator_ollama.py │ │ │ └── script_multi_generator_ollama.py │ │ └── openai/ │ │ ├── script_generator_multi_openai.py │ │ ├── script_generator_openai.py │ │ └── script_generator_schema_openai.py │ ├── search_graph/ │ │ ├── README.md │ │ ├── ollama/ │ │ │ ├── search_graph_ollama.py │ │ │ └── search_graph_schema_ollama.py │ │ ├── openai/ │ │ │ ├── search_graph_openai.py │ │ │ ├── search_graph_schema_openai.py │ │ │ └── search_link_graph_openai.py │ │ └── scrapegraphai/ │ │ ├── readme.md │ │ └── searchscraper_scrapegraphai.py │ ├── smart_scraper_graph/ │ │ ├── nvidia/ │ │ │ └── smart_scraper_nvidia.py │ │ ├── ollama/ │ │ │ ├── smart_scraper_lite_ollama.py │ │ │ ├── smart_scraper_multi_concat_ollama.py │ │ │ ├── smart_scraper_multi_lite_ollama.py │ │ │ ├── smart_scraper_multi_ollama.py │ │ │ ├── smart_scraper_ollama.py │ │ │ └── smart_scraper_schema_ollama.py │ │ ├── openai/ │ │ │ ├── smart_scraper_lite_openai.py │ │ │ ├── smart_scraper_multi_concat_openai.py │ │ │ ├── smart_scraper_multi_lite_openai.py │ │ │ ├── smart_scraper_multi_openai.py │ │ │ ├── smart_scraper_openai.py │ │ │ └── smart_scraper_schema_openai.py │ │ └── scrapegraphai/ │ │ ├── readme.md │ │ └── smartscraper_scrapegraphai.py │ ├── speech_graph/ │ │ ├── README.md │ │ └── speech_graph_openai.py │ └── xml_scraper_graph/ │ ├── README.md │ ├── ollama/ │ │ ├── inputs/ │ │ │ └── books.xml │ │ ├── xml_scraper_graph_multi_ollama.py │ │ └── xml_scraper_ollama.py │ └── openai/ │ ├── inputs/ │ │ └── books.xml │ ├── xml_scraper_graph_multi_openai.py │ └── xml_scraper_openai.py ├── pyproject.toml ├── pytest.ini ├── readthedocs.yml ├── requirements-dev.txt ├── requirements.txt ├── scrapegraphai/ │ ├── __init__.py │ ├── builders/ │ │ ├── __init__.py │ │ └── graph_builder.py │ ├── docloaders/ │ │ ├── __init__.py │ │ ├── browser_base.py │ │ ├── chromium.py │ │ └── scrape_do.py │ ├── graphs/ │ │ ├── __init__.py │ │ ├── abstract_graph.py │ │ ├── base_graph.py │ │ ├── code_generator_graph.py │ │ ├── csv_scraper_graph.py │ │ ├── csv_scraper_multi_graph.py │ │ ├── depth_search_graph.py │ │ ├── document_scraper_graph.py │ │ ├── document_scraper_multi_graph.py │ │ ├── json_scraper_graph.py │ │ ├── json_scraper_multi_graph.py │ │ ├── markdownify_graph.py │ │ ├── omni_scraper_graph.py │ │ ├── omni_search_graph.py │ │ ├── screenshot_scraper_graph.py │ │ ├── script_creator_graph.py │ │ ├── script_creator_multi_graph.py │ │ ├── search_graph.py │ │ ├── search_link_graph.py │ │ ├── smart_scraper_graph.py │ │ ├── smart_scraper_lite_graph.py │ │ ├── smart_scraper_multi_concat_graph.py │ │ ├── smart_scraper_multi_graph.py │ │ ├── smart_scraper_multi_lite_graph.py │ │ ├── speech_graph.py │ │ ├── xml_scraper_graph.py │ │ └── xml_scraper_multi_graph.py │ ├── helpers/ │ │ ├── __init__.py │ │ ├── default_filters.py │ │ ├── models_tokens.py │ │ ├── nodes_metadata.py │ │ ├── robots.py │ │ └── schemas.py │ ├── integrations/ │ │ ├── __init__.py │ │ ├── burr_bridge.py │ │ └── indexify_node.py │ ├── models/ │ │ ├── __init__.py │ │ ├── clod.py │ │ ├── deepseek.py │ │ ├── minimax.py │ │ ├── nvidia.py │ │ ├── oneapi.py │ │ ├── openai_itt.py │ │ ├── openai_tts.py │ │ └── xai.py │ ├── nodes/ │ │ ├── __init__.py │ │ ├── base_node.py │ │ ├── concat_answers_node.py │ │ ├── conditional_node.py │ │ ├── description_node.py │ │ ├── fetch_node.py │ │ ├── fetch_node_level_k.py │ │ ├── fetch_screen_node.py │ │ ├── generate_answer_csv_node.py │ │ ├── generate_answer_from_image_node.py │ │ ├── generate_answer_node.py │ │ ├── generate_answer_node_k_level.py │ │ ├── generate_answer_omni_node.py │ │ ├── generate_code_node.py │ │ ├── generate_scraper_node.py │ │ ├── get_probable_tags_node.py │ │ ├── graph_iterator_node.py │ │ ├── html_analyzer_node.py │ │ ├── image_to_text_node.py │ │ ├── markdownify_node.py │ │ ├── merge_answers_node.py │ │ ├── merge_generated_scripts_node.py │ │ ├── parse_node.py │ │ ├── parse_node_depth_k_node.py │ │ ├── prompt_refiner_node.py │ │ ├── rag_node.py │ │ ├── reasoning_node.py │ │ ├── robots_node.py │ │ ├── search_internet_node.py │ │ ├── search_link_node.py │ │ ├── search_node_with_context.py │ │ └── text_to_speech_node.py │ ├── prompts/ │ │ ├── __init__.py │ │ ├── description_node_prompts.py │ │ ├── generate_answer_node_csv_prompts.py │ │ ├── generate_answer_node_omni_prompts.py │ │ ├── generate_answer_node_pdf_prompts.py │ │ ├── generate_answer_node_prompts.py │ │ ├── generate_code_node_prompts.py │ │ ├── get_probable_tags_node_prompts.py │ │ ├── html_analyzer_node_prompts.py │ │ ├── merge_answer_node_prompts.py │ │ ├── merge_generated_scripts_prompts.py │ │ ├── prompt_refiner_node_prompts.py │ │ ├── reasoning_node_prompts.py │ │ ├── robots_node_prompts.py │ │ ├── search_internet_node_prompts.py │ │ ├── search_link_node_prompts.py │ │ └── search_node_with_context_prompts.py │ ├── telemetry/ │ │ ├── __init__.py │ │ └── telemetry.py │ └── utils/ │ ├── __init__.py │ ├── cleanup_code.py │ ├── cleanup_html.py │ ├── code_error_analysis.py │ ├── code_error_correction.py │ ├── convert_to_md.py │ ├── copy.py │ ├── custom_callback.py │ ├── data_export.py │ ├── dict_content_compare.py │ ├── llm_callback_manager.py │ ├── logging.py │ ├── model_costs.py │ ├── output_parser.py │ ├── parse_state_keys.py │ ├── prettify_exec_info.py │ ├── proxy_rotation.py │ ├── research_web.py │ ├── save_audio_from_bytes.py │ ├── save_code_to_file.py │ ├── schema_trasform.py │ ├── screenshot_scraping/ │ │ ├── __init__.py │ │ ├── screenshot_preparation.py │ │ └── text_detection.py │ ├── split_text_into_chunks.py │ ├── sys_dynamic_import.py │ ├── tokenizer.py │ └── tokenizers/ │ ├── tokenizer_mistral.py │ ├── tokenizer_ollama.py │ └── tokenizer_openai.py ├── test └── tests/ ├── QUICKSTART.md ├── README_TESTING.md ├── Readme.md ├── conftest.py ├── fixtures/ │ ├── benchmarking.py │ ├── helpers.py │ └── mock_server/ │ ├── __init__.py │ └── server.py ├── graphs/ │ ├── abstract_graph_test.py │ ├── code_generator_graph_openai_test.py │ ├── depth_search_graph_openai_test.py │ ├── inputs/ │ │ ├── books.xml │ │ ├── example.json │ │ ├── plain_html_example.txt │ │ └── username.csv │ ├── scrape_plain_text_mistral_test.py │ ├── scrape_xml_ollama_test.py │ ├── screenshot_scraper_test.py │ ├── script_generator_test.py │ ├── search_graph_openai_test.py │ ├── search_link_ollama.py │ ├── smart_scraper_clod_test.py │ ├── smart_scraper_ernie_test.py │ ├── smart_scraper_fireworks_test.py │ ├── smart_scraper_multi_lite_graph_openai_test.py │ ├── smart_scraper_ollama_test.py │ ├── smart_scraper_openai_test.py │ └── xml_scraper_openai_test.py ├── inputs/ │ ├── books.xml │ ├── example.json │ ├── plain_html_example.txt │ └── username.csv ├── integration/ │ ├── __init__.py │ ├── test_file_formats_integration.py │ ├── test_multi_graph_integration.py │ └── test_smart_scraper_integration.py ├── nodes/ │ ├── fetch_node_test.py │ ├── inputs/ │ │ ├── books.xml │ │ ├── example.json │ │ ├── plain_html_example.txt │ │ └── username.csv │ ├── robot_node_test.py │ ├── search_internet_node_test.py │ └── search_link_node_test.py ├── test_chromium.py ├── test_cleanup_html.py ├── test_csv_scraper_multi_graph.py ├── test_depth_search_graph.py ├── test_fetch_node_timeout.py ├── test_generate_answer_node.py ├── test_json_scraper_graph.py ├── test_json_scraper_multi_graph.py ├── test_minimax_models.py ├── test_models_tokens.py ├── test_omni_search_graph.py ├── test_scrape_do.py ├── test_script_creator_multi_graph.py ├── test_search_graph.py ├── test_smart_scraper_multi_concat_graph.py └── utils/ ├── convert_to_md_test.py ├── copy_utils_test.py ├── parse_state_keys_test.py ├── research_web_test.py ├── test_proxy_rotation.py └── test_sys_dynamic_import.py