39343-vm/ai-voice-model/tools-rewards.ts
2026-03-27 12:21:43 +00:00

58 lines
2.0 KiB
TypeScript

import { FunctionDeclaration, Type } from '@google/genai';
import { StorageService } from '../services/storageService';
export const REWARDS_TOOLS: FunctionDeclaration[] = [
{
name: 'check_karma_balance',
parameters: {
type: Type.OBJECT,
description: 'Checks the user\'s current Karma points balance.',
properties: {}
}
},
{
name: 'redeem_reward_item',
parameters: {
type: Type.OBJECT,
description: 'Redeems a reward item from the Karma Bazaar.',
properties: {
keyword: { type: Type.STRING, description: 'Keyword of the item (e.g., "tree", "dog", "gold frame").' }
},
required: ['keyword']
}
}
];
export const executeRewardsTool = async (name: string, args: any, navigate: (path: string) => void) => {
if (name === 'check_karma_balance') {
const p = await StorageService.getProfile();
return { result: `You currently have ${p?.points || 0} Karma points.` };
}
if (name === 'redeem_reward_item') {
const key = args.keyword.toLowerCase();
let itemId = '';
let cost = 0;
// Simple keyword mapping for demo purposes
if (key.includes('dog')) { itemId = 'donate_dog'; cost = 100; }
else if (key.includes('tree')) { itemId = 'donate_tree'; cost = 250; }
else if (key.includes('orphan')) { itemId = 'donate_orphan'; cost = 1000; }
else if (key.includes('gold') && key.includes('frame')) { itemId = 'frame_gold'; cost = 200; }
else if (key.includes('adventurer')) { itemId = 'pack_adventurer'; cost = 500; }
if (itemId) {
const res = await StorageService.redeemReward(itemId, cost);
if (res.success) {
navigate('/rewards');
return { result: `Successfully redeemed ${args.keyword}. Karma deducted.` };
} else {
return { result: `Redemption failed: ${res.error}` };
}
}
return { result: `I couldn't find a reward item matching "${args.keyword}". Try visiting the Bazaar.` };
}
return null;
};