Pennyalpha / app.py
Sergidev's picture
Update app.py
33bff5d verified
raw
history blame
2.87 kB
from flask import Flask, render_template, jsonify, request
import json
import random
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import os
# Set the TRANSFORMERS_CACHE environment variable
os.environ['TRANSFORMERS_CACHE'] = '/app/cache'
app = Flask(__name__)
# Load initial coins
with open('coins.json', 'r') as f:
coins = json.load(f)
# Initialize game state
game_state = {
'balance': 0,
'flips_left': 1000,
'current_coin': 0
}
# Load AI model
tokenizer = AutoTokenizer.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0")
model = AutoModelForCausalLM.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0")
@app.route('/')
def index():
return render_template('index.html', coins=coins, game_state=game_state)
@app.route('/flip', methods=['POST'])
def flip_coin():
if game_state['flips_left'] > 0:
coin = coins[game_state['current_coin']]
is_heads = random.random() < coin['winrate']
if is_heads:
game_state['balance'] += coin['value']
game_state['flips_left'] -= 1
return jsonify({
'result': 'H' if is_heads else 'T',
'balance': game_state['balance'],
'flips_left': game_state['flips_left']
})
return jsonify({'error': 'No flips left'})
@app.route('/buy', methods=['POST'])
def buy_coin():
index = int(request.json['index'])
if index < len(coins) and game_state['balance'] >= coins[index]['price']:
game_state['balance'] -= coins[index]['price']
game_state['current_coin'] = index
return jsonify({'success': True, 'balance': game_state['balance']})
return jsonify({'success': False})
@app.route('/generate_coin', methods=['POST'])
def generate_coin():
prompt = "Generate a new coin for a game in JSON format with the following properties: color (as a hex code), price, value, and winrate. The price should be higher than 10, the value should be higher than 0.1, and the winrate should be between 0.5 and 0.8."
inputs = tokenizer(prompt, return_tensors="pt")
with torch.no_grad():
outputs = model.generate(**inputs, max_length=200)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
try:
new_coin = json.loads(response)
if all(key in new_coin for key in ['color', 'price', 'value', 'winrate']):
coins.append(new_coin)
return jsonify({'success': True, 'coin': new_coin})
else:
print("Error: Generated coin does not have all required properties")
return jsonify({'success': False, 'error': 'Invalid coin format'})
except json.JSONDecodeError:
print("Error: Could not parse generated coin as JSON")
return jsonify({'success': False, 'error': 'Invalid JSON format'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)