From 8077377735f81af424572e9635ff763765308f33 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 18 Apr 2024 12:23:33 +0530 Subject: [PATCH 01/11] Add Treasure Hunt --- examples/treasure-hunt/README.md | 46 +++++++++++++++++++ examples/treasure-hunt/app.py | 51 +++++++++++++++++++++ examples/treasure-hunt/package.json | 5 ++ examples/treasure-hunt/requirements.txt | 2 + examples/treasure-hunt/static/css/style.css | 33 +++++++++++++ examples/treasure-hunt/static/js/app.js | 50 ++++++++++++++++++++ examples/treasure-hunt/templates/index.html | 43 +++++++++++++++++ examples/treasure-hunt/treasure-hunt.gpt | 26 +++++++++++ 8 files changed, 256 insertions(+) create mode 100644 examples/treasure-hunt/README.md create mode 100644 examples/treasure-hunt/app.py create mode 100644 examples/treasure-hunt/package.json create mode 100644 examples/treasure-hunt/requirements.txt create mode 100644 examples/treasure-hunt/static/css/style.css create mode 100644 examples/treasure-hunt/static/js/app.js create mode 100644 examples/treasure-hunt/templates/index.html create mode 100644 examples/treasure-hunt/treasure-hunt.gpt diff --git a/examples/treasure-hunt/README.md b/examples/treasure-hunt/README.md new file mode 100644 index 00000000..3834d4a8 --- /dev/null +++ b/examples/treasure-hunt/README.md @@ -0,0 +1,46 @@ +# Treasure Hunt + +## Overview + +This Flask application leverages GPTScript to generate clues for a real world treasure hunt game. The user needs to provide a list of locations within a city and the application will generate fun and interesting clues for them. + +## Installation + +### Prerequisites + +- Python 3.8 or later +- Node.js and npm +- Flask +- Other Python and Node.js dependencies listed in `requirements.txt` and `package.json` respectively. + +### Steps + +1. Clone the repository: + + ``` bash + git clone https://github.com/gptscript-ai/gptscript.git + ``` + +2. Navigate to the `examples/treasure-hun` directory and install the dependencies: + + Python: + + ```bash + pip install -r requirements.txt + ``` + + Node: + + ```bash + npm install + ``` + +3. Setup `OPENAI_API_KEY` (Eg: `export OPENAI_API_KEY="yourapikey123456"`). You can get your [API key here](https://platform.openai.com/api-keys). + +4. Run the Flask application using `flask run` or `python app.py` + +## Usage + +1. Open your web browser and navigate to `http://127.0.0.1:5000/`. +2. Use the interface to provide a comma-separated list of locations within a city. For eg: Statue of Liberty, Hudson Yards, Central Park, Grand Central Station. +3. The application will generate fun and witty clues for all these locations. diff --git a/examples/treasure-hunt/app.py b/examples/treasure-hunt/app.py new file mode 100644 index 00000000..426ed8b0 --- /dev/null +++ b/examples/treasure-hunt/app.py @@ -0,0 +1,51 @@ +from gptscript.command import stream_exec_file +from flask import Flask, render_template, request, jsonify +import os + +app = Flask(__name__) + + +# Setting the base directory +base_dir = os.path.dirname(os.path.abspath(__file__)) +app.config['PWD'] = base_dir + +SCRIPT_PATH = os.path.join(base_dir, 'treasure-hunt.gpt') +OUTPUT_FILE_NAME = 'treasure-hunt.md' # The output file name + +def print_output(out, err): + # Error stream has the debug info that is useful to see + for line in err: + print(line) + + for line in out: + print(line) + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/get-clues', methods=['POST']) +def get_clues(): + try: + code = request.json['code'] + + # Execute the script to generate the summary + out, err, wait = stream_exec_file(SCRIPT_PATH, input=code) + print_output(out, err) + wait() + + # Read treasure-hunt.md file + output_file_path = os.path.join(app.config['PWD'], OUTPUT_FILE_NAME) + with open(output_file_path, 'r') as output_file: + summary = output_file.read() + + # Return summary content + return summary + except Exception as e: + return jsonify({'error': str(e)}), 500 + +if __name__ == '__main__': + app.run(debug=False) + + + diff --git a/examples/treasure-hunt/package.json b/examples/treasure-hunt/package.json new file mode 100644 index 00000000..0774935a --- /dev/null +++ b/examples/treasure-hunt/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "marked": "^12.0.1" + } +} diff --git a/examples/treasure-hunt/requirements.txt b/examples/treasure-hunt/requirements.txt new file mode 100644 index 00000000..49351569 --- /dev/null +++ b/examples/treasure-hunt/requirements.txt @@ -0,0 +1,2 @@ +Flask==2.0.1 +gptscript==0.4.1 diff --git a/examples/treasure-hunt/static/css/style.css b/examples/treasure-hunt/static/css/style.css new file mode 100644 index 00000000..24a22436 --- /dev/null +++ b/examples/treasure-hunt/static/css/style.css @@ -0,0 +1,33 @@ +/* style.css */ +body { + background-color: #f5f5f5; + font-family: 'Roboto', sans-serif; + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.container { + max-width: 500px; + width: 60%; + padding: 0 10px; +} + +.input, .button { + border-radius: 0 !important; +} + +.box { + box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); + border-radius: 0; + padding: 30px; +} + +.markdown-body { + box-sizing: border-box; + background-color: #f5f5f5; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); + border-radius: 0; + padding: 30px; +} diff --git a/examples/treasure-hunt/static/js/app.js b/examples/treasure-hunt/static/js/app.js new file mode 100644 index 00000000..1b3b78d5 --- /dev/null +++ b/examples/treasure-hunt/static/js/app.js @@ -0,0 +1,50 @@ +// app.js +new Vue({ + el: '#app', + data: { + code: '', + showClues: false, + cluesMarkdown: '', + renderedMarkdown: '', + isLoading: false + }, + methods: { + getClues() { + this.isLoading = true; + axios.post('/get-clues', { code: this.code }) + .then(response => { + this.cluesMarkdown = response.data; + this.renderedMarkdown = marked.parse(this.cluesMarkdown) + this.showClues = true; + }) + .catch(error => { + if (error.response && error.response.data && error.response.data.error) { + alert('Error: ' + error.response.data.error); + } else { + alert('An unexpected error occurred. Please try again later.'); + } + }) + .finally(() => { + this.isLoading = false; + }); + } + } +}); + +// Initialize the marked library +marked.setOptions({ + renderer: new marked.Renderer(), + highlight: function(code, language) { + const hljs = require('highlight.js'); + const validLanguage = hljs.getLanguage(language) ? language : 'plaintext'; + return hljs.highlight(validLanguage, code).value; + }, + pedantic: false, + gfm: true, + breaks: false, + sanitize: false, + smartLists: true, + smartypants: false, + xhtml: false +}); + diff --git a/examples/treasure-hunt/templates/index.html b/examples/treasure-hunt/templates/index.html new file mode 100644 index 00000000..6bffe95e --- /dev/null +++ b/examples/treasure-hunt/templates/index.html @@ -0,0 +1,43 @@ + + + + + Treasure Hunt + + + + + + + + +
+
+
+

