notte 0.0.dev0__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.
- notte-0.0.dev0/.dockerignore +5 -0
- notte-0.0.dev0/.env.example +31 -0
- notte-0.0.dev0/.github/release.yml +8 -0
- notte-0.0.dev0/.github/scripts/translate_readme.py +52 -0
- notte-0.0.dev0/.github/workflows/benchmark.yml +67 -0
- notte-0.0.dev0/.github/workflows/pypi-release.yml +71 -0
- notte-0.0.dev0/.github/workflows/slack-monitor.yml +76 -0
- notte-0.0.dev0/.github/workflows/test-cicd.yml +93 -0
- notte-0.0.dev0/.github/workflows/translate-readme.yml +47 -0
- notte-0.0.dev0/.gitignore +179 -0
- notte-0.0.dev0/.pre-commit-config.yaml +33 -0
- notte-0.0.dev0/.python-version +1 -0
- notte-0.0.dev0/.vscode/extensions.json +6 -0
- notte-0.0.dev0/.vscode/settings.json +38 -0
- notte-0.0.dev0/Dockerfile +82 -0
- notte-0.0.dev0/LICENSE +201 -0
- notte-0.0.dev0/PKG-INFO +244 -0
- notte-0.0.dev0/README.md +227 -0
- notte-0.0.dev0/build.sh +31 -0
- notte-0.0.dev0/docs/CONTRIBUTING.md +21 -0
- notte-0.0.dev0/docs/archives/20250307_README.md +210 -0
- notte-0.0.dev0/docs/gifs/v1.gif +0 -0
- notte-0.0.dev0/docs/gifs/v2.gif +0 -0
- notte-0.0.dev0/docs/gifs/v3.gif +0 -0
- notte-0.0.dev0/docs/logo/banner.png +0 -0
- notte-0.0.dev0/docs/logo/bgd.png +0 -0
- notte-0.0.dev0/docs/run_notte_with_external_browsers.md +24 -0
- notte-0.0.dev0/docs/run_ollama_local_models.md +51 -0
- notte-0.0.dev0/docs/scraping_tutorial.md +111 -0
- notte-0.0.dev0/docs/sdk_tutorial.md +90 -0
- notte-0.0.dev0/docs/setup.md +21 -0
- notte-0.0.dev0/examples/__init__.py +0 -0
- notte-0.0.dev0/examples/benchmark_params.toml +28 -0
- notte-0.0.dev0/examples/benchmarks.md +81 -0
- notte-0.0.dev0/examples/cli_agent.py +25 -0
- notte-0.0.dev0/examples/leetcode_agent.py +36 -0
- notte-0.0.dev0/examples/notifier_agent.py +57 -0
- notte-0.0.dev0/examples/vault_agent.py +42 -0
- notte-0.0.dev0/makefile +57 -0
- notte-0.0.dev0/packages/notte-agent/README.md +0 -0
- notte-0.0.dev0/packages/notte-agent/pyproject.toml +22 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/README.md +58 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/__init__.py +7 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/base.py +14 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/captcha_detector.py +87 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/config.py +219 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/conversation.py +246 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/notifier.py +55 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/parser.py +78 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/perception.py +21 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/prompt.py +15 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/safe_executor.py +100 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/trajectory_history.py +100 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/types.py +41 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/validator.py +90 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/agent.py +343 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/perception.py +83 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompt.py +132 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompts/system_prompt_multi_actions.md +107 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompts/system_prompt_single_action.md +107 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/trajectory_history.py +42 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/types.py +132 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/agent.py +180 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/parser.py +79 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/perception.py +53 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/prompt.py +61 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/system.md +8 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/main.py +77 -0
- notte-0.0.dev0/packages/notte-agent/src/notte_agent/py.typed +0 -0
- notte-0.0.dev0/packages/notte-browser/README.md +5 -0
- notte-0.0.dev0/packages/notte-browser/pyproject.toml +26 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/__init__.py +3 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/controller.py +220 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/buildDomNode.js +516 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/csspaths.py +155 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/dropdown_menu.py +162 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/id_generation.py +39 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/locate.py +80 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/parsing.py +158 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/pipe.py +13 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/types.py +465 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/wait_for_page_update.py +132 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/errors.py +268 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/playwright.py +209 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/py.typed +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/interaction_only.py +125 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/json.py +47 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/markdown.py +71 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/pipe.py +87 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/pruning.py +124 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/resolution.py +118 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/llm_scraping.py +60 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/pipe.py +140 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/schema.py +145 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/simple.py +21 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/session.py +482 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/base.py +26 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/base.py +130 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/filtering.py +34 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/listing.py +146 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/parser.py +348 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/pipe.py +216 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/validation.py +40 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/pipe.py +75 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/simple/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/simple/pipe.py +71 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/page.py +35 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/vault.py +56 -0
- notte-0.0.dev0/packages/notte-browser/src/notte_browser/window.py +370 -0
- notte-0.0.dev0/packages/notte-core/README.md +0 -0
- notte-0.0.dev0/packages/notte-core/pyproject.toml +38 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/__init__.py +32 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/actions/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/actions/base.py +314 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/actions/space.py +106 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/browser/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/browser/dom_tree.py +602 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/browser/node_type.py +393 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/browser/observation.py +64 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/browser/snapshot.py +100 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/config.py +30 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/logging.py +21 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/resource.py +68 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/telemetry.py +125 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/common/tracer.py +190 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/controller/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/controller/actions.py +344 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/controller/proxy.py +156 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/controller/space.py +177 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/base.py +660 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/types.py +100 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/data/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/data/space.py +104 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/actions.py +59 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/base.py +86 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/llm.py +55 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/processing.py +85 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/provider.py +80 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/errors/validation.py +31 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/config/endpoints.csv +9 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/engine.py +272 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/logging.py +79 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompt.py +67 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/anthropic/user.md +126 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/optim/user.md +128 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/simple/user.md +26 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing-incr/user.md +135 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/all_data/user.md +178 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/only_main_content/user.md +157 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/two_sections/user.md +48 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/user.md +86 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/debug-failing-action-exec/user.md +55 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/document-category/base/user.md +58 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/document-category/optim/user.md +38 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-json-schema/multi-entity/system.md +42 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-json-schema/multi-entity/user.md +1 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-without-json-schema/system.md +40 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-without-json-schema/user.md +1 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/generate-json-schema/system.md +25 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/generate-json-schema/user.md +1 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/llms/service.py +121 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/py.typed +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/code.py +22 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/image.py +118 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/platform.py +13 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/pydantic_schema.py +98 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/singleton.py +13 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/url.py +89 -0
- notte-0.0.dev0/packages/notte-core/src/notte_core/utils/webp_replay.py +124 -0
- notte-0.0.dev0/packages/notte-eval/README.md +0 -0
- notte-0.0.dev0/packages/notte-eval/pyproject.toml +118 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/__init__.py +3 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/__init__.py +58 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/browseruse.py +201 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/browseruse_api.py +147 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/convergence.py +185 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/falco.py +238 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/mock.py +35 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/eval.py +204 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/gaia/GAIA_webvoyager.jsonl +90 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/load_data.py +97 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/scratch/proxy.jsonl +9 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data.jsonl +643 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_short.jsonl +96 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_simple.jsonl +30 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_single.jsonl +1 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/webvoyager_excluded.jsonl +55 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/convert.py +23 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager.jsonl +643 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_convergence.jsonl +601 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_excluded.jsonl +54 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_simple.jsonl +30 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_single.jsonl +1 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/__init__.py +26 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/evaluator.py +31 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/webvoyager.py +109 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/patcher.py +189 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/py.typed +0 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/run.py +398 -0
- notte-0.0.dev0/packages/notte-eval/src/notte_eval/task_types.py +98 -0
- notte-0.0.dev0/packages/notte-integrations/README.md +0 -0
- notte-0.0.dev0/packages/notte-integrations/pyproject.toml +33 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/__init__.py +3 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/api/fastapi.py +34 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/README.md +37 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/docker-compose.yml +15 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/vault.py +174 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/README.md +129 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/discord.py +41 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/mail.py +67 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/slack.py +25 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/py.typed +0 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/anchor.py +57 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/browserbase.py +82 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/cdp_session.py +77 -0
- notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/steel.py +53 -0
- notte-0.0.dev0/packages/notte-sdk/README.md +0 -0
- notte-0.0.dev0/packages/notte-sdk/pyproject.toml +21 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/__init__.py +7 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/client.py +50 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/agents.py +504 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/base.py +247 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/page.py +215 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/personas.py +285 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/sessions.py +542 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/vaults.py +83 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/errors.py +40 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/py.typed +0 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/types.py +851 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/vault.py +68 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/websockets/__init__.py +0 -0
- notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/websockets/recording.py +106 -0
- notte-0.0.dev0/pyproject.toml +94 -0
- notte-0.0.dev0/src/notte/__init__.py +8 -0
- notte-0.0.dev0/src/notte/py.typed +0 -0
- notte-0.0.dev0/tests/__init__.py +0 -0
- notte-0.0.dev0/tests/actions/__init__.py +0 -0
- notte-0.0.dev0/tests/actions/test_execution.py +56 -0
- notte-0.0.dev0/tests/actions/test_parsing.py +191 -0
- notte-0.0.dev0/tests/browser/__init__.py +0 -0
- notte-0.0.dev0/tests/browser/test_clipboard_isolation.py +130 -0
- notte-0.0.dev0/tests/browser/test_context.py +260 -0
- notte-0.0.dev0/tests/browser/test_node_type.py +436 -0
- notte-0.0.dev0/tests/code/test_code.py +78 -0
- notte-0.0.dev0/tests/config/test_agent_config.py +92 -0
- notte-0.0.dev0/tests/config/test_cli_config.py +42 -0
- notte-0.0.dev0/tests/config/test_config.py +38 -0
- notte-0.0.dev0/tests/config/test_env_config.py +94 -0
- notte-0.0.dev0/tests/conftest.py +28 -0
- notte-0.0.dev0/tests/integration/__init__.py +0 -0
- notte-0.0.dev0/tests/integration/sdk/__init__.py +0 -0
- notte-0.0.dev0/tests/integration/sdk/test_cdp.py +16 -0
- notte-0.0.dev0/tests/integration/sdk/test_recording_ws.py +45 -0
- notte-0.0.dev0/tests/integration/sdk/test_scraping.py +77 -0
- notte-0.0.dev0/tests/integration/sdk/test_sessions.py +32 -0
- notte-0.0.dev0/tests/integration/sdk/test_vault.py +48 -0
- notte-0.0.dev0/tests/integration/test_basic_scripts.py +40 -0
- notte-0.0.dev0/tests/integration/test_e2e.py +80 -0
- notte-0.0.dev0/tests/integration/test_resolution.py +204 -0
- notte-0.0.dev0/tests/integration/test_special_actions.py +125 -0
- notte-0.0.dev0/tests/integration/test_webvoyager_resolution.py +15 -0
- notte-0.0.dev0/tests/integration/test_webvoyager_scripts.py +90 -0
- notte-0.0.dev0/tests/llms/__init__.py +0 -0
- notte-0.0.dev0/tests/llms/test_action_listing_prompt_discrepancies.py +156 -0
- notte-0.0.dev0/tests/llms/test_engine.py +91 -0
- notte-0.0.dev0/tests/llms/test_extract_data_prompt_discrepancies.py +148 -0
- notte-0.0.dev0/tests/llms/test_prompt.py +68 -0
- notte-0.0.dev0/tests/mock/__init__.py +0 -0
- notte-0.0.dev0/tests/mock/mock_browser.py +214 -0
- notte-0.0.dev0/tests/mock/mock_env.py +54 -0
- notte-0.0.dev0/tests/mock/mock_service.py +43 -0
- notte-0.0.dev0/tests/pipe/__init__.py +0 -0
- notte-0.0.dev0/tests/pipe/action/__init__.py +0 -0
- notte-0.0.dev0/tests/pipe/action/test_listing.py +170 -0
- notte-0.0.dev0/tests/pipe/action/test_main.py +221 -0
- notte-0.0.dev0/tests/pipe/preprocessing/__init__.py +0 -0
- notte-0.0.dev0/tests/sdk/__init__.py +0 -0
- notte-0.0.dev0/tests/sdk/test_client.py +367 -0
- notte-0.0.dev0/tests/sdk/test_dict_types.py +164 -0
- notte-0.0.dev0/tests/sdk/test_openapi_spec.py +10 -0
- notte-0.0.dev0/tests/sdk/test_types.py +280 -0
- notte-0.0.dev0/tests/test_session.py +120 -0
- notte-0.0.dev0/tests/utils/__init__.py +0 -0
- notte-0.0.dev0/tests/utils/test_image.py +27 -0
- notte-0.0.dev0/tests/utils/test_url.py +53 -0
- notte-0.0.dev0/uv.lock +5318 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# #############################
|
|
2
|
+
# ######### SDK CONFIG ########
|
|
3
|
+
# #############################
|
|
4
|
+
|
|
5
|
+
# Notte SDK configuration
|
|
6
|
+
# -> Cloud hosted sessions & notte API
|
|
7
|
+
NOTTE_API_URL=api.notte.cc
|
|
8
|
+
NOTTE_API_KEY=
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# #############################
|
|
12
|
+
# ######### LOCAL DEV #########
|
|
13
|
+
# #############################
|
|
14
|
+
|
|
15
|
+
# Set your provider API keys (only one provider is required but we advise to set more to bypass rate limits)
|
|
16
|
+
OPENAI_API_KEY=
|
|
17
|
+
ANTHROPIC_API_KEY=
|
|
18
|
+
GROQ_API_KEY=
|
|
19
|
+
CEREBRAS_API_KEY=
|
|
20
|
+
DEEPSEEK_API_KEY=
|
|
21
|
+
GEMINI_API_KEY=
|
|
22
|
+
|
|
23
|
+
# #############################
|
|
24
|
+
# ######### TELEMETRY #########
|
|
25
|
+
# #############################
|
|
26
|
+
|
|
27
|
+
# Enable or disable telemetry collection
|
|
28
|
+
# We use PostHog for telemetry collection. The data is completely anonymized and
|
|
29
|
+
# contains no personally identifiable information.
|
|
30
|
+
# Set to 'false' to disable telemetry collection
|
|
31
|
+
ANONYMIZED_TELEMETRY=true
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from openai import OpenAI
|
|
4
|
+
from openai.types.chat import ChatCompletion
|
|
5
|
+
|
|
6
|
+
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
|
|
7
|
+
|
|
8
|
+
with open("README.md", "r") as f:
|
|
9
|
+
readme_content: str = f.read()
|
|
10
|
+
|
|
11
|
+
languages: list[str] = ["mandarin chinese", "spanish", "hindi", "russian", "bengali"]
|
|
12
|
+
|
|
13
|
+
for lang in languages:
|
|
14
|
+
response: ChatCompletion = client.chat.completions.create(
|
|
15
|
+
model="gpt-4",
|
|
16
|
+
messages=[
|
|
17
|
+
{
|
|
18
|
+
"role": "system",
|
|
19
|
+
"content": f"""You are a professional translator. Your task is to translate the following markdown text to {lang} with the following strict requirements:
|
|
20
|
+
|
|
21
|
+
1. Maintain EXACTLY the same markdown structure and formatting:
|
|
22
|
+
- Keep all headers (#, ##, ###) at the same level
|
|
23
|
+
- Preserve all code blocks (```) and their language specifications
|
|
24
|
+
- Keep all links [text](url) in the same format
|
|
25
|
+
- Maintain all lists (ordered and unordered) with the same indentation
|
|
26
|
+
- Preserve all tables with the same structure
|
|
27
|
+
- Keep all inline code (`code`) in the same format
|
|
28
|
+
- Maintain all blockquotes (>)
|
|
29
|
+
- Preserve all horizontal rules (---)
|
|
30
|
+
|
|
31
|
+
2. Translation rules:
|
|
32
|
+
- Only translate the text content, not the markdown syntax
|
|
33
|
+
- Keep all URLs unchanged
|
|
34
|
+
- Keep all code examples unchanged
|
|
35
|
+
- Keep all technical terms in English if they are commonly used in {lang}
|
|
36
|
+
- Maintain the same line breaks and paragraph structure
|
|
37
|
+
- Do not add or remove any sections
|
|
38
|
+
- Do not modify the document structure in any way
|
|
39
|
+
|
|
40
|
+
3. Output:
|
|
41
|
+
- Return only the translated markdown text
|
|
42
|
+
- Do not include any explanations or notes
|
|
43
|
+
- Ensure the output is valid markdown that renders exactly like the original""",
|
|
44
|
+
},
|
|
45
|
+
{"role": "user", "content": readme_content},
|
|
46
|
+
],
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
translated_content: str = response.choices[0].message.content
|
|
50
|
+
|
|
51
|
+
with open(f"docs/readmes/{lang}.md", "w") as f:
|
|
52
|
+
_ = f.write(translated_content)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: benchmark
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
config:
|
|
7
|
+
description: "Full toml config"
|
|
8
|
+
required: true
|
|
9
|
+
default: '[RunParameters]\nn_jobs = 3\ntries_per_task = 1\nevaluator = \"None\"\ncapture_logging = true\n[RunParameters.task_set]\nname = \"WebVoyagerSimple\"\n[Falco]\nuse_vision = false\nheadless = true\nmodel = \"cerebras/llama-3.3-70b\"\nmax_steps = 20\nhistory_type = \"short_observations_with_short_data\"\npool = \"None\"'
|
|
10
|
+
concurrency:
|
|
11
|
+
group: >-
|
|
12
|
+
${{ github.workflow }}-${{ github.ref }}-
|
|
13
|
+
${{ github.event.inputs.config }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
PYTHON_VERSION: "3.11"
|
|
18
|
+
CACHE_TYPE: "pip"
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
run-benchmark:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
timeout-minutes: 180
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Set environment variables
|
|
28
|
+
run: |
|
|
29
|
+
echo "CEREBRAS_API_KEY=${{ secrets.CEREBRAS_API_KEY_CICD }}" >> $GITHUB_ENV
|
|
30
|
+
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY_CICD }}" >> $GITHUB_ENV
|
|
31
|
+
|
|
32
|
+
- name: Set up Python
|
|
33
|
+
uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
36
|
+
cache: ${{ env.CACHE_TYPE }}
|
|
37
|
+
|
|
38
|
+
- name: Install dependencies
|
|
39
|
+
run: |
|
|
40
|
+
python -m pip install --upgrade pip
|
|
41
|
+
pip install pre-commit pytest mypy pytest-asyncio pytest-mock
|
|
42
|
+
pip install -e .
|
|
43
|
+
pip install types-requests types-beautifulsoup4 types-regex types-chevron pandas tabulate cloudpickle
|
|
44
|
+
patchright install --with-deps chromium
|
|
45
|
+
|
|
46
|
+
- name: Create config.toml file
|
|
47
|
+
run: |
|
|
48
|
+
printf "%s" "${{ github.event.inputs.config }}" > config.toml
|
|
49
|
+
|
|
50
|
+
- name: Debug config.toml content
|
|
51
|
+
run: |
|
|
52
|
+
cat config.toml
|
|
53
|
+
|
|
54
|
+
- name: Run benchmark unit tests
|
|
55
|
+
run: pytest tests/integration/test_e2e.py --capture=no -p no:asyncio --config config.toml
|
|
56
|
+
|
|
57
|
+
- name: Upload md results as step summary
|
|
58
|
+
if: always()
|
|
59
|
+
run: cat dist/results.html >> $GITHUB_STEP_SUMMARY
|
|
60
|
+
|
|
61
|
+
- name: Upload Logs / Results
|
|
62
|
+
if: always()
|
|
63
|
+
uses: actions/upload-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: benchmark-results
|
|
66
|
+
path: |
|
|
67
|
+
dist/*
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
CACHE_TYPE: "pip"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
18
|
+
name: Build python dist
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
persist-credentials: false
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@v5
|
|
28
|
+
with:
|
|
29
|
+
enable-cache: true
|
|
30
|
+
cache-dependency-glob: "uv.lock"
|
|
31
|
+
|
|
32
|
+
- name: Set up Python
|
|
33
|
+
uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version-file: ".python-version"
|
|
36
|
+
cache: ${{ env.CACHE_TYPE }}
|
|
37
|
+
|
|
38
|
+
- name: Store the distribution packages
|
|
39
|
+
uses: actions/upload-artifact@v4
|
|
40
|
+
with:
|
|
41
|
+
name: python-package-distributions
|
|
42
|
+
path: dist/
|
|
43
|
+
|
|
44
|
+
# - name: Publish to TestPyPI
|
|
45
|
+
# run: uv publish testpypi --token ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
46
|
+
|
|
47
|
+
# - name: Install the package from TestPyPI
|
|
48
|
+
# run: |
|
|
49
|
+
# uv venv test-pypi
|
|
50
|
+
# source test-pypi/bin/activate
|
|
51
|
+
# uv pip install notte==${{ github.ref_name }} --default-index testpypi
|
|
52
|
+
|
|
53
|
+
- name: Build and Publish to PyPI
|
|
54
|
+
env:
|
|
55
|
+
UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
|
|
56
|
+
run: bash build.sh ${{ github.ref_name }} publish
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
- name: Wait for 2 minutes
|
|
60
|
+
run: sleep 120
|
|
61
|
+
|
|
62
|
+
- name: Install the package from PyPI
|
|
63
|
+
run: |
|
|
64
|
+
uv venv pypi
|
|
65
|
+
source pypi/bin/activate
|
|
66
|
+
uv pip install notte==${{ github.ref_name }}
|
|
67
|
+
uv pip show notte
|
|
68
|
+
uv pip show notte-core
|
|
69
|
+
uv pip show notte-sdk
|
|
70
|
+
uv pip show notte-browser
|
|
71
|
+
uv pip show notte-agent
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: slack monitor
|
|
2
|
+
on:
|
|
3
|
+
issues:
|
|
4
|
+
types: [opened, edited, closed]
|
|
5
|
+
pull_request:
|
|
6
|
+
types: [opened, edited, closed]
|
|
7
|
+
issue_comment:
|
|
8
|
+
types: [created]
|
|
9
|
+
pull_request_review:
|
|
10
|
+
types: [submitted]
|
|
11
|
+
jobs:
|
|
12
|
+
slack_notification:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Check if user is external
|
|
16
|
+
id: check_user
|
|
17
|
+
run: |
|
|
18
|
+
actor="${{ github.actor }}"
|
|
19
|
+
team_members=("andreakiro" "giordano-lucas" "leo-notte" "jose-notte" "coderabbitai[bot]")
|
|
20
|
+
is_external="true"
|
|
21
|
+
for member in "${team_members[@]}"; do
|
|
22
|
+
if [[ "$actor" == "$member" ]]; then
|
|
23
|
+
is_external="false"
|
|
24
|
+
break
|
|
25
|
+
fi
|
|
26
|
+
done
|
|
27
|
+
echo "is_external=$is_external" >> $GITHUB_OUTPUT
|
|
28
|
+
|
|
29
|
+
- name: Set action type
|
|
30
|
+
id: set_action_type
|
|
31
|
+
run: |
|
|
32
|
+
EVENT="${{ github.event_name }}"
|
|
33
|
+
ACTION="${{ github.event.action }}"
|
|
34
|
+
|
|
35
|
+
if [[ "$EVENT" == "issues" && "$ACTION" == "opened" ]]; then
|
|
36
|
+
echo "action_label=issue-opened" >> $GITHUB_OUTPUT
|
|
37
|
+
elif [[ "$EVENT" == "issues" && "$ACTION" == "closed" ]]; then
|
|
38
|
+
echo "action_label=issue-closed" >> $GITHUB_OUTPUT
|
|
39
|
+
elif [[ "$EVENT" == "issues" && "$ACTION" == "edited" ]]; then
|
|
40
|
+
echo "action_label=issue-edited" >> $GITHUB_OUTPUT
|
|
41
|
+
elif [[ "$EVENT" == "pull_request" && "$ACTION" == "opened" ]]; then
|
|
42
|
+
echo "action_label=pr-opened" >> $GITHUB_OUTPUT
|
|
43
|
+
elif [[ "$EVENT" == "pull_request" && "$ACTION" == "closed" ]]; then
|
|
44
|
+
echo "action_label=pr-closed" >> $GITHUB_OUTPUT
|
|
45
|
+
elif [[ "$EVENT" == "pull_request" && "$ACTION" == "edited" ]]; then
|
|
46
|
+
echo "action_label=pr-edited" >> $GITHUB_OUTPUT
|
|
47
|
+
elif [[ "$EVENT" == "issue_comment" ]]; then
|
|
48
|
+
echo "action_label=commented" >> $GITHUB_OUTPUT
|
|
49
|
+
elif [[ "$EVENT" == "pull_request_review" ]]; then
|
|
50
|
+
echo "action_label=reviewed" >> $GITHUB_OUTPUT
|
|
51
|
+
else
|
|
52
|
+
echo "action_label=$EVENT-$ACTION" >> $GITHUB_OUTPUT
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
- name: Generate timestamp
|
|
56
|
+
id: timestamp
|
|
57
|
+
run: echo "timestamp=$(date +%s)" >> $GITHUB_OUTPUT
|
|
58
|
+
|
|
59
|
+
- name: Format payload
|
|
60
|
+
id: format_payload
|
|
61
|
+
run: |
|
|
62
|
+
EVENT_BODY="${{ github.event.issue.body || github.event.pull_request.body || github.event.comment.body || github.event.review.body || '' }}"
|
|
63
|
+
ESCAPED_BODY=$(echo "$EVENT_BODY" | sed 's/"/\\"/g' | sed 's/$/\\n/g' | tr -d '\n')
|
|
64
|
+
echo "formatted_body=$ESCAPED_BODY" >> $GITHUB_OUTPUT
|
|
65
|
+
|
|
66
|
+
- name: Send Slack Notification if External
|
|
67
|
+
if: steps.check_user.outputs.is_external == 'true'
|
|
68
|
+
uses: slackapi/slack-github-action@v1.24.0
|
|
69
|
+
with:
|
|
70
|
+
payload: |
|
|
71
|
+
{
|
|
72
|
+
"username": "GitHub Activity (${{ steps.timestamp.outputs.timestamp }})",
|
|
73
|
+
"text": "Opensource user activity `${{ steps.set_action_type.outputs.action_label }}` by <https://github.com/${{ github.actor }}|@${{ github.actor }}>\n${{ github.event.issue.title || github.event.pull_request.title || 'Comment' }}\n${{ steps.format_payload.outputs.formatted_body }}\n${{ github.event.issue.html_url || github.event.pull_request.html_url || github.event.comment.html_url || github.event.review.html_url }}"
|
|
74
|
+
}
|
|
75
|
+
env:
|
|
76
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
name: cicd
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
env:
|
|
16
|
+
CACHE_TYPE: "pip"
|
|
17
|
+
NOTTE_API_KEY: ${{ secrets.NOTTE_API_KEY }}
|
|
18
|
+
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
tests:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
timeout-minutes: 15
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Verify environment variables
|
|
28
|
+
run: |
|
|
29
|
+
if [ -z "$NOTTE_API_KEY" ]; then
|
|
30
|
+
echo "NOTTE_API_KEY is not set"
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
if [ -z "$GEMINI_API_KEY" ]; then
|
|
34
|
+
echo "GEMINI_API_KEY is not set"
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
echo "Environment variables are set"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
- name: Install uv
|
|
41
|
+
uses: astral-sh/setup-uv@v5
|
|
42
|
+
with:
|
|
43
|
+
enable-cache: true
|
|
44
|
+
cache-dependency-glob: "uv.lock"
|
|
45
|
+
|
|
46
|
+
- name: Set up Python
|
|
47
|
+
uses: actions/setup-python@v5
|
|
48
|
+
with:
|
|
49
|
+
python-version-file: ".python-version"
|
|
50
|
+
cache: ${{ env.CACHE_TYPE }}
|
|
51
|
+
|
|
52
|
+
- name: Cache patchright
|
|
53
|
+
id: cache-patchright
|
|
54
|
+
uses: actions/cache@v4
|
|
55
|
+
with:
|
|
56
|
+
path: |
|
|
57
|
+
~/.cache/ms-playwright
|
|
58
|
+
~/.cache/patchright
|
|
59
|
+
~/.local/share/patchright
|
|
60
|
+
${{ github.workspace }}/.patchright
|
|
61
|
+
key: ${{ runner.os }}-patchright-${{ hashFiles('**/pyproject.toml') }}-playwright1155-ffmpeg1011-v1
|
|
62
|
+
restore-keys: |
|
|
63
|
+
${{ runner.os }}-patchright-${{ hashFiles('**/pyproject.toml') }}-playwright1155-ffmpeg1011-
|
|
64
|
+
${{ runner.os }}-patchright-
|
|
65
|
+
|
|
66
|
+
- name: Cache pre-commit
|
|
67
|
+
id: cache-pre-commit
|
|
68
|
+
uses: actions/cache@v4
|
|
69
|
+
with:
|
|
70
|
+
path: ~/.cache/pre-commit
|
|
71
|
+
key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml', '**/pyproject.toml') }}-v1
|
|
72
|
+
restore-keys: |
|
|
73
|
+
${{ runner.os }}-pre-commit-
|
|
74
|
+
|
|
75
|
+
- name: Install dependencies
|
|
76
|
+
run: uv sync --dev --all-extras
|
|
77
|
+
|
|
78
|
+
- name: Install patchright
|
|
79
|
+
if: steps.cache-patchright.outputs.cache-hit != 'true'
|
|
80
|
+
run: |
|
|
81
|
+
echo "Cache miss - installing patchright"
|
|
82
|
+
uv run patchright install --with-deps chromium --only-shell
|
|
83
|
+
|
|
84
|
+
- name: Install pre-commit
|
|
85
|
+
if: steps.cache-pre-commit.outputs.cache-hit != 'true'
|
|
86
|
+
run: uv run pre-commit install --install-hooks
|
|
87
|
+
|
|
88
|
+
- name: Run pre-commit
|
|
89
|
+
run: uv run --active pre-commit run --all-files
|
|
90
|
+
|
|
91
|
+
- name: Run unit tests
|
|
92
|
+
run: |
|
|
93
|
+
uv run pytest tests --ignore=tests/integration/test_resolution.py --ignore=tests/integration/test_webvoyager_resolution.py --ignore=tests/browser/test_pool.py --ignore=tests/integration/test_e2e.py --ignore=tests/integration/test_webvoyager_scripts.py --durations=10
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: translates readme
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- "README.md"
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
translate:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Set up Python
|
|
17
|
+
uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.11"
|
|
20
|
+
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: |
|
|
23
|
+
python -m pip install --upgrade pip
|
|
24
|
+
pip install openai
|
|
25
|
+
|
|
26
|
+
- name: Check if README was modified
|
|
27
|
+
id: check-readme
|
|
28
|
+
run: |
|
|
29
|
+
git diff --name-only HEAD~1 HEAD | grep -q "README.md"
|
|
30
|
+
echo "readme_changed=$?" >> $GITHUB_OUTPUT
|
|
31
|
+
|
|
32
|
+
- name: Translate README
|
|
33
|
+
if: steps.check-readme.outputs.readme_changed == '0'
|
|
34
|
+
env:
|
|
35
|
+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
36
|
+
run: |
|
|
37
|
+
mkdir -p docs/readmes
|
|
38
|
+
python .github/scripts/translate_readme.py
|
|
39
|
+
|
|
40
|
+
- name: Commit and push translations
|
|
41
|
+
if: steps.check-readme.outputs.readme_changed == '0'
|
|
42
|
+
run: |
|
|
43
|
+
git config --local user.email "action@github.com"
|
|
44
|
+
git config --local user.name "GitHub Action"
|
|
45
|
+
git add docs/readmes/
|
|
46
|
+
git commit -m "Update translated READMEs"
|
|
47
|
+
git push
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
#uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
#poetry.lock
|
|
109
|
+
|
|
110
|
+
# pdm
|
|
111
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
112
|
+
#pdm.lock
|
|
113
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
114
|
+
# in version control.
|
|
115
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
116
|
+
.pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
121
|
+
__pypackages__/
|
|
122
|
+
|
|
123
|
+
# Celery stuff
|
|
124
|
+
celerybeat-schedule
|
|
125
|
+
celerybeat.pid
|
|
126
|
+
|
|
127
|
+
# SageMath parsed files
|
|
128
|
+
*.sage.py
|
|
129
|
+
|
|
130
|
+
# Environments
|
|
131
|
+
.env
|
|
132
|
+
.venv
|
|
133
|
+
env/
|
|
134
|
+
venv/
|
|
135
|
+
ENV/
|
|
136
|
+
env.bak/
|
|
137
|
+
venv.bak/
|
|
138
|
+
|
|
139
|
+
# Spyder project settings
|
|
140
|
+
.spyderproject
|
|
141
|
+
.spyproject
|
|
142
|
+
|
|
143
|
+
# Rope project settings
|
|
144
|
+
.ropeproject
|
|
145
|
+
|
|
146
|
+
# mkdocs documentation
|
|
147
|
+
/site
|
|
148
|
+
|
|
149
|
+
# mypy
|
|
150
|
+
.mypy_cache/
|
|
151
|
+
.dmypy.json
|
|
152
|
+
dmypy.json
|
|
153
|
+
|
|
154
|
+
# Pyre type checker
|
|
155
|
+
.pyre/
|
|
156
|
+
|
|
157
|
+
# pytype static type analyzer
|
|
158
|
+
.pytype/
|
|
159
|
+
|
|
160
|
+
# Cython debug symbols
|
|
161
|
+
cython_debug/
|
|
162
|
+
|
|
163
|
+
# PyCharm
|
|
164
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
165
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
166
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
167
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
168
|
+
#.idea/
|
|
169
|
+
|
|
170
|
+
ignore.*
|
|
171
|
+
llm_usage.jsonl
|
|
172
|
+
llm_parsing_error.jsonl
|
|
173
|
+
traces/
|
|
174
|
+
|
|
175
|
+
**/__pycache__/**
|
|
176
|
+
.DS_Store
|
|
177
|
+
**/.DS_Store
|
|
178
|
+
old
|
|
179
|
+
notebook
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
# Ruff version.
|
|
4
|
+
rev: v0.9.7
|
|
5
|
+
hooks:
|
|
6
|
+
# Run the linter.
|
|
7
|
+
- id: ruff
|
|
8
|
+
types_or: [ python, pyi ]
|
|
9
|
+
args: [ --fix ]
|
|
10
|
+
# Run the formatter.
|
|
11
|
+
- id: ruff-format
|
|
12
|
+
types_or: [ python, pyi ]
|
|
13
|
+
|
|
14
|
+
- repo: https://github.com/DetachHead/basedpyright-pre-commit-mirror
|
|
15
|
+
rev: 1.27.1
|
|
16
|
+
hooks:
|
|
17
|
+
- id: basedpyright
|
|
18
|
+
args: ["--project", "."]
|
|
19
|
+
verbose: true
|
|
20
|
+
|
|
21
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
22
|
+
rev: v1.5.0
|
|
23
|
+
hooks:
|
|
24
|
+
- id: detect-secrets
|
|
25
|
+
exclude: ^(.*/README\.md|.*/pyproject\.toml|docs/archives/20250307_README\.md|README\.md)$
|
|
26
|
+
|
|
27
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
28
|
+
rev: v5.0.0
|
|
29
|
+
hooks:
|
|
30
|
+
- id: trailing-whitespace
|
|
31
|
+
- id: end-of-file-fixer
|
|
32
|
+
- id: check-yaml
|
|
33
|
+
- id: check-json
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|