Skip to content

Commit 3da1cbf

Browse files
committed
Make sure that error messages are correctly propagated
1 parent a5440c5 commit 3da1cbf

25 files changed

Lines changed: 316 additions & 146 deletions

File tree

apps/llm/app/llm/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function LLMScreen() {
3434

3535
useEffect(() => {
3636
if (llm.error) {
37-
console.log('LLM error:', llm.error);
37+
console.error('LLM error:', llm.error);
3838
}
3939
}, [llm.error]);
4040

apps/llm/app/llm_structured_output/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ function LLMScreen() {
119119

120120
useEffect(() => {
121121
if (llm.error) {
122-
console.log('LLM error:', llm.error);
122+
console.error('LLM error:', llm.error);
123123
}
124124
}, [llm.error]);
125125

apps/llm/app/llm_tool_calling/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ function LLMToolCallingScreen() {
6161

6262
useEffect(() => {
6363
if (llm.error) {
64-
console.log('LLM error:', llm.error);
64+
console.error('LLM error:', llm.error);
6565
}
6666
}, [llm.error]);
6767

apps/llm/app/voice_chat/index.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ function VoiceChatScreen() {
9898
}
9999
};
100100

101+
useEffect(() => {
102+
if (llm.error) {
103+
console.error('LLM error:', llm.error);
104+
}
105+
}, [llm.error]);
106+
107+
useEffect(() => {
108+
if (speechToText.error) {
109+
console.error('speechToText error:', speechToText.error);
110+
}
111+
}, [speechToText.error]);
112+
101113
return !llm.isReady || !speechToText.isReady ? (
102114
<Spinner
103115
visible={!llm.isReady || !speechToText.isReady}

docs/docs/06-api-reference/classes/LLMModule.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Class: LLMModule
22

3-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:10](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L10)
3+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:10](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L10)
44

55
Module for managing a Large Language Model (LLM) instance.
66

@@ -10,7 +10,7 @@ Module for managing a Large Language Model (LLM) instance.
1010

1111
> **new LLMModule**(`optionalCallbacks`): `LLMModule`
1212
13-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:20](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L20)
13+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:20](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L20)
1414

1515
Creates a new instance of `LLMModule` with optional callbacks.
1616

@@ -45,7 +45,7 @@ A new LLMModule instance.
4545

4646
> **configure**(`config`): `void`
4747
48-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:87](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L87)
48+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:87](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L87)
4949