Treasure Hunt

+

How about a real treasure hunt experience? Enter locations for which you want the clues and get hunting!

+
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/examples/treasure-hunt/treasure-hunt.gpt b/examples/treasure-hunt/treasure-hunt.gpt new file mode 100644 index 00000000..b7e3b451 --- /dev/null +++ b/examples/treasure-hunt/treasure-hunt.gpt @@ -0,0 +1,26 @@ +tools: sys.find, sys.read, sys.write, search +args: locations: Any string + +You are an expert in generating treasure hunt clues. You have to create a list of clues for an amazing race-type game in which people go on a scavenger hunt across a city, hopping from one spot to the other. + +Do the following things in order without showing, using, or writing the location provided by the user: +1. Create a blank new markdown file `treasure-hunt.md` +2. Generate a clue in the format "Your next location is a/the..." without including the location's name or address. Try to use interesting trivia, facts, historical information, noteworthy personalities, or events that took place at that location. +3. For the first clue, start with "Your journey starts with/Your first location is..." +4. Be witty or funny when you give a clue, and ensure it has at least three hints for every location to help the user. +6. The clue should also lead the user to the next location, with fun trivia, suggested modes of transport, and the distance. +7. For the last clue, mention that it's the final one and that the user will find their final reward here. +7. Do not show, write, or display the name of the specific location or the word "clue" anywhere in the output. +8. Create a new md file named 'treasure-hunt.md` with all the clues in order of the locations provided, along with a short welcome note to the player welcoming them to the city. Mention the name of the city where these locations are before listing the clues. +9. Beautify the md file neatly with logical line breaks, paragraphs, bold, and italics. For each clue, use a bold subheading with a witty one-liner related to that clue without mentioning the location. + + +--- +name: search +description: Searches the internet for content +args: query: The query to search for +tools: sys.http.html2text? + +1. For each of the location in $(locations), open Google Maps at the URL: "https://www.google.com/maps/search/?api=1&query=${locations}". +2. Find the shortest route between the locations provided based on the order of places provided. +3. Return the best mode of transport to reach from one location to another for each location in the order provided. From 92ade5fc512b3010cfd79cd631b071259c7a1351 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Mon, 6 May 2024 19:04:57 +0530 Subject: [PATCH 02/11] Update README.md Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/treasure-hunt/README.md b/examples/treasure-hunt/README.md index 3834d4a8..129698ed 100644 --- a/examples/treasure-hunt/README.md +++ b/examples/treasure-hunt/README.md @@ -21,7 +21,7 @@ This Flask application leverages GPTScript to generate clues for a real world tr git clone https://github.com/gptscript-ai/gptscript.git ``` -2. Navigate to the `examples/treasure-hun` directory and install the dependencies: +2. Navigate to the `examples/treasure-hunt` directory and install the dependencies: Python: From eec3255362759c7bc63bf55b3350eae64d984d6c Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Mon, 6 May 2024 19:05:17 +0530 Subject: [PATCH 03/11] Update requirements.txt Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/treasure-hunt/requirements.txt b/examples/treasure-hunt/requirements.txt index 49351569..22a041a0 100644 --- a/examples/treasure-hunt/requirements.txt +++ b/examples/treasure-hunt/requirements.txt @@ -1,2 +1,3 @@ Flask==2.0.1 gptscript==0.4.1 +Werkzeug==2.2.2 From b336a7d34a0d5516c05b49e7482eed0d1eb33954 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Tue, 7 May 2024 06:29:42 +0530 Subject: [PATCH 04/11] Updated code for randomizing names --- examples/treasure-hunt/app.py | 32 ++++++++++++------------ examples/treasure-hunt/treasure-hunt.gpt | 21 ++++++++-------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/examples/treasure-hunt/app.py b/examples/treasure-hunt/app.py index 426ed8b0..b9db2dcb 100644 --- a/examples/treasure-hunt/app.py +++ b/examples/treasure-hunt/app.py @@ -1,22 +1,19 @@ from gptscript.command import stream_exec_file from flask import Flask, render_template, request, jsonify import os +import uuid app = Flask(__name__) - # Setting the base directory base_dir = os.path.dirname(os.path.abspath(__file__)) app.config['PWD'] = base_dir - SCRIPT_PATH = os.path.join(base_dir, 'treasure-hunt.gpt') -OUTPUT_FILE_NAME = 'treasure-hunt.md' # The output file name def print_output(out, err): # Error stream has the debug info that is useful to see for line in err: print(line) - for line in out: print(line) @@ -29,23 +26,26 @@ def get_clues(): try: code = request.json['code'] - # Execute the script to generate the summary - out, err, wait = stream_exec_file(SCRIPT_PATH, input=code) + # Generate a unique request ID + request_id = str(uuid.uuid4()) + + # Generate an output file name based on the request ID + output_file_name = f"{request_id}_treasure-hunt.md" + output_file_path = os.path.join(app.config['PWD'], output_file_name) + + # Execute the script to generate the clues + out, err, wait = stream_exec_file(SCRIPT_PATH, "--locations " + code + " --outputfile "+output_file_name) print_output(out, err) wait() - - # Read treasure-hunt.md file - output_file_path = os.path.join(app.config['PWD'], OUTPUT_FILE_NAME) + + # Read the output file with open(output_file_path, 'r') as output_file: summary = output_file.read() - - # Return summary content + + # Return clues return summary except Exception as e: return jsonify({'error': str(e)}), 500 - + if __name__ == '__main__': - app.run(debug=False) - - - + app.run(debug=False) \ No newline at end of file diff --git a/examples/treasure-hunt/treasure-hunt.gpt b/examples/treasure-hunt/treasure-hunt.gpt index b7e3b451..c23ec681 100644 --- a/examples/treasure-hunt/treasure-hunt.gpt +++ b/examples/treasure-hunt/treasure-hunt.gpt @@ -1,18 +1,19 @@ tools: sys.find, sys.read, sys.write, search -args: locations: Any string +args: locations: List of locations +args: outputfile: Name of the output file. You are an expert in generating treasure hunt clues. You have to create a list of clues for an amazing race-type game in which people go on a scavenger hunt across a city, hopping from one spot to the other. Do the following things in order without showing, using, or writing the location provided by the user: -1. Create a blank new markdown file `treasure-hunt.md` -2. Generate a clue in the format "Your next location is a/the..." without including the location's name or address. Try to use interesting trivia, facts, historical information, noteworthy personalities, or events that took place at that location. -3. For the first clue, start with "Your journey starts with/Your first location is..." -4. Be witty or funny when you give a clue, and ensure it has at least three hints for every location to help the user. -6. The clue should also lead the user to the next location, with fun trivia, suggested modes of transport, and the distance. -7. For the last clue, mention that it's the final one and that the user will find their final reward here. -7. Do not show, write, or display the name of the specific location or the word "clue" anywhere in the output. -8. Create a new md file named 'treasure-hunt.md` with all the clues in order of the locations provided, along with a short welcome note to the player welcoming them to the city. Mention the name of the city where these locations are before listing the clues. -9. Beautify the md file neatly with logical line breaks, paragraphs, bold, and italics. For each clue, use a bold subheading with a witty one-liner related to that clue without mentioning the location. + +1. Generate a clue in the format "Your next location is a/the..." without including the location's name or address. Try to use interesting trivia, facts, historical information, noteworthy personalities, or events that took place at that location. +2. For the first clue, start with "Your journey starts with/Your first location is..." +3. Be witty or funny when you give a clue, and ensure it has at least three hints for every location to help the user. +4. The clue should also lead the user to the next location, with fun trivia, suggested modes of transport, and the distance. +5. For the last clue, mention that it's the final one and that the user will find their final reward here. +6. Do not show, write, or display the name of the specific location or the word "clue" anywhere in the output. +7. Create a new md file named $(outputfile) with all the clues in order of the locations provided, along with a short welcome note to the player welcoming them to the city. Mention the name of the city where these locations are before listing the clues. +8. Beautify the md file neatly with logical line breaks, paragraphs, bold, and italics. For each clue, use a bold subheading with a witty one-liner related to that clue without mentioning the location. --- From d1c0fcc328c43392b4d6f1aceadd1aa7c3385158 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Tue, 7 May 2024 06:31:03 +0530 Subject: [PATCH 05/11] Adding a dockerfile --- examples/treasure-hunt/Dockerfile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/treasure-hunt/Dockerfile diff --git a/examples/treasure-hunt/Dockerfile b/examples/treasure-hunt/Dockerfile new file mode 100644 index 00000000..ecc93046 --- /dev/null +++ b/examples/treasure-hunt/Dockerfile @@ -0,0 +1,23 @@ +# Use the official Python image as the base image +FROM python:3.9-slim + +# Set the working directory +WORKDIR /app + +# Copy the requirements file +COPY requirements.txt . + +# Install the Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy the Flask app code +COPY . . + +# Expose the port +EXPOSE 5000 + +# Set the environment variable +ENV FLASK_APP=app.py + +# Run app +CMD ["flask", "run", "--host=0.0.0.0"] \ No newline at end of file From ba33128f559847e78edfd6bea1801580de462fbf Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Tue, 7 May 2024 06:47:21 +0530 Subject: [PATCH 06/11] Adding GPTScript logo --- examples/treasure-hunt/static/css/style.css | 13 +++++++++++++ .../static/made-with-gptscript.png | Bin 0 -> 61707 bytes examples/treasure-hunt/templates/index.html | 1 + 3 files changed, 14 insertions(+) create mode 100644 examples/treasure-hunt/static/made-with-gptscript.png diff --git a/examples/treasure-hunt/static/css/style.css b/examples/treasure-hunt/static/css/style.css index 24a22436..089f2e1c 100644 --- a/examples/treasure-hunt/static/css/style.css +++ b/examples/treasure-hunt/static/css/style.css @@ -31,3 +31,16 @@ body { border-radius: 0; padding: 30px; } + +.gpt-logo { + height: 100%; + width: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.gpt-logo img { + width: 15%; + height: 15%; +} diff --git a/examples/treasure-hunt/static/made-with-gptscript.png b/examples/treasure-hunt/static/made-with-gptscript.png new file mode 100644 index 0000000000000000000000000000000000000000..01fbff4c84d7f2c9183ed1bdb280dced264a6c74 GIT binary patch literal 61707 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

Q;xoDn*`3NT)c2A2#9sIN9ZVe@NxweM%8(S}Sd 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 literal 0 HcmV?d00001 diff --git a/examples/treasure-hunt/templates/index.html b/examples/treasure-hunt/templates/index.html index 6bffe95e..1b13acd0 100644 --- a/examples/treasure-hunt/templates/index.html +++ b/examples/treasure-hunt/templates/index.html @@ -35,6 +35,7 @@

