Skip to content

Commit 2e397d5

Browse files
chore: rne v0.8.0 (#183)
1 parent a911308 commit 2e397d5

16 files changed

Lines changed: 349 additions & 186 deletions

app/(drawer)/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default function App() {
4141
});
4242

4343
const handleSetModel = async (model: Model) => {
44+
bottomSheetModalRef.current?.dismiss();
4445
const nextChatId = await getNextChatId(db);
4546
await initPhantomChat(nextChatId);
4647
await setActiveChatId(null);

app/_layout.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ import * as SplashScreen from 'expo-splash-screen';
2525
import SplashScreenAnimation from '../components/SplashScreenAnimation';
2626
import { DetourProvider } from '@swmansion/react-native-detour';
2727
import { detourConfig } from '../utils/detourConfig';
28+
import { initExecutorch } from 'react-native-executorch';
29+
import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher';
30+
31+
initExecutorch({ resourceFetcher: ExpoResourceFetcher });
2832

2933
SplashScreen.preventAutoHideAsync();
3034
SplashScreen.setOptions({ fade: false, duration: 0 });

components/chat-screen/ChatSpeechInput.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ const ChatSpeechInput: React.FC<Props> = ({
7777
recordingStartTimeRef.current = Date.now();
7878
let text = '';
7979
for await (const { committed, nonCommitted } of streamGenerator) {
80-
text = text + committed;
81-
setTranscription({ committed: text, nonCommitted });
80+
text = text + committed.text;
81+
setTranscription({ committed: text, nonCommitted: nonCommitted.text });
8282
}
8383

8484
if (exitStateRef.current === 'pending_submit') {

constants/default-models.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import {
2525
QWEN2_5_3B_QUANTIZED,
2626
PHI_4_MINI_4B,
2727
PHI_4_MINI_4B_QUANTIZED,
28+
LFM2_5_1_2B_INSTRUCT,
29+
LFM2_5_1_2B_INSTRUCT_QUANTIZED,
2830
} from 'react-native-executorch';
2931

3032
export const startingModels = [
@@ -307,4 +309,24 @@ export const DEFAULT_MODELS = [
307309
modelSize: 4.5,
308310
labels: ['Good at coding', 'Quantized'],
309311
},
312+
{
313+
modelName: 'LFM 2.5 - 1.2B',
314+
tokenizerPath: LFM2_5_1_2B_INSTRUCT.tokenizerSource,
315+
modelPath: LFM2_5_1_2B_INSTRUCT.modelSource,
316+
tokenizerConfigPath: LFM2_5_1_2B_INSTRUCT.tokenizerConfigSource,
317+
source: 'remote',
318+
parameters: 1.2,
319+
modelSize: 2.61,
320+
labels: ['Balanced'],
321+
},
322+
{
323+
modelName: 'LFM 2.5 - 1.2B - Quantized',
324+
tokenizerPath: LFM2_5_1_2B_INSTRUCT_QUANTIZED.tokenizerSource,
325+
modelPath: LFM2_5_1_2B_INSTRUCT_QUANTIZED.modelSource,
326+
tokenizerConfigPath: LFM2_5_1_2B_INSTRUCT_QUANTIZED.tokenizerConfigSource,
327+
source: 'remote',
328+
parameters: 1.2,
329+
modelSize: 1.14,
330+
labels: ['Balanced', 'Quantized'],
331+
},
310332
];

context/VectorStoreContext.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,20 @@ export const VectorStoreProvider = ({
3333
const assets = await getAllMiniLMAssets();
3434
const embeddings = new ExecuTorchEmbeddings(assets);
3535

36-
const store = await new OPSQLiteVectorStore({
36+
const store = new OPSQLiteVectorStore({
3737
name: 'private-mind-rag',
3838
embeddings,
39-
}).load();
39+
});
40+
41+
// Migrate: drop stale vectors table from older schema versions
42+
// that lacks the `document` column. Users will need to re-add documents.
43+
try {
44+
await store.db.execute("SELECT document FROM vectors LIMIT 0");
45+
} catch {
46+
await store.db.execute("DROP TABLE IF EXISTS vectors");
47+
}
48+
49+
await store.load();
4050

4151
setVectorStore(store);
4252
} catch (error) {

hooks/useSpeechInput.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import { AudioManager, AudioRecorder } from 'react-native-audio-api';
33
import { OnAudioReadyEventType } from 'react-native-audio-api/lib/typescript/events/types';
44
import { useStableCallback } from './useStableCallback';
55
import { STTStore, useSTTStore } from '../store/sttStore';
6+
import { type TranscriptionResult } from 'react-native-executorch';
67

78
interface Options {
89
onAudioData?: (data: number[]) => void;
910
}
1011

1112
type StartReturnType = Promise<AsyncGenerator<
12-
{ committed: string; nonCommitted: string },
13+
{ committed: TranscriptionResult; nonCommitted: TranscriptionResult },
1314
void,
1415
unknown
1516
> | null>;
@@ -39,20 +40,17 @@ export function useSpeechInput({ onAudioData }: Options = {}): Result {
3940

4041
const recorder = useRef<null | AudioRecorder>(null);
4142
if (!recorder.current) {
42-
recorder.current = new AudioRecorder({
43-
sampleRate: SAMPLE_RATE,
44-
bufferLengthInSamples: BUFFER_LENGTH,
45-
});
43+
recorder.current = new AudioRecorder();
4644
}
4745

4846
const stt = useSTTStore();
4947

5048
const handleAudioData = useStableCallback(
5149
async ({ buffer }: OnAudioReadyEventType) => {
5250
try {
53-
const bufferArray = Array.from(buffer.getChannelData(0));
54-
stt.module.streamInsert(bufferArray);
55-
onAudioData?.(bufferArray);
51+
const channelData = buffer.getChannelData(0);
52+
stt.module?.streamInsert(channelData);
53+
onAudioData?.(Array.from(channelData));
5654
} catch (error) {
5755
console.error('Error handling audio data:', error);
5856
}
@@ -71,15 +69,20 @@ export function useSpeechInput({ onAudioData }: Options = {}): Result {
7169
iosCategory: 'playAndRecord',
7270
iosMode: 'spokenAudio',
7371
});
72+
await AudioManager.setAudioSessionActivity(true);
7473
await stt.ensureLoaded();
7574

7675
if (isStartCanceled.current) {
7776
return null;
7877
}
7978

8079
changeStatus('listening');
81-
const streamGenerator = stt.module.stream();
82-
recorder.current!.onAudioReady(handleAudioData);
80+
const module = useSTTStore.getState().module;
81+
const streamGenerator = module!.stream();
82+
recorder.current!.onAudioReady(
83+
{ sampleRate: SAMPLE_RATE, bufferLength: BUFFER_LENGTH, channelCount: 1 },
84+
handleAudioData
85+
);
8386
recorder.current!.start();
8487

8588
return onGeneratorEnd(streamGenerator, () => changeStatus('idle'));
@@ -101,7 +104,8 @@ export function useSpeechInput({ onAudioData }: Options = {}): Result {
101104
try {
102105
changeStatus('processing');
103106
recorder.current!.stop();
104-
stt.module.streamStop();
107+
stt.module?.streamStop();
108+
AudioManager.setAudioSessionActivity(false);
105109
} catch (error) {
106110
console.error('Error finishing audio recording:', error);
107111
changeStatus('idle');

ios/Podfile.lock

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,11 @@ PODS:
8484
- hermes-engine (0.81.5):
8585
- hermes-engine/Pre-built (= 0.81.5)
8686
- hermes-engine/Pre-built (0.81.5)
87-
- op-sqlite (14.1.4):
87+
- iosMath (0.9.4)
88+
- op-sqlite (15.2.7):
8889
- hermes-engine
8990
- RCTRequired
9091
- RCTTypeSafety
91-
- React
92-
- React-callinvoker
9392
- React-Core
9493
- React-Core-prebuilt
9594
- React-debug
@@ -1410,7 +1409,7 @@ PODS:
14101409
- React-RCTFBReactNativeSpec
14111410
- ReactCommon/turbomodule/core
14121411
- ReactNativeDependencies
1413-
- react-native-executorch (0.6.0):
1412+
- react-native-executorch (0.8.0):
14141413
- hermes-engine
14151414
- opencv-rne (~> 4.11.0)
14161415
- RCTRequired
@@ -1899,6 +1898,29 @@ PODS:
18991898
- React-utils (= 0.81.5)
19001899
- ReactNativeDependencies
19011900
- ReactNativeDependencies (0.81.5)
1901+
- ReactNativeEnrichedMarkdown (0.4.1):
1902+
- hermes-engine
1903+
- iosMath (~> 0.9)
1904+
- RCTRequired
1905+
- RCTTypeSafety
1906+
- React-Core
1907+
- React-Core-prebuilt
1908+
- React-debug
1909+
- React-Fabric
1910+
- React-featureflags
1911+
- React-graphics
1912+
- React-ImageManager
1913+
- React-jsi
1914+
- React-NativeModulesApple
1915+
- React-RCTFabric
1916+
- React-renderercss
1917+
- React-rendererdebug
1918+
- React-utils
1919+
- ReactCodegen
1920+
- ReactCommon/turbomodule/bridging
1921+
- ReactCommon/turbomodule/core
1922+
- ReactNativeDependencies
1923+
- Yoga
19021924
- ReactNativeFs (2.35.1):
19031925
- hermes-engine
19041926
- RCTRequired
@@ -1921,7 +1943,30 @@ PODS:
19211943
- ReactCommon/turbomodule/core
19221944
- ReactNativeDependencies
19231945
- Yoga
1924-
- RNAudioAPI (0.8.4):
1946+
- RNAudioAPI (0.11.7):
1947+
- hermes-engine
1948+
- RCTRequired
1949+
- RCTTypeSafety
1950+
- React-Core
1951+
- React-Core-prebuilt
1952+
- React-debug
1953+
- React-Fabric
1954+
- React-featureflags
1955+
- React-graphics
1956+
- React-ImageManager
1957+
- React-jsi
1958+
- React-NativeModulesApple
1959+
- React-RCTFabric
1960+
- React-renderercss
1961+
- React-rendererdebug
1962+
- React-utils
1963+
- ReactCodegen
1964+
- ReactCommon/turbomodule/bridging
1965+
- ReactCommon/turbomodule/core
1966+
- ReactNativeDependencies
1967+
- RNAudioAPI/audioapi (= 0.11.7)
1968+
- Yoga
1969+
- RNAudioAPI/audioapi (0.11.7):
19251970
- hermes-engine
19261971
- RCTRequired
19271972
- RCTTypeSafety
@@ -1942,9 +1987,10 @@ PODS:
19421987
- ReactCommon/turbomodule/bridging
19431988
- ReactCommon/turbomodule/core
19441989
- ReactNativeDependencies
1945-
- RNAudioAPI/audioapi (= 0.8.4)
1990+
- RNAudioAPI/audioapi/audioapi_dsp (= 0.11.7)
1991+
- RNAudioAPI/audioapi/ios (= 0.11.7)
19461992
- Yoga
1947-
- RNAudioAPI/audioapi (0.8.4):
1993+
- RNAudioAPI/audioapi/audioapi_dsp (0.11.7):
19481994
- hermes-engine
19491995
- RCTRequired
19501996
- RCTTypeSafety
@@ -1965,9 +2011,8 @@ PODS:
19652011
- ReactCommon/turbomodule/bridging
19662012
- ReactCommon/turbomodule/core
19672013
- ReactNativeDependencies
1968-
- RNAudioAPI/audioapi/ios (= 0.8.4)
19692014
- Yoga
1970-
- RNAudioAPI/audioapi/ios (0.8.4):
2015+
- RNAudioAPI/audioapi/ios (0.11.7):
19712016
- hermes-engine
19722017
- RCTRequired
19732018
- RCTTypeSafety
@@ -2388,6 +2433,7 @@ DEPENDENCIES:
23882433
- ReactCodegen (from `build/generated/ios`)
23892434
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
23902435
- ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`)
2436+
- ReactNativeEnrichedMarkdown (from `../node_modules/react-native-enriched-markdown`)
23912437
- "ReactNativeFs (from `../node_modules/@dr.pogodin/react-native-fs`)"
23922438
- RNAudioAPI (from `../node_modules/react-native-audio-api`)
23932439
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
@@ -2402,6 +2448,7 @@ DEPENDENCIES:
24022448

24032449
SPEC REPOS:
24042450
trunk:
2451+
- iosMath
24052452
- opencv-rne
24062453

24072454
EXTERNAL SOURCES:
@@ -2586,6 +2633,8 @@ EXTERNAL SOURCES:
25862633
:path: "../node_modules/react-native/ReactCommon"
25872634
ReactNativeDependencies:
25882635
:podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec"
2636+
ReactNativeEnrichedMarkdown:
2637+
:path: "../node_modules/react-native-enriched-markdown"
25892638
ReactNativeFs:
25902639
:path: "../node_modules/@dr.pogodin/react-native-fs"
25912640
RNAudioAPI:
@@ -2630,7 +2679,8 @@ SPEC CHECKSUMS:
26302679
ExpoSQLite: 4a8ebaa9c1b01af90b4c59f181369cb570fb343a
26312680
FBLazyVector: e95a291ad2dadb88e42b06e0c5fb8262de53ec12
26322681
hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172
2633-
op-sqlite: a0744d1ff162f647a1d3b5c5e1760311365ef18e
2682+
iosMath: f7a6cbadf9d836d2149c2a84c435b1effc244cba
2683+
op-sqlite: d9827bbb015ca71c44763d6b447afe2c12d20261
26342684
opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0
26352685
Pdfium: 4a0412b69bb0172892aaed9254b430289a99f1c8
26362686
RCTDeprecation: 943572d4be82d480a48f4884f670135ae30bf990
@@ -2666,7 +2716,7 @@ SPEC CHECKSUMS:
26662716
React-logger: 50fdb9a8236da90c0b1072da5c32ee03aeb5bf28
26672717
React-Mapbuffer: 9050ee10c19f4f7fca8963d0211b2854d624973e
26682718
React-microtasksnativemodule: f775db9e991c6f3b8ccbc02bfcde22770f96e23b
2669-
react-native-executorch: 80a9d0f81f935eed35c3b8f22878683aad1215cd
2719+
react-native-executorch: ddc323dfac5b3af44d4211c7ec81522578689983
26702720
react-native-keyboard-controller: 1ad78688f744e0ebdf3b04007b91089a254b80f9
26712721
react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187
26722722
react-native-safe-area-context: 37e680fc4cace3c0030ee46e8987d24f5d3bdab2
@@ -2701,8 +2751,9 @@ SPEC CHECKSUMS:
27012751
ReactCodegen: 7d4593f7591f002d137fe40cef3f6c11f13c88cc
27022752
ReactCommon: 08810150b1206cc44aecf5f6ae19af32f29151a8
27032753
ReactNativeDependencies: 71ce9c28beb282aa720ea7b46980fff9669f428a
2754+
ReactNativeEnrichedMarkdown: 27a73f8df1bc304c35b7bd922c9885a4dfec3dc5
27042755
ReactNativeFs: 1bbd20020179cbaeddcda3ca2bf91e71647a1f23
2705-
RNAudioAPI: 59086ae1493659df19c4eefa4eee32406d470489
2756+
RNAudioAPI: 9f0145224e76e40396b77e502f462948d712bcf9
27062757
RNCAsyncStorage: 3a4f5e2777dae1688b781a487923a08569e27fe4
27072758
RNCClipboard: 74cc34f95a13ea964d57e12293918f99e7f911d7
27082759
RNDeviceInfo: 36d7f232bfe7c9b5c494cb7793230424ed32c388

ios/PrivateMind.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
317317
"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
318318
"${PODS_CONFIGURATION_BUILD_DIR}/ReactNativeFs/RNFS_PrivacyInfo.bundle",
319+
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
319320
);
320321
name = "[CP] Copy Pods Resources";
321322
outputPaths = (
@@ -331,6 +332,7 @@
331332
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
332333
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
333334
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNFS_PrivacyInfo.bundle",
335+
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mathFonts.bundle",
334336
);
335337
runOnlyForDeploymentPostprocessing = 0;
336338
shellPath = /bin/sh;
@@ -351,6 +353,7 @@
351353
"${PODS_XCFRAMEWORKS_BUILD_DIR}/React-Core-prebuilt/React.framework/React",
352354
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ReactNativeDependencies/ReactNativeDependencies.framework/ReactNativeDependencies",
353355
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
356+
"${PODS_XCFRAMEWORKS_BUILD_DIR}/op-sqlite/libsql_experimental.framework/libsql_experimental",
354357
"${PODS_XCFRAMEWORKS_BUILD_DIR}/react-native-executorch/ExecutorchLib.framework/ExecutorchLib",
355358
);
356359
name = "[CP] Embed Pods Frameworks";
@@ -362,6 +365,7 @@
362365
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/React.framework",
363366
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactNativeDependencies.framework",
364367
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
368+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libsql_experimental.framework",
365369
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExecutorchLib.framework",
366370
);
367371
runOnlyForDeploymentPostprocessing = 0;

0 commit comments

Comments
 (0)