5050
Configures chat and tool calling and generation settings.
5151
See [Configuring the model](https://docs.swmansion.com/react-native-executorch/docs/hooks/natural-language-processing/useLLM#configuring-the-model) for details.
@@ -68,7 +68,7 @@ Configuration object containing `chatConfig`, `toolsConfig`, and `generationConf
6868

6969
> **delete**(): `void`
7070
71-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:184](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L184)
71+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:184](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L184)
7272

7373
Method to delete the model from memory.
7474
Note you cannot delete model while it's generating.
@@ -84,7 +84,7 @@ You need to interrupt it first and make sure model stopped generation.
8484

8585
> **deleteMessage**(`index`): [`Message`](../interfaces/Message.md)[]
8686
87-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:140](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L140)
87+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:140](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L140)
8888

8989
Deletes all messages starting with message on `index` position.
9090
After deletion it will call `messageHistoryCallback()` containing new history.
@@ -110,7 +110,7 @@ The index of the message to delete from history.
110110

111111
> **forward**(`input`): `Promise`\<`string`\>
112112
113-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:104](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L104)
113+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:104](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L104)
114114

115115
Runs model inference with raw input string.
116116
You need to provide entire conversation and prompt (in correct format and with special tokens!) in input string to this method.
@@ -137,7 +137,7 @@ The generated response as a string.
137137

138138
> **generate**(`messages`, `tools?`): `Promise`\<`string`\>
139139
140-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:115](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L115)
140+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:115](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L115)
141141

142142
Runs model to complete chat passed in `messages` argument. It doesn't manage conversation context.
143143

@@ -167,7 +167,7 @@ The generated response as a string.
167167

168168
> **getGeneratedTokenCount**(): `number`
169169
170-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:157](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L157)
170+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:157](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L157)
171171

172172
Returns the number of tokens generated in the last response.
173173

@@ -183,7 +183,7 @@ The count of generated tokens.
183183

184184
> **getPromptTokensCount**(): `number`
185185
186-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:166](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L166)
186+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:166](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L166)
187187

188188
Returns the number of prompt tokens in the last message.
189189

@@ -199,7 +199,7 @@ The count of prompt token.
199199

200200
> **getTotalTokensCount**(): `number`
201201
202-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:175](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L175)
202+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:175](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L175)
203203

204204
Returns the number of total tokens from the previous generation. This is a sum of prompt tokens and generated tokens.
205205

@@ -215,7 +215,7 @@ The count of prompt and generated tokens.
215215

216216
> **interrupt**(): `void`
217217
218-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:148](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L148)
218+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:148](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L148)
219219

220220
Interrupts model generation. It may return one more token after interrupt.
221221

@@ -229,7 +229,7 @@ Interrupts model generation. It may return one more token after interrupt.
229229

230230
> **load**(`model`, `onDownloadProgressCallback`): `Promise`\<`void`\>
231231
232-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:49](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L49)
232+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:49](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L49)
233233

234234
Loads the LLM model and tokenizer.
235235

@@ -273,7 +273,7 @@ Optional callback to track download progress (value between 0 and 1).
273273

274274
> **sendMessage**(`message`): `Promise`\<[`Message`](../interfaces/Message.md)[]\>
275275
276-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:127](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L127)
276+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:127](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L127)
277277

278278
Method to add user message to conversation.
279279
After model responds it will call `messageHistoryCallback()` containing both user message and model response.
@@ -299,7 +299,7 @@ The message string to send.
299299

300300
> **setTokenCallback**(`tokenCallback`): `void`
301301
302-
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:73](https://github.com/software-mansion/react-native-executorch/blob/a9d9b826d75623e7b7d41c2da95ed0c60fbb6424/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L73)
302+
Defined in: [packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts:73](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/modules/natural_language_processing/LLMModule.ts#L73)
303303

304304
Sets new token callback invoked on every token batch.
305305

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Class: Logger
2+
3+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:5](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L5)
4+
5+
High level wrapper that prefixes `console.<command>` with [React Native ExecuTorch] tag.
6+
7+
## Constructors
8+
9+
### Constructor
10+
11+
> **new Logger**(): `Logger`
12+
13+
#### Returns
14+
15+
`Logger`
16+
17+
## Methods
18+
19+
### debug()
20+
21+
> `static` **debug**(...`data`): `void`
22+
23+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:12](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L12)
24+
25+
#### Parameters
26+
27+
##### data
28+
29+
...`any`[]
30+
31+
#### Returns
32+
33+
`void`
34+
35+
---
36+
37+
### error()
38+
39+
> `static` **error**(...`data`): `void`
40+
41+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:24](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L24)
42+
43+
#### Parameters
44+
45+
##### data
46+
47+
...`any`[]
48+
49+
#### Returns
50+
51+
`void`
52+
53+
---
54+
55+
### info()
56+
57+
> `static` **info**(...`data`): `void`
58+
59+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:16](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L16)
60+
61+
#### Parameters
62+
63+
##### data
64+
65+
...`any`[]
66+
67+
#### Returns
68+
69+
`void`
70+
71+
---
72+
73+
### log()
74+
75+
> `static` **log**(...`data`): `void`
76+
77+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:8](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L8)
78+
79+
#### Parameters
80+
81+
##### data
82+
83+
...`any`[]
84+
85+
#### Returns
86+
87+
`void`
88+
89+
---
90+
91+
### warn()
92+
93+
> `static` **warn**(...`data`): `void`
94+
95+
Defined in: [packages/react-native-executorch/src/common/Logger.ts:20](https://github.com/software-mansion/react-native-executorch/blob/a5440c5efceab4377accbd22e9409b019538907f/packages/react-native-executorch/src/common/Logger.ts#L20)
96+
97+
#### Parameters
98+
99+
##### data
100+
101+
...`any`[]
102+
103+
#### Returns
104+
105+
`void`

packages/react-native-executorch/src/common/Logger.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
/**
2+
* High level wrapper that prefixes `console.<command>` with [React Native ExecuTorch] tag.
3+
*/
14
/* eslint-disable no-console */
2-
35
export class Logger {
46
private static readonly PREFIX = '[React Native ExecuTorch]';
57

packages/react-native-executorch/src/controllers/BaseOCRController.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Logger } from '../common/Logger';
12
import { symbols } from '../constants/ocr/symbols';
23
import { RnExecutorchErrorCode } from '../errors/ErrorCodes';
34
import { RnExecutorchError, parseUnknownError } from '../errors/errorUtils';
@@ -71,7 +72,14 @@ export abstract class BaseOCRController {
7172
this.isReady = true;
7273
this.isReadyCallback(this.isReady);
7374
} catch (e) {
74-
if (this.errorCallback) {
75+
if (
76+
e &&
77+
typeof e === 'object' &&
78+
'code' in e &&
79+
e.code == RnExecutorchErrorCode.NotImplemented
80+
) {
81+
Logger.error('Load failed:', e);
82+
} else if (this.errorCallback) {
7583
this.errorCallback(parseUnknownError(e));
7684
} else {
7785
throw parseUnknownError(e);

packages/react-native-executorch/src/controllers/LLMController.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ export class LLMController {
133133
this.tokenCallback(filtered);
134134
};
135135
} catch (e) {
136+
Logger.error('Load failed:', e);
136137
this.isReadyCallback(false);
137138
throw parseUnknownError(e);
138139
}

packages/react-native-executorch/src/modules/computer_vision/ClassificationModule.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ResourceFetcher } from '../../utils/ResourceFetcher';
22
import { ResourceSource } from '../../types/common';
33
import { BaseModule } from '../BaseModule';
44
import { RnExecutorchErrorCode } from '../../errors/ErrorCodes';
5-
import { RnExecutorchError } from '../../errors/errorUtils';
5+
import { parseUnknownError, RnExecutorchError } from '../../errors/errorUtils';
66
import { Logger } from '../../common/Logger';
77

88
/**
@@ -38,7 +38,7 @@ export class ClassificationModule extends BaseModule {
3838
this.nativeModule = global.loadClassification(paths[0] || '');
3939
} catch (error) {
4040
Logger.error('Load failed:', error);
41-
throw error;
41+
throw parseUnknownError(error);
4242
}
4343
}
4444

0 commit comments

Comments
 (0)