Spaces:
Running
Running
| from typing import cast | |
| from langchain_community.tools import WikipediaQueryRun | |
| from langchain_community.utilities.wikipedia import WikipediaAPIWrapper | |
| from langflow.base.langchain_utilities.model import LCToolComponent | |
| from langflow.field_typing import Tool | |
| from langflow.inputs import BoolInput, IntInput, MessageTextInput, MultilineInput | |
| from langflow.schema import Data | |
| class WikipediaAPIComponent(LCToolComponent): | |
| display_name = "Wikipedia API" | |
| description = "Call Wikipedia API." | |
| name = "WikipediaAPI" | |
| icon = "Wikipedia" | |
| inputs = [ | |
| MultilineInput( | |
| name="input_value", | |
| display_name="Input", | |
| ), | |
| MessageTextInput(name="lang", display_name="Language", value="en"), | |
| IntInput(name="k", display_name="Number of results", value=4, required=True), | |
| BoolInput(name="load_all_available_meta", display_name="Load all available meta", value=False, advanced=True), | |
| IntInput( | |
| name="doc_content_chars_max", display_name="Document content characters max", value=4000, advanced=True | |
| ), | |
| ] | |
| def run_model(self) -> list[Data]: | |
| wrapper = self._build_wrapper() | |
| docs = wrapper.load(self.input_value) | |
| data = [Data.from_document(doc) for doc in docs] | |
| self.status = data | |
| return data | |
| def build_tool(self) -> Tool: | |
| wrapper = self._build_wrapper() | |
| return cast("Tool", WikipediaQueryRun(api_wrapper=wrapper)) | |
| def _build_wrapper(self) -> WikipediaAPIWrapper: | |
| return WikipediaAPIWrapper( | |
| top_k_results=self.k, | |
| lang=self.lang, | |
| load_all_available_meta=self.load_all_available_meta, | |
| doc_content_chars_max=self.doc_content_chars_max, | |
| ) | |