nsarrazin HF Staff commited on
Commit
c024800
·
1 Parent(s): efdd3cf

fix: catch errors more gracefully in reasoning specific calls

Browse files
src/lib/server/textGeneration/generate.ts CHANGED
@@ -9,6 +9,7 @@ import type { TextGenerationContext } from "./types";
9
  import type { EndpointMessage } from "../endpoints/endpoints";
10
  import { generateFromDefaultEndpoint } from "../generateFromDefaultEndpoint";
11
  import { generateSummaryOfReasoning } from "./reasoning";
 
12
 
13
  type GenerateContext = Omit<TextGenerationContext, "messages"> & { messages: EndpointMessage[] };
14
 
@@ -69,30 +70,35 @@ export async function* generate(
69
  subtype: MessageReasoningUpdateType.Status,
70
  status: "Summarizing reasoning...",
71
  };
72
- const summary = yield* generateFromDefaultEndpoint({
73
- messages: [
74
- {
75
- from: "user",
76
- content: `Question: ${
77
- messages[messages.length - 1].content
78
- }\n\nReasoning: ${reasoningBuffer}`,
79
- },
80
- ],
81
- preprompt: `Your task is to summarize concisely all your reasoning steps and then give the final answer. Keep it short, one short paragraph at most. If the reasoning steps explicitly include a code solution, make sure to include it in your answer.
 
82
 
83
  If the user is just having a casual conversation that doesn't require explanations, answer directly without explaining your steps, otherwise make sure to summarize step by step, make sure to skip dead-ends in your reasoning and removing excess detail.
84
 
85
  Do not use prefixes such as Response: or Answer: when answering to the user.`,
86
- generateSettings: {
87
- max_new_tokens: 1024,
88
- },
89
- });
90
- finalAnswer = summary;
91
- yield {
92
- type: MessageUpdateType.Reasoning,
93
- subtype: MessageReasoningUpdateType.Status,
94
- status: `Done in ${Math.round((new Date().getTime() - startTime.getTime()) / 1000)}s.`,
95
- };
 
 
 
 
96
  }
97
 
98
  yield {
@@ -143,9 +149,13 @@ Do not use prefixes such as Response: or Answer: when answering to the user.`,
143
  // create a new status every 5 seconds
144
  if (new Date().getTime() - lastReasoningUpdate.getTime() > 4000) {
145
  lastReasoningUpdate = new Date();
146
- generateSummaryOfReasoning(reasoningBuffer).then((summary) => {
147
- status = summary;
148
- });
 
 
 
 
149
  }
150
  yield {
151
  type: MessageUpdateType.Reasoning,
 
9
  import type { EndpointMessage } from "../endpoints/endpoints";
10
  import { generateFromDefaultEndpoint } from "../generateFromDefaultEndpoint";
11
  import { generateSummaryOfReasoning } from "./reasoning";
12
+ import { logger } from "../logger";
13
 
14
  type GenerateContext = Omit<TextGenerationContext, "messages"> & { messages: EndpointMessage[] };
15
 
 
70
  subtype: MessageReasoningUpdateType.Status,
71
  status: "Summarizing reasoning...",
72
  };
73
+ try {
74
+ const summary = yield* generateFromDefaultEndpoint({
75
+ messages: [
76
+ {
77
+ from: "user",
78
+ content: `Question: ${
79
+ messages[messages.length - 1].content
80
+ }\n\nReasoning: ${reasoningBuffer}`,
81
+ },
82
+ ],
83
+ preprompt: `Your task is to summarize concisely all your reasoning steps and then give the final answer. Keep it short, one short paragraph at most. If the reasoning steps explicitly include a code solution, make sure to include it in your answer.
84
 
85
  If the user is just having a casual conversation that doesn't require explanations, answer directly without explaining your steps, otherwise make sure to summarize step by step, make sure to skip dead-ends in your reasoning and removing excess detail.
86
 
87
  Do not use prefixes such as Response: or Answer: when answering to the user.`,
88
+ generateSettings: {
89
+ max_new_tokens: 1024,
90
+ },
91
+ });
92
+ finalAnswer = summary;
93
+ yield {
94
+ type: MessageUpdateType.Reasoning,
95
+ subtype: MessageReasoningUpdateType.Status,
96
+ status: `Done in ${Math.round((new Date().getTime() - startTime.getTime()) / 1000)}s.`,
97
+ };
98
+ } catch (e) {
99
+ finalAnswer = text;
100
+ logger.error(e);
101
+ }
102
  }
103
 
104
  yield {
 
149
  // create a new status every 5 seconds
150
  if (new Date().getTime() - lastReasoningUpdate.getTime() > 4000) {
151
  lastReasoningUpdate = new Date();
152
+ try {
153
+ generateSummaryOfReasoning(reasoningBuffer).then((summary) => {
154
+ status = summary;
155
+ });
156
+ } catch (e) {
157
+ logger.error(e);
158
+ }
159
  }
160
  yield {
161
  type: MessageUpdateType.Reasoning,
src/lib/server/textGeneration/reasoning.ts CHANGED
@@ -1,6 +1,7 @@
1
  import { generateFromDefaultEndpoint } from "../generateFromDefaultEndpoint";
2
 
3
  import { getReturnFromGenerator } from "$lib/utils/getReturnFromGenerator";
 
4
 
5
  export async function generateSummaryOfReasoning(buffer: string): Promise<string> {
6
  // debug 5s delay
@@ -21,10 +22,15 @@ export async function generateSummaryOfReasoning(buffer: string): Promise<string
21
  max_new_tokens: 50,
22
  },
23
  })
24
- ).then((summary) => {
25
- const parts = summary.split("...");
26
- return parts[0] + "...";
27
- });
 
 
 
 
 
28
 
29
  return summary;
30
  }
 
1
  import { generateFromDefaultEndpoint } from "../generateFromDefaultEndpoint";
2
 
3
  import { getReturnFromGenerator } from "$lib/utils/getReturnFromGenerator";
4
+ import { logger } from "../logger";
5
 
6
  export async function generateSummaryOfReasoning(buffer: string): Promise<string> {
7
  // debug 5s delay
 
22
  max_new_tokens: 50,
23
  },
24
  })
25
+ )
26
+ .then((summary) => {
27
+ const parts = summary.split("...");
28
+ return parts[0] + "...";
29
+ })
30
+ .catch((e) => {
31
+ logger.error(e);
32
+ return "Reasoning...";
33
+ });
34
 
35
  return summary;
36
  }