@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.
Files changed (130) hide show
  1. package/README.md +76 -0
  2. package/package.json +106 -0
  3. package/src/api-key-hash.ts +28 -0
  4. package/src/calendar/events.ts +34 -0
  5. package/src/calendar/route.ts +114 -0
  6. package/src/chat/credit-source.ts +1 -0
  7. package/src/chat/google/chat-request-schema.ts +150 -0
  8. package/src/chat/google/default-system-instruction.ts +198 -0
  9. package/src/chat/google/message-file-processing.ts +212 -0
  10. package/src/chat/google/mira-step-preparation.ts +221 -0
  11. package/src/chat/google/new/route.ts +368 -0
  12. package/src/chat/google/route-auth.ts +81 -0
  13. package/src/chat/google/route-chat-resolution.ts +98 -0
  14. package/src/chat/google/route-credits.ts +61 -0
  15. package/src/chat/google/route-message-preparation.ts +331 -0
  16. package/src/chat/google/route-mira-runtime.ts +206 -0
  17. package/src/chat/google/route.ts +632 -0
  18. package/src/chat/google/stream-finish-persistence.ts +722 -0
  19. package/src/chat/google/summary/route.ts +153 -0
  20. package/src/chat/mira-render-ui-policy.ts +540 -0
  21. package/src/chat/mira-system-instruction.ts +484 -0
  22. package/src/chat-sdk/adapters.ts +389 -0
  23. package/src/chat-sdk/registry.ts +197 -0
  24. package/src/chat-sdk.ts +33 -0
  25. package/src/core.ts +3 -0
  26. package/src/credits/cap-output-tokens.ts +90 -0
  27. package/src/credits/check-credits.ts +232 -0
  28. package/src/credits/constants.ts +30 -0
  29. package/src/credits/index.ts +46 -0
  30. package/src/credits/model-mapping.ts +92 -0
  31. package/src/credits/reservations.ts +514 -0
  32. package/src/credits/resolve-plan-model.ts +219 -0
  33. package/src/credits/sync-gateway-models.ts +351 -0
  34. package/src/credits/types.ts +109 -0
  35. package/src/credits/use-ai-credits.ts +3 -0
  36. package/src/embeddings/metered.ts +283 -0
  37. package/src/executions/route.ts +137 -0
  38. package/src/generate/route.ts +411 -0
  39. package/src/hooks.ts +7 -0
  40. package/src/meetings/summary/route.ts +7 -0
  41. package/src/meetings/transcription/route.ts +134 -0
  42. package/src/memory/client.ts +158 -0
  43. package/src/memory/config.ts +38 -0
  44. package/src/memory/index.ts +32 -0
  45. package/src/memory/ingest.ts +51 -0
  46. package/src/memory/middleware.ts +35 -0
  47. package/src/memory/operations.ts +480 -0
  48. package/src/memory/scope.ts +102 -0
  49. package/src/memory/settings.ts +121 -0
  50. package/src/memory/types.ts +101 -0
  51. package/src/memory/workspace.ts +36 -0
  52. package/src/memory.ts +1 -0
  53. package/src/mind/patch.ts +146 -0
  54. package/src/mind/route.ts +687 -0
  55. package/src/mind/tools.ts +1500 -0
  56. package/src/mind/types.ts +20 -0
  57. package/src/object/core.ts +3 -0
  58. package/src/object/flashcards/route.ts +140 -0
  59. package/src/object/quizzes/explanation/route.ts +145 -0
  60. package/src/object/quizzes/route.ts +142 -0
  61. package/src/object/types.ts +187 -0
  62. package/src/object/year-plan/route.ts +196 -0
  63. package/src/react.ts +1 -0
  64. package/src/scheduling/algorithm.ts +791 -0
  65. package/src/scheduling/default.ts +36 -0
  66. package/src/scheduling/duration-optimizer.ts +689 -0
  67. package/src/scheduling/index.ts +79 -0
  68. package/src/scheduling/priority-calculator.ts +187 -0
  69. package/src/scheduling/recurrence-calculator.ts +621 -0
  70. package/src/scheduling/templates.ts +892 -0
  71. package/src/scheduling/types.ts +136 -0
  72. package/src/scheduling/web-adapter.ts +308 -0
  73. package/src/scheduling.ts +6 -0
  74. package/src/supported-actions.ts +1 -0
  75. package/src/supported-providers.ts +6 -0
  76. package/src/tools/context-builder.ts +372 -0
  77. package/src/tools/core.ts +1 -0
  78. package/src/tools/definitions/calendar.ts +106 -0
  79. package/src/tools/definitions/finance.ts +197 -0
  80. package/src/tools/definitions/image.ts +74 -0
  81. package/src/tools/definitions/memory.ts +83 -0
  82. package/src/tools/definitions/meta.ts +154 -0
  83. package/src/tools/definitions/render-ui.ts +81 -0
  84. package/src/tools/definitions/tasks.ts +343 -0
  85. package/src/tools/definitions/time-tracking.ts +381 -0
  86. package/src/tools/definitions/workspace-context.ts +45 -0
  87. package/src/tools/definitions/workspace-user-chat.ts +111 -0
  88. package/src/tools/executors/calendar.ts +371 -0
  89. package/src/tools/executors/chat.ts +15 -0
  90. package/src/tools/executors/finance.ts +638 -0
  91. package/src/tools/executors/helpers/encryption.ts +107 -0
  92. package/src/tools/executors/image.ts +247 -0
  93. package/src/tools/executors/markitdown.ts +684 -0
  94. package/src/tools/executors/memory.ts +277 -0
  95. package/src/tools/executors/parallel-checks.ts +176 -0
  96. package/src/tools/executors/qr.ts +170 -0
  97. package/src/tools/executors/scope-helpers.ts +192 -0
  98. package/src/tools/executors/search.ts +149 -0
  99. package/src/tools/executors/settings.ts +40 -0
  100. package/src/tools/executors/tasks.ts +1087 -0
  101. package/src/tools/executors/theme.ts +23 -0
  102. package/src/tools/executors/timer/timer-categories-executor.ts +110 -0
  103. package/src/tools/executors/timer/timer-category-mutations.ts +240 -0
  104. package/src/tools/executors/timer/timer-goal-mutations.ts +323 -0
  105. package/src/tools/executors/timer/timer-goals-executor.ts +272 -0
  106. package/src/tools/executors/timer/timer-helpers.ts +372 -0
  107. package/src/tools/executors/timer/timer-mutation-schemas.ts +160 -0
  108. package/src/tools/executors/timer/timer-mutation-types.ts +212 -0
  109. package/src/tools/executors/timer/timer-mutations.ts +19 -0
  110. package/src/tools/executors/timer/timer-queries.ts +18 -0
  111. package/src/tools/executors/timer/timer-session-lifecycle.ts +299 -0
  112. package/src/tools/executors/timer/timer-session-mutations.ts +10 -0
  113. package/src/tools/executors/timer/timer-session-queries.ts +153 -0
  114. package/src/tools/executors/timer/timer-session-updates.ts +200 -0
  115. package/src/tools/executors/timer/timer-sessions-executor.ts +91 -0
  116. package/src/tools/executors/timer/timer-stats-executor.ts +157 -0
  117. package/src/tools/executors/timer.ts +22 -0
  118. package/src/tools/executors/user.ts +60 -0
  119. package/src/tools/executors/workspace.ts +135 -0
  120. package/src/tools/json-render-catalog.ts +875 -0
  121. package/src/tools/mira-tool-definitions.ts +55 -0
  122. package/src/tools/mira-tool-dispatcher.ts +265 -0
  123. package/src/tools/mira-tool-metadata.ts +164 -0
  124. package/src/tools/mira-tool-names.ts +95 -0
  125. package/src/tools/mira-tool-render-ui.ts +54 -0
  126. package/src/tools/mira-tool-types.ts +17 -0
  127. package/src/tools/mira-tools.ts +167 -0
  128. package/src/tools/normalize-render-ui-input.ts +321 -0
  129. package/src/tools/workspace-context.ts +233 -0
  130. 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';