Spaces:
Running
Running
| from langchain_core.tools import tool | |
| from metaphor_python import Metaphor | |
| from langflow.custom import Component | |
| from langflow.field_typing import Tool | |
| from langflow.io import BoolInput, IntInput, Output, SecretStrInput | |
| class ExaSearchToolkit(Component): | |
| display_name = "Exa Search" | |
| description = "Exa Search toolkit for search and content retrieval" | |
| documentation = "https://python.langchain.com/docs/integrations/tools/metaphor_search" | |
| beta = True | |
| name = "ExaSearch" | |
| icon = "ExaSearch" | |
| inputs = [ | |
| SecretStrInput( | |
| name="metaphor_api_key", | |
| display_name="Exa Search API Key", | |
| password=True, | |
| ), | |
| BoolInput( | |
| name="use_autoprompt", | |
| display_name="Use Autoprompt", | |
| value=True, | |
| ), | |
| IntInput( | |
| name="search_num_results", | |
| display_name="Search Number of Results", | |
| value=5, | |
| ), | |
| IntInput( | |
| name="similar_num_results", | |
| display_name="Similar Number of Results", | |
| value=5, | |
| ), | |
| ] | |
| outputs = [ | |
| Output(name="tools", display_name="Tools", method="build_toolkit"), | |
| ] | |
| def build_toolkit(self) -> Tool: | |
| client = Metaphor(api_key=self.metaphor_api_key) | |
| def search(query: str): | |
| """Call search engine with a query.""" | |
| return client.search(query, use_autoprompt=self.use_autoprompt, num_results=self.search_num_results) | |
| def get_contents(ids: list[str]): | |
| """Get contents of a webpage. | |
| The ids passed in should be a list of ids as fetched from `search`. | |
| """ | |
| return client.get_contents(ids) | |
| def find_similar(url: str): | |
| """Get search results similar to a given URL. | |
| The url passed in should be a URL returned from `search` | |
| """ | |
| return client.find_similar(url, num_results=self.similar_num_results) | |
| return [search, get_contents, find_similar] | |