"use client"; import { makeAssistantToolUI } from "@assistant-ui/react"; import { z } from "zod"; import { cn } from "@/lib/utils"; import { User, Shield, Target, Clock, Zap } from "lucide-react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; // Schema for user profile tool arguments export const UserProfileArgsSchema = z.object({ riskTolerance: z.enum(["conservative", "moderate", "aggressive"]), investmentStyle: z.enum(["day_trader", "swing", "long_term"]), preferredChains: z.array(z.string()), portfolioSizeRange: z.enum(["small", "medium", "large"]).optional(), experienceLevel: z.enum(["beginner", "intermediate", "advanced"]).optional(), notificationPreferences: z.object({ priceAlerts: z.boolean(), whaleAlerts: z.boolean(), newsAlerts: z.boolean(), }).optional(), }); export type UserProfileArgs = z.infer; // Schema for user profile result export const UserProfileResultSchema = z.object({ success: z.boolean(), message: z.string().optional(), }); export type UserProfileResult = z.infer; const getRiskColor = (risk: string) => { switch (risk) { case "conservative": return "text-green-500 bg-green-500/10 border-green-500/20"; case "moderate": return "text-yellow-500 bg-yellow-500/10 border-yellow-500/20"; case "aggressive": return "text-red-500 bg-red-500/10 border-red-500/20"; default: return ""; } }; const getStyleIcon = (style: string) => { switch (style) { case "day_trader": return ; case "swing": return ; case "long_term": return ; default: return null; } }; const formatStyle = (style: string) => { switch (style) { case "day_trader": return "Day Trader"; case "swing": return "Swing Trader"; case "long_term": return "Long Term Investor"; default: return style; } }; /** * UserProfileToolUI - Displays user's investment profile inline in chat * Used when AI responds to "show my profile" or "what's my risk setting?" */ export const UserProfileToolUI = makeAssistantToolUI({ toolName: "get_user_profile", render: ({ args, status }) => { const isLoading = status.type === "running"; return ( Your Investment Profile {isLoading && Loading...} {/* Main Profile Settings */}
{/* Risk Tolerance */}
Risk Tolerance

{args.riskTolerance}

{args.riskTolerance === "conservative" && "Prefer stable, lower-risk investments"} {args.riskTolerance === "moderate" && "Balance between risk and reward"} {args.riskTolerance === "aggressive" && "Willing to take higher risks for higher returns"}

{/* Investment Style */}
{getStyleIcon(args.investmentStyle)} Investment Style

{formatStyle(args.investmentStyle)}

{args.investmentStyle === "day_trader" && "Quick trades, high frequency"} {args.investmentStyle === "swing" && "Hold for days to weeks"} {args.investmentStyle === "long_term" && "Hold for months to years"}

{/* Preferred Chains */}

Preferred Chains

{args.preferredChains.map((chain) => ( {chain} ))}
{/* Notification Preferences */} {args.notificationPreferences && (

Notifications

{args.notificationPreferences.priceAlerts && Price Alerts} {args.notificationPreferences.whaleAlerts && Whale Alerts} {args.notificationPreferences.newsAlerts && News Alerts}
)} {/* Edit Hint */}

Say "update my risk tolerance to moderate" to change settings

); }, });