// Interactions API with @google/genai: create, chain with previousInteractionId, stream events, delete. // STATUS: LIVE_VERIFIED 2026-09-18 — `node --env-file=.env --experimental-strip-types examples/gemini/interactions/interactions.ts` (gemini-3.5-flash-lite, < $0.001). import { GoogleGenAI } from "@google/genai"; import { logRequest } from "../../shared/tool-loop/log.ts"; const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }); const MODEL = "gemini-3.5-flash-lite"; // NOTE: the Interactions SDK surface passes the wire format through (snake_case) — camelCase → 400 "Unknown parameter 'generationConfig'. Did you mean 'generation_config'?" const first: any = await ai.interactions.create({ model: MODEL, input: "Reply with OK.", generation_config: { max_output_tokens: 16 } } as any); logRequest("gemini", "POST", "/v1beta/interactions", 200, 0.0001, "interactions.ts create"); console.log("create:", first.id, first.status, first.steps.map((s: any) => s.type)); const stream: any = await ai.interactions.create({ model: MODEL, input: "Reply with OK.", previous_interaction_id: first.id, stream: true, generation_config: { max_output_tokens: 16 } } as any); const types: string[] = []; let last: any; for await (const ev of stream) { types.push(ev.event_type ?? ev.eventType); last = ev; } logRequest("gemini", "POST", "/v1beta/interactions", 200, 0.0001, "interactions.ts stream"); console.log("stream events:", types.join(" → ")); const got: any = await ai.interactions.get(first.id); // positional id (an object is stringified → 400 "Invalid interaction name") logRequest("gemini", "GET", "/v1beta/interactions/{id}", 200, 0, "interactions.ts get"); console.log("get:", got.status, "usage:", got.usage?.total_tokens); for (const id of [first.id, last?.interaction?.id].filter(Boolean)) { await ai.interactions.delete(id); logRequest("gemini", "DELETE", "/v1beta/interactions/{id}", 200, 0, "interactions.ts delete"); } console.log("deleted");