Spaces:
Sleeping
Sleeping
| from flask import Flask, request, jsonify, send_file | |
| from groq import Groq | |
| import os | |
| app = Flask(__name__) | |
| client = Groq(api_key=os.environ.get("GROQ_API_KEY")) | |
| SYSTEM = """Você é o Mestre de Jogo (MJ) absoluto do RPG "O Pilar dos Deuses". | |
| MUNDO: Dividido entre Boreas (Norte) e Austros (Sul), separados pelo Pilar dos Deuses. | |
| REINOS BOREAS: | |
| 1. Império de Ferro (Bastilha de Aço) - Militar S, Intel A, Mágico D, Financeiro A. Humanos modificados. Elite: Engrenagens do Apocalipse. | |
| 2. Reino de Sangue (Acampamento Eterno) - Militar A. Orcs/Tieflings. Elite: Rasga-Vésperas. | |
| 3. Hegemonia Glacial (Ventus) - Mágico A. Elementais de Gelo. Elite: Sentinelas da Geada. | |
| 4. República dos Artífices (Neo-Mecanica) - Financeiro S. Gnomos/Humanos. Elite: Arquitetos de Aço. | |
| REINOS AUSTROS: | |
| 5. Teocracia Solar (Lumen) - Mágico S. Celestiais. CAÇAM linhagens demoníacas ativamente. | |
| 6. Confederação das Ilhas (Porto das Sombras) - Intel S. Piratas/mercadores. | |
| 7. Sultanato das Areias (Oásis de Ouro) - Intel S. Ifrits/Humanos. | |
| 8. Federação das Selvas (Veridia) - Militar A. Feras/Dríades/Elfos. | |
| SISTEMAS: | |
| - Role 1d20 internamente: 1=falha catastrófica, 20=crítico épico. Informe [DADO:N]. | |
| - Ranks: E < D < C < B < A < S < SS < SS+ | |
| - Calendário: 360 dias. Ciclos: Despertar(1-3), Ascensão(4-6), Zênite(7-9), Ocaso(10-12) | |
| - Linhagem demoníaca adormecida desperta em crises. Dê pistas sutis. | |
| - Morte é permanente. Combate brutal com dano real. | |
| FORMATO OBRIGATÓRIO: | |
| Linha 1: [DADO:N] | |
| Narrativa épica em PT-BR (mínimo 3 parágrafos) | |
| Última linha: STATUS|hp=N|maxHp=N|gold=N|rank=X|local=X|hora=HH:MM|dia=N|ciclo=X|clima=X|for=N|agi=N|mana=N|car=N|men=N""" | |
| def index(): | |
| return send_file('index.html') | |
| def chat(): | |
| try: | |
| data = request.json | |
| messages = data.get('messages', []) | |
| char = data.get('char', {}) | |
| char_info = f"\n\nPERSONAGEM: {char.get('name','?')} | Linhagem: {char.get('lineage','?')} | HP:{char.get('hp',100)}/{char.get('maxHp',100)} | Rank:{char.get('rank','E')} | Ouro:{char.get('gold',50)} | Local:{char.get('local','?')} | For:{char.get('for',10)} Agi:{char.get('agi',10)} Mana:{char.get('mana',5)} Car:{char.get('car',8)} Men:{char.get('men',10)}" | |
| response = client.chat.completions.create( | |
| model="llama-3.3-70b-versatile", | |
| max_tokens=1500, | |
| messages=[ | |
| {"role": "system", "content": SYSTEM + char_info}, | |
| *messages[-12:] | |
| ] | |
| ) | |
| return jsonify({"reply": response.choices[0].message.content}) | |
| except Exception as e: | |
| return jsonify({"error": str(e)}), 500 | |
| if __name__ == '__main__': | |
| port = int(os.environ.get('PORT', 7860)) | |
| app.run(host='0.0.0.0', port=port) | |