From 1067794a118c96b32a8400209f6a1322c71ffb88 Mon Sep 17 00:00:00 2001 From: Ankit Chaurasia <8670962+sunank200@users.noreply.github.com> Date: Thu, 23 Nov 2023 17:09:52 +0545 Subject: [PATCH] Create TaskFlow API to use WeaviateHook and use taskflow API for ask-astro-load.py (#132) - I have taken airflow Docs ingestion for my implementation. Hence commits from Michael. - Create `AskAstroWeaviateHook` which inherits from OSS `WeaviateHook`. - Add `get_schema`, `check_schema`, `create_schema`, `handle_upsert_rollback` and `ingest_data` - Use Taskflow API for `ask-astro-load.py`. - Add airflow docs as source closes: #134 --- airflow/.dockerignore | 1 - airflow/Dockerfile | 6 +- .../ingestion/ask-astro-load-airflow-docs.py | 55 ++ .../dags/ingestion/ask-astro-load-blogs.py | 47 +- .../dags/ingestion/ask-astro-load-github.py | 70 +-- .../dags/ingestion/ask-astro-load-registry.py | 46 +- .../dags/ingestion/ask-astro-load-slack.py | 43 +- .../ingestion/ask-astro-load-stackoverflow.py | 43 +- airflow/dags/ingestion/ask-astro-load.py | 223 ++++---- airflow/dags/monitor/monitor.py | 4 +- airflow/include/__init__.py | 0 ...w_provider_weaviate-0.0.1-py3-none-any.whl | Bin 957331 -> 0 bytes .../include/data/apache/apache_license.rst | 16 - airflow/include/data/schema.json | 1 + airflow/include/tasks/__init__.py | 0 airflow/include/tasks/extract/__init__.py | 0 airflow/include/tasks/extract/airflow_docs.py | 77 +++ airflow/include/tasks/extract/blogs.py | 2 +- airflow/include/tasks/extract/slack.py | 2 +- .../include/tasks/extract/stack_overflow.py | 3 +- .../include/tasks/extract/utils/__init__.py | 0 .../tasks/extract/utils/html_helpers.py | 77 +++ .../extract/utils/stack_overflow_helpers.py | 2 +- .../tasks/extract/utils/weaviate/__init__.py | 0 .../utils/weaviate/ask_astro_weaviate_hook.py | 488 ++++++++++++++++++ airflow/include/tasks/ingest.py | 82 +-- airflow/include/tasks/split.py | 35 ++ airflow/requirements.txt | 4 +- airflow/ruff.toml | 5 + 29 files changed, 1037 insertions(+), 295 deletions(-) create mode 100644 airflow/dags/ingestion/ask-astro-load-airflow-docs.py create mode 100644 airflow/include/__init__.py delete mode 100644 airflow/include/airflow_provider_weaviate-0.0.1-py3-none-any.whl delete mode 100644 airflow/include/data/apache/apache_license.rst create mode 100644 airflow/include/tasks/__init__.py create mode 100644 airflow/include/tasks/extract/__init__.py create mode 100644 airflow/include/tasks/extract/airflow_docs.py create mode 100644 airflow/include/tasks/extract/utils/__init__.py create mode 100644 airflow/include/tasks/extract/utils/html_helpers.py create mode 100644 airflow/include/tasks/extract/utils/weaviate/__init__.py create mode 100644 airflow/include/tasks/extract/utils/weaviate/ask_astro_weaviate_hook.py create mode 100644 airflow/ruff.toml diff --git a/airflow/.dockerignore b/airflow/.dockerignore index c8f3b275..fa8e599f 100644 --- a/airflow/.dockerignore +++ b/airflow/.dockerignore @@ -3,4 +3,3 @@ astro .env airflow_settings.yaml logs/ -dags/ diff --git a/airflow/Dockerfile b/airflow/Dockerfile index 39183c3b..a67c6702 100644 --- a/airflow/Dockerfile +++ b/airflow/Dockerfile @@ -1,5 +1 @@ -# syntax=quay.io/astronomer/airflow-extensions:latest - -FROM quay.io/astronomer/astro-runtime:9.5.0-base - -COPY include/airflow_provider_weaviate-0.0.1-py3-none-any.whl /tmp +FROM quay.io/astronomer/astro-runtime:9.5.0 diff --git a/airflow/dags/ingestion/ask-astro-load-airflow-docs.py b/airflow/dags/ingestion/ask-astro-load-airflow-docs.py new file mode 100644 index 00000000..c0f75851 --- /dev/null +++ b/airflow/dags/ingestion/ask-astro-load-airflow-docs.py @@ -0,0 +1,55 @@ +import os +from datetime import datetime + +from include.tasks import split +from include.tasks.extract import airflow_docs +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook + +from airflow.decorators import dag, task + +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") + +_WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") + +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) + +airflow_docs_base_url = "https://airflow.apache.org/docs/" + +default_args = {"retries": 3, "retry_delay": 30} + +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None + + +@dag( + schedule_interval=schedule_interval, + start_date=datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) +def ask_astro_load_airflow_docs(): + """ + This DAG performs incremental load for any new Airflow docs. Initial load via ask_astro_load_bulk imported + data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator + any existing documents that have been updated will be removed and re-added. + """ + + extracted_airflow_docs = task(airflow_docs.extract_airflow_docs)(docs_base_url=airflow_docs_base_url) + + split_md_docs = task(split.split_html).expand(dfs=[extracted_airflow_docs]) + + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs]) + ) + + +ask_astro_load_airflow_docs() diff --git a/airflow/dags/ingestion/ask-astro-load-blogs.py b/airflow/dags/ingestion/ask-astro-load-blogs.py index 239aad8e..314fef3e 100644 --- a/airflow/dags/ingestion/ask-astro-load-blogs.py +++ b/airflow/dags/ingestion/ask-astro-load-blogs.py @@ -1,37 +1,54 @@ +import datetime import os -from datetime import datetime -from include.tasks import ingest, split +from include.tasks import split from include.tasks.extract import blogs +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) -blog_cutoff_date = datetime.strptime("2023-01-19", "%Y-%m-%d") +blog_cutoff_date = datetime.date(2023, 1, 19) +default_args = {"retries": 3, "retry_delay": 30} -@dag(schedule_interval="0 5 * * *", start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None + + +@dag( + schedule_interval=schedule_interval, + start_date=datetime.datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_blogs(): """ - This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported - data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator + This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported + data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator any existing documents that have been updated will be removed and re-added. """ - blogs_docs = task(blogs.extract_astro_blogs, retries=3)(blog_cutoff_date=blog_cutoff_date) + blogs_docs = task(blogs.extract_astro_blogs)(blog_cutoff_date=blog_cutoff_date) split_md_docs = task(split.split_markdown).expand(dfs=[blogs_docs]) - task.weaviate_import( - ingest.import_upsert_data, - weaviate_conn_id=_WEAVIATE_CONN_ID, - retries=10, - retry_delay=30, - ).partial(class_name=WEAVIATE_CLASS, primary_key="docLink").expand(dfs=[split_md_docs]) + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs]) + ) ask_astro_load_blogs() diff --git a/airflow/dags/ingestion/ask-astro-load-github.py b/airflow/dags/ingestion/ask-astro-load-github.py index 4dbad5a7..8d19741f 100644 --- a/airflow/dags/ingestion/ask-astro-load-github.py +++ b/airflow/dags/ingestion/ask-astro-load-github.py @@ -1,25 +1,26 @@ +import datetime import os -from datetime import datetime -from include.tasks import ingest, split +from include.tasks import split from include.tasks.extract import github +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" _GITHUB_CONN_ID = "github_ro" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") + +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) + markdown_docs_sources = [ {"doc_dir": "learn", "repo_base": "astronomer/docs"}, {"doc_dir": "astro", "repo_base": "astronomer/docs"}, {"doc_dir": "", "repo_base": "OpenLineage/docs"}, {"doc_dir": "", "repo_base": "OpenLineage/OpenLineage"}, ] -rst_docs_sources = [ - {"doc_dir": "docs", "repo_base": "apache/airflow", "exclude_docs": ["changelog.rst", "commits.rst"]}, -] code_samples_sources = [ {"doc_dir": "code-samples", "repo_base": "astronomer/docs"}, ] @@ -27,53 +28,54 @@ "apache/airflow", ] +default_args = {"retries": 3, "retry_delay": 30} + +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None -@dag(schedule_interval="0 5 * * *", start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) + +@dag( + schedule_interval=schedule_interval, + start_date=datetime.datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_github(): """ - This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported - data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator + This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported + data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator any existing documents that have been updated will be removed and re-added. """ md_docs = ( - task(github.extract_github_markdown, retries=3) + task(github.extract_github_markdown) .partial(github_conn_id=_GITHUB_CONN_ID) .expand(source=markdown_docs_sources) ) - rst_docs = ( - task(github.extract_github_rst, retries=3) - .partial(github_conn_id=_GITHUB_CONN_ID) - .expand(source=rst_docs_sources) - ) - issues_docs = ( - task(github.extract_github_issues, retries=3) - .partial(github_conn_id=_GITHUB_CONN_ID) - .expand(repo_base=issues_docs_sources) + task(github.extract_github_issues).partial(github_conn_id=_GITHUB_CONN_ID).expand(repo_base=issues_docs_sources) ) code_samples = ( - task(github.extract_github_python, retries=3) - .partial(github_conn_id=_GITHUB_CONN_ID) - .expand(source=code_samples_sources) + task(github.extract_github_python).partial(github_conn_id=_GITHUB_CONN_ID).expand(source=code_samples_sources) ) - markdown_tasks = [md_docs, rst_docs, issues_docs] - - split_md_docs = task(split.split_markdown).expand(dfs=markdown_tasks) + split_md_docs = task(split.split_markdown).expand(dfs=[md_docs, issues_docs]) split_code_docs = task(split.split_python).expand(dfs=[code_samples]) - task.weaviate_import( - ingest.import_upsert_data, - weaviate_conn_id=_WEAVIATE_CONN_ID, - retries=10, - retry_delay=30, - ).partial(class_name=WEAVIATE_CLASS, primary_key="docLink").expand(dfs=[split_md_docs, split_code_docs]) - - issues_docs >> md_docs >> rst_docs >> code_samples + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs, split_code_docs]) + ) ask_astro_load_github() diff --git a/airflow/dags/ingestion/ask-astro-load-registry.py b/airflow/dags/ingestion/ask-astro-load-registry.py index 08b617c9..c73b59c9 100644 --- a/airflow/dags/ingestion/ask-astro-load-registry.py +++ b/airflow/dags/ingestion/ask-astro-load-registry.py @@ -1,39 +1,57 @@ import os from datetime import datetime -from include.tasks import ingest, split +from include.tasks import split from include.tasks.extract import registry +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) -@dag(schedule_interval="0 5 * * *", start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) +default_args = {"retries": 3, "retry_delay": 30} + +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None + + +@dag( + schedule_interval=schedule_interval, + start_date=datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_registry(): """ - This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported - data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator + This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported + data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator any existing documents that have been updated will be removed and re-added. """ - registry_cells_docs = task(registry.extract_astro_registry_cell_types, retries=3)() + registry_cells_docs = task(registry.extract_astro_registry_cell_types)() - registry_dags_docs = task(registry.extract_astro_registry_dags, retries=3)() + registry_dags_docs = task(registry.extract_astro_registry_dags)() split_md_docs = task(split.split_markdown).expand(dfs=[registry_cells_docs]) split_code_docs = task(split.split_python).expand(dfs=[registry_dags_docs]) - task.weaviate_import( - ingest.import_upsert_data, - weaviate_conn_id=_WEAVIATE_CONN_ID, - retries=10, - retry_delay=30, - ).partial(class_name=WEAVIATE_CLASS, primary_key="docLink").expand(dfs=[split_md_docs, split_code_docs]) + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs, split_code_docs]) + ) ask_astro_load_registry() diff --git a/airflow/dags/ingestion/ask-astro-load-slack.py b/airflow/dags/ingestion/ask-astro-load-slack.py index d8804c5c..0066794e 100644 --- a/airflow/dags/ingestion/ask-astro-load-slack.py +++ b/airflow/dags/ingestion/ask-astro-load-slack.py @@ -1,15 +1,17 @@ import os from datetime import datetime -from include.tasks import ingest, split +from include.tasks import split from include.tasks.extract import slack +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) slack_channel_sources = [ { "channel_name": "troubleshooting", @@ -20,25 +22,40 @@ } ] +default_args = {"retries": 3, "retry_delay": 30} -@dag(schedule_interval="0 5 * * *", start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None + + +@dag( + schedule_interval=schedule_interval, + start_date=datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_slack(): """ - This DAG performs incremental load for any new slack threads. The slack archive is a point-in-time capture. This - DAG should run nightly to capture threads between archive periods. By using the upsert logic of the + This DAG performs incremental load for any new slack threads. The slack archive is a point-in-time capture. This + DAG should run nightly to capture threads between archive periods. By using the upsert logic of the weaviate_import decorator any existing documents that have been updated will be removed and re-added. """ - slack_docs = task(slack.extract_slack, retries=3).expand(source=slack_channel_sources) + slack_docs = task(slack.extract_slack).expand(source=slack_channel_sources) split_md_docs = task(split.split_markdown).expand(dfs=[slack_docs]) - task.weaviate_import( - ingest.import_upsert_data, - weaviate_conn_id=_WEAVIATE_CONN_ID, - retries=10, - retry_delay=30, - ).partial(class_name=WEAVIATE_CLASS, primary_key="docLink").expand(dfs=[split_md_docs]) + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs]) + ) ask_astro_load_slack() diff --git a/airflow/dags/ingestion/ask-astro-load-stackoverflow.py b/airflow/dags/ingestion/ask-astro-load-stackoverflow.py index 28e43993..66f24a33 100644 --- a/airflow/dags/ingestion/ask-astro-load-stackoverflow.py +++ b/airflow/dags/ingestion/ask-astro-load-stackoverflow.py @@ -1,44 +1,61 @@ import os from datetime import datetime -from include.tasks import ingest, split +from include.tasks import split from include.tasks.extract import stack_overflow +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) stackoverflow_cutoff_date = "2021-09-01" stackoverflow_tags = [ "airflow", ] +default_args = {"retries": 3, "retry_delay": 30} -@dag(schedule_interval=None, start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) +schedule_interval = "0 5 * * *" if ask_astro_env == "prod" else None + + +@dag( + schedule_interval=schedule_interval, + start_date=datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_stackoverflow(): """ - This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported - data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator + This DAG performs incremental load for any new docs. Initial load via ask_astro_load_bulk imported + data from a point-in-time data capture. By using the upsert logic of the weaviate_import decorator any existing documents that have been updated will be removed and re-added. """ stack_overflow_docs = ( - task(stack_overflow.extract_stack_overflow_archive, retries=3) + task(stack_overflow.extract_stack_overflow_archive) .partial(stackoverflow_cutoff_date=stackoverflow_cutoff_date) .expand(tag=stackoverflow_tags) ) split_md_docs = task(split.split_markdown).expand(dfs=[stack_overflow_docs]) - task.weaviate_import( - ingest.import_upsert_data, - weaviate_conn_id=_WEAVIATE_CONN_ID, - retries=10, - retry_delay=30, - ).partial(class_name=WEAVIATE_CLASS, primary_key="docLink").expand(dfs=[split_md_docs]) + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs]) + ) ask_astro_load_stackoverflow() diff --git a/airflow/dags/ingestion/ask-astro-load.py b/airflow/dags/ingestion/ask-astro-load.py index 5fe5f33b..0cdb554c 100644 --- a/airflow/dags/ingestion/ask-astro-load.py +++ b/airflow/dags/ingestion/ask-astro-load.py @@ -1,21 +1,27 @@ +from __future__ import annotations + +import datetime +import json +import logging import os -from datetime import datetime -from textwrap import dedent +from pathlib import Path import pandas as pd -from include.tasks import ingest, split -from include.tasks.extract import blogs, github, registry, stack_overflow -from weaviate_provider.operators.weaviate import WeaviateCheckSchemaBranchOperator, WeaviateCreateSchemaOperator +from include.tasks import split +from include.tasks.extract import airflow_docs, blogs, github, registry, stack_overflow +from include.tasks.extract.utils.weaviate.ask_astro_weaviate_hook import AskAstroWeaviateHook from airflow.decorators import dag, task seed_baseline_url = None - -ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "") +stackoverflow_cutoff_date = "2021-09-01" +ask_astro_env = os.environ.get("ASK_ASTRO_ENV", "dev") _WEAVIATE_CONN_ID = f"weaviate_{ask_astro_env}" _GITHUB_CONN_ID = "github_ro" -WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsProd") +WEAVIATE_CLASS = os.environ.get("WEAVIATE_CLASS", "DocsDev") + +ask_astro_weaviate_hook = AskAstroWeaviateHook(_WEAVIATE_CONN_ID) markdown_docs_sources = [ {"doc_dir": "learn", "repo_base": "astronomer/docs"}, @@ -23,9 +29,6 @@ {"doc_dir": "", "repo_base": "OpenLineage/docs"}, {"doc_dir": "", "repo_base": "OpenLineage/OpenLineage"}, ] -rst_docs_sources = [ - {"doc_dir": "docs", "repo_base": "apache/airflow", "exclude_docs": ["changelog.rst", "commits.rst"]}, -] code_samples_sources = [ {"doc_dir": "code-samples", "repo_base": "astronomer/docs"}, ] @@ -42,53 +45,90 @@ } ] -blog_cutoff_date = datetime.strptime("2023-01-19", "%Y-%m-%d") +blog_cutoff_date = datetime.date(2023, 1, 19) -stackoverflow_cutoff_date = "2021-09-01" -stackoverflow_tags = [ - "airflow", -] +stackoverflow_tags = [{"airflow": "2021-09-01"}] -schedule_interval = "@daily" if ask_astro_env == "prod" else None +airflow_docs_base_url = "https://airflow.apache.org/docs/" +default_args = {"retries": 3, "retry_delay": 30} +logger = logging.getLogger("airflow.task") -@dag(schedule_interval=schedule_interval, start_date=datetime(2023, 9, 27), catchup=False, is_paused_upon_creation=True) + +@dag( + schedule_interval=None, + start_date=datetime.datetime(2023, 9, 27), + catchup=False, + is_paused_upon_creation=True, + default_args=default_args, +) def ask_astro_load_bulk(): """ This DAG performs the initial load of data from sources. If seed_baseline_url (set above) points to a parquet file with pre-embedded data it will be - ingested. Otherwise new data is extracted, split, embedded and ingested. + ingested. Otherwise, new data is extracted, split, embedded and ingested. - The first time this DAG runs (without seeded baseline) it will take at lease 20 minutes to + The first time this DAG runs (without seeded baseline) it will take at lease 90 minutes to extract data from all sources. Extracted data is then serialized to disk in the project directory in order to simplify later iterations of ingest with different chunking strategies, vector databases or embedding models. """ - _check_schema = WeaviateCheckSchemaBranchOperator( - task_id="check_schema", - weaviate_conn_id=_WEAVIATE_CONN_ID, - class_object_data="file://include/data/schema.json", - follow_task_ids_if_true=["check_seed_baseline"], - follow_task_ids_if_false=["create_schema"], - doc_md=dedent( - """ - As the Weaviate schema may change over time this task checks if the most - recent schema is in place before ingesting.""" - ), - ) + @task + def get_schema_and_process(schema_file: str) -> list: + """ + Retrieves and processes the schema from a given JSON file. - _create_schema = WeaviateCreateSchemaOperator( - task_id="create_schema", - weaviate_conn_id=_WEAVIATE_CONN_ID, - class_object_data="file://include/data/schema.json", - existing="ignore", - ) + :param schema_file: path to the schema JSON file + """ + try: + class_objects = json.loads(Path(schema_file).read_text()) + except FileNotFoundError: + logger.error(f"Schema file {schema_file} not found.") + raise + except json.JSONDecodeError: + logger.error(f"Invalid JSON in the schema file {schema_file}.") + raise + + class_objects["classes"][0].update({"class": WEAVIATE_CLASS}) + + if "classes" not in class_objects: + class_objects = [class_objects] + else: + class_objects = class_objects["classes"] + + logger.info("Schema processing completed.") + return class_objects + + @task.branch + def check_schema(class_objects: list) -> list[str]: + """ + Check if the current schema includes the requested schema. The current schema could be a superset + so check_schema_subset is used recursively to check that all objects in the requested schema are + represented in the current schema. + + :param class_objects: Class objects to be checked against the current schema. + """ + return ( + ["check_seed_baseline"] + if ask_astro_weaviate_hook.check_schema(class_objects=class_objects) + else ["create_schema"] + ) + + @task(trigger_rule="none_failed") + def create_schema(class_objects: list, existing: str = "ignore") -> None: + """ + Creates or updates the schema in Weaviate based on the given class objects. + + :param class_objects: A list of class objects for schema creation or update. + :param existing: Strategy to handle existing classes ('ignore' or 'replace'). Defaults to 'ignore'. + """ + ask_astro_weaviate_hook.create_schema(class_objects=class_objects, existing=existing) @task.branch(trigger_rule="none_failed") - def check_seed_baseline() -> str: + def check_seed_baseline(seed_baseline_url: str = None) -> str | set: """ Check if we will ingest from pre-embedded baseline or extract each source. """ @@ -96,19 +136,18 @@ def check_seed_baseline() -> str: if seed_baseline_url is not None: return "import_baseline" else: - return [ + return { "extract_github_markdown", - "extract_github_rst", + "extract_airflow_docs", "extract_stack_overflow", - # "extract_slack_archive", "extract_astro_registry_cell_types", "extract_github_issues", "extract_astro_blogs", "extract_github_python", "extract_astro_registry_dags", - ] + } - @task(trigger_rule="none_skipped") + @task(trigger_rule="none_failed") def extract_github_markdown(source: dict): try: df = pd.read_parquet(f"include/data/{source['repo_base']}/{source['doc_dir']}.parquet") @@ -118,28 +157,28 @@ def extract_github_markdown(source: dict): return df - @task(trigger_rule="none_skipped") - def extract_github_rst(source: dict): + @task(trigger_rule="none_failed") + def extract_github_python(source: dict): try: df = pd.read_parquet(f"include/data/{source['repo_base']}/{source['doc_dir']}.parquet") except Exception: - df = github.extract_github_rst(source=source, github_conn_id=_GITHUB_CONN_ID) + df = github.extract_github_python(source, _GITHUB_CONN_ID) df.to_parquet(f"include/data/{source['repo_base']}/{source['doc_dir']}.parquet") return df @task(trigger_rule="none_failed") - def extract_github_python(source: dict): + def extract_airflow_docs(): try: - df = pd.read_parquet(f"include/data/{source['repo_base']}/{source['doc_dir']}.parquet") + df = pd.read_parquet("include/data/apache/airflow/docs.parquet") except Exception: - df = github.extract_github_python(source, _GITHUB_CONN_ID) - df.to_parquet(f"include/data/{source['repo_base']}/{source['doc_dir']}.parquet") + df = airflow_docs.extract_airflow_docs(docs_base_url=airflow_docs_base_url)[0] + df.to_parquet("include/data/apache/airflow/docs.parquet") - return df + return [df] @task(trigger_rule="none_failed") - def extract_stack_overflow(tag: str, stackoverflow_cutoff_date: str): + def extract_stack_overflow(tag: str, stackoverflow_cutoff_date: str = stackoverflow_cutoff_date): try: df = pd.read_parquet("include/data/stack_overflow/base.parquet") except Exception: @@ -150,16 +189,6 @@ def extract_stack_overflow(tag: str, stackoverflow_cutoff_date: str): return df - # @task(trigger_rule="none_failed") - # def extract_slack_archive(source: dict): - # try: - # df = pd.read_parquet("include/data/slack/troubleshooting.parquet") - # except Exception: - # df = slack.extract_slack_archive(source) - # df.to_parquet("include/data/slack/troubleshooting.parquet") - # - # return df - @task(trigger_rule="none_failed") def extract_github_issues(repo_base: str): try: @@ -200,66 +229,66 @@ def extract_astro_blogs(): return [df] - _check_seed_baseline = check_seed_baseline() - md_docs = extract_github_markdown.expand(source=markdown_docs_sources) - - rst_docs = extract_github_rst.expand(source=rst_docs_sources) - issues_docs = extract_github_issues.expand(repo_base=issues_docs_sources) - - stackoverflow_docs = extract_stack_overflow.partial(stackoverflow_cutoff_date=stackoverflow_cutoff_date).expand( - tag=stackoverflow_tags - ) - - # slack_docs = extract_slack_archive.expand(source=slack_channel_sources) - + stackoverflow_docs = extract_stack_overflow.expand(tag=stackoverflow_tags) registry_cells_docs = extract_astro_registry_cell_types() - blogs_docs = extract_astro_blogs() - registry_dags_docs = extract_astro_registry_dags() + code_samples = extract_github_python.expand(source=code_samples_sources) + _airflow_docs = extract_airflow_docs() - code_samples = extract_github_python.partial().expand(source=code_samples_sources) + _get_schema = get_schema_and_process(schema_file="include/data/schema.json") + _check_schema = check_schema(class_objects=_get_schema) + _create_schema = create_schema(class_objects=_get_schema) + _check_seed_baseline = check_seed_baseline(seed_baseline_url=seed_baseline_url) markdown_tasks = [ md_docs, - rst_docs, issues_docs, stackoverflow_docs, - # slack_docs, blogs_docs, registry_cells_docs, ] + html_tasks = [_airflow_docs] + python_code_tasks = [registry_dags_docs, code_samples] split_md_docs = task(split.split_markdown).expand(dfs=markdown_tasks) split_code_docs = task(split.split_python).expand(dfs=python_code_tasks) - task.weaviate_import(ingest.import_data, weaviate_conn_id=_WEAVIATE_CONN_ID, retries=10, retry_delay=30).partial( - class_name=WEAVIATE_CLASS - ).expand(dfs=[split_md_docs, split_code_docs]) + split_html_docs = task(split.split_html).expand(dfs=html_tasks) + + _import_data = ( + task(ask_astro_weaviate_hook.ingest_data, retries=10) + .partial( + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + batch_params={"batch_size": 1000}, + verbose=True, + ) + .expand(dfs=[split_md_docs, split_code_docs, split_html_docs]) + ) - _import_baseline = task.weaviate_import( - ingest.import_baseline, trigger_rule="none_failed", weaviate_conn_id=_WEAVIATE_CONN_ID - )(class_name=WEAVIATE_CLASS, seed_baseline_url=seed_baseline_url) + _import_baseline = task(ask_astro_weaviate_hook.import_baseline, trigger_rule="none_failed")( + seed_baseline_url=seed_baseline_url, + class_name=WEAVIATE_CLASS, + existing="upsert", + doc_key="docLink", + uuid_column="id", + vector_column="vector", + batch_params={"batch_size": 1000}, + verbose=True, + ) _check_schema >> [_check_seed_baseline, _create_schema] - _create_schema >> markdown_tasks + python_code_tasks + [_check_seed_baseline] - - _check_seed_baseline >> issues_docs >> rst_docs >> md_docs - # ( - # _check_seed_baseline - # >> [stackoverflow_docs, slack_docs, blogs_docs, registry_cells_docs, _import_baseline] + python_code_tasks - # ) + _create_schema >> markdown_tasks + python_code_tasks + html_tasks + [_check_seed_baseline] - ( - _check_seed_baseline - >> [stackoverflow_docs, blogs_docs, registry_cells_docs, _import_baseline] + python_code_tasks - ) + _check_seed_baseline >> markdown_tasks + python_code_tasks + html_tasks + [_import_baseline] ask_astro_load_bulk() diff --git a/airflow/dags/monitor/monitor.py b/airflow/dags/monitor/monitor.py index c38cd631..0cb7b2c0 100644 --- a/airflow/dags/monitor/monitor.py +++ b/airflow/dags/monitor/monitor.py @@ -9,12 +9,12 @@ import firebase_admin import requests -from weaviate_provider.hooks.weaviate import WeaviateHook from airflow.decorators import dag, task from airflow.exceptions import AirflowException from airflow.models import TaskInstance from airflow.providers.slack.operators.slack_webhook import SlackWebhookOperator +from airflow.providers.weaviate.hooks.weaviate import WeaviateHook from airflow.utils.context import Context from airflow.utils.trigger_rule import TriggerRule @@ -204,7 +204,7 @@ def check_weaviate_status(**context) -> None: """ try: weaviate_hook = WeaviateHook(weaviate_conn_id) - client = weaviate_hook.get_conn() + client = weaviate_hook.get_client() schemas = client.query.aggregate(weaviate_class).with_meta_count().do() schema = schemas["data"]["Aggregate"][weaviate_class] count = 0 diff --git a/airflow/include/__init__.py b/airflow/include/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/airflow/include/airflow_provider_weaviate-0.0.1-py3-none-any.whl b/airflow/include/airflow_provider_weaviate-0.0.1-py3-none-any.whl deleted file mode 100644 index ae2d05b67ba3b2cbbe752719ae31a388132d2e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957331 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%0D`20w)B1e*{q?p=St;9` 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

vu2PJnxx^yO?nK7k^6z@|VUle5H_#?A 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Ÿ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 BQ`i6i diff --git a/airflow/include/data/apache/apache_license.rst b/airflow/include/data/apache/apache_license.rst deleted file mode 100644 index 106592bd..00000000 --- a/airflow/include/data/apache/apache_license.rst +++ /dev/null @@ -1,16 +0,0 @@ - .. Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - .. http://www.apache.org/licenses/LICENSE-2.0 - - .. Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. diff --git a/airflow/include/data/schema.json b/airflow/include/data/schema.json index a10e6233..d49b9a6f 100644 --- a/airflow/include/data/schema.json +++ b/airflow/include/data/schema.json @@ -54,6 +54,7 @@ "name": "content", "description": "Document content", "dataType": ["text"], + "tokenization": "word", "moduleConfig": { "text2vec-openai": { "skip": "False", diff --git a/airflow/include/tasks/__init__.py b/airflow/include/tasks/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/airflow/include/tasks/extract/__init__.py b/airflow/include/tasks/extract/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/airflow/include/tasks/extract/airflow_docs.py b/airflow/include/tasks/extract/airflow_docs.py new file mode 100644 index 00000000..5c0fbd98 --- /dev/null +++ b/airflow/include/tasks/extract/airflow_docs.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +import re +import urllib.parse + +import pandas as pd +import requests +from bs4 import BeautifulSoup +from weaviate.util import generate_uuid5 + +from include.tasks.extract.utils.html_helpers import get_all_links + + +def extract_airflow_docs(docs_base_url: str) -> list[pd.DataFrame]: + """ + This task scrapes docs from the Airflow website and returns a list of pandas dataframes. Return + type is a list in order to map to upstream dynamic tasks. The code recursively generates a list + of html files relative to 'docs_base_url' and then extracts each as text. + + Note: Only the (class_: body, role: main) tag and children are extracted. + + Note: This code will also pickup https://airflow.apache.org/howto/* + which are also referenced in the docs pages. These are useful for Ask Astro and also they are relatively few + pages so we leave them in. + + param docs_base_url: Base URL to start extract. + type docs_base_url: str + + The returned data includes the following fields: + 'docSource': 'apache/airflow/docs' + 'docLink': URL for the page + 'content': HTML content of the page + 'sha': A UUID from the other fields + """ + + # we exclude the following docs which are not useful and/or too large for easy processing. + exclude_docs = [ + "changelog.html", + "commits.html", + "docs/apache-airflow/stable/release_notes.html", + "docs/stable/release_notes.html", + "_api", + "_modules", + "installing-providers-from-sources.html", + "apache-airflow/1.", + "apache-airflow/2.", + "example", + "cli-and-env-variables-ref.html", + ] + + docs_url_parts = urllib.parse.urlsplit(docs_base_url) + docs_url_base = f"{docs_url_parts.scheme}://{docs_url_parts.netloc}" + + all_links = {docs_base_url} + get_all_links(url=list(all_links)[0], all_links=all_links, exclude_docs=exclude_docs) + + # make sure we didn't accidentally pickup any unrelated links in recursion + non_doc_links = {link if docs_url_base not in link else "" for link in all_links} + docs_links = all_links - non_doc_links + + df = pd.DataFrame(docs_links, columns=["docLink"]) + + df["html_content"] = df["docLink"].apply(lambda x: requests.get(x).content) + + df["content"] = df["html_content"].apply( + lambda x: str(BeautifulSoup(x, "html.parser").find(class_="body", role="main")) + ) + df["content"] = df["content"].apply(lambda x: re.sub("ΒΆ", "", x)) + + df["sha"] = df["content"].apply(generate_uuid5) + df["docSource"] = "apache/airflow/docs" + df.reset_index(drop=True, inplace=True) + + # column order matters for uuid generation + df = df[["docSource", "sha", "content", "docLink"]] + + return [df] diff --git a/airflow/include/tasks/extract/blogs.py b/airflow/include/tasks/extract/blogs.py index bec05921..1d8d3cd1 100644 --- a/airflow/include/tasks/extract/blogs.py +++ b/airflow/include/tasks/extract/blogs.py @@ -48,7 +48,7 @@ def extract_astro_blogs(blog_cutoff_date: datetime) -> list[pd.DataFrame]: df = pd.DataFrame(zip(links, dates), columns=["docLink", "date"]) df["date"] = pd.to_datetime(df["date"]).dt.date - df = df[df["date"] > blog_cutoff_date.date()] + df = df[df["date"] > blog_cutoff_date] df.drop("date", inplace=True, axis=1) df.drop_duplicates(inplace=True) diff --git a/airflow/include/tasks/extract/slack.py b/airflow/include/tasks/extract/slack.py index 17b36093..9bb61215 100644 --- a/airflow/include/tasks/extract/slack.py +++ b/airflow/include/tasks/extract/slack.py @@ -5,10 +5,10 @@ import numpy as np import pandas as pd import requests -from include.tasks.extract.utils.slack_helpers import get_slack_replies from weaviate.util import generate_uuid5 from airflow.providers.slack.hooks.slack import SlackHook +from include.tasks.extract.utils.slack_helpers import get_slack_replies slack_archive_host = "apache-airflow.slack-archives.org" slack_base_url = "https://{slack_archive_host}/v1/messages?size={size}&team={team}&channel={channel}" diff --git a/airflow/include/tasks/extract/stack_overflow.py b/airflow/include/tasks/extract/stack_overflow.py index 4f2cc0f9..264edf26 100644 --- a/airflow/include/tasks/extract/stack_overflow.py +++ b/airflow/include/tasks/extract/stack_overflow.py @@ -1,13 +1,14 @@ from __future__ import annotations import pandas as pd +from weaviate.util import generate_uuid5 + from include.tasks.extract.utils.stack_overflow_helpers import ( process_stack_answers, process_stack_comments, process_stack_posts, process_stack_questions, ) -from weaviate.util import generate_uuid5 def extract_stack_overflow_archive(tag: str, stackoverflow_cutoff_date: str) -> pd.DataFrame: diff --git a/airflow/include/tasks/extract/utils/__init__.py b/airflow/include/tasks/extract/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/airflow/include/tasks/extract/utils/html_helpers.py b/airflow/include/tasks/extract/utils/html_helpers.py new file mode 100644 index 00000000..34029303 --- /dev/null +++ b/airflow/include/tasks/extract/utils/html_helpers.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +import logging +import urllib.parse +from time import sleep + +import requests +from bs4 import BeautifulSoup + + +def get_links(url: str, exclude_docs: list) -> set: + """ + Given a HTML url this function scrapes the page for any HTML links ( tags) and returns a set of links which: + a) starts with the same base (ie. scheme + netloc) + b) is a relative link from the currently read page + Relative links are converted to absolute links.Note that the absolute link may not be unique due to redirects. + + :param url: The url to scrape for links. + :param exclude_docs: A list of strings to exclude from the returned links. + """ + response = requests.get(url) + data = response.text + soup = BeautifulSoup(data, "lxml") + + url_parts = urllib.parse.urlsplit(url) + url_base = f"{url_parts.scheme}://{url_parts.netloc}" + + links = set() + for link in soup.find_all("a"): + link_url = link.get("href") + + if link_url.endswith(".html"): + if link_url.startswith(url_base) and not any(substring in link_url for substring in exclude_docs): + links.add(link_url) + elif not link_url.startswith("http"): + absolute_url = urllib.parse.urljoin(url, link_url) + if not any(substring in absolute_url for substring in exclude_docs): + links.add(absolute_url) + + return links + + +def get_all_links(url: str, all_links: set, exclude_docs: list, retry_count: int = 0, max_retries: int = 5): + """ + Recursive function to find all sub-pages of a webpage. + + :param url: The url to scrape for links. + :param all_links: A set of all links found so far. + :param exclude_docs: A list of strings to exclude from the returned links. + :param retry_count: Current retry attempt. + :param max_retries: Maximum number of retries allowed for a single URL. + """ + try: + links = get_links(url=url, exclude_docs=exclude_docs) + for link in links: + # check if the linked page actually exists and get the redirect which is hopefully unique + + response = requests.head(link, allow_redirects=True) + if response.ok: + redirect_url = response.url + if redirect_url not in all_links: + logging.info(redirect_url) + all_links.add(redirect_url) + get_all_links(url=redirect_url, all_links=all_links, exclude_docs=exclude_docs) + except requests.exceptions.ConnectionError as ce: + if retry_count < max_retries: + logging.warning(f"Connection error for {url}: {ce}. Retrying ({retry_count + 1}/{max_retries})") + sleep(2**retry_count) # Exponential backoff + get_all_links( + url=url, + all_links=all_links, + exclude_docs=exclude_docs, + retry_count=retry_count + 1, + max_retries=max_retries, + ) + else: + logging.warning(f"Max retries reached for {url}. Skipping this URL.") diff --git a/airflow/include/tasks/extract/utils/stack_overflow_helpers.py b/airflow/include/tasks/extract/utils/stack_overflow_helpers.py index cc1b7843..9b171e6e 100644 --- a/airflow/include/tasks/extract/utils/stack_overflow_helpers.py +++ b/airflow/include/tasks/extract/utils/stack_overflow_helpers.py @@ -20,7 +20,7 @@ {body}{answer_comments}""" ) -comment_template = "{user} on {date} [Score: {score}]: {body}\n" +comment_template = "\n{user} on {date} [Score: {score}]: {body}\n" post_types = { "1": "Question", diff --git a/airflow/include/tasks/extract/utils/weaviate/__init__.py b/airflow/include/tasks/extract/utils/weaviate/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/airflow/include/tasks/extract/utils/weaviate/ask_astro_weaviate_hook.py b/airflow/include/tasks/extract/utils/weaviate/ask_astro_weaviate_hook.py new file mode 100644 index 00000000..34764ad8 --- /dev/null +++ b/airflow/include/tasks/extract/utils/weaviate/ask_astro_weaviate_hook.py @@ -0,0 +1,488 @@ +from __future__ import annotations + +import logging +from typing import Any + +import pandas as pd +import requests +from weaviate.exceptions import UnexpectedStatusCodeException +from weaviate.util import generate_uuid5 + +from airflow.exceptions import AirflowException +from airflow.providers.weaviate.hooks.weaviate import WeaviateHook + + +class AskAstroWeaviateHook(WeaviateHook): + """ + Extends the WeaviateHook to include specific methods for handling Ask-Astro. + + This hook will be directly utilize the functionalities provided by Weaviate providers in + upcoming releases of the `apache-airflow-providers-weaviate` package. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.logger = logging.getLogger("airflow.task") + self.client = self.get_client() + + def compare_schema_subset(self, class_object: Any, class_schema: Any) -> bool: + """ + Recursively check if requested schema/object is a subset of the current schema. + + :param class_object: The class object to check against current schema + :param class_schema: The current schema class object + """ + + # Direct equality check + if class_object == class_schema: + return True + + # Type mismatch early return + if type(class_object) != type(class_schema): + return False + + # Dictionary comparison + if isinstance(class_object, dict): + return all( + k in class_schema and self.compare_schema_subset(v, class_schema[k]) for k, v in class_object.items() + ) + + # List or Tuple comparison + if isinstance(class_object, (list, tuple)): + return len(class_object) == len(class_schema) and all( + self.compare_schema_subset(obj, sch) for obj, sch in zip(class_object, class_schema) + ) + + # Default case for non-matching types or unsupported types + return False + + def is_class_missing(self, class_object: dict) -> bool: + """ + Checks if a class is missing from the schema. + + :param class_object: Class object to be checked against the current schema. + """ + try: + class_schema = self.client.schema.get(class_object.get("class", "")) + return not self.compare_schema_subset(class_object=class_object, class_schema=class_schema) + except UnexpectedStatusCodeException as e: + return e.status_code == 404 and "with response body: None." in e.message + except Exception as e: + error_msg = f"Error during schema check {e}" + self.logger.error(error_msg) + raise ValueError(error_msg) + + def check_schema(self, class_objects: list) -> bool: + """ + Verifies if the current schema includes the requested schema. + + :param class_objects: Class objects to be checked against the current schema. + """ + try: + missing_objects = [obj["class"] for obj in class_objects if self.is_class_missing(obj)] + + if missing_objects: + self.logger.warning(f"Classes {missing_objects} are not in the current schema.") + return False + else: + self.logger.info("All classes are present in the current schema.") + return True + except Exception as e: + error_msg = f"Error during schema check {e}" + self.logger.error(error_msg) + raise ValueError(error_msg) + + def create_schema(self, class_objects: list, existing: str = "ignore") -> None: + """ + Creates or updates the schema in Weaviate based on the given class objects. + + :param class_objects: A list of class objects for schema creation or update. + :param existing: Strategy to handle existing classes ('ignore' or 'replace'). Defaults to 'ignore'. + """ + for class_object in class_objects: + class_name = class_object.get("class", "") + self.logger.info(f"Processing schema for class: {class_name}") + + try: + current_class = self.client.schema.get(class_name=class_name) + except Exception as e: + self.logger.error(f"Error retrieving current class schema: {e}") + current_class = None + if current_class is not None and existing == "replace": + self.logger.info(f"Replacing existing class {class_name}") + self.client.schema.delete_class(class_name=class_name) + + if current_class is None or existing == "replace": + self.client.schema.create_class(class_object) + self.logger.info(f"Created/updated class {class_name}") + + def generate_uuids( + self, + df: pd.DataFrame, + class_name: str, + column_subset: list[str] | None = None, + vector_column: str | None = None, + uuid_column: str | None = None, + ) -> tuple[pd.DataFrame, str]: + """ + Adds UUIDs to a DataFrame, useful for upsert operations where UUIDs must be known before ingestion. + By default, UUIDs are generated using a custom function if 'uuid_column' is not specified. + The function can potentially ingest the same data multiple times with different UUIDs. + + :param df: A dataframe with data to generate a UUID from. + :param class_name: The name of the class use as part of the uuid namespace. + :param uuid_column: Name of the column to create. Default is 'id'. + :param column_subset: A list of columns to use for UUID generation. By default, all columns except + vector_column will be used. + :param vector_column: Name of the column containing the vector data. If specified the vector will be + removed prior to generating the uuid. + """ + column_names = df.columns.to_list() + + column_subset = column_subset or column_names + column_subset.sort() + + if uuid_column is None: + self.logger.info(f"No uuid_column provided. Generating UUIDs as column name {uuid_column}.") + df = df[column_names] + if "id" in column_names: + raise AirflowException("Property 'id' already in dataset. Consider renaming or specify 'uuid_column'.") + else: + uuid_column = "id" + + if uuid_column in column_names: + raise AirflowException( + f"Property {uuid_column} already in dataset. Consider renaming or specify a different 'uuid_column'." + ) + + df[uuid_column] = ( + df[column_subset] + .drop(columns=[vector_column], inplace=False, errors="ignore") + .apply(lambda row: generate_uuid5(identifier=row.to_dict(), namespace=class_name), axis=1) + ) + + return df, uuid_column + + def identify_upsert_targets( + self, df: pd.DataFrame, class_name: str, doc_key: str, uuid_column: str + ) -> pd.DataFrame: + """ + Handles the 'upsert' operation for data ingestion. + + :param df: The DataFrame containing the data to be upserted. + :param class_name: The name of the class to import data. + :param doc_key: The document key used for upsert operation. This is a property of the data that + uniquely identifies all chunks associated with one document. + :param uuid_column: The column name containing the UUID. + """ + if doc_key is None or doc_key not in df.columns: + raise AirflowException("Specified doc_key is not specified or not in the dataset.") + + if uuid_column is None or uuid_column not in df.columns: + raise AirflowException("Specified uuid_column is not specified or not in the dataset.") + + df = df.drop_duplicates(subset=[doc_key, uuid_column], keep="first") + + current_schema = self.client.schema.get(class_name=class_name) + doc_key_schema = [prop for prop in current_schema["properties"] if prop["name"] == doc_key] + + if not doc_key_schema: + raise AirflowException("doc_key does not exist in current schema.") + elif doc_key_schema[0]["tokenization"] != "field": + raise AirflowException("Tokenization for provided doc_key is not set to 'field'. Cannot upsert safely.") + + ids_df = df.groupby(doc_key)[uuid_column].apply(set).reset_index(name="new_ids") + ids_df["existing_ids"] = ids_df[doc_key].apply( + lambda x: self._query_objects(value=x, doc_key=doc_key, uuid_column=uuid_column, class_name=class_name) + ) + + ids_df["objects_to_insert"] = ids_df.apply(lambda x: list(x.new_ids.difference(x.existing_ids)), axis=1) + ids_df["objects_to_delete"] = ids_df.apply(lambda x: list(x.existing_ids.difference(x.new_ids)), axis=1) + ids_df["unchanged_objects"] = ids_df.apply(lambda x: x.new_ids.intersection(x.existing_ids), axis=1) + + return ids_df[[doc_key, "objects_to_insert", "objects_to_delete", "unchanged_objects"]] + + def batch_ingest( + self, + df: pd.DataFrame, + class_name: str, + uuid_column: str, + existing: str, + vector_column: str | None = None, + batch_params: dict = {}, + verbose: bool = False, + ) -> (list, Any): + """ + Processes the DataFrame and batches the data for ingestion into Weaviate. + + :param df: DataFrame containing the data to be ingested. + :param class_name: The name of the class in Weaviate to which data will be ingested. + :param uuid_column: Name of the column containing the UUID. + :param vector_column: Name of the column containing the vector data. + :param batch_params: Parameters for batch configuration. + :param existing: Strategy to handle existing data ('skip', 'replace', 'upsert'). + :param verbose: Whether to print verbose output. + """ + batch = self.client.batch.configure(**batch_params) + batch_errors = [] + + for row_id, row in df.iterrows(): + data_object = row.to_dict() + uuid = data_object.pop(uuid_column) + vector = data_object.pop(vector_column, None) + + try: + if self.client.data_object.exists(uuid=uuid, class_name=class_name) is True: + if existing == "skip": + if verbose is True: + self.logger.warning(f"UUID {uuid} exists. Skipping.") + continue + elif existing == "replace": + # Default for weaviate is replace existing + if verbose is True: + self.logger.warning(f"UUID {uuid} exists. Overwriting.") + + except Exception as e: + if verbose: + self.logger.error(f"Failed to add row {row_id} with UUID {uuid}. Error: {e}") + batch_errors.append({"uuid": uuid, "result": {"errors": str(e)}}) + continue + + try: + added_row = batch.add_data_object( + class_name=class_name, uuid=uuid, data_object=data_object, vector=vector + ) + if verbose is True: + self.logger.info(f"Added row {row_id} with UUID {added_row} for batch import.") + + except Exception as e: + if verbose: + self.logger.error(f"Failed to add row {row_id} with UUID {uuid}. Error: {e}") + batch_errors.append({"uuid": uuid, "result": {"errors": str(e)}}) + + results = batch.create_objects() + + if len(results) > 0: + batch_errors += self.process_batch_errors(results=results, verbose=verbose) + + return batch_errors + + def process_batch_errors(self, results: list, verbose: bool) -> list: + """ + Processes the results from batch operation and collects any errors. + + :param results: Results from the batch operation. + :param verbose: Flag to enable verbose logging. + """ + errors = [] + for item in results: + if "errors" in item["result"]: + item_error = {"uuid": item["id"], "errors": item["result"]["errors"]} + if verbose: + self.logger.info( + f"Error occurred in batch process for {item['id']} with error {item['result']['errors']}" + ) + errors.append(item_error) + return errors + + def handle_upsert_rollback( + self, objects_to_upsert: pd.DataFrame, batch_errors: list, class_name: str, verbose: bool + ) -> list: + """ + Handles rollback of inserts in case of errors during upsert operation. + + :param objects_to_upsert: Dictionary of objects to upsert. + :param class_name: Name of the class in Weaviate. + :param verbose: Flag to enable verbose logging. + """ + rollback_errors = [] + + error_uuids = {error["uuid"] for error in batch_errors} + + objects_to_upsert["rollback_doc"] = objects_to_upsert.objects_to_insert.apply( + lambda x: any(error_uuids.intersection(x)) + ) + + objects_to_upsert["successful_doc"] = objects_to_upsert.objects_to_insert.apply( + lambda x: error_uuids.isdisjoint(x) + ) + + rollback_objects = objects_to_upsert[objects_to_upsert.rollback_doc].objects_to_insert.to_list() + rollback_objects = {item for sublist in rollback_objects for item in sublist} + + delete_objects = objects_to_upsert[objects_to_upsert.successful_doc].objects_to_delete.to_list() + delete_objects = {item for sublist in delete_objects for item in sublist} + + for uuid in rollback_objects: + try: + if self.client.data_object.exists(uuid=uuid, class_name=class_name): + self.logger.info(f"Removing id {uuid} for rollback.") + self.client.data_object.delete(uuid=uuid, class_name=class_name, consistency_level="ALL") + elif verbose: + self.logger.info(f"UUID {uuid} does not exist. Skipping deletion during rollback.") + except Exception as e: + rollback_errors.append({"uuid": uuid, "result": {"errors": str(e)}}) + if verbose: + self.logger.info(f"Error in rolling back id {uuid}. Error: {str(e)}") + + for uuid in delete_objects: + try: + if self.client.data_object.exists(uuid=uuid, class_name=class_name): + if verbose: + self.logger.info(f"Deleting id {uuid} for successful upsert.") + self.client.data_object.delete(uuid=uuid, class_name=class_name) + elif verbose: + self.logger.info(f"UUID {uuid} does not exist. Skipping deletion.") + except Exception as e: + rollback_errors.append({"uuid": uuid, "result": {"errors": str(e)}}) + if verbose: + self.logger.info(f"Error in rolling back id {uuid}. Error: {str(e)}") + + return rollback_errors + + def ingest_data( + self, + dfs: list[pd.DataFrame] | pd.DataFrame, + class_name: str, + existing: str = "skip", + doc_key: str = None, + uuid_column: str = None, + vector_column: str = None, + batch_params: dict = None, + verbose: bool = True, + ) -> list: + """ + Ingests data into Weaviate, handling upserts and rollbacks, and returns a list of objects that failed to import. + This function ingests data from pandas DataFrame(s) into a specified class in Weaviate. It supports various + modes of handling existing data (upsert, skip, replace). Upsert logic uses 'doc_key' as a unique document + identifier, enabling document-level atomicity during ingestion. Rollback is performed for any document + encountering errors during ingest. The function returns a list of objects that failed to import for further + handling. + + :param dfs: A single pandas DataFrame or a list of pandas DataFrames to be ingested. + :param class_name: Name of the class in Weaviate schema where data is to be ingested. + :param existing: Strategy for handling existing data: 'upsert', 'skip', or 'replace'. Default is 'skip'. + :param doc_key: Column in DataFrame uniquely identifying each document, required for 'upsert' operations. + :param uuid_column: Column with pre-generated UUIDs. If not provided, UUIDs will be generated. + :param vector_column: Column with embedding vectors for pre-embedded data. + :param batch_params: Additional parameters for Weaviate batch configuration. + :param verbose: Flag to enable verbose output during the ingestion process. + """ + + global objects_to_upsert + if existing not in ["skip", "replace", "upsert"]: + raise AirflowException("Invalid parameter for 'existing'. Choices are 'skip', 'replace', 'upsert'") + + df = pd.concat(dfs, ignore_index=True) + + if uuid_column is None: + df, uuid_column = self.generate_uuids( + df=df, class_name=class_name, vector_column=vector_column, uuid_column=uuid_column + ) + + if existing == "upsert": + objects_to_upsert = self.identify_upsert_targets( + df=df, class_name=class_name, doc_key=doc_key, uuid_column=uuid_column + ) + + objects_to_insert = {item for sublist in objects_to_upsert.objects_to_insert.tolist() for item in sublist} + + # subset df with only objects that need to be inserted + df = df[df[uuid_column].isin(objects_to_insert)] + + self.logger.info(f"Passing {len(df)} objects for ingest.") + + batch_errors = self.batch_ingest( + df=df, + class_name=class_name, + uuid_column=uuid_column, + vector_column=vector_column, + batch_params=batch_params, + existing=existing, + verbose=verbose, + ) + + if existing == "upsert" and batch_errors: + self.logger.warning("Error during upsert. Rolling back all inserts for docs with errors.") + rollback_errors = self.handle_upsert_rollback( + objects_to_upsert=objects_to_upsert, batch_errors=batch_errors, class_name=class_name, verbose=verbose + ) + + if len(rollback_errors) > 0: + self.logger.error("Errors encountered during rollback.") + raise AirflowException("Errors encountered during rollback.") + + if batch_errors: + self.logger.error("Errors encountered during ingest.") + raise AirflowException("Errors encountered during ingest.") + + def _query_objects(self, value: Any, doc_key: str, class_name: str, uuid_column: str) -> set: + """ + Check for existence of a data_object as a property of a data class and return all object ids. + + :param value: The value of the property to query. + :param doc_key: The name of the property to query. + :param class_name: The name of the class to query. + :param uuid_column: The name of the column containing the UUID. + """ + existing_uuids = ( + self.client.query.get(properties=[doc_key], class_name=class_name) + .with_additional([uuid_column]) + .with_where({"path": doc_key, "operator": "Equal", "valueText": value}) + .do()["data"]["Get"][class_name] + ) + + return {additional["_additional"]["id"] for additional in existing_uuids} + + def import_baseline( + self, + seed_baseline_url: str, + class_name: str, + existing: str = "skip", + doc_key: str = None, + uuid_column: str = None, + vector_column: str = None, + batch_params: dict = None, + verbose: bool = True, + ) -> list: + """ + This task ingests data from a baseline of pre-embedded data. This is useful for evaluation and baselining changes + over time. This function is used as a python_callable with the weaviate_import decorator. The returned + dictionary is passed to the WeaviateImportDataOperator for ingest. The operator returns a list of any objects + that failed to import. seed_baseline_url is a URI for a parquet file of pre-embedded data. Any existing + documents are replaced. The assumption is that this is a first import of data and older data + should be removed. + + :param class_name: The name of the class to import data. Class should be created with weaviate schema. + :param seed_baseline_url: The url of a parquet file containing baseline data to ingest. + :param vector_column: For pre-embedded data specify the name of the column containing the embedding vector + :param uuid_column: For data with pre-generated UUID specify the name of the column containing the UUID + :param batch_params: Additional parameters to pass to the weaviate batch configuration + :param verbose: Whether to print verbose output + :param existing: Whether to 'upsert', 'skip' or 'replace' any existing documents. Default is 'skip'. + :param doc_key: If using upsert you must specify a doc_key which uniquely identifies a document which may or may + not include multiple (unique) chunks. + """ + + seed_filename = f"include/data/{seed_baseline_url.split('/')[-1]}" + + try: + df = pd.read_parquet(seed_filename) + + except Exception: + with open(seed_filename, "wb") as fh: + response = requests.get(seed_baseline_url, stream=True) + fh.writelines(response.iter_content(1024)) + + df = pd.read_parquet(seed_filename) + + return self.ingest_data( + dfs=df, + class_name=class_name, + existing=existing, + doc_key=doc_key, + uuid_column=uuid_column, + vector_column=vector_column, + verbose=verbose, + batch_params=batch_params, + ) diff --git a/airflow/include/tasks/ingest.py b/airflow/include/tasks/ingest.py index 8c7f7b41..2ab14dac 100644 --- a/airflow/include/tasks/ingest.py +++ b/airflow/include/tasks/ingest.py @@ -2,82 +2,6 @@ import pandas as pd import requests -from weaviate.util import generate_uuid5 - - -def import_upsert_data(dfs: list[pd.DataFrame], class_name: str, primary_key: str) -> list: - """ - This task concatenates multiple dataframes from upstream dynamic tasks and vectorizes with import to weaviate. - This function is used as a python_callable with the weaviate_import decorator. The returned dictionary is passed - to the WeaviateImportDataOperator for ingest. The operator returns a list of any objects that failed to import. - - A 'uuid' is generated based on the content and metadata (the git sha, document url, the document source and a - concatenation of the headers). - - Any existing documents with the same primary_key but differing UUID or sha will be deleted prior to import. - - param dfs: A list of dataframes from downstream dynamic tasks - type dfs: list[pd.DataFrame] - - param class_name: The name of the class to import data. Class should be created with weaviate schema. - type class_name: str - - param primary_key: The name of a column to use as a primary key for upsert logic. - type primary_key: str - """ - - df = pd.concat(dfs, ignore_index=True) - - df["uuid"] = df.apply(lambda x: generate_uuid5(identifier=x.to_dict(), namespace=class_name), axis=1) - - print(f"Passing {len(df)} objects for import.") - - return { - "data": df, - "class_name": class_name, - "upsert": True, - "primary_key": primary_key, - "uuid_column": "uuid", - "error_threshold": 0, - "verbose": True, - } - - -def import_data(dfs: list[pd.DataFrame], class_name: str) -> list: - """ - This task concatenates multiple dataframes from upstream dynamic tasks and vectorizes with import to weaviate. - This function is used as a python_callable with the weaviate_import decorator. The returned dictionary is passed - to the WeaviateImportDataOperator for ingest. The operator returns a list of any objects that failed to import. - - A 'uuid' is generated based on the content and metadata (the git sha, document url, the document source and a - concatenation of the headers) and Weaviate will create the vectors. - - Any existing documents are not upserted. The assumption is that this is a first - import of data and skipping upsert checks will speed up import. - - param dfs: A list of dataframes from downstream dynamic tasks - type dfs: list[pd.DataFrame] - - param class_name: The name of the class to import data. Class should be created with weaviate schema. - type class_name: str - """ - - df = pd.concat(dfs, ignore_index=True) - - df["uuid"] = df.apply(lambda x: generate_uuid5(identifier=x.to_dict(), namespace=class_name), axis=1) - - print(f"Passing {len(df)} objects for import.") - - return { - "data": df, - "class_name": class_name, - "upsert": False, - "uuid_column": "uuid", - "error_threshold": 0, - "batched_mode": True, - "batch_size": 1000, - "verbose": False, - } def import_baseline(class_name: str, seed_baseline_url: str) -> list: @@ -89,8 +13,8 @@ def import_baseline(class_name: str, seed_baseline_url: str) -> list: seed_baseline_url is a URI for a parquet file of pre-embedded data. - Any existing documents are not upserted. The assumption is that this is a first import of data and skipping - upsert checks will speed up import. + Any existing documents are replaced. The assumption is that this is a first import of data and older data + should be removed. param class_name: The name of the class to import data. Class should be created with weaviate schema. type class_name: str @@ -114,7 +38,7 @@ def import_baseline(class_name: str, seed_baseline_url: str) -> list: return { "data": df, "class_name": class_name, - "upsert": False, + "existing": "replace", "uuid_column": "id", "embedding_column": "vector", "error_threshold": 0, diff --git a/airflow/include/tasks/split.py b/airflow/include/tasks/split.py index 57afcd6f..d6720fad 100644 --- a/airflow/include/tasks/split.py +++ b/airflow/include/tasks/split.py @@ -3,6 +3,7 @@ import pandas as pd from langchain.schema import Document from langchain.text_splitter import ( + HTMLHeaderTextSplitter, Language, RecursiveCharacterTextSplitter, ) @@ -68,3 +69,37 @@ def split_python(dfs: list[pd.DataFrame]) -> pd.DataFrame: df.reset_index(inplace=True, drop=True) return df + + +def split_html(dfs: list[pd.DataFrame]) -> pd.DataFrame: + """ + This task concatenates multiple dataframes from upstream dynamic tasks and splits html code before importing + to a vector database. + + param dfs: A list of dataframes from downstream dynamic tasks + type dfs: list[pd.DataFrame] + + Returned dataframe fields are: + 'docSource': ie. 'astro', 'learn', 'docs', etc. + 'sha': the github sha for the document + 'docLink': URL for the specific document in github. + 'content': Chunked content in markdown format. + + """ + + headers_to_split_on = [ + ("h2", "h2"), + ] + + df = pd.concat(dfs, axis=0, ignore_index=True) + + splitter = HTMLHeaderTextSplitter(headers_to_split_on) + + df["doc_chunks"] = df["content"].apply(lambda x: splitter.split_text(text=x)) + df = df.explode("doc_chunks", ignore_index=True) + df["content"] = df["doc_chunks"].apply(lambda x: x.page_content) + + df.drop(["doc_chunks"], inplace=True, axis=1) + df.reset_index(inplace=True, drop=True) + + return df diff --git a/airflow/requirements.txt b/airflow/requirements.txt index d26994bc..04700214 100644 --- a/airflow/requirements.txt +++ b/airflow/requirements.txt @@ -1,4 +1,4 @@ -/tmp/airflow_provider_weaviate-0.0.1-py3-none-any.whl +apache-airflow-providers-weaviate==1.0.0 apache-airflow-providers-github==2.3.1 apache-airflow-providers-slack==7.3.2 streamlit==1.25.0 @@ -13,4 +13,4 @@ openai==0.28.1 bs4==0.0.1 lxml==4.9.3 tiktoken==0.5.1 -firebase-admin +firebase-admin==6.2.0 diff --git a/airflow/ruff.toml b/airflow/ruff.toml new file mode 100644 index 00000000..424b740e --- /dev/null +++ b/airflow/ruff.toml @@ -0,0 +1,5 @@ +line-length = 100 + +[format] +quote-style = "single" +indent-style = "tab"