How about a real treasure hunt experience? Enter locations
+ From 6566bab7e865e9f5b27a059eeea15c1a592af78f Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 9 May 2024 05:39:46 +0530 Subject: [PATCH 07/11] Updated debug flag with env variable. Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/treasure-hunt/app.py b/examples/treasure-hunt/app.py index b9db2dcb..7025b3ad 100644 --- a/examples/treasure-hunt/app.py +++ b/examples/treasure-hunt/app.py @@ -48,4 +48,4 @@ def get_clues(): return jsonify({'error': str(e)}), 500 if __name__ == '__main__': - app.run(debug=False) \ No newline at end of file + app.run(debug=os.environ.get('FLASK_DEBUG', False), host='0.0.0.0') From ffa4e20178783b873661241ba88b84b3f32061fe Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 9 May 2024 05:41:16 +0530 Subject: [PATCH 08/11] Added debug env variable Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/treasure-hunt/Dockerfile b/examples/treasure-hunt/Dockerfile index ecc93046..89337293 100644 --- a/examples/treasure-hunt/Dockerfile +++ b/examples/treasure-hunt/Dockerfile @@ -18,6 +18,7 @@ EXPOSE 5000 # Set the environment variable ENV FLASK_APP=app.py +ENV FLASK_DEBUG=True # Set this to True/False to enable/disable debugging. # Run app -CMD ["flask", "run", "--host=0.0.0.0"] \ No newline at end of file +CMD ["flask", "run", "--host=0.0.0.0"] From 574ca61c993df806023cbbf9599530c896a8112e Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 9 May 2024 05:43:16 +0530 Subject: [PATCH 09/11] Added link to gptscript logo. Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/templates/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/treasure-hunt/templates/index.html b/examples/treasure-hunt/templates/index.html index 1b13acd0..9544c085 100644 --- a/examples/treasure-hunt/templates/index.html +++ b/examples/treasure-hunt/templates/index.html @@ -35,10 +35,10 @@

