From be16fecb55f558a7fa5d00a34f060c225d3d8b43 Mon Sep 17 00:00:00 2001 From: Stefan Krawczyk Date: Thu, 9 May 2024 23:52:19 -0700 Subject: [PATCH] WIP --- requirements.txt | 1 + scrapegraphai/graphs/smart_scraper.png | Bin 0 -> 32975 bytes scrapegraphai/graphs/smart_scraper_graph | 18 +++ scrapegraphai/graphs/smart_scraper_graph.png | Bin 0 -> 34794 bytes .../graphs/smart_scraper_graph_burr.py | 117 ++++++++++++++++++ .../graphs/smart_scraper_graph_hamilton.py | 70 +++++++++++ 6 files changed, 206 insertions(+) create mode 100644 scrapegraphai/graphs/smart_scraper.png create mode 100644 scrapegraphai/graphs/smart_scraper_graph create mode 100644 scrapegraphai/graphs/smart_scraper_graph.png create mode 100644 scrapegraphai/graphs/smart_scraper_graph_burr.py create mode 100644 scrapegraphai/graphs/smart_scraper_graph_hamilton.py diff --git a/requirements.txt b/requirements.txt index 1e6224b4..00259542 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,3 +19,4 @@ langchain-aws==0.1.2 langchain-anthropic==0.1.11 yahoo-search-py==0.3 pypdf==4.2.0 +burr[start] diff --git a/scrapegraphai/graphs/smart_scraper.png b/scrapegraphai/graphs/smart_scraper.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2822f7c37db9adc4b97830b2bf531e47632015 GIT binary patch literal 32975 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Ʒ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%0D)+k- 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 literal 0 HcmV?d00001 diff --git a/scrapegraphai/graphs/smart_scraper_graph b/scrapegraphai/graphs/smart_scraper_graph new file mode 100644 index 00000000..99c3658c --- /dev/null +++ b/scrapegraphai/graphs/smart_scraper_graph @@ -0,0 +1,18 @@ +digraph { + graph [compound=false concentrate=false rankdir=TB ranksep=0.4] + fetch_node [label=fetch_node shape=box style=rounded] + parse_node [label=parse_node shape=box style=rounded] + input__chunk_size [label="input: chunk_size" shape=oval style=dashed] + input__chunk_size -> parse_node + rag_node [label=rag_node shape=box style=rounded] + input__llm_model [label="input: llm_model" shape=oval style=dashed] + input__llm_model -> rag_node + input__embedder_model [label="input: embedder_model" shape=oval style=dashed] + input__embedder_model -> rag_node + generate_answer_node [label=generate_answer_node shape=box style=rounded] + input__llm_model [label="input: llm_model" shape=oval style=dashed] + input__llm_model -> generate_answer_node + fetch_node -> parse_node [style=solid] + parse_node -> rag_node [style=solid] + rag_node -> generate_answer_node [style=solid] +} diff --git a/scrapegraphai/graphs/smart_scraper_graph.png b/scrapegraphai/graphs/smart_scraper_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ff94d915607182f38ddbf9cf64634cf3d69662d0 GIT binary patch literal 34794 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 Y)-)eF>E%jyh5w9koZygTKWoE(0b4xiO#lD@ literal 0 HcmV?d00001 diff --git a/scrapegraphai/graphs/smart_scraper_graph_burr.py b/scrapegraphai/graphs/smart_scraper_graph_burr.py new file mode 100644 index 00000000..f2c26569 --- /dev/null +++ b/scrapegraphai/graphs/smart_scraper_graph_burr.py @@ -0,0 +1,117 @@ +""" +SmartScraperGraph Module Burr Version +""" +from typing import Tuple + +from burr import tracking +from burr.core import Application, ApplicationBuilder, State, default, when +from burr.core.action import action + +from langchain_community.document_loaders import AsyncChromiumLoader +from langchain_core.documents import Document +from ..utils.remover import remover + + +@action(reads=["url", "local_dir"], writes=["doc"]) +def fetch_node(state: State, headless: bool = True, verbose: bool = False) -> tuple[dict, State]: + if verbose: + print(f"--- Executing Fetch Node ---") + + source = state.get("url", state.get("local_dir")) + + if self.input == "json_dir" or self.input == "xml_dir" or self.input == "csv_dir": + compressed_document = [Document(page_content=source, metadata={ + "source": "local_dir" + })] + # if it is a local directory + elif not source.startswith("http"): + compressed_document = [Document(page_content=remover(source), metadata={ + "source": "local_dir" + })] + + else: + if self.node_config is not None and self.node_config.get("endpoint") is not None: + + loader = AsyncChromiumLoader( + [source], + proxies={"http": self.node_config["endpoint"]}, + headless=headless, + ) + else: + loader = AsyncChromiumLoader( + [source], + headless=headless, + ) + + document = loader.load() + compressed_document = [ + Document(page_content=remover(str(document[0].page_content)))] + + return {"doc": compressed_document}, state.update(doc=compressed_document) + +@action(reads=["doc"], writes=["parsed_doc"]) +def parse_node(state: State, chunk_size: int) -> tuple[dict, State]: + return {}, state + +@action(reads=["user_prompt", "parsed_doc", "doc"], + writes=["relevant_chunks"]) +def rag_node(state: State, llm_model: object, embedder_model: object) -> tuple[dict, State]: + return {}, state + +@action(reads=["user_prompt", "relevant_chunks", "parsed_doc", "doc"], + writes=["answer"]) +def generate_answer_node(state: State, llm_model: object) -> tuple[dict, State]: + return {}, state + +def run(prompt: str, input_key: str, source: str, config: dict) -> str: + + llm_model = config["llm_model"] + embedder_model = config["embedder_model"] + chunk_size = config["model_token"] + + initial_state = { + "user_prompt": prompt, + input_key: source + } + app = ( + ApplicationBuilder() + .with_actions( + fetch_node=fetch_node, + parse_node=parse_node, + rag_node=rag_node, + generate_answer_node=generate_answer_node + ) + .with_transitions( + ("fetch_node", "parse_node", default), + ("parse_node", "rag_node", default), + ("rag_node", "generate_answer_node", default) + ) + .with_entrypoint("fetch_node") + .with_state(**initial_state) + .build() + ) + app.visualize( + output_file_path="smart_scraper_graph", + include_conditions=False, view=True, format="png" + ) + # last_action, result, state = app.run( + # halt_after=["generate_answer_node"], + # inputs={ + # "llm_model": llm_model, + # "embedder_model": embedder_model, + # "model_token": chunk_size + # } + # ) + # return result.get("answer", "No answer found.") + +if __name__ == '__main__': + + prompt = "What is the capital of France?" + source = "https://en.wikipedia.org/wiki/Paris" + input_key = "url" + config = { + "llm_model": "rag-token", + "embedder_model": "foo", + "model_token": "bar", + } + run(prompt, input_key, source, config) \ No newline at end of file diff --git a/scrapegraphai/graphs/smart_scraper_graph_hamilton.py b/scrapegraphai/graphs/smart_scraper_graph_hamilton.py new file mode 100644 index 00000000..ee3bdd88 --- /dev/null +++ b/scrapegraphai/graphs/smart_scraper_graph_hamilton.py @@ -0,0 +1,70 @@ +""" +SmartScraperGraph Module Burr Version +""" + +from typing import Tuple + +from burr import tracking +from burr.core import Application, ApplicationBuilder, State, default, when +from burr.core.action import action + +from langchain_community.document_loaders import AsyncChromiumLoader +from langchain_core.documents import Document +if __name__ == '__main__': + from scrapegraphai.utils.remover import remover +else: + from ..utils.remover import remover + + +def fetch_node(source: str, + headless: bool = True + ) -> Document: + if not source.startswith("http"): + return Document(page_content=remover(source), metadata={ + "source": "local_dir" + }) + else: + loader = AsyncChromiumLoader( + [source], + headless=headless, + ) + document = loader.load() + return Document(page_content=remover(str(document[0].page_content))) + +def parse_node(fetch_node: Document, chunk_size: int) -> list[Document]: + + pass + +def rag_node(parse_node: list[Document]) -> list[Document]: + pass + +def generate_answer_node(rag_node: list[Document]) -> str: + pass + + +if __name__ == '__main__': + from hamilton import driver + import __main__ as smart_scraper_graph_hamilton + dr = ( + driver.Builder() + .with_modules(smart_scraper_graph_hamilton) + .with_config({}) + .build() + ) + dr.display_all_functions("smart_scraper.png") + + # config = { + # "llm_model": "rag-token", + # "embedder_model": "foo", + # "model_token": "bar", + # } + # + # result = dr.execute( + # ["generate_answer_node"], + # inputs={ + # "prompt": "What is the capital of France?", + # "source": "https://en.wikipedia.org/wiki/Paris", + # } + # ) + # + # print(result) \ No newline at end of file