A chill Bluesky bot, with responses powered by Gemini.
at main 1.3 kB view raw
1import type { FunctionCall, GenerateContentConfig } from "@google/genai"; 2import * as create_blog_post from "./create_blog_post"; 3import * as create_post from "./create_post"; 4import * as mute_thread from "./mute_thread"; 5import type { infer as z_infer } from "zod"; 6 7const validation_mappings = { 8 "create_post": create_post.validator, 9 "create_blog_post": create_blog_post.validator, 10 "mute_thread": mute_thread.validator, 11} as const; 12 13export const declarations = [ 14 { 15 functionDeclarations: [ 16 create_post.definition, 17 create_blog_post.definition, 18 mute_thread.definition, 19 ], 20 }, 21]; 22 23type ToolName = keyof typeof validation_mappings; 24export async function handler(call: FunctionCall & { name: ToolName }) { 25 const parsedArgs = validation_mappings[call.name].parse(call.args); 26 27 switch (call.name) { 28 case "create_post": 29 return await create_post.handler( 30 parsedArgs as z_infer<typeof create_post.validator>, 31 ); 32 case "create_blog_post": 33 return await create_blog_post.handler( 34 parsedArgs as z_infer<typeof create_blog_post.validator>, 35 ); 36 case "mute_thread": 37 return await mute_thread.handler( 38 parsedArgs as z_infer<typeof mute_thread.validator>, 39 ); 40 } 41}