@speakableio/core 1.0.13 → 1.0.15
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/dist/index.native.d.mts +13 -5
- package/dist/index.native.d.ts +13 -5
- package/dist/index.native.js +48 -17
- package/dist/index.native.js.map +1 -1
- package/dist/index.native.mjs +48 -17
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.web.d.mts +13 -5
- package/dist/index.web.js +48 -17
- package/dist/index.web.js.map +1 -1
- package/package.json +1 -1
package/dist/index.native.d.mts
CHANGED
|
@@ -772,6 +772,11 @@ interface PageScore {
|
|
|
772
772
|
hint?: string[];
|
|
773
773
|
reviewed?: boolean;
|
|
774
774
|
error?: ('feedback_error' | 'transcript_error' | 'summary_error' | 'audio_upload_error' | 'unknown' | null)[];
|
|
775
|
+
stagedResponse?: {
|
|
776
|
+
audio?: string | null;
|
|
777
|
+
fileName?: string | null;
|
|
778
|
+
transcript?: string | null;
|
|
779
|
+
} | null;
|
|
775
780
|
}
|
|
776
781
|
|
|
777
782
|
declare enum AssignmentAnalyticsType {
|
|
@@ -993,7 +998,9 @@ declare function useUpdateCardScore({ isAssignment, activityId, userId, cardIds,
|
|
|
993
998
|
}, Error, {
|
|
994
999
|
cardId: string;
|
|
995
1000
|
cardScore: PageScore;
|
|
996
|
-
},
|
|
1001
|
+
}, {
|
|
1002
|
+
previousData: Score | undefined;
|
|
1003
|
+
}>;
|
|
997
1004
|
};
|
|
998
1005
|
declare function useClearScore(): {
|
|
999
1006
|
mutationClearScore: _tanstack_react_query.UseMutationResult<{
|
|
@@ -2772,7 +2779,7 @@ declare const useBaseOpenAI: ({ onTranscriptSuccess, onTranscriptError, onComple
|
|
|
2772
2779
|
url: string;
|
|
2773
2780
|
fileName: string;
|
|
2774
2781
|
}>;
|
|
2775
|
-
uploadAudioAndGetTranscript: (audio: string, language: string) => Promise<{
|
|
2782
|
+
uploadAudioAndGetTranscript: (audio: string, language: string, pagePrompt: string | null) => Promise<{
|
|
2776
2783
|
transcript: string;
|
|
2777
2784
|
audioUrl: string;
|
|
2778
2785
|
}>;
|
|
@@ -2785,19 +2792,20 @@ declare const useBaseOpenAI: ({ onTranscriptSuccess, onTranscriptError, onComple
|
|
|
2785
2792
|
url: string;
|
|
2786
2793
|
fileName: string;
|
|
2787
2794
|
}>;
|
|
2788
|
-
uploadAudioAndGetTranscript: (audio: string, language: string) => Promise<{
|
|
2795
|
+
uploadAudioAndGetTranscript: (audio: string, language: string, pagePrompt: string | null) => Promise<{
|
|
2789
2796
|
transcript: string;
|
|
2790
2797
|
audioUrl: string;
|
|
2791
2798
|
}>;
|
|
2792
|
-
getTranscript: (audioUrl: string, language: string) => Promise<
|
|
2799
|
+
getTranscript: (audioUrl: string, language: string, prompt?: string) => Promise<any>;
|
|
2793
2800
|
getFreeResponseCompletion: (messages: string[], isFreeResponse: boolean, feedbackLanguage: string, gradingStandard?: string) => Promise<any>;
|
|
2794
|
-
getFeedback: ({ cardId, language, writtenResponse, audio, autoGrade, file, }: {
|
|
2801
|
+
getFeedback: ({ cardId, language, writtenResponse, audio, autoGrade, file, pagePrompt, }: {
|
|
2795
2802
|
cardId: string;
|
|
2796
2803
|
language: string;
|
|
2797
2804
|
writtenResponse: string | null;
|
|
2798
2805
|
audio: string | null;
|
|
2799
2806
|
autoGrade: boolean;
|
|
2800
2807
|
file: string | null;
|
|
2808
|
+
pagePrompt: string | null;
|
|
2801
2809
|
}) => Promise<{
|
|
2802
2810
|
noFeedbackAvailable: boolean;
|
|
2803
2811
|
success: boolean;
|
package/dist/index.native.d.ts
CHANGED
|
@@ -772,6 +772,11 @@ interface PageScore {
|
|
|
772
772
|
hint?: string[];
|
|
773
773
|
reviewed?: boolean;
|
|
774
774
|
error?: ('feedback_error' | 'transcript_error' | 'summary_error' | 'audio_upload_error' | 'unknown' | null)[];
|
|
775
|
+
stagedResponse?: {
|
|
776
|
+
audio?: string | null;
|
|
777
|
+
fileName?: string | null;
|
|
778
|
+
transcript?: string | null;
|
|
779
|
+
} | null;
|
|
775
780
|
}
|
|
776
781
|
|
|
777
782
|
declare enum AssignmentAnalyticsType {
|
|
@@ -993,7 +998,9 @@ declare function useUpdateCardScore({ isAssignment, activityId, userId, cardIds,
|
|
|
993
998
|
}, Error, {
|
|
994
999
|
cardId: string;
|
|
995
1000
|
cardScore: PageScore;
|
|
996
|
-
},
|
|
1001
|
+
}, {
|
|
1002
|
+
previousData: Score | undefined;
|
|
1003
|
+
}>;
|
|
997
1004
|
};
|
|
998
1005
|
declare function useClearScore(): {
|
|
999
1006
|
mutationClearScore: _tanstack_react_query.UseMutationResult<{
|
|
@@ -2772,7 +2779,7 @@ declare const useBaseOpenAI: ({ onTranscriptSuccess, onTranscriptError, onComple
|
|
|
2772
2779
|
url: string;
|
|
2773
2780
|
fileName: string;
|
|
2774
2781
|
}>;
|
|
2775
|
-
uploadAudioAndGetTranscript: (audio: string, language: string) => Promise<{
|
|
2782
|
+
uploadAudioAndGetTranscript: (audio: string, language: string, pagePrompt: string | null) => Promise<{
|
|
2776
2783
|
transcript: string;
|
|
2777
2784
|
audioUrl: string;
|
|
2778
2785
|
}>;
|
|
@@ -2785,19 +2792,20 @@ declare const useBaseOpenAI: ({ onTranscriptSuccess, onTranscriptError, onComple
|
|
|
2785
2792
|
url: string;
|
|
2786
2793
|
fileName: string;
|
|
2787
2794
|
}>;
|
|
2788
|
-
uploadAudioAndGetTranscript: (audio: string, language: string) => Promise<{
|
|
2795
|
+
uploadAudioAndGetTranscript: (audio: string, language: string, pagePrompt: string | null) => Promise<{
|
|
2789
2796
|
transcript: string;
|
|
2790
2797
|
audioUrl: string;
|
|
2791
2798
|
}>;
|
|
2792
|
-
getTranscript: (audioUrl: string, language: string) => Promise<
|
|
2799
|
+
getTranscript: (audioUrl: string, language: string, prompt?: string) => Promise<any>;
|
|
2793
2800
|
getFreeResponseCompletion: (messages: string[], isFreeResponse: boolean, feedbackLanguage: string, gradingStandard?: string) => Promise<any>;
|
|
2794
|
-
getFeedback: ({ cardId, language, writtenResponse, audio, autoGrade, file, }: {
|
|
2801
|
+
getFeedback: ({ cardId, language, writtenResponse, audio, autoGrade, file, pagePrompt, }: {
|
|
2795
2802
|
cardId: string;
|
|
2796
2803
|
language: string;
|
|
2797
2804
|
writtenResponse: string | null;
|
|
2798
2805
|
audio: string | null;
|
|
2799
2806
|
autoGrade: boolean;
|
|
2800
2807
|
file: string | null;
|
|
2808
|
+
pagePrompt: string | null;
|
|
2801
2809
|
}) => Promise<{
|
|
2802
2810
|
noFeedbackAvailable: boolean;
|
|
2803
2811
|
success: boolean;
|
package/dist/index.native.js
CHANGED
|
@@ -153,6 +153,8 @@ function withErrorHandler(fn, serviceName) {
|
|
|
153
153
|
try {
|
|
154
154
|
return await fn(...args);
|
|
155
155
|
} catch (error) {
|
|
156
|
+
console.error(`Service ${serviceName} failed with args:`, args);
|
|
157
|
+
console.error("Error details:", error);
|
|
156
158
|
if (error instanceof Error && "code" in error) {
|
|
157
159
|
const firebaseError = error;
|
|
158
160
|
throw new ServiceError(
|
|
@@ -1394,7 +1396,7 @@ function useScore({
|
|
|
1394
1396
|
enabled
|
|
1395
1397
|
});
|
|
1396
1398
|
}
|
|
1397
|
-
var debounceUpdateScore = debounce(updateScore,
|
|
1399
|
+
var debounceUpdateScore = debounce(updateScore, 500);
|
|
1398
1400
|
function useUpdateScore() {
|
|
1399
1401
|
const { queryClient } = useSpeakableApi();
|
|
1400
1402
|
const mutation = (0, import_react_query2.useMutation)({
|
|
@@ -1453,6 +1455,7 @@ function useUpdateCardScore({
|
|
|
1453
1455
|
return { cardId, scoresUpdated: newScoreUpdated };
|
|
1454
1456
|
},
|
|
1455
1457
|
onMutate: ({ cardId, cardScore }) => {
|
|
1458
|
+
const previousData = queryClient.getQueryData(queryKey);
|
|
1456
1459
|
queryClient.setQueryData(queryKey, (previousScore) => {
|
|
1457
1460
|
const updates = handleOptimisticScore({
|
|
1458
1461
|
score: previousScore,
|
|
@@ -1466,14 +1469,18 @@ function useUpdateCardScore({
|
|
|
1466
1469
|
...updates
|
|
1467
1470
|
};
|
|
1468
1471
|
});
|
|
1472
|
+
return { previousData };
|
|
1469
1473
|
},
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
if (previousData) {
|
|
1475
|
-
queryClient.setQueryData(queryKey, previousData);
|
|
1474
|
+
onError: (error, variables, context) => {
|
|
1475
|
+
console.log("Error updating card score:", error.message);
|
|
1476
|
+
if (context == null ? void 0 : context.previousData) {
|
|
1477
|
+
queryClient.setQueryData(queryKey, context.previousData);
|
|
1476
1478
|
}
|
|
1479
|
+
},
|
|
1480
|
+
onSettled: () => {
|
|
1481
|
+
queryClient.invalidateQueries({
|
|
1482
|
+
queryKey
|
|
1483
|
+
});
|
|
1477
1484
|
}
|
|
1478
1485
|
});
|
|
1479
1486
|
return {
|
|
@@ -1539,6 +1546,9 @@ function useClearScore() {
|
|
|
1539
1546
|
const { queryClient } = useSpeakableApi();
|
|
1540
1547
|
const mutation = (0, import_react_query2.useMutation)({
|
|
1541
1548
|
mutationFn: clearScore,
|
|
1549
|
+
onError: (error) => {
|
|
1550
|
+
console.log("Error clearing score:", error.message);
|
|
1551
|
+
},
|
|
1542
1552
|
onSettled: (result) => {
|
|
1543
1553
|
var _a;
|
|
1544
1554
|
queryClient.invalidateQueries({
|
|
@@ -1554,6 +1564,9 @@ function useClearScoreV2() {
|
|
|
1554
1564
|
const { queryClient } = useSpeakableApi();
|
|
1555
1565
|
const mutation = (0, import_react_query2.useMutation)({
|
|
1556
1566
|
mutationFn: clearScoreV2,
|
|
1567
|
+
onError: (error) => {
|
|
1568
|
+
console.log("Error clearing score V2:", error.message);
|
|
1569
|
+
},
|
|
1557
1570
|
onSettled: (result) => {
|
|
1558
1571
|
var _a;
|
|
1559
1572
|
queryClient.invalidateQueries({
|
|
@@ -3146,21 +3159,38 @@ var useBaseOpenAI = ({
|
|
|
3146
3159
|
const { data: feedbackAccess } = useActivityFeedbackAccess({
|
|
3147
3160
|
aiEnabled
|
|
3148
3161
|
});
|
|
3149
|
-
const getTranscript = async (audioUrl, language) => {
|
|
3150
|
-
var _a, _b;
|
|
3162
|
+
const getTranscript = async (audioUrl, language, prompt) => {
|
|
3163
|
+
var _a, _b, _c, _d;
|
|
3164
|
+
const getGeminiTranscript = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "getGeminiTranscript");
|
|
3165
|
+
const getAssemblyAITranscript = (_d = (_c = api).httpsCallable) == null ? void 0 : _d.call(_c, "transcribeAssemblyAIAudio");
|
|
3166
|
+
try {
|
|
3167
|
+
const { data } = await (getGeminiTranscript == null ? void 0 : getGeminiTranscript({
|
|
3168
|
+
audioUrl,
|
|
3169
|
+
targetLanguage: language,
|
|
3170
|
+
prompt: prompt || ""
|
|
3171
|
+
}));
|
|
3172
|
+
const transcript = data.transcript;
|
|
3173
|
+
if (transcript) {
|
|
3174
|
+
return transcript;
|
|
3175
|
+
}
|
|
3176
|
+
} catch (error) {
|
|
3177
|
+
console.log("Gemini transcript failed, trying AssemblyAI fallback:", error);
|
|
3178
|
+
}
|
|
3151
3179
|
try {
|
|
3152
|
-
const getAssemblyAITranscript = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "transcribeAssemblyAIAudio");
|
|
3153
3180
|
const response = await (getAssemblyAITranscript == null ? void 0 : getAssemblyAITranscript({
|
|
3154
3181
|
audioUrl,
|
|
3155
3182
|
language
|
|
3156
3183
|
}));
|
|
3157
3184
|
const transcript = response == null ? void 0 : response.data;
|
|
3158
|
-
|
|
3185
|
+
if (transcript) {
|
|
3186
|
+
return transcript;
|
|
3187
|
+
}
|
|
3188
|
+
throw new Error("Both transcript services failed");
|
|
3159
3189
|
} catch (error) {
|
|
3160
|
-
console.log("
|
|
3190
|
+
console.log("AssemblyAI transcript also failed:", error);
|
|
3161
3191
|
onTranscriptError({
|
|
3162
3192
|
type: "TRANSCRIPT",
|
|
3163
|
-
message: (error == null ? void 0 : error.message) || "Error getting transcript"
|
|
3193
|
+
message: (error == null ? void 0 : error.message) || "Error getting transcript from both services"
|
|
3164
3194
|
});
|
|
3165
3195
|
throw new Error(error);
|
|
3166
3196
|
}
|
|
@@ -3215,7 +3245,8 @@ var useBaseOpenAI = ({
|
|
|
3215
3245
|
// if the type = RESPOND_WRITE
|
|
3216
3246
|
audio = null,
|
|
3217
3247
|
autoGrade = true,
|
|
3218
|
-
file = null
|
|
3248
|
+
file = null,
|
|
3249
|
+
pagePrompt = null
|
|
3219
3250
|
}) => {
|
|
3220
3251
|
try {
|
|
3221
3252
|
if (!(feedbackAccess == null ? void 0 : feedbackAccess.canAccessFeedback)) {
|
|
@@ -3235,7 +3266,7 @@ var useBaseOpenAI = ({
|
|
|
3235
3266
|
onTranscriptSuccess(writtenResponse);
|
|
3236
3267
|
} else if (typeof audio === "string" && file) {
|
|
3237
3268
|
if (feedbackAccess == null ? void 0 : feedbackAccess.canAccessFeedback) {
|
|
3238
|
-
transcript = await getTranscript(audio, language);
|
|
3269
|
+
transcript = await getTranscript(audio, language, pagePrompt != null ? pagePrompt : "");
|
|
3239
3270
|
audioUrl = audio;
|
|
3240
3271
|
onTranscriptSuccess(transcript);
|
|
3241
3272
|
} else {
|
|
@@ -3244,7 +3275,7 @@ var useBaseOpenAI = ({
|
|
|
3244
3275
|
);
|
|
3245
3276
|
}
|
|
3246
3277
|
} else {
|
|
3247
|
-
const response = await uploadAudioAndGetTranscript(audio || "", language);
|
|
3278
|
+
const response = await uploadAudioAndGetTranscript(audio || "", language, pagePrompt != null ? pagePrompt : "");
|
|
3248
3279
|
transcript = response.transcript;
|
|
3249
3280
|
audioUrl = response.audioUrl;
|
|
3250
3281
|
}
|
|
@@ -3319,8 +3350,8 @@ var useBaseOpenAI = ({
|
|
|
3319
3350
|
feedbackData = geminiResult == null ? void 0 : geminiResult.data;
|
|
3320
3351
|
}
|
|
3321
3352
|
const results = {
|
|
3353
|
+
...proficiencyData,
|
|
3322
3354
|
...feedbackData,
|
|
3323
|
-
// ...proficiencyData,
|
|
3324
3355
|
aiSuccess: true,
|
|
3325
3356
|
promptSuccess: (feedbackData == null ? void 0 : feedbackData.success) || false,
|
|
3326
3357
|
transcript
|