From 7e5ff4e41005f6f141cd3ef2a283cb14a455a393 Mon Sep 17 00:00:00 2001 From: JGalego Date: Mon, 20 May 2024 16:49:20 +0100 Subject: [PATCH] Added bedrock examples --- examples/bedrock/.env.example | 4 + examples/bedrock/README.md | 3 + examples/bedrock/csv_scraper_bedrock.py | 63 +++++++++ examples/bedrock/custom_graph_bedrock.py | 127 ++++++++++++++++++ examples/bedrock/inputs/books.xml | 120 +++++++++++++++++ examples/bedrock/inputs/example.json | 38 ++++++ .../bedrock/inputs/plain_html_example.txt | 105 +++++++++++++++ examples/bedrock/inputs/username.csv | 6 + examples/bedrock/json_scraper_bedrock.py | 63 +++++++++ examples/bedrock/scrape_plain_text_bedrock.py | 59 ++++++++ examples/bedrock/scrapegraphai_bedrock.png | Bin 0 -> 82480 bytes examples/bedrock/script_generator_bedrock.py | 47 +++++++ examples/bedrock/search_graph_bedrock.py | 46 +++++++ examples/bedrock/smart_scraper_bedrock.py | 65 ++++----- examples/bedrock/xml_scraper_bedrock.py | 62 +++++++++ 15 files changed, 778 insertions(+), 30 deletions(-) create mode 100644 examples/bedrock/.env.example create mode 100644 examples/bedrock/README.md create mode 100644 examples/bedrock/csv_scraper_bedrock.py create mode 100644 examples/bedrock/custom_graph_bedrock.py create mode 100644 examples/bedrock/inputs/books.xml create mode 100644 examples/bedrock/inputs/example.json create mode 100644 examples/bedrock/inputs/plain_html_example.txt create mode 100644 examples/bedrock/inputs/username.csv create mode 100644 examples/bedrock/json_scraper_bedrock.py create mode 100644 examples/bedrock/scrape_plain_text_bedrock.py create mode 100644 examples/bedrock/scrapegraphai_bedrock.png create mode 100644 examples/bedrock/script_generator_bedrock.py create mode 100644 examples/bedrock/search_graph_bedrock.py create mode 100644 examples/bedrock/xml_scraper_bedrock.py diff --git a/examples/bedrock/.env.example b/examples/bedrock/.env.example new file mode 100644 index 00000000..cd27769e --- /dev/null +++ b/examples/bedrock/.env.example @@ -0,0 +1,4 @@ +AWS_ACCESS_KEY_ID="..." +AWS_SECRET_ACCESS_KEY="..." +AWS_SESSION_TOKEN="..." +AWS_DEFAULT_REGION="..." \ No newline at end of file diff --git a/examples/bedrock/README.md b/examples/bedrock/README.md new file mode 100644 index 00000000..88edd82c --- /dev/null +++ b/examples/bedrock/README.md @@ -0,0 +1,3 @@ +This folder contains examples of how to use ScrapeGraphAI with [Amazon Bedrock](https://aws.amazon.com/bedrock/) ⛰️. The examples show how to extract information from websites and files using a natural language prompt. + +![](scrapegraphai_bedrock.png) \ No newline at end of file diff --git a/examples/bedrock/csv_scraper_bedrock.py b/examples/bedrock/csv_scraper_bedrock.py new file mode 100644 index 00000000..1fe09d0f --- /dev/null +++ b/examples/bedrock/csv_scraper_bedrock.py @@ -0,0 +1,63 @@ +""" +Basic example of scraping pipeline using CSVScraperGraph from CSV documents +""" + +import os +import json + +from dotenv import load_dotenv + +import pandas as pd + +from scrapegraphai.graphs import CSVScraperGraph +from scrapegraphai.utils import convert_to_csv, convert_to_json, prettify_exec_info + +load_dotenv() + +# ************************************************ +# Read the CSV file +# ************************************************ + +FILE_NAME = "inputs/username.csv" +curr_dir = os.path.dirname(os.path.realpath(__file__)) +file_path = os.path.join(curr_dir, FILE_NAME) + +text = pd.read_csv(file_path) + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + } +} + +# ************************************************ +# Create the CSVScraperGraph instance and run it +# ************************************************ + +csv_scraper_graph = CSVScraperGraph( + prompt="List me all the last names", + source=str(text), # Pass the content of the file, not the file object + config=graph_config +) + +result = csv_scraper_graph.run() +print(json.dumps(result, indent=4)) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = csv_scraper_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) + +# Save to json or csv +convert_to_csv(result, "result") +convert_to_json(result, "result") diff --git a/examples/bedrock/custom_graph_bedrock.py b/examples/bedrock/custom_graph_bedrock.py new file mode 100644 index 00000000..d550b46b --- /dev/null +++ b/examples/bedrock/custom_graph_bedrock.py @@ -0,0 +1,127 @@ +""" +Example of custom graph using existing nodes +""" + +import json + +from dotenv import load_dotenv + +from langchain_aws import BedrockEmbeddings +from scrapegraphai.models import Bedrock +from scrapegraphai.graphs import BaseGraph +from scrapegraphai.nodes import ( + FetchNode, + ParseNode, + RAGNode, + GenerateAnswerNode, + RobotsNode +) + +load_dotenv() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + } +} + +# ************************************************ +# Define the graph nodes +# ************************************************ + +llm_model = Bedrock({ + 'model_id': graph_config["llm"]["model"].split("/")[-1], + 'model_kwargs': { + 'temperature': 0.0 + }}) +embedder = BedrockEmbeddings(model_id=graph_config["embeddings"]["model"].split("/")[-1]) + +# Define the nodes for the graph +robot_node = RobotsNode( + input="url", + output=["is_scrapable"], + node_config={ + "llm_model": llm_model, + "force_scraping": True, + "verbose": True, + } +) + +fetch_node = FetchNode( + input="url | local_dir", + output=["doc", "link_urls", "img_urls"], + node_config={ + "verbose": True, + "headless": True, + } +) + +parse_node = ParseNode( + input="doc", + output=["parsed_doc"], + node_config={ + "chunk_size": 4096, + "verbose": True, + } +) + +rag_node = RAGNode( + input="user_prompt & (parsed_doc | doc)", + output=["relevant_chunks"], + node_config={ + "llm_model": llm_model, + "embedder_model": embedder, + "verbose": True, + } +) + +generate_answer_node = GenerateAnswerNode( + input="user_prompt & (relevant_chunks | parsed_doc | doc)", + output=["answer"], + node_config={ + "llm_model": llm_model, + "verbose": True, + } +) + +# ************************************************ +# Create the graph by defining the connections +# ************************************************ + +graph = BaseGraph( + nodes=[ + robot_node, + fetch_node, + parse_node, + rag_node, + generate_answer_node, + ], + edges=[ + (robot_node, fetch_node), + (fetch_node, parse_node), + (parse_node, rag_node), + (rag_node, generate_answer_node) + ], + entry_point=robot_node +) + +# ************************************************ +# Execute the graph +# ************************************************ + +result, execution_info = graph.execute({ + "user_prompt": "List me all the articles", + "url": "https://perinim.github.io/projects" +}) + +# Get the answer from the result +result = result.get("answer", "No answer found.") +print(json.dumps(result, indent=4)) diff --git a/examples/bedrock/inputs/books.xml b/examples/bedrock/inputs/books.xml new file mode 100644 index 00000000..e3d1fe87 --- /dev/null +++ b/examples/bedrock/inputs/books.xml @@ -0,0 +1,120 @@ + + + + Gambardella, Matthew + XML Developer's Guide + Computer + 44.95 + 2000-10-01 + An in-depth look at creating applications + with XML. + + + Ralls, Kim + Midnight Rain + Fantasy + 5.95 + 2000-12-16 + A former architect battles corporate zombies, + an evil sorceress, and her own childhood to become queen + of the world. + + + Corets, Eva + Maeve Ascendant + Fantasy + 5.95 + 2000-11-17 + After the collapse of a nanotechnology + society in England, the young survivors lay the + foundation for a new society. + + + Corets, Eva + Oberon's Legacy + Fantasy + 5.95 + 2001-03-10 + In post-apocalypse England, the mysterious + agent known only as Oberon helps to create a new life + for the inhabitants of London. Sequel to Maeve + Ascendant. + + + Corets, Eva + The Sundered Grail + Fantasy + 5.95 + 2001-09-10 + The two daughters of Maeve, half-sisters, + battle one another for control of England. Sequel to + Oberon's Legacy. + + + Randall, Cynthia + Lover Birds + Romance + 4.95 + 2000-09-02 + When Carla meets Paul at an ornithology + conference, tempers fly as feathers get ruffled. + + + Thurman, Paula + Splish Splash + Romance + 4.95 + 2000-11-02 + A deep sea diver finds true love twenty + thousand leagues beneath the sea. + + + Knorr, Stefan + Creepy Crawlies + Horror + 4.95 + 2000-12-06 + An anthology of horror stories about roaches, + centipedes, scorpions and other insects. + + + Kress, Peter + Paradox Lost + Science Fiction + 6.95 + 2000-11-02 + After an inadvertant trip through a Heisenberg + Uncertainty Device, James Salway discovers the problems + of being quantum. + + + O'Brien, Tim + Microsoft .NET: The Programming Bible + Computer + 36.95 + 2000-12-09 + Microsoft's .NET initiative is explored in + detail in this deep programmer's reference. + + + O'Brien, Tim + MSXML3: A Comprehensive Guide + Computer + 36.95 + 2000-12-01 + The Microsoft MSXML3 parser is covered in + detail, with attention to XML DOM interfaces, XSLT processing, + SAX and more. + + + Galos, Mike + Visual Studio 7: A Comprehensive Guide + Computer + 49.95 + 2001-04-16 + Microsoft Visual Studio 7 is explored in depth, + looking at how Visual Basic, Visual C++, C#, and ASP+ are + integrated into a comprehensive development + environment. + + \ No newline at end of file diff --git a/examples/bedrock/inputs/example.json b/examples/bedrock/inputs/example.json new file mode 100644 index 00000000..d729b76a --- /dev/null +++ b/examples/bedrock/inputs/example.json @@ -0,0 +1,38 @@ +{ + "quiz": { + "sport": { + "q1": { + "question": "Which one is correct team name in NBA?", + "options": [ + "New York Bulls", + "Los Angeles Kings", + "Golden State Warriros", + "Huston Rocket" + ], + "answer": "Huston Rocket" + } + }, + "maths": { + "q1": { + "question": "5 + 7 = ?", + "options": [ + "10", + "11", + "12", + "13" + ], + "answer": "12" + }, + "q2": { + "question": "12 - 8 = ?", + "options": [ + "1", + "2", + "3", + "4" + ], + "answer": "4" + } + } + } +} \ No newline at end of file diff --git a/examples/bedrock/inputs/plain_html_example.txt b/examples/bedrock/inputs/plain_html_example.txt new file mode 100644 index 00000000..78f814ae --- /dev/null +++ b/examples/bedrock/inputs/plain_html_example.txt @@ -0,0 +1,105 @@ + +
+ + +
+
+
+
+
+
+

Projects

+

+
+
+ +
+
+
+ +
+ \ No newline at end of file diff --git a/examples/bedrock/inputs/username.csv b/examples/bedrock/inputs/username.csv new file mode 100644 index 00000000..8c039d7e --- /dev/null +++ b/examples/bedrock/inputs/username.csv @@ -0,0 +1,6 @@ +Username; Identifier;First name;Last name +booker12;9012;Rachel;Booker +grey07;2070;Laura;Grey +johnson81;4081;Craig;Johnson +jenkins46;9346;Mary;Jenkins +smith79;5079;Jamie;Smith \ No newline at end of file diff --git a/examples/bedrock/json_scraper_bedrock.py b/examples/bedrock/json_scraper_bedrock.py new file mode 100644 index 00000000..1b7dde0b --- /dev/null +++ b/examples/bedrock/json_scraper_bedrock.py @@ -0,0 +1,63 @@ +""" +Basic example of scraping pipeline using JSONScraperGraph from JSON documents +""" + +import os +import json + +from dotenv import load_dotenv + +from scrapegraphai.graphs import JSONScraperGraph +from scrapegraphai.utils import convert_to_csv, convert_to_json, prettify_exec_info + +load_dotenv() + +# ************************************************ +# Read the JSON file +# ************************************************ + +FILE_NAME = "inputs/example.json" +curr_dir = os.path.dirname(os.path.realpath(__file__)) +file_path = os.path.join(curr_dir, FILE_NAME) + +with open(file_path, 'r', encoding="utf-8") as file: + text = file.read() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + } +} + +# ************************************************ +# Create the JSONScraperGraph instance and run it +# ************************************************ + +json_scraper_graph = JSONScraperGraph( + prompt="List me all questions and options, no answers.", + source=text, # Pass the content of the file, not the file object + config=graph_config +) + +result = json_scraper_graph.run() +print(json.dumps(result, indent=4)) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = json_scraper_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) + +# Save to json or csv +convert_to_csv(result, "result") +convert_to_json(result, "result") + diff --git a/examples/bedrock/scrape_plain_text_bedrock.py b/examples/bedrock/scrape_plain_text_bedrock.py new file mode 100644 index 00000000..5cc2067c --- /dev/null +++ b/examples/bedrock/scrape_plain_text_bedrock.py @@ -0,0 +1,59 @@ +""" +Basic example of scraping pipeline using SmartScraper from text +""" + +import os +import json + +from dotenv import load_dotenv + +from scrapegraphai.graphs import SmartScraperGraph +from scrapegraphai.utils import prettify_exec_info + +load_dotenv() + +# ************************************************ +# Read the text file +# ************************************************ + +FILE_NAME = "inputs/plain_html_example.txt" +curr_dir = os.path.dirname(os.path.realpath(__file__)) +file_path = os.path.join(curr_dir, FILE_NAME) + +# It could be also a http request using the request model +with open(file_path, 'r', encoding="utf-8") as file: + text = file.read() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + } +} + +# ************************************************ +# Create the SmartScraperGraph instance and run it +# ************************************************ + +smart_scraper_graph = SmartScraperGraph( + prompt="List me all the projects with their description.", + source=text, + config=graph_config +) + +result = smart_scraper_graph.run() +print(json.dumps(result, indent=4)) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = smart_scraper_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) diff --git a/examples/bedrock/scrapegraphai_bedrock.png b/examples/bedrock/scrapegraphai_bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..918cf19132a7535f0f3ff42da574bb848597d1e1 GIT binary patch literal 82480 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

+O%gEZ9lM|4joCCQ@)}VL!on5 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 literal 0 HcmV?d00001 diff --git a/examples/bedrock/script_generator_bedrock.py b/examples/bedrock/script_generator_bedrock.py new file mode 100644 index 00000000..038bfb53 --- /dev/null +++ b/examples/bedrock/script_generator_bedrock.py @@ -0,0 +1,47 @@ +""" +Basic example of scraping pipeline using ScriptCreatorGraph +""" + +from dotenv import load_dotenv + +from scrapegraphai.graphs import ScriptCreatorGraph +from scrapegraphai.utils import prettify_exec_info + +load_dotenv() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + }, + "library": "beautifulsoup" +} + +# ************************************************ +# Create the ScriptCreatorGraph instance and run it +# ************************************************ + +script_creator_graph = ScriptCreatorGraph( + prompt="List me all the projects with their description.", + # also accepts a string with the already downloaded HTML code + source="https://perinim.github.io/projects", + config=graph_config +) + +result = script_creator_graph.run() +print(result) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = script_creator_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) + diff --git a/examples/bedrock/search_graph_bedrock.py b/examples/bedrock/search_graph_bedrock.py new file mode 100644 index 00000000..79e2c803 --- /dev/null +++ b/examples/bedrock/search_graph_bedrock.py @@ -0,0 +1,46 @@ +""" +Example of Search Graph +""" + +from dotenv import load_dotenv +from scrapegraphai.graphs import SearchGraph +from scrapegraphai.utils import convert_to_csv, convert_to_json, prettify_exec_info + +load_dotenv() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/amazon.titan-embed-text-v2:0" + } +} + +# ************************************************ +# Create the SearchGraph instance and run it +# ************************************************ + +search_graph = SearchGraph( + prompt="List me Chioggia's famous dishes", + config=graph_config +) + +result = search_graph.run() +print(result) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = search_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) + +# Save to json and csv +convert_to_csv(result, "result") +convert_to_json(result, "result") diff --git a/examples/bedrock/smart_scraper_bedrock.py b/examples/bedrock/smart_scraper_bedrock.py index fff586f2..4f0952ae 100644 --- a/examples/bedrock/smart_scraper_bedrock.py +++ b/examples/bedrock/smart_scraper_bedrock.py @@ -1,42 +1,47 @@ +""" +Basic example of scraping pipeline using SmartScraper """ -Smartscraper example on bedrock -""" -import boto3 +import os +from dotenv import load_dotenv from scrapegraphai.graphs import SmartScraperGraph +from scrapegraphai.utils import prettify_exec_info -# 0a. Initialize session -# If not required delete it -session = boto3.Session( - aws_access_key_id="...", - aws_secret_access_key="...", - aws_session_token="...", - region_name="us-east-1" -) +load_dotenv() -# 0b. Initialize client -client = session.client("bedrock-runtime") -# 1. Define graph configuration -config = { +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +openai_key = os.getenv("OPENAI_APIKEY") + +graph_config = { "llm": { - "client": client, - "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", - "temperature": 0.0, - "format": "json" - }, - "embeddings": { - "client": client, - "model": "bedrock/cohere.embed-multilingual-v3", + "api_key": openai_key, + "model": "gpt-4o", }, + "verbose": True, + "headless": False, } -# 2. Create graph instance -graph = SmartScraperGraph( - prompt="List me all the articles", - source="https://perinim.github.io/projects", - config=config +# ************************************************ +# Create the SmartScraperGraph instance and run it +# ************************************************ + +smart_scraper_graph = SmartScraperGraph( + prompt="List me all the projects with their description", + # also accepts a string with the already downloaded HTML code + source="https://perinim.github.io/projects/", + config=graph_config ) -# 3. Scrape away! -print(graph.run()) +result = smart_scraper_graph.run() +print(result) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = smart_scraper_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) diff --git a/examples/bedrock/xml_scraper_bedrock.py b/examples/bedrock/xml_scraper_bedrock.py new file mode 100644 index 00000000..cb4e24bc --- /dev/null +++ b/examples/bedrock/xml_scraper_bedrock.py @@ -0,0 +1,62 @@ +""" +Basic example of scraping pipeline using XMLScraperGraph from XML documents +""" + +import os +import json + +from dotenv import load_dotenv +from scrapegraphai.graphs import XMLScraperGraph +from scrapegraphai.utils import convert_to_csv, convert_to_json, prettify_exec_info + +load_dotenv() + +# ************************************************ +# Read the XML file +# ************************************************ + +FILE_NAME = "inputs/books.xml" +curr_dir = os.path.dirname(os.path.realpath(__file__)) +file_path = os.path.join(curr_dir, FILE_NAME) + +with open(file_path, 'r', encoding="utf-8") as file: + text = file.read() + +# ************************************************ +# Define the configuration for the graph +# ************************************************ + +graph_config = { + "llm": { + "model": "bedrock/anthropic.claude-3-sonnet-20240229-v1:0", + "temperature": 0.0 + }, + "embeddings": { + "model": "bedrock/cohere.embed-multilingual-v3" + } +} + +# ************************************************ +# Create the XMLScraperGraph instance and run it +# ************************************************ + +xml_scraper_graph = XMLScraperGraph( + prompt="List me all the authors, title and genres of the books. Skip the preamble.", + source=text, # Pass the content of the file, not the file object + config=graph_config +) + +result = xml_scraper_graph.run() +print(json.dumps(result, indent=4)) + +# ************************************************ +# Get graph execution info +# ************************************************ + +graph_exec_info = xml_scraper_graph.get_execution_info() +print(prettify_exec_info(graph_exec_info)) + +# Save to json or csv +convert_to_csv(result, "result") +convert_to_json(result, "result") +