aboutsummaryrefslogtreecommitdiff
path: root/autogpt/commands/web_search.py
diff options
context:
space:
mode:
Diffstat (limited to 'autogpt/commands/web_search.py')
-rw-r--r--autogpt/commands/web_search.py143
1 files changed, 0 insertions, 143 deletions
diff --git a/autogpt/commands/web_search.py b/autogpt/commands/web_search.py
deleted file mode 100644
index d47d680b2..000000000
--- a/autogpt/commands/web_search.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""Google search command for Autogpt."""
-from __future__ import annotations
-
-import json
-import time
-from itertools import islice
-
-from duckduckgo_search import DDGS
-
-from autogpt.agent.agent import Agent
-from autogpt.command_decorator import command
-
-DUCKDUCKGO_MAX_ATTEMPTS = 3
-
-
-@command(
- "web_search",
- "Searches the web",
- {
- "query": {
- "type": "string",
- "description": "The search query",
- "required": True,
- }
- },
- aliases=["search"],
-)
-def web_search(query: str, agent: Agent, num_results: int = 8) -> str:
- """Return the results of a Google search
-
- Args:
- query (str): The search query.
- num_results (int): The number of results to return.
-
- Returns:
- str: The results of the search.
- """
- search_results = []
- attempts = 0
-
- while attempts < DUCKDUCKGO_MAX_ATTEMPTS:
- if not query:
- return json.dumps(search_results)
-
- results = DDGS().text(query)
- search_results = list(islice(results, num_results))
-
- if search_results:
- break
-
- time.sleep(1)
- attempts += 1
-
- results = json.dumps(search_results, ensure_ascii=False, indent=4)
- return safe_google_results(results)
-
-
-@command(
- "google",
- "Google Search",
- {
- "query": {
- "type": "string",
- "description": "The search query",
- "required": True,
- }
- },
- lambda config: bool(config.google_api_key)
- and bool(config.google_custom_search_engine_id),
- "Configure google_api_key and custom_search_engine_id.",
- aliases=["search"],
-)
-def google(query: str, agent: Agent, num_results: int = 8) -> str | list[str]:
- """Return the results of a Google search using the official Google API
-
- Args:
- query (str): The search query.
- num_results (int): The number of results to return.
-
- Returns:
- str: The results of the search.
- """
-
- from googleapiclient.discovery import build
- from googleapiclient.errors import HttpError
-
- try:
- # Get the Google API key and Custom Search Engine ID from the config file
- api_key = agent.config.google_api_key
- custom_search_engine_id = agent.config.google_custom_search_engine_id
-
- # Initialize the Custom Search API service
- service = build("customsearch", "v1", developerKey=api_key)
-
- # Send the search query and retrieve the results
- result = (
- service.cse()
- .list(q=query, cx=custom_search_engine_id, num=num_results)
- .execute()
- )
-
- # Extract the search result items from the response
- search_results = result.get("items", [])
-
- # Create a list of only the URLs from the search results
- search_results_links = [item["link"] for item in search_results]
-
- except HttpError as e:
- # Handle errors in the API call
- error_details = json.loads(e.content.decode())
-
- # Check if the error is related to an invalid or missing API key
- if error_details.get("error", {}).get(
- "code"
- ) == 403 and "invalid API key" in error_details.get("error", {}).get(
- "message", ""
- ):
- return "Error: The provided Google API key is invalid or missing."
- else:
- return f"Error: {e}"
- # google_result can be a list or a string depending on the search results
-
- # Return the list of search result URLs
- return safe_google_results(search_results_links)
-
-
-def safe_google_results(results: str | list) -> str:
- """
- Return the results of a Google search in a safe format.
-
- Args:
- results (str | list): The search results.
-
- Returns:
- str: The results of the search.
- """
- if isinstance(results, list):
- safe_message = json.dumps(
- [result.encode("utf-8", "ignore").decode("utf-8") for result in results]
- )
- else:
- safe_message = results.encode("utf-8", "ignore").decode("utf-8")
- return safe_message