Add route to ask chatgpt about the state of the board
This commit is contained in:
parent
e23cacfcbe
commit
f5249e361c
@ -1,5 +1,5 @@
|
||||
FROM archlinux
|
||||
RUN pacman -Sy --noconfirm xorg-server-xvfb xdotool scrot python-flask && pacman -Sc --noconfirm
|
||||
RUN pacman -Sy --noconfirm xorg-server-xvfb xdotool scrot python-flask python-openai && pacman -Sc --noconfirm
|
||||
RUN mkdir -p /root/.local/share/
|
||||
ADD profile /root/.local/share/IntoTheBreach
|
||||
ADD .generated/game/ /breach
|
||||
|
2
go
2
go
@ -8,7 +8,7 @@
|
||||
|
||||
⚡️run-service() {
|
||||
_help-line "Start docker container with port 5000 exposed"
|
||||
docker run --rm -ti -p 5000:5000 --name breach itbaas
|
||||
docker run --rm -ti -p 5000:5000 --name breach -e OPENAI_KEY=$(pass openai/project-key) itbaas
|
||||
}
|
||||
|
||||
⚡️build-image() {
|
||||
|
@ -1,15 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from flask import Flask, send_file
|
||||
from flask import Flask, send_file, Response
|
||||
import base64
|
||||
import os
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
from openai import OpenAI
|
||||
|
||||
class GameInterface:
|
||||
def click(self, x, y):
|
||||
subprocess.run(['xdotool', 'mousemove', x, y, 'click', '1'])
|
||||
|
||||
def screenshot(self):
|
||||
scrot = subprocess.run(['scrot', '-'], capture_output = True)
|
||||
return scrot.stdout
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
SCREENSHOT_DIR = "/tmp/screenshots"
|
||||
if not os.path.exists(SCREENSHOT_DIR):
|
||||
os.makedirs(SCREENSHOT_DIR)
|
||||
openai_client = OpenAI(api_key = os.environ['OPENAI_KEY'])
|
||||
game = GameInterface()
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
@ -17,17 +25,30 @@ def index():
|
||||
|
||||
@app.route('/screenshot')
|
||||
def screenshot():
|
||||
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
||||
screenshot_path = os.path.join(SCREENSHOT_DIR, f'screenshot_{timestamp}.png')
|
||||
|
||||
subprocess.run(['scrot', screenshot_path])
|
||||
|
||||
return send_file(screenshot_path, mimetype='image/png')
|
||||
return Response(game.screenshot(), mimetype='image/png')
|
||||
|
||||
@app.route('/click/<int:x>/<int:y>')
|
||||
def click(x, y):
|
||||
subprocess.run(['xdotool', 'mousemove', str(x), str(y), 'click', '1'])
|
||||
game.click(str(x), str(y))
|
||||
return f'Click performed at position ({x}, {y})'
|
||||
|
||||
@app.route('/ask-for-next-move')
|
||||
def nextmove():
|
||||
screenshot = game.screenshot()
|
||||
screenshot64 = base64.b64encode(screenshot).decode('utf-8')
|
||||
|
||||
response = openai_client.chat.completions.create(
|
||||
model="gpt-4o-mini",
|
||||
messages=[ {
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": "we're playing Into the Breach. Describe the state of the board. Then tell me the best moves for our mechs to make."},
|
||||
{"type": "image_url", "image_url": { "url": f"data:image/png;base64,{screenshot64}", }, },
|
||||
],
|
||||
} ]
|
||||
)
|
||||
return response.choices[0].message.content
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, host='0.0.0.0', port=5000)
|
||||
|
Loading…
Reference in New Issue
Block a user