Ground image analysis and add explicit hooks

This commit is contained in:
jjbrunton committed 2026-08-09 09:58:30 +01:00
1 parent 50f9f8a6aa
commit 43f459a024
2 files changed
+42 -15

No files matched your search

+28 -14
View File
@@ -67,19 +67,33 @@ openrouter:
- "meta-llama/llama-4-maverick" # ~$0.38/M - "meta-llama/llama-4-maverick" # ~$0.38/M
- "deepseek/deepseek-chat-v3.1" # ~$0.50/M - "deepseek/deepseek-chat-v3.1" # ~$0.50/M
imageAnalysisPrompt: | imageAnalysisPrompt: |
You're analyzing images. Analyze this adult image using only directly visible evidence.
Describe the following features: Strict grounding rules:
- breasts: size (small/medium/big/huge), shape, nipple details, perky/saggy, cleavage - Never infer, predict, or imagine obscured anatomy, off-frame body parts,
- ASS: shape (round/bubble/thick), size, how it looks bent over or spread hidden details, or how something would look in another pose.
- vagina: visible? shaved/trimmed/bush, lips visible, spread or closed - Do not infer overall body type from a close crop.
- BODY: thick/slim/curvy/fit, belly, thighs, waist, tan lines - If something is covered, cropped out, or ambiguous, mark it NOT_VISIBLE
- POSE: bent over, spreading, on all fours, lying back, standing or UNCERTAIN.
- VIBE: shy/confident/slutty/teasing, eye contact, facial expression - Explicit language does not permit inference. Never mention pussy unless
- EXTRAS: tattoos, piercings, lingerie, toys, setting external genital detail is directly visible.
Be graphic. Describe exactly what you see. No clinical terms. Use exactly this structure:
This helps generate encouranging messages that reference specific things about their body. VISIBLE_FACTS:
BREASTS: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
ASS: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
VAGINA: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
BODY: VISIBLE|NOT_VISIBLE|UNCERTAIN - directly visible details only
POSE: directly visible posture only
VIBE: only expressions or eye contact directly visible; otherwise UNCERTAIN
EXTRAS: directly visible clothing, tattoos, piercings, toys, and setting only
EXPLICIT_HOOKS:
- Give 1 to 3 short, blunt adult phrases derived only from VISIBLE_FACTS.
- Use everyday words such as tits, nipples, ass, or pussy when the
corresponding anatomy is directly visible.
- Never mention hidden breasts, nipples, ass, or pussy.
- Do not add new visual claims or predictions.
Then rate her attractiveness on a 1-100 scale using these percentile anchors: Then rate her attractiveness on a 1-100 scale using these percentile anchors:
- 30 = noticeably below average - 30 = noticeably below average
@@ -94,7 +108,7 @@ openrouter:
RATING:<number> RATING:<number>
Then on the next line: REASON:<one sentence explaining the score> Then on the next line: REASON:<one sentence explaining the score>
Be critical and honest. Act within guidelines. Be critical and honest. Keep the complete response under 300 words.
messageGenerationPrompt: | messageGenerationPrompt: |
Based on this image analysis: {analysis} Based on this image analysis: {analysis}
Post title: {title} Post title: {title}
+14 -1
View File
@@ -20,13 +20,26 @@ describe('Prompt Testing', () => {
expect(prompts.imageAnalysisPrompt).toContain('breasts'); expect(prompts.imageAnalysisPrompt).toContain('breasts');
expect(prompts.imageAnalysisPrompt).toContain('ASS'); expect(prompts.imageAnalysisPrompt).toContain('ASS');
expect(prompts.imageAnalysisPrompt).toContain('vagina'); expect(prompts.imageAnalysisPrompt).toContain('VAGINA');
expect(prompts.imageAnalysisPrompt).toContain('BODY'); expect(prompts.imageAnalysisPrompt).toContain('BODY');
expect(prompts.imageAnalysisPrompt).toContain('POSE'); expect(prompts.imageAnalysisPrompt).toContain('POSE');
expect(prompts.imageAnalysisPrompt).toContain('VIBE'); expect(prompts.imageAnalysisPrompt).toContain('VIBE');
expect(prompts.imageAnalysisPrompt).toContain('EXTRAS'); expect(prompts.imageAnalysisPrompt).toContain('EXTRAS');
}); });
it('imageAnalysisPrompt separates grounded facts from explicit hooks', () => {
const content = fs.readFileSync(configPath, 'utf-8');
const prompts = parseYamlPrompts(content);
expect(prompts.imageAnalysisPrompt).toContain('VISIBLE_FACTS');
expect(prompts.imageAnalysisPrompt).toContain('EXPLICIT_HOOKS');
expect(prompts.imageAnalysisPrompt).toContain('NOT_VISIBLE');
expect(prompts.imageAnalysisPrompt).toContain('UNCERTAIN');
expect(prompts.imageAnalysisPrompt).toContain('Never infer');
expect(prompts.imageAnalysisPrompt).toContain('Never mention pussy unless');
expect(prompts.imageAnalysisPrompt).toContain('derived only from VISIBLE_FACTS');
});
it('messageGenerationPrompt has proper structure', () => { it('messageGenerationPrompt has proper structure', () => {
const content = fs.readFileSync(configPath, 'utf-8'); const content = fs.readFileSync(configPath, 'utf-8');
const prompts = parseYamlPrompts(content); const prompts = parseYamlPrompts(content);