@tuturuuu/ai 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -0
- package/package.json +106 -0
- package/src/api-key-hash.ts +28 -0
- package/src/calendar/events.ts +34 -0
- package/src/calendar/route.ts +114 -0
- package/src/chat/credit-source.ts +1 -0
- package/src/chat/google/chat-request-schema.ts +150 -0
- package/src/chat/google/default-system-instruction.ts +198 -0
- package/src/chat/google/message-file-processing.ts +212 -0
- package/src/chat/google/mira-step-preparation.ts +221 -0
- package/src/chat/google/new/route.ts +368 -0
- package/src/chat/google/route-auth.ts +81 -0
- package/src/chat/google/route-chat-resolution.ts +98 -0
- package/src/chat/google/route-credits.ts +61 -0
- package/src/chat/google/route-message-preparation.ts +331 -0
- package/src/chat/google/route-mira-runtime.ts +206 -0
- package/src/chat/google/route.ts +632 -0
- package/src/chat/google/stream-finish-persistence.ts +722 -0
- package/src/chat/google/summary/route.ts +153 -0
- package/src/chat/mira-render-ui-policy.ts +540 -0
- package/src/chat/mira-system-instruction.ts +484 -0
- package/src/chat-sdk/adapters.ts +389 -0
- package/src/chat-sdk/registry.ts +197 -0
- package/src/chat-sdk.ts +33 -0
- package/src/core.ts +3 -0
- package/src/credits/cap-output-tokens.ts +90 -0
- package/src/credits/check-credits.ts +232 -0
- package/src/credits/constants.ts +30 -0
- package/src/credits/index.ts +46 -0
- package/src/credits/model-mapping.ts +92 -0
- package/src/credits/reservations.ts +514 -0
- package/src/credits/resolve-plan-model.ts +219 -0
- package/src/credits/sync-gateway-models.ts +351 -0
- package/src/credits/types.ts +109 -0
- package/src/credits/use-ai-credits.ts +3 -0
- package/src/embeddings/metered.ts +283 -0
- package/src/executions/route.ts +137 -0
- package/src/generate/route.ts +411 -0
- package/src/hooks.ts +7 -0
- package/src/meetings/summary/route.ts +7 -0
- package/src/meetings/transcription/route.ts +134 -0
- package/src/memory/client.ts +158 -0
- package/src/memory/config.ts +38 -0
- package/src/memory/index.ts +32 -0
- package/src/memory/ingest.ts +51 -0
- package/src/memory/middleware.ts +35 -0
- package/src/memory/operations.ts +480 -0
- package/src/memory/scope.ts +102 -0
- package/src/memory/settings.ts +121 -0
- package/src/memory/types.ts +101 -0
- package/src/memory/workspace.ts +36 -0
- package/src/memory.ts +1 -0
- package/src/mind/patch.ts +146 -0
- package/src/mind/route.ts +687 -0
- package/src/mind/tools.ts +1500 -0
- package/src/mind/types.ts +20 -0
- package/src/object/core.ts +3 -0
- package/src/object/flashcards/route.ts +140 -0
- package/src/object/quizzes/explanation/route.ts +145 -0
- package/src/object/quizzes/route.ts +142 -0
- package/src/object/types.ts +187 -0
- package/src/object/year-plan/route.ts +196 -0
- package/src/react.ts +1 -0
- package/src/scheduling/algorithm.ts +791 -0
- package/src/scheduling/default.ts +36 -0
- package/src/scheduling/duration-optimizer.ts +689 -0
- package/src/scheduling/index.ts +79 -0
- package/src/scheduling/priority-calculator.ts +187 -0
- package/src/scheduling/recurrence-calculator.ts +621 -0
- package/src/scheduling/templates.ts +892 -0
- package/src/scheduling/types.ts +136 -0
- package/src/scheduling/web-adapter.ts +308 -0
- package/src/scheduling.ts +6 -0
- package/src/supported-actions.ts +1 -0
- package/src/supported-providers.ts +6 -0
- package/src/tools/context-builder.ts +372 -0
- package/src/tools/core.ts +1 -0
- package/src/tools/definitions/calendar.ts +106 -0
- package/src/tools/definitions/finance.ts +197 -0
- package/src/tools/definitions/image.ts +74 -0
- package/src/tools/definitions/memory.ts +83 -0
- package/src/tools/definitions/meta.ts +154 -0
- package/src/tools/definitions/render-ui.ts +81 -0
- package/src/tools/definitions/tasks.ts +343 -0
- package/src/tools/definitions/time-tracking.ts +381 -0
- package/src/tools/definitions/workspace-context.ts +45 -0
- package/src/tools/definitions/workspace-user-chat.ts +111 -0
- package/src/tools/executors/calendar.ts +371 -0
- package/src/tools/executors/chat.ts +15 -0
- package/src/tools/executors/finance.ts +638 -0
- package/src/tools/executors/helpers/encryption.ts +107 -0
- package/src/tools/executors/image.ts +247 -0
- package/src/tools/executors/markitdown.ts +684 -0
- package/src/tools/executors/memory.ts +277 -0
- package/src/tools/executors/parallel-checks.ts +176 -0
- package/src/tools/executors/qr.ts +170 -0
- package/src/tools/executors/scope-helpers.ts +192 -0
- package/src/tools/executors/search.ts +149 -0
- package/src/tools/executors/settings.ts +40 -0
- package/src/tools/executors/tasks.ts +1087 -0
- package/src/tools/executors/theme.ts +23 -0
- package/src/tools/executors/timer/timer-categories-executor.ts +110 -0
- package/src/tools/executors/timer/timer-category-mutations.ts +240 -0
- package/src/tools/executors/timer/timer-goal-mutations.ts +323 -0
- package/src/tools/executors/timer/timer-goals-executor.ts +272 -0
- package/src/tools/executors/timer/timer-helpers.ts +372 -0
- package/src/tools/executors/timer/timer-mutation-schemas.ts +160 -0
- package/src/tools/executors/timer/timer-mutation-types.ts +212 -0
- package/src/tools/executors/timer/timer-mutations.ts +19 -0
- package/src/tools/executors/timer/timer-queries.ts +18 -0
- package/src/tools/executors/timer/timer-session-lifecycle.ts +299 -0
- package/src/tools/executors/timer/timer-session-mutations.ts +10 -0
- package/src/tools/executors/timer/timer-session-queries.ts +153 -0
- package/src/tools/executors/timer/timer-session-updates.ts +200 -0
- package/src/tools/executors/timer/timer-sessions-executor.ts +91 -0
- package/src/tools/executors/timer/timer-stats-executor.ts +157 -0
- package/src/tools/executors/timer.ts +22 -0
- package/src/tools/executors/user.ts +60 -0
- package/src/tools/executors/workspace.ts +135 -0
- package/src/tools/json-render-catalog.ts +875 -0
- package/src/tools/mira-tool-definitions.ts +55 -0
- package/src/tools/mira-tool-dispatcher.ts +265 -0
- package/src/tools/mira-tool-metadata.ts +164 -0
- package/src/tools/mira-tool-names.ts +95 -0
- package/src/tools/mira-tool-render-ui.ts +54 -0
- package/src/tools/mira-tool-types.ts +17 -0
- package/src/tools/mira-tools.ts +167 -0
- package/src/tools/normalize-render-ui-input.ts +321 -0
- package/src/tools/workspace-context.ts +233 -0
- package/src/types.ts +38 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { vertex } from '@ai-sdk/google-vertex/edge';
|
|
2
|
+
import {
|
|
3
|
+
getCurrentUserAIWhitelistStatus,
|
|
4
|
+
withForwardedInternalApiAuth,
|
|
5
|
+
} from '@tuturuuu/internal-api';
|
|
6
|
+
import { createClient } from '@tuturuuu/supabase/next/server';
|
|
7
|
+
import { Output, streamText } from 'ai';
|
|
8
|
+
import { NextResponse } from 'next/server';
|
|
9
|
+
import { withAiMemory } from '../../memory';
|
|
10
|
+
import { yearPlanSchema } from '../types';
|
|
11
|
+
|
|
12
|
+
interface PlanRequest {
|
|
13
|
+
wsId: string;
|
|
14
|
+
goals: string[];
|
|
15
|
+
planDuration: number;
|
|
16
|
+
skillLevel: string;
|
|
17
|
+
availability: number;
|
|
18
|
+
learningStyle?: string;
|
|
19
|
+
preferredSchedule?: {
|
|
20
|
+
weekdays?: boolean;
|
|
21
|
+
weekends?: boolean;
|
|
22
|
+
timeOfDay?: 'morning' | 'afternoon' | 'evening';
|
|
23
|
+
};
|
|
24
|
+
focusAreas?: string[];
|
|
25
|
+
existingSkills?: string[];
|
|
26
|
+
dependencies?: string[];
|
|
27
|
+
milestoneFrequency?: 'weekly' | 'monthly' | 'quarterly';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function POST(req: Request) {
|
|
31
|
+
try {
|
|
32
|
+
const body = await req.json();
|
|
33
|
+
|
|
34
|
+
// Input validation
|
|
35
|
+
if (!body || typeof body !== 'object') {
|
|
36
|
+
return new Response('Invalid request body', { status: 400 });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const {
|
|
40
|
+
wsId,
|
|
41
|
+
goals,
|
|
42
|
+
planDuration,
|
|
43
|
+
skillLevel,
|
|
44
|
+
availability,
|
|
45
|
+
learningStyle = 'balanced',
|
|
46
|
+
preferredSchedule = {
|
|
47
|
+
weekdays: true,
|
|
48
|
+
weekends: false,
|
|
49
|
+
timeOfDay: 'morning',
|
|
50
|
+
},
|
|
51
|
+
focusAreas = [],
|
|
52
|
+
existingSkills = [],
|
|
53
|
+
dependencies = [],
|
|
54
|
+
milestoneFrequency = 'monthly',
|
|
55
|
+
} = body as PlanRequest;
|
|
56
|
+
|
|
57
|
+
// Validation
|
|
58
|
+
// if (!wsId) {
|
|
59
|
+
// return new Response('Missing workspace ID', { status: 400 });
|
|
60
|
+
// }
|
|
61
|
+
// if (!goals?.length) {
|
|
62
|
+
// return new Response('At least one goal is required', { status: 400 });
|
|
63
|
+
// }
|
|
64
|
+
// if (!planDuration || planDuration < 1) {
|
|
65
|
+
// return new Response('Invalid plan duration', { status: 400 });
|
|
66
|
+
// }
|
|
67
|
+
// if (
|
|
68
|
+
// !skillLevel ||
|
|
69
|
+
// !['beginner', 'intermediate', 'advanced'].includes(skillLevel)
|
|
70
|
+
// ) {
|
|
71
|
+
// return new Response('Invalid skill level', { status: 400 });
|
|
72
|
+
// }
|
|
73
|
+
// if (!availability || availability < 1) {
|
|
74
|
+
// return new Response('Invalid availability', { status: 400 });
|
|
75
|
+
// }
|
|
76
|
+
|
|
77
|
+
// eslint-disable-next-line no-undef
|
|
78
|
+
const apiKey = process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
|
79
|
+
|
|
80
|
+
if (!apiKey)
|
|
81
|
+
return new Response('Service configuration error', { status: 500 });
|
|
82
|
+
|
|
83
|
+
// Authorization
|
|
84
|
+
const supabase = await createClient();
|
|
85
|
+
|
|
86
|
+
const {
|
|
87
|
+
data: { user },
|
|
88
|
+
} = await supabase.auth.getUser();
|
|
89
|
+
if (!user?.email) return new Response('Unauthorized', { status: 401 });
|
|
90
|
+
|
|
91
|
+
const whitelisted = await getCurrentUserAIWhitelistStatus(
|
|
92
|
+
withForwardedInternalApiAuth(req.headers)
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
if (!whitelisted.enabled)
|
|
96
|
+
return new Response('Unauthorized', { status: 401 });
|
|
97
|
+
|
|
98
|
+
// Format goals and additional context
|
|
99
|
+
const formattedGoals = goals
|
|
100
|
+
.map((goal, i) => `${i + 1}. ${goal}`)
|
|
101
|
+
.join('\n');
|
|
102
|
+
|
|
103
|
+
const schedulePreference = `
|
|
104
|
+
- Available: ${availability} hours/week
|
|
105
|
+
- Schedule: ${preferredSchedule?.weekdays ? 'Weekdays' : ''} ${preferredSchedule?.weekends ? 'Weekends' : ''}
|
|
106
|
+
- Preferred time: ${preferredSchedule?.timeOfDay || 'morning'}
|
|
107
|
+
`;
|
|
108
|
+
|
|
109
|
+
const skillContext = `
|
|
110
|
+
- Current level: ${skillLevel || 'beginner'}
|
|
111
|
+
- Learning style: ${learningStyle || 'balanced'}
|
|
112
|
+
- Existing skills: ${existingSkills?.join(', ') || 'none'}
|
|
113
|
+
- Focus areas: ${focusAreas?.join(', ') || 'none'}
|
|
114
|
+
${dependencies?.length ? `- Dependencies: ${dependencies.join(', ')}` : ''}
|
|
115
|
+
`;
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
const result = streamText({
|
|
119
|
+
model: await withAiMemory({
|
|
120
|
+
customId: `year-plan-${Date.now()}`,
|
|
121
|
+
model: vertex('gemini-2.5-flash-lite'),
|
|
122
|
+
product: 'education',
|
|
123
|
+
source: 'year_plan',
|
|
124
|
+
surface: 'year_plan',
|
|
125
|
+
userId: user.id,
|
|
126
|
+
wsId,
|
|
127
|
+
}),
|
|
128
|
+
maxOutputTokens: 8192,
|
|
129
|
+
providerOptions: {
|
|
130
|
+
vertex: {
|
|
131
|
+
safetySettings: [
|
|
132
|
+
{ category: 'HARM_CATEGORY_HARASSMENT', threshold: 'BLOCK_NONE' },
|
|
133
|
+
{
|
|
134
|
+
category: 'HARM_CATEGORY_HATE_SPEECH',
|
|
135
|
+
threshold: 'BLOCK_NONE',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
|
|
139
|
+
threshold: 'BLOCK_NONE',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
category: 'HARM_CATEGORY_DANGEROUS_CONTENT',
|
|
143
|
+
threshold: 'BLOCK_NONE',
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
prompt: `
|
|
149
|
+
Create a detailed ${planDuration}-month learning and achievement plan.
|
|
150
|
+
|
|
151
|
+
GOALS:
|
|
152
|
+
${formattedGoals}
|
|
153
|
+
|
|
154
|
+
USER PROFILE:
|
|
155
|
+
${skillContext}
|
|
156
|
+
|
|
157
|
+
SCHEDULE PREFERENCES:
|
|
158
|
+
${schedulePreference}
|
|
159
|
+
|
|
160
|
+
PLANNING PREFERENCES:
|
|
161
|
+
- Plan duration: ${planDuration} months
|
|
162
|
+
- Milestone frequency: ${milestoneFrequency}
|
|
163
|
+
|
|
164
|
+
REQUIREMENTS:
|
|
165
|
+
1. Break down goals into achievable milestones and specific tasks
|
|
166
|
+
2. Consider user's skill level and learning style
|
|
167
|
+
3. Adapt task complexity progressively
|
|
168
|
+
4. Account for dependencies between tasks
|
|
169
|
+
5. Distribute tasks according to availability and schedule preferences
|
|
170
|
+
6. Include specific success metrics for each milestone
|
|
171
|
+
7. Provide actionable recommendations
|
|
172
|
+
8. Consider potential obstacles and mitigation strategies
|
|
173
|
+
9. Include stretch goals for faster progress
|
|
174
|
+
10. Add learning resources and practice exercises
|
|
175
|
+
11. Make sure the plan is realistic and achievable, with no duplicate tasks
|
|
176
|
+
|
|
177
|
+
Format the response in a clear, hierarchical structure with quarters, months, and weeks as appropriate.
|
|
178
|
+
|
|
179
|
+
Today's date: ${new Date().toISOString().split('T')[0]}
|
|
180
|
+
`,
|
|
181
|
+
output: Output.object({ schema: yearPlanSchema }),
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
return result.toTextStreamResponse();
|
|
185
|
+
} catch (error) {
|
|
186
|
+
console.error('Error generating plan:', error);
|
|
187
|
+
return new Response('Failed to generate plan', { status: 500 });
|
|
188
|
+
}
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error('Error in year plan API:', error);
|
|
191
|
+
return NextResponse.json(
|
|
192
|
+
{ error: 'Internal server error' },
|
|
193
|
+
{ status: 500 }
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
}
|
package/src/react.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '@ai-sdk/react';
|