@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.
@@ -47,6 +47,8 @@ function withErrorHandler(fn, serviceName) {
47
47
  try {
48
48
  return await fn(...args);
49
49
  } catch (error) {
50
+ console.error(`Service ${serviceName} failed with args:`, args);
51
+ console.error("Error details:", error);
50
52
  if (error instanceof Error && "code" in error) {
51
53
  const firebaseError = error;
52
54
  throw new ServiceError(
@@ -1288,7 +1290,7 @@ function useScore({
1288
1290
  enabled
1289
1291
  });
1290
1292
  }
1291
- var debounceUpdateScore = debounce(updateScore, 1e3);
1293
+ var debounceUpdateScore = debounce(updateScore, 500);
1292
1294
  function useUpdateScore() {
1293
1295
  const { queryClient } = useSpeakableApi();
1294
1296
  const mutation = useMutation({
@@ -1347,6 +1349,7 @@ function useUpdateCardScore({
1347
1349
  return { cardId, scoresUpdated: newScoreUpdated };
1348
1350
  },
1349
1351
  onMutate: ({ cardId, cardScore }) => {
1352
+ const previousData = queryClient.getQueryData(queryKey);
1350
1353
  queryClient.setQueryData(queryKey, (previousScore) => {
1351
1354
  const updates = handleOptimisticScore({
1352
1355
  score: previousScore,
@@ -1360,14 +1363,18 @@ function useUpdateCardScore({
1360
1363
  ...updates
1361
1364
  };
1362
1365
  });
1366
+ return { previousData };
1363
1367
  },
1364
- // eslint-disable-next-line no-unused-vars
1365
- onError: (error) => {
1366
- console.log(error.message);
1367
- const previousData = queryClient.getQueryData(queryKey);
1368
- if (previousData) {
1369
- queryClient.setQueryData(queryKey, previousData);
1368
+ onError: (error, variables, context) => {
1369
+ console.log("Error updating card score:", error.message);
1370
+ if (context == null ? void 0 : context.previousData) {
1371
+ queryClient.setQueryData(queryKey, context.previousData);
1370
1372
  }
1373
+ },
1374
+ onSettled: () => {
1375
+ queryClient.invalidateQueries({
1376
+ queryKey
1377
+ });
1371
1378
  }
1372
1379
  });
1373
1380
  return {
@@ -1433,6 +1440,9 @@ function useClearScore() {
1433
1440
  const { queryClient } = useSpeakableApi();
1434
1441
  const mutation = useMutation({
1435
1442
  mutationFn: clearScore,
1443
+ onError: (error) => {
1444
+ console.log("Error clearing score:", error.message);
1445
+ },
1436
1446
  onSettled: (result) => {
1437
1447
  var _a;
1438
1448
  queryClient.invalidateQueries({
@@ -1448,6 +1458,9 @@ function useClearScoreV2() {
1448
1458
  const { queryClient } = useSpeakableApi();
1449
1459
  const mutation = useMutation({
1450
1460
  mutationFn: clearScoreV2,
1461
+ onError: (error) => {
1462
+ console.log("Error clearing score V2:", error.message);
1463
+ },
1451
1464
  onSettled: (result) => {
1452
1465
  var _a;
1453
1466
  queryClient.invalidateQueries({
@@ -3040,21 +3053,38 @@ var useBaseOpenAI = ({
3040
3053
  const { data: feedbackAccess } = useActivityFeedbackAccess({
3041
3054
  aiEnabled
3042
3055
  });
3043
- const getTranscript = async (audioUrl, language) => {
3044
- var _a, _b;
3056
+ const getTranscript = async (audioUrl, language, prompt) => {
3057
+ var _a, _b, _c, _d;
3058
+ const getGeminiTranscript = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "getGeminiTranscript");
3059
+ const getAssemblyAITranscript = (_d = (_c = api).httpsCallable) == null ? void 0 : _d.call(_c, "transcribeAssemblyAIAudio");
3060
+ try {
3061
+ const { data } = await (getGeminiTranscript == null ? void 0 : getGeminiTranscript({
3062
+ audioUrl,
3063
+ targetLanguage: language,
3064
+ prompt: prompt || ""
3065
+ }));
3066
+ const transcript = data.transcript;
3067
+ if (transcript) {
3068
+ return transcript;
3069
+ }
3070
+ } catch (error) {
3071
+ console.log("Gemini transcript failed, trying AssemblyAI fallback:", error);
3072
+ }
3045
3073
  try {
3046
- const getAssemblyAITranscript = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "transcribeAssemblyAIAudio");
3047
3074
  const response = await (getAssemblyAITranscript == null ? void 0 : getAssemblyAITranscript({
3048
3075
  audioUrl,
3049
3076
  language
3050
3077
  }));
3051
3078
  const transcript = response == null ? void 0 : response.data;
3052
- return transcript;
3079
+ if (transcript) {
3080
+ return transcript;
3081
+ }
3082
+ throw new Error("Both transcript services failed");
3053
3083
  } catch (error) {
3054
- console.log("error", error);
3084
+ console.log("AssemblyAI transcript also failed:", error);
3055
3085
  onTranscriptError({
3056
3086
  type: "TRANSCRIPT",
3057
- message: (error == null ? void 0 : error.message) || "Error getting transcript"
3087
+ message: (error == null ? void 0 : error.message) || "Error getting transcript from both services"
3058
3088
  });
3059
3089
  throw new Error(error);
3060
3090
  }
@@ -3109,7 +3139,8 @@ var useBaseOpenAI = ({
3109
3139
  // if the type = RESPOND_WRITE
3110
3140
  audio = null,
3111
3141
  autoGrade = true,
3112
- file = null
3142
+ file = null,
3143
+ pagePrompt = null
3113
3144
  }) => {
3114
3145
  try {
3115
3146
  if (!(feedbackAccess == null ? void 0 : feedbackAccess.canAccessFeedback)) {
@@ -3129,7 +3160,7 @@ var useBaseOpenAI = ({
3129
3160
  onTranscriptSuccess(writtenResponse);
3130
3161
  } else if (typeof audio === "string" && file) {
3131
3162
  if (feedbackAccess == null ? void 0 : feedbackAccess.canAccessFeedback) {
3132
- transcript = await getTranscript(audio, language);
3163
+ transcript = await getTranscript(audio, language, pagePrompt != null ? pagePrompt : "");
3133
3164
  audioUrl = audio;
3134
3165
  onTranscriptSuccess(transcript);
3135
3166
  } else {
@@ -3138,7 +3169,7 @@ var useBaseOpenAI = ({
3138
3169
  );
3139
3170
  }
3140
3171
  } else {
3141
- const response = await uploadAudioAndGetTranscript(audio || "", language);
3172
+ const response = await uploadAudioAndGetTranscript(audio || "", language, pagePrompt != null ? pagePrompt : "");
3142
3173
  transcript = response.transcript;
3143
3174
  audioUrl = response.audioUrl;
3144
3175
  }
@@ -3213,8 +3244,8 @@ var useBaseOpenAI = ({
3213
3244
  feedbackData = geminiResult == null ? void 0 : geminiResult.data;
3214
3245
  }
3215
3246
  const results = {
3247
+ ...proficiencyData,
3216
3248
  ...feedbackData,
3217
- // ...proficiencyData,
3218
3249
  aiSuccess: true,
3219
3250
  promptSuccess: (feedbackData == null ? void 0 : feedbackData.success) || false,
3220
3251
  transcript