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)
Changes
@@@ -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' },},{@@@ -149,6 +149,7 @@ t.test("a channel description is public prose: never about looks, no lists or laassert.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.' });
@@ -193,7 +193,7 @@ const templates = [
@@ -193,7 +193,7 @@ const templates = [
input_schema: { type: 'object' },
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"}}}}}},
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: "",
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' },
default_route: 'live.legacy', owner: 'live', metadata: { json_name: 'session_titles' },
},
},
{
{
@@ -149,6 +149,7 @@ t.test("a channel description is public prose: never about looks, no lists or la
@@ -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, /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.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.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/);
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.' });
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.' });
assert.deepStrictEqual(out, { overview: 'finditfixit (@finditfixit). repairs old TVs and radios. calm, patient. Ann streams games: mostly Rust.' });