Initial commit: prompt template manager
React + Tailwind frontend, FastAPI backend, settings.json storage. Supports preset CRUD, live variable filling, and AI rewrite via OpenAI. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import json
|
||||
import secrets
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
SETTINGS_PATH = Path(__file__).parent.parent / "settings.json"
|
||||
|
||||
|
||||
def _now():
|
||||
return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
|
||||
|
||||
|
||||
def _read():
|
||||
if not SETTINGS_PATH.exists():
|
||||
return {"openai_api_key": "", "presets": []}
|
||||
return json.loads(SETTINGS_PATH.read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def _write(data):
|
||||
tmp = SETTINGS_PATH.with_suffix(".tmp")
|
||||
tmp.write_text(json.dumps(data, indent=2), encoding="utf-8")
|
||||
tmp.replace(SETTINGS_PATH)
|
||||
|
||||
|
||||
def list_presets():
|
||||
return _read()["presets"]
|
||||
|
||||
|
||||
def create_preset(name, description, template, variables):
|
||||
data = _read()
|
||||
preset = {
|
||||
"id": secrets.token_hex(4),
|
||||
"name": name,
|
||||
"description": description,
|
||||
"template": template,
|
||||
"variables": variables,
|
||||
"created_at": _now(),
|
||||
"updated_at": _now(),
|
||||
}
|
||||
data["presets"].append(preset)
|
||||
_write(data)
|
||||
return preset
|
||||
|
||||
|
||||
def update_preset(preset_id, fields):
|
||||
data = _read()
|
||||
for p in data["presets"]:
|
||||
if p["id"] == preset_id:
|
||||
p.update(fields)
|
||||
p["updated_at"] = _now()
|
||||
_write(data)
|
||||
return p
|
||||
return None
|
||||
|
||||
|
||||
def delete_preset(preset_id):
|
||||
data = _read()
|
||||
before = len(data["presets"])
|
||||
data["presets"] = [p for p in data["presets"] if p["id"] != preset_id]
|
||||
if len(data["presets"]) == before:
|
||||
return False
|
||||
_write(data)
|
||||
return True
|
||||
|
||||
|
||||
def get_openai_key():
|
||||
return _read().get("openai_api_key", "")
|
||||
|
||||
|
||||
def set_openai_key(key: str):
|
||||
data = _read()
|
||||
data["openai_api_key"] = key
|
||||
_write(data)
|
||||
Reference in New Issue
Block a user