openvibers/openvibe.ai Commits

live.stream.titles: a session title names what happens, never what anyone looks like or wears ('Orange Shirt Kitchen Chat', 'Beard & Tablet Chat' were public titles) (#120)

OP OpenVibers committed 27 days ago · 72606b45ee · 2 files, +2 −1

Changes

ddiff --git a/server/workflows/live.js b/server/workflows/live.js
iindex 218feb9..70985e4 100644
---- a/server/workflows/live.js
++++ b/server/workflows/live.js
@@@ -193,7 +193,7 @@ const templates = [
input_schema: { type: 'object' },
output_schema: {"type": "object", "additionalProperties": false, "required": ["titles"], "properties": {"titles": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["index", "title"], "properties": {"index": {"type": "integer"}, "title": {"type": "string"}}}}}},
system_prompt: "",
-- user_prompt: "Write a SHORT, catchy stream title for each livestream summary below — the way a real streamer titles a VOD: 3 to 6 words, punchy, no surrounding quotes, no trailing period. Match each stream's vibe.\n\n{{list}}\n\nReturn STRICT JSON only: {\"titles\": [{\"index\": <number>, \"title\": \"<3-6 word title>\"}]} with every item.",
++ user_prompt: "Write a SHORT, catchy stream title for each livestream summary below — the way a real streamer titles a VOD: 3 to 6 words, punchy, no surrounding quotes, no trailing period. Match each stream's vibe. Name what happens on the stream (the game, the activity, the topic), never what anyone looks like or wears (no shirts, hoodies, beanies, hats, glasses, headsets, beards, hair or faces).\n\n{{list}}\n\nReturn STRICT JSON only: {\"titles\": [{\"index\": <number>, \"title\": \"<3-6 word title>\"}]} with every item.",
default_route: 'live.legacy', owner: 'live', metadata: { json_name: 'session_titles' },
},
{
ddiff --git a/test/live-templates.test.js b/test/live-templates.test.js
iindex 22eda94..45cedfa 100644
---- a/test/live-templates.test.js
++++ b/test/live-templates.test.js
@@@ -149,6 +149,7 @@ t.test("a channel description is public prose: never about looks, no lists or la
assert.match(tp('live.hero.slogans').user_prompt, /Never mention anyone's looks, body, clothing or age/);
assert.match(tp('live.hero.slogans').user_prompt, /nothing crude or sexual, even when chat jokes that way, and skip usernames that look like keyboard mashes/);
assert.match(tp('live.stream.describe_frame').user_prompt, /caption naming what happens, never what someone looks like or wears/);
++ assert.match(tp('live.stream.titles').user_prompt, /never what anyone looks like or wears/);
assert.match(tp('live.arena.drama').system_prompt, /never guess a pronoun/);
const out = POSTPROCESS['live.streamer.overview']({ text: '## Overview\n- Streamer handle: finditfixit (@finditfixit).\n- **Content:** repairs old TVs and radios\n- Tone: calm, patient\n\nAnn streams games: mostly Rust.' });
assert.deepStrictEqual(out, { overview: 'finditfixit (@finditfixit). repairs old TVs and radios. calm, patient. Ann streams games: mostly Rust.' });