Use category ids for AI writer
This commit is contained in:
+31
-10
@@ -92,7 +92,7 @@ PROMPT_HINTS = {
|
||||
),
|
||||
"safe": "Обычно не трогаем. Если промпт райтера переписывается, свободную часть меняем выше, контракт оставляем стабильным.",
|
||||
"input": "Контракт склеивается после свободной инструкции и отправляется как system prompt.",
|
||||
"contract": '{"rewrites":[{"id":123,"category":"разгрузка","text":"готовый текст без хэштегов","notes":"короткая заметка для редактора"}]}',
|
||||
"contract": '{"rewrites":[{"id":123,"category_id":2,"text":"готовый текст без хэштегов","notes":"короткая заметка для редактора"}]}',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -898,6 +898,25 @@ async def writer_categories() -> list[str]:
|
||||
]
|
||||
|
||||
|
||||
async def writer_category_payload() -> list[dict[str, Any]]:
|
||||
pool = await get_pool()
|
||||
rows = await pool.fetch(
|
||||
"""
|
||||
SELECT sort_order AS id, name, tag
|
||||
FROM content_categories
|
||||
WHERE is_active=TRUE
|
||||
ORDER BY sort_order, name
|
||||
"""
|
||||
)
|
||||
categories = [{"id": int(row["id"]), "name": str(row["name"]), "tag": str(row["tag"])} for row in rows]
|
||||
if categories:
|
||||
return categories
|
||||
return [
|
||||
{"id": idx + 1, "name": name, "tag": normalize_hash_tag(name, "category")}
|
||||
for idx, name in enumerate(await writer_categories())
|
||||
]
|
||||
|
||||
|
||||
async def category_rows() -> list[dict[str, Any]]:
|
||||
pool = await get_pool()
|
||||
rows = await pool.fetch(
|
||||
@@ -1040,7 +1059,12 @@ def prompt_test_preview_text(parsed: Any) -> str:
|
||||
|
||||
def prompt_test_preview_category(parsed: Any) -> str:
|
||||
rewrite = prompt_test_first_rewrite(parsed)
|
||||
return str((rewrite or {}).get("category") or "").strip()
|
||||
if not rewrite:
|
||||
return ""
|
||||
category_id = rewrite.get("category_id")
|
||||
if category_id not in {None, ""}:
|
||||
return f"category_id: {category_id}"
|
||||
return str(rewrite.get("category") or "").strip()
|
||||
|
||||
|
||||
def prompt_test_preview_notes(parsed: Any) -> str:
|
||||
@@ -2337,14 +2361,14 @@ async def prompt_test(request: Request, post_id: int | None = None, q_status: st
|
||||
return redirect("/login")
|
||||
q_status = normalize_prompt_test_status(q_status)
|
||||
posts, selected = await prompt_test_posts(post_id, q_status)
|
||||
categories = await writer_categories()
|
||||
category_payload = await writer_category_payload()
|
||||
max_text_chars = max(200, int(await fetch_setting("ai_writer_max_text_chars", 3500) or 3500))
|
||||
prompt = str(await fetch_setting("ai_writer_prompt", "") or "")
|
||||
provider = str(await fetch_setting("ai_writer_provider", "anthropic") or "anthropic")
|
||||
model = str(await fetch_setting("ai_writer_model", "") or "")
|
||||
payload = prompt_test_payload(selected, max_text_chars) if selected else []
|
||||
if payload:
|
||||
payload["categories"] = categories
|
||||
payload["categories"] = category_payload
|
||||
return templates.TemplateResponse(
|
||||
"prompt_test.html",
|
||||
base_context(
|
||||
@@ -2379,7 +2403,7 @@ async def prompt_test_run(
|
||||
require_csrf(user, csrf_token)
|
||||
q_status = normalize_prompt_test_status(q_status)
|
||||
posts, selected = await prompt_test_posts(post_id, q_status)
|
||||
categories = await writer_categories()
|
||||
category_payload = await writer_category_payload()
|
||||
max_text_chars = max(200, int(await fetch_setting("ai_writer_max_text_chars", 3500) or 3500))
|
||||
provider = str(await fetch_setting("ai_writer_provider", "anthropic") or "anthropic")
|
||||
model = str(await fetch_setting("ai_writer_model", "") or "").strip()
|
||||
@@ -2390,7 +2414,7 @@ async def prompt_test_run(
|
||||
normalized_prompt = prompt.replace("\\r\\n", "\n").replace("\\n", "\n").strip()
|
||||
payload = prompt_test_payload(selected, max_text_chars) if selected else []
|
||||
if payload:
|
||||
payload["categories"] = categories
|
||||
payload["categories"] = category_payload
|
||||
result = None
|
||||
error = None
|
||||
if not selected:
|
||||
@@ -2533,7 +2557,7 @@ async def category_create(
|
||||
return redirect("/workers")
|
||||
tag = normalize_hash_tag(tag or name, "category")
|
||||
pool = await get_pool()
|
||||
sort_order = int(await pool.fetchval("SELECT COALESCE(MAX(sort_order), 0) + 10 FROM content_categories") or 10)
|
||||
sort_order = int(await pool.fetchval("SELECT COALESCE(MAX(sort_order), 0) + 1 FROM content_categories") or 1)
|
||||
await pool.execute(
|
||||
"""
|
||||
INSERT INTO content_categories(name, tag, sort_order)
|
||||
@@ -2558,7 +2582,6 @@ async def category_update(
|
||||
csrf_token: str = Form(...),
|
||||
name: str = Form(...),
|
||||
tag: str = Form(""),
|
||||
sort_order: int = Form(0),
|
||||
):
|
||||
user = await get_current_user(request)
|
||||
if not user:
|
||||
@@ -2574,14 +2597,12 @@ async def category_update(
|
||||
UPDATE content_categories
|
||||
SET name=$2,
|
||||
tag=$3,
|
||||
sort_order=$4,
|
||||
updated_at=NOW()
|
||||
WHERE id=$1
|
||||
""",
|
||||
category_id,
|
||||
name,
|
||||
tag,
|
||||
sort_order,
|
||||
)
|
||||
await audit(user["id"], "category.update", "content_category", category_id, {"name": name, "tag": tag})
|
||||
return redirect("/workers")
|
||||
|
||||
Reference in New Issue
Block a user