52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
import json
|
|
import os
|
|
|
|
from AppConfig import promptsFolderPath, schemaTemplateName
|
|
|
|
|
|
class PromptLibrary:
|
|
"""Simple prompt storage; swap with DB/API later without touching callers."""
|
|
|
|
promptCatalog = {}
|
|
|
|
@staticmethod
|
|
def reloadCatalog():
|
|
catalog = {}
|
|
if os.path.isdir(promptsFolderPath):
|
|
for fileName in os.listdir(promptsFolderPath):
|
|
if not fileName.endswith(".json"):
|
|
continue
|
|
if fileName == schemaTemplateName:
|
|
continue
|
|
filePath = os.path.join(promptsFolderPath, fileName)
|
|
try:
|
|
with open(filePath, "r", encoding="utf-8") as promptFile:
|
|
records = json.load(promptFile)
|
|
except (json.JSONDecodeError, OSError):
|
|
continue
|
|
if not isinstance(records, list):
|
|
records = [records]
|
|
for record in records:
|
|
category = record.get("category")
|
|
name = record.get("name")
|
|
template = record.get("template")
|
|
if not category or not name or not template:
|
|
continue
|
|
categoryPrompts = catalog.setdefault(category, {})
|
|
categoryPrompts[name] = template
|
|
generalPrompts = catalog.setdefault("general", {})
|
|
if "fallback" not in generalPrompts:
|
|
generalPrompts["fallback"] = "Still working on that, {user}. Here's what I can do next: {context}"
|
|
PromptLibrary.promptCatalog = catalog
|
|
|
|
@staticmethod
|
|
def fetch(category, promptName):
|
|
return PromptLibrary.promptCatalog.get(category, {}).get(promptName)
|
|
|
|
@staticmethod
|
|
def fallback():
|
|
return PromptLibrary.promptCatalog["general"]["fallback"]
|
|
|
|
|
|
PromptLibrary.reloadCatalog()
|