add imrpvoed
This commit is contained in:
parent
0f7e69c43e
commit
0eb918c893
@ -91,9 +91,10 @@ If you change extension code, click `Reload` on this extension page.
|
||||
Popup shows:
|
||||
|
||||
- Saved file paths
|
||||
- AI suggestions per detected post:
|
||||
- short response
|
||||
- medium response
|
||||
- AI suggestions per detected post (6 total):
|
||||
- improved short + medium
|
||||
- critical short + medium
|
||||
- suggested short + medium
|
||||
- Any AI error details
|
||||
|
||||
History in popup:
|
||||
@ -146,4 +147,3 @@ Common options:
|
||||
`chrome://*`, Web Store, and some protected tabs cannot be scripted.
|
||||
- No AI results in popup:
|
||||
verify server started with `--ai`.
|
||||
|
||||
|
||||
@ -50,12 +50,38 @@ function renderResult(entryOrResp) {
|
||||
for (const p of resp.ai_result.ai.posts) {
|
||||
const idx = typeof p.index === "number" ? p.index : "?";
|
||||
const postText = (p.post_text || "").replace(/\s+/g, " ").trim();
|
||||
const short = (p.short_response || "").replace(/\s+/g, " ").trim();
|
||||
const medium = (p.medium_response || "").replace(/\s+/g, " ").trim();
|
||||
|
||||
// Back-compat with older saved results.
|
||||
const hasNew =
|
||||
"improved_short" in p ||
|
||||
"improved_medium" in p ||
|
||||
"critical_short" in p ||
|
||||
"critical_medium" in p ||
|
||||
"suggested_short" in p ||
|
||||
"suggested_medium" in p;
|
||||
|
||||
const improvedShort = (p.improved_short || "").replace(/\s+/g, " ").trim();
|
||||
const improvedMedium = (p.improved_medium || "").replace(/\s+/g, " ").trim();
|
||||
const criticalShort = (p.critical_short || "").replace(/\s+/g, " ").trim();
|
||||
const criticalMedium = (p.critical_medium || "").replace(/\s+/g, " ").trim();
|
||||
const suggestedShort = (p.suggested_short || "").replace(/\s+/g, " ").trim();
|
||||
const suggestedMedium = (p.suggested_medium || "").replace(/\s+/g, " ").trim();
|
||||
|
||||
const shortLegacy = (p.short_response || "").replace(/\s+/g, " ").trim();
|
||||
const mediumLegacy = (p.medium_response || "").replace(/\s+/g, " ").trim();
|
||||
lines.push("");
|
||||
lines.push(`#${idx} Post: ${clampString(postText, 180)}`);
|
||||
lines.push(` Short: ${short}`);
|
||||
lines.push(` Medium: ${medium}`);
|
||||
if (hasNew) {
|
||||
lines.push(` improved (short): ${improvedShort}`);
|
||||
lines.push(` improved (medium): ${improvedMedium}`);
|
||||
lines.push(` Critical (short): ${criticalShort}`);
|
||||
lines.push(` Critical (medium): ${criticalMedium}`);
|
||||
lines.push(` Suggested (short): ${suggestedShort}`);
|
||||
lines.push(` Suggested (medium): ${suggestedMedium}`);
|
||||
} else {
|
||||
lines.push(` Short: ${shortLegacy}`);
|
||||
lines.push(` Medium: ${mediumLegacy}`);
|
||||
}
|
||||
}
|
||||
if (resp.ai_result.ai_path) lines.push(`\nAI file: ${resp.ai_result.ai_path}`);
|
||||
} else {
|
||||
|
||||
@ -116,8 +116,12 @@ def _sanitize_ai_payload(ai: dict, page_url: str, page_title: str) -> dict:
|
||||
{
|
||||
"index": int(p.get("index", i)),
|
||||
"post_text": _ea_sanitize_text(p.get("post_text", "")),
|
||||
"short_response": _ea_sanitize_text(p.get("short_response", "")),
|
||||
"medium_response": _ea_sanitize_text(p.get("medium_response", "")),
|
||||
"improved_short": _ea_sanitize_text(p.get("improved_short", "")),
|
||||
"improved_medium": _ea_sanitize_text(p.get("improved_medium", "")),
|
||||
"critical_short": _ea_sanitize_text(p.get("critical_short", "")),
|
||||
"critical_medium": _ea_sanitize_text(p.get("critical_medium", "")),
|
||||
"suggested_short": _ea_sanitize_text(p.get("suggested_short", "")),
|
||||
"suggested_medium": _ea_sanitize_text(p.get("suggested_medium", "")),
|
||||
}
|
||||
)
|
||||
out["posts"] = cleaned_posts
|
||||
@ -141,10 +145,23 @@ def _response_schema(max_posts: int) -> dict:
|
||||
"properties": {
|
||||
"index": {"type": "integer"},
|
||||
"post_text": {"type": "string"},
|
||||
"short_response": {"type": "string"},
|
||||
"medium_response": {"type": "string"},
|
||||
"improved_short": {"type": "string"},
|
||||
"improved_medium": {"type": "string"},
|
||||
"critical_short": {"type": "string"},
|
||||
"critical_medium": {"type": "string"},
|
||||
"suggested_short": {"type": "string"},
|
||||
"suggested_medium": {"type": "string"},
|
||||
},
|
||||
"required": ["index", "post_text", "short_response", "medium_response"],
|
||||
"required": [
|
||||
"index",
|
||||
"post_text",
|
||||
"improved_short",
|
||||
"improved_medium",
|
||||
"critical_short",
|
||||
"critical_medium",
|
||||
"suggested_short",
|
||||
"suggested_medium",
|
||||
],
|
||||
},
|
||||
},
|
||||
"notes": {"type": "string"},
|
||||
@ -204,16 +221,24 @@ def main(argv: list[str]) -> int:
|
||||
"goal": "Draft replies to each distinct post currently visible on the page.",
|
||||
"definition_of_post": "A single feed item / post / story / comment root visible on-screen right now. If it's a single-article page, treat the main article as one post.",
|
||||
"output_requirements": {
|
||||
"short_response": "1-2 sentences, direct, useful, no fluff.",
|
||||
"medium_response": "3-6 sentences, more context, still concise.",
|
||||
"style": "Follow the system instructions for voice/tone. If unclear what the post says, be honest and ask a question instead of guessing.",
|
||||
#"ironic": "Lightly ironic, laughing at us humans (not cruel).",
|
||||
"improved": "Proofreading-style improvements, preserving the original words as much as possible. Improving in medium version.",
|
||||
"critical": "Bold/critical: politely questions the premise or assumptions.",
|
||||
"suggested": "Best style you think fits (helpful/witty/clarifying/etc).",
|
||||
"short": "1-2 sentences, direct, useful, no fluff.",
|
||||
"medium": "3-6 sentences, more context, still concise.",
|
||||
"style": "Follow the system instructions for voice/tone. Apply EXTRA_INSTRUCTIONS to all responses. If unclear what the post says, be honest and ask a question instead of guessing.",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
prompt_text = (
|
||||
"You will receive (1) a screenshot of the current viewport and (2) extracted visible page content.\n"
|
||||
"Identify each distinct post visible on the page and draft two reply options per post.\n"
|
||||
"Identify each distinct post visible on the page and draft SIX reply options per post:\n"
|
||||
"- improved_short, improved_medium\n"
|
||||
"- critical_short, critical_medium\n"
|
||||
"- suggested_short, suggested_medium\n"
|
||||
"All six must follow the system instructions and EXTRA_INSTRUCTIONS.\n"
|
||||
"Do not invent facts not present in the screenshot/content.\n"
|
||||
"Return JSON matching the provided schema. Include all top-level keys: page_url, page_title, posts, notes.\n"
|
||||
"If a value is unknown, use an empty string.\n\n"
|
||||
|
||||
@ -141,8 +141,12 @@ def _sanitize_ai_payload(ai: dict, page_url: str, page_title: str) -> dict:
|
||||
{
|
||||
"index": int(p.get("index", i)),
|
||||
"post_text": _ea_sanitize_text(p.get("post_text", "")),
|
||||
"short_response": _ea_sanitize_text(p.get("short_response", "")),
|
||||
"medium_response": _ea_sanitize_text(p.get("medium_response", "")),
|
||||
"improved_short": _ea_sanitize_text(p.get("improved_short", "")),
|
||||
"improved_medium": _ea_sanitize_text(p.get("improved_medium", "")),
|
||||
"critical_short": _ea_sanitize_text(p.get("critical_short", "")),
|
||||
"critical_medium": _ea_sanitize_text(p.get("critical_medium", "")),
|
||||
"suggested_short": _ea_sanitize_text(p.get("suggested_short", "")),
|
||||
"suggested_medium": _ea_sanitize_text(p.get("suggested_medium", "")),
|
||||
}
|
||||
)
|
||||
out["posts"] = cleaned_posts
|
||||
@ -165,10 +169,23 @@ def _response_schema(max_posts: int) -> dict:
|
||||
"properties": {
|
||||
"index": {"type": "integer"},
|
||||
"post_text": {"type": "string"},
|
||||
"short_response": {"type": "string"},
|
||||
"medium_response": {"type": "string"},
|
||||
"improved_short": {"type": "string"},
|
||||
"improved_medium": {"type": "string"},
|
||||
"critical_short": {"type": "string"},
|
||||
"critical_medium": {"type": "string"},
|
||||
"suggested_short": {"type": "string"},
|
||||
"suggested_medium": {"type": "string"},
|
||||
},
|
||||
"required": ["index", "post_text", "short_response", "medium_response"],
|
||||
"required": [
|
||||
"index",
|
||||
"post_text",
|
||||
"improved_short",
|
||||
"improved_medium",
|
||||
"critical_short",
|
||||
"critical_medium",
|
||||
"suggested_short",
|
||||
"suggested_medium",
|
||||
],
|
||||
},
|
||||
},
|
||||
"notes": {"type": "string"},
|
||||
@ -219,16 +236,24 @@ def _maybe_generate_ai(server, png_path: Path, meta: dict, content: object) -> d
|
||||
"goal": "Draft replies to each distinct post currently visible on the page.",
|
||||
"definition_of_post": "A single feed item / post / story / comment root visible on-screen right now. If it's a single-article page, treat the main article as one post.",
|
||||
"output_requirements": {
|
||||
"short_response": "1-2 sentences, direct, useful, no fluff.",
|
||||
"medium_response": "3-6 sentences, more context, still concise.",
|
||||
"style": "Follow the system instructions for voice/tone. If unclear what the post says, be honest and ask a question instead of guessing.",
|
||||
# "ironic": "Lightly ironic, laughing at us humans (not cruel).",
|
||||
"improved": "Proofreading-style improvements, preserving the original words as much as possible. Improving in medium version.",
|
||||
"critical": "Bold/critical: politely questions the premise or assumptions.",
|
||||
"suggested": "Best style you think fits (helpful/witty/clarifying/etc).",
|
||||
"short": "1-2 sentences, direct, useful, no fluff.",
|
||||
"medium": "3-6 sentences, more context, still concise.",
|
||||
"style": "Follow the system instructions for voice/tone. Apply EXTRA_INSTRUCTIONS to all responses. If unclear what the post says, be honest and ask a question instead of guessing.",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
prompt_text = (
|
||||
"You will receive (1) a screenshot of the current viewport and (2) extracted visible page content.\n"
|
||||
"Identify each distinct post visible on the page and draft two reply options per post.\n"
|
||||
"Identify each distinct post visible on the page and draft SIX reply options per post:\n"
|
||||
"- improved_short, improved_medium\n"
|
||||
"- critical_short, critical_medium\n"
|
||||
"- suggested_short, suggested_medium\n"
|
||||
"All six must follow the system instructions and EXTRA_INSTRUCTIONS.\n"
|
||||
"Do not invent facts not present in the screenshot/content.\n"
|
||||
"Return JSON matching the provided schema. Include all top-level keys: page_url, page_title, posts, notes.\n"
|
||||
"If a value is unknown, use an empty string.\n\n"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user