import { openai } from '../agent.js'; import type { InterpreterOutput, RetrievalOutput } from '../types/agents.js'; export async function runRetrieval(input: InterpreterOutput, brainstormCount = 100): Promise { const response = await openai.chat.completions.create({ model: 'gpt-5.4', temperature: 0.9, service_tier: 'flex', response_format: { type: 'json_object' }, messages: [ { role: 'system', content: `You are a TV show candidate generator. Your goal is to brainstorm a LARGE, DIVERSE pool of ${brainstormCount} TV show candidates that match the user's structured preferences. Your output MUST be valid JSON matching this schema: { "candidates": [ { "title": string, "reason": string } ] } Rules: - Include both well-known and obscure shows - Prioritize RECALL over precision — it's better to include too many than too few - Each "reason" should briefly explain why the show matches the preferences - Avoid duplicates - Include shows from different decades, countries, and networks - Aim for ${brainstormCount} candidates minimum`, }, { role: 'user', content: `Structured preferences: Liked shows: ${JSON.stringify(input.liked)} Disliked shows: ${JSON.stringify(input.disliked)} Themes: ${JSON.stringify(input.themes)} Character preferences: ${JSON.stringify(input.character_preferences)} Tone: ${JSON.stringify(input.tone)} Avoid: ${JSON.stringify(input.avoid)} Generate a large, diverse pool of TV show candidates.`, }, ], }); const content = response.choices[0]?.message?.content ?? '{"candidates":[]}'; return JSON.parse(content) as RetrievalOutput; }