How about a real treasure hunt experience? Enter locations
- + - \ No newline at end of file + From db683073e76331b935d6f42a318f46597b4c96e6 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 9 May 2024 05:50:52 +0530 Subject: [PATCH 10/11] Updating debug flag to True. Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/treasure-hunt/app.py b/examples/treasure-hunt/app.py index 7025b3ad..edad495d 100644 --- a/examples/treasure-hunt/app.py +++ b/examples/treasure-hunt/app.py @@ -48,4 +48,4 @@ def get_clues(): return jsonify({'error': str(e)}), 500 if __name__ == '__main__': - app.run(debug=os.environ.get('FLASK_DEBUG', False), host='0.0.0.0') + app.run(debug=os.environ.get('FLASK_DEBUG', True), host='0.0.0.0') From 6340a930fe1bb93b41d1f96b444c726b7cf5ad55 Mon Sep 17 00:00:00 2001 From: Atulpriya Sharma Date: Thu, 9 May 2024 05:51:22 +0530 Subject: [PATCH 11/11] Updating Debug flag to false Signed-off-by: Atulpriya Sharma --- examples/treasure-hunt/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/treasure-hunt/Dockerfile b/examples/treasure-hunt/Dockerfile index 89337293..c20b1310 100644 --- a/examples/treasure-hunt/Dockerfile +++ b/examples/treasure-hunt/Dockerfile @@ -18,7 +18,7 @@ EXPOSE 5000 # Set the environment variable ENV FLASK_APP=app.py -ENV FLASK_DEBUG=True # Set this to True/False to enable/disable debugging. +ENV FLASK_DEBUG=False # Set this to True/False to enable/disable debugging. # Run app CMD ["flask", "run", "--host=0.0.0.0"]