Implement JSON config system and AI PM integration

This commit is contained in:
Antigravity 2026-04-12 18:09:05 +01:00
parent 1537d8518e
commit bff5afc366
4 changed files with 59 additions and 8 deletions

1
.gitignore vendored
View File

@ -15,6 +15,7 @@ instance/
# Environment
.env
config.json
.env.local
.env.development.local
.env.test.local

34
app.py
View File

@ -39,6 +39,7 @@ Socket events (server → client)
"""
import os
import json
import time
import uuid
import base64
@ -57,21 +58,42 @@ from flask_socketio import SocketIO, emit, join_room, disconnect
from database import db, init_db
from models import User, Message, UserIgnore
# ---------------------------------------------------------------------------
# Configuration Loader
# ---------------------------------------------------------------------------
def load_config():
conf = {}
config_path = os.path.join(os.path.dirname(__file__), "config.json")
if os.path.exists(config_path):
try:
with open(config_path, "r") as f:
conf = json.load(f)
except Exception as e:
print(f"⚠️ Warning: Failed to load config.json: {e}")
return conf
_CONFIG = load_config()
def _get_conf(key, default=None):
# Order: Env Var > Config File > Default
return os.environ.get(key, _CONFIG.get(key, default))
# ---------------------------------------------------------------------------
# Configuration
# ---------------------------------------------------------------------------
SECRET_KEY = os.environ.get("SECRET_KEY", uuid.uuid4().hex)
JWT_SECRET = os.environ.get("JWT_SECRET", uuid.uuid4().hex)
ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "admin1234")
SECRET_KEY = _get_conf("SECRET_KEY", uuid.uuid4().hex)
JWT_SECRET = _get_conf("JWT_SECRET", uuid.uuid4().hex)
ADMIN_PASSWORD = _get_conf("ADMIN_PASSWORD", "admin1234")
MAX_MSG_LEN = 500
LOBBY = "lobby"
AI_FREE_LIMIT = 3
AI_FREE_LIMIT = int(_get_conf("AI_FREE_LIMIT", 3))
AI_BOT_NAME = "Violet"
# Ollama
OLLAMA_URL = os.environ.get("OLLAMA_URL", "http://localhost:11434")
VIOLET_MODEL = os.environ.get("VIOLET_MODEL", "sam860/dolphin3-llama3.2:3b")
OLLAMA_URL = _get_conf("OLLAMA_URL", "http://localhost:11434")
VIOLET_MODEL = _get_conf("VIOLET_MODEL", "sam860/dolphin3-llama3.2:3b")
VIOLET_SYSTEM = (
"You are Violet, a flirtatious and sophisticated nightclub hostess at "
"an exclusive, dimly-lit members-only club. You are charming, witty, "

12
config.example.json Normal file
View File

@ -0,0 +1,12 @@
{
"HOST": "0.0.0.0",
"PORT": 5000,
"SECRET_KEY": "sexchat-very-secret-key-change-me",
"JWT_SECRET": "sexchat-jwt-secret-key-change-me",
"ADMIN_PASSWORD": "admin",
"OLLAMA_URL": "http://localhost:11434",
"VIOLET_MODEL": "sam860/dolphin3-llama3.2:3b",
"DATABASE_URL": "sqlite:///instance/sexchat.db",
"REDIS_URL": "redis://localhost:6379/0",
"AI_FREE_LIMIT": 3
}

View File

@ -12,6 +12,7 @@ Usage:
import os
import sys
import json
import subprocess
import signal
import time
@ -23,6 +24,21 @@ eventlet.monkey_patch()
# PID file to track the daemon process
PID_FILE = "sexchat.pid"
def load_config():
conf = {}
config_path = os.path.join(os.path.dirname(__file__), "config.json")
if os.path.exists(config_path):
try:
with open(config_path, "r") as f:
conf = json.load(f)
except Exception:
pass
return conf
def _get_conf(key, default=None):
conf = load_config()
return os.environ.get(key, conf.get(key, default))
def get_pid():
if os.path.exists(PID_FILE):
with open(PID_FILE, "r") as f:
@ -52,7 +68,7 @@ def start_daemon():
"gunicorn",
"--worker-class", "eventlet",
"-w", "1",
"--bind", f"{os.environ.get('HOST', '0.0.0.0')}:{os.environ.get('PORT', '5000')}",
"--bind", f"{_get_conf('HOST', '0.0.0.0')}:{_get_conf('PORT', 5000)}",
"--daemon",
"--pid", PID_FILE,
"--access-logfile", "access.log",
@ -108,7 +124,7 @@ def run_debug():
"gunicorn",
"--worker-class", "eventlet",
"-w", "1",
"--bind", f"{os.environ.get('HOST', '0.0.0.0')}:{os.environ.get('PORT', '5000')}",
"--bind", f"{_get_conf('HOST', '0.0.0.0')}:{_get_conf('PORT', 5000)}",
"--log-level", "debug",
"--access-logfile", "-",
"--error-logfile", "-",