Spaces:
Sleeping
Sleeping
import requests | |
from typing_extensions import Any, Annotated | |
from langchain_core.tools import tool | |
from langchain_core.messages import ToolMessage | |
from langgraph.types import Command | |
from langgraph.prebuilt import InjectedState | |
from langchain_core.tools.base import InjectedToolCallId | |
from src.state import State | |
def get_wiki_page_sections( | |
page_title: str, | |
tool_call_id: Annotated[str, InjectedToolCallId] | |
) -> Command: | |
"""Get sections of a Wikipedia page. | |
This function retrieves the sections of a Wikipedia page. | |
It requires the page title as an input parameter. | |
""" | |
page_title = page_title.replace(" ", "_") | |
payload = { | |
"action": "parse", | |
"page": page_title, | |
"prop": "sections", | |
"format": "json", | |
} | |
response = requests.get( | |
"https://en.wikipedia.org/w/api.php", | |
params=payload | |
) | |
if not response.status_code == 200: | |
return (f"Error fetching sections for {page_title}: {response.test}") | |
data = response.json() | |
sections = data.get("parse", {}).get("sections", []) | |
sections_map = {} | |
for section in sections: | |
section_title = section.get("anchor").lower() | |
section_number = section.get("index") | |
if section_title and section_number: | |
sections_map[section_title] = section_number | |
sections_text = "The sections of the page are:\n" | |
for title in sections_map.keys(): | |
sections_text += f"{title}\n" | |
return Command( | |
update={ | |
# update the state keys | |
"wiki_sections": sections_map, | |
# update the message history | |
"messages": [ | |
ToolMessage( | |
sections_text, tool_call_id=tool_call_id | |
) | |
], | |
} | |
) | |
def get_wiki_page_by_section( | |
page_title: str, | |
section: str, | |
state: Annotated[State, InjectedState] | |
) -> str: | |
"""Get sections of a Wikipedia page. | |
This function retrieves the content of a specific section from a Wikipedia page. | |
It requires the page title and the section name as input parameters. | |
""" | |
wiki_sections = state.wiki_sections | |
if not wiki_sections: | |
return (f"Error: No sections found for {page_title}. Please run get_page_sections first.") | |
page_title = page_title.replace(" ", "_") | |
section = section.replace(" ", "_").lower() | |
if section not in wiki_sections: | |
return (f"Error: Section '{section}' not found in {page_title}. Please run get_page_sections first.") | |
payload = { | |
"action": "parse", | |
"page": page_title, | |
"prop": "wikitext", | |
"section": wiki_sections[section], | |
"format": "json", | |
} | |
response = requests.get( | |
"https://en.wikipedia.org/w/api.php", | |
params=payload | |
) | |
if not response.status_code == 200: | |
return (f"Error fetching sections for {page_title}: {response.test}") | |
data = response.json() | |
return data.get("parse", {}).get("wikitext", "No content found.") | |