Skip to content

Commit

Permalink
Merge branch 'Torantulino:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
TookTheRedBean authored Apr 3, 2023
2 parents 79f0882 + e612b11 commit 7556bac
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 12 deletions.
4 changes: 3 additions & 1 deletion .env.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
OPENAI_API_KEY=your-openai-api-key
ELEVENLABS_API_KEY=your-elevenlabs-api-key
SMART_LLM_MODEL="gpt-4"
FAST_LLM_MODEL="gpt-3.5-turbo"
FAST_LLM_MODEL="gpt-3.5-turbo"
GOOGLE_API_KEY=
CUSTOM_SEARCH_ENGINE_ID=
52 changes: 45 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,22 @@ Your support is greatly appreciated

## Table of Contents

- [Features](#-features)
- [Requirements](#-requirements)
- [Installation](#-installation)
- [Usage](#-usage)
- [Limitations](#-limitations)
- [Disclaimer](#-disclaimer)
- [Connect with Us on Twitter ](#-connect-with-us-on-twitter)
- [Auto-GPT: An Autonomous GPT-4 Experiment](#auto-gpt-an-autonomous-gpt-4-experiment)
- [Demo (30/03/2023):](#demo-30032023)
- [💖 Help Fund Auto-GPT's Development](#-help-fund-auto-gpts-development)
- [Table of Contents](#table-of-contents)
- [🚀 Features](#-features)
- [📋 Requirements](#-requirements)
- [💾 Installation](#-installation)
- [🔧 Usage](#-usage)
- [🗣️ Speech Mode](#️-speech-mode)
- [🔍 Google API Keys Configuration](#-google-api-keys-configuration)
- [Setting up environment variables](#setting-up-environment-variables)
- [💀 Continuous Mode ⚠️](#-continuous-mode-️)
- [GPT3.5 ONLY Mode](#gpt35-only-mode)
- [⚠️ Limitations](#️-limitations)
- [🛡 Disclaimer](#-disclaimer)
- [🐦 Connect with Us on Twitter](#-connect-with-us-on-twitter)


## 🚀 Features
Expand Down Expand Up @@ -100,6 +109,35 @@ python scripts/main.py --speak
```

## 🔍 Google API Keys Configuration

This section is optional, use the official google api if you are having issues with error 429 when running google search.
To use the `google_official_search` command, you need to set up your Google API keys in your environment variables.

1. Go to the [Google Cloud Console](https://console.cloud.google.com/).
2. If you don't already have an account, create one and log in.
3. Create a new project by clicking on the "Select a Project" dropdown at the top of the page and clicking "New Project". Give it a name and click "Create".
4. Go to the [APIs & Services Dashboard](https://console.cloud.google.com/apis/dashboard) and click "Enable APIs and Services". Search for "Custom Search API" and click on it, then click "Enable".
5. Go to the [Credentials](https://console.cloud.google.com/apis/credentials) page and click "Create Credentials". Choose "API Key".
6. Copy the API key and set it as an environment variable named `GOOGLE_API_KEY` on your machine. See setting up environment variables below.
7. Go to the [Custom Search Engine](https://cse.google.com/cse/all) page and click "Add".
8. Set up your search engine by following the prompts. You can choose to search the entire web or specific sites.
9. Once you've created your search engine, click on "Control Panel" and then "Basics". Copy the "Search engine ID" and set it as an environment variable named `CUSTOM_SEARCH_ENGINE_ID` on your machine. See setting up environment variables below.

### Setting up environment variables
For Windows Users:
```
setx GOOGLE_API_KEY "YOUR_GOOGLE_API_KEY"
setx CUSTOM_SEARCH_ENGINE_ID "YOUR_CUSTOM_SEARCH_ENGINE_ID"
```
For macOS and Linux users:
```
export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"
export CUSTOM_SEARCH_ENGINE_ID="YOUR_CUSTOM_SEARCH_ENGINE_ID"
```

## 💀 Continuous Mode ⚠️
Run the AI **without** user authorisation, 100% automated.
Continuous mode is not recommended.
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ requests
tiktoken==0.3.3
docker
googlesearch-python
google-api-python-client #(https://developers.google.com/custom-search/v1/overview)
# Googlesearch python seems to be a bit cursed, anyone good at fixing thigns like this?
45 changes: 44 additions & 1 deletion scripts/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
from execute_code import execute_python_file
from json_parser import fix_and_parse_json
from googlesearch import search
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

cfg = Config()


Expand Down Expand Up @@ -44,7 +47,13 @@ def get_command(response):
def execute_command(command_name, arguments):
try:
if command_name == "google":
return google_search(arguments["input"])

# Check if the Google API key is set and use the official search method
# If the API key is not set or has only whitespaces, use the unofficial search method
if cfg.google_api_key and (cfg.google_api_key.strip() if cfg.google_api_key else None):
return google_official_search(arguments["input"])
else:
return google_search(arguments["input"])
elif command_name == "memory_add":
return commit_memory(arguments["string"])
elif command_name == "memory_del":
Expand Down Expand Up @@ -108,6 +117,40 @@ def google_search(query, num_results=8):

return json.dumps(search_results, ensure_ascii=False, indent=4)

def google_official_search(query, num_results=8):
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import json

try:
# Get the Google API key and Custom Search Engine ID from the config file
api_key = cfg.google_api_key
custom_search_engine_id = cfg.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}"

# Return the list of search result URLs
return search_results_links

def browse_website(url):
summary = get_text_summary(url)
Expand Down
11 changes: 8 additions & 3 deletions scripts/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ def __init__(self):

self.openai_api_key = os.getenv("OPENAI_API_KEY")
self.elevenlabs_api_key = os.getenv("ELEVENLABS_API_KEY")

self.google_api_key = os.getenv("GOOGLE_API_KEY")
self.custom_search_engine_id = os.getenv("CUSTOM_SEARCH_ENGINE_ID")

# Initialize the OpenAI API client
openai.api_key = self.openai_api_key


def set_continuous_mode(self, value: bool):
self.continuous_mode = value

Expand All @@ -63,6 +65,9 @@ def set_openai_api_key(self, value: str):

def set_elevenlabs_api_key(self, value: str):
self.elevenlabs_api_key = value



def set_google_api_key(self, value: str):
self.google_api_key = value

def set_custom_search_engine_id(self, value: str):
self.custom_search_engine_id = value
3 changes: 3 additions & 0 deletions scripts/file_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ def read_file(filename):
def write_to_file(filename, text):
try:
filepath = safe_join(working_directory, filename)
directory = os.path.dirname(filepath)
if not os.path.exists(directory):
os.makedirs(directory)
with open(filepath, "w") as f:
f.write(text)
return "File written to successfully."
Expand Down

0 comments on commit 7556bac

Please sign in to comment.