nischaypar's picture
update app
0b10ccb
from typing import Literal
from smolagents.tools import Tool
class LinkupSearchTool(Tool):
"""LinkupSearchTool tool.
LinkupSearchTool performs web search queries using the Linkup API, which includes results from both
public and premium web sources. It supports two modes of search depth β€” standard and deep β€” allowing
for flexible information retrieval depending on the complexity of the query.
Setup:
Make sure your Linkup API key is exported to the environment:
.. code-block:: bash
pip install linkup-sdk
export LINKUP_API_KEY="your-api-key"
Example:
from smolagents import load_tool, CodeAgent, InferenceClientModel
linkup_tool = load_tool("Linkup-Platform/linkup-search-tool", trust_remote_code=True)
agent = CodeAgent(
tools=[linkup_tool()],
model=InferenceClientModel(),
)
agent.run(query="What was Microsoft's revenue last quarter and was it well perceived by the market?", depth="deep")
Args:
linkup_api_key (str | None): Optional. If not provided, LinkupClient will check the LINKUP_API_KEY env variable.
"""
name = "search_web"
description = "Performs an online search using Linkup search engine and retrieves the top results as a string. This function is useful for accessing real-time information, including news, articles, and other relevant web content."
output_type = "string"
inputs = {
"query": {"type": "string", "description": "The search query to perform."},
"depth": {
"type": "string",
"enum": ["standard", "deep"],
"description": "The search depth to perform. Use 'standard' for straightforward queries with likely direct answers (e.g., facts, definitions, simple explanations). Use 'deep' for: 1) complex queries requiring comprehensive analysis or information synthesis, 2) queries containing uncommon terms, specialized jargon, or abbreviations that may need additional context, or 3) questions likely requiring up-to-date or specialized web search results to answer effectively.",
},
}
def __init__(self, linkup_api_key: str | None = None, **kwargs) -> None:
super().__init__()
try:
from linkup import LinkupClient
except ImportError as e:
raise ImportError(
"You must install package `linkup-sdk` to run this tool: for instance run `pip install linkup-sdk`."
) from e
self.client = LinkupClient(api_key=linkup_api_key)
def forward(self, query: str, depth: Literal["standard", "deep"]) -> str:
try:
response = self.client.search(
query=query, depth=depth, output_type="searchResults"
)
results = getattr(response, "results", [{"content": "No answer provided."}])
except Exception as e:
return f"Error occurred during Linkup search: {str(e)}"
formatted_results = []
for i, doc in enumerate(results, start=1):
formatted_results.append(
f"{i}. **{doc.name or 'Untitled'}**\n URL: {doc.url or 'N/A'}\n {doc.content or ''}"
)
formatted = "\n".join(formatted_results)
return f"**Search Results:**\n\n{formatted}"