Skip to content

Commit f17c9e1

Browse files
Misc fixes for the demo app. (#6064)
Misc fixes for the demo app. (#6051) Summary: Pull Request resolved: #6051 . Reviewed By: kirklandsign Differential Revision: D64119638 fbshipit-source-id: 486e499d899625b397ddb32d6b0400e740804bae (cherry picked from commit 9364c06) Co-authored-by: Anthony Shoumikhin <[email protected]> Co-authored-by: Anthony Shoumikhin <[email protected]>
1 parent 6e788c7 commit f17c9e1

File tree

9 files changed

+50
-583
lines changed

9 files changed

+50
-583
lines changed

examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj/project.pbxproj

Lines changed: 0 additions & 460 deletions
Large diffs are not rendered by default.

examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj/xcshareddata/xcschemes/LLaMA.xcscheme

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323
</BuildActionEntries>
2424
</BuildAction>
2525
<TestAction
26-
buildConfiguration = "Debug"
26+
buildConfiguration = "Release"
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
2929
shouldUseLaunchSchemeArgsEnv = "YES"
3030
shouldAutocreateTestPlan = "YES">
3131
</TestAction>
3232
<LaunchAction
33-
buildConfiguration = "Debug"
33+
buildConfiguration = "Release"
3434
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3535
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
3636
launchStyle = "0"

examples/demo-apps/apple_ios/LLaMA/LLaMA/Application/ContentView.swift

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ extension UIImage {
2323
return UIGraphicsImageRenderer(size: newSize, format: format).image {
2424
_ in draw(in: CGRect(origin: .zero, size: newSize))
2525
}
26-
return image
2726
}
2827

2928
func toRGBArray() -> [UInt8]? {
@@ -177,36 +176,38 @@ struct ContentView: View {
177176
.padding([.leading, .trailing, .bottom], 10)
178177
.sheet(isPresented: $isImagePickerPresented, onDismiss: addSelectedImageMessage) {
179178
ImagePicker(selectedImage: $selectedImage, sourceType: imagePickerSourceType)
179+
.id(imagePickerSourceType.rawValue)
180180
}
181181
}
182182
.navigationBarTitle(title, displayMode: .inline)
183-
.navigationBarItems(leading:
184-
Button(action: {
185-
showingSettings.toggle()
186-
}) {
187-
Image(systemName: "gearshape")
188-
.imageScale(.large)
189-
})
190-
.navigationBarItems(trailing:
191-
HStack {
192-
Menu {
193-
Section(header: Text("Memory")) {
194-
Text("Used: \(resourceMonitor.usedMemory) Mb")
195-
Text("Available: \(resourceMonitor.availableMemory) Mb")
196-
}
197-
} label: {
198-
Text("\(resourceMonitor.usedMemory) Mb")
199-
}
200-
.onAppear {
201-
resourceMonitor.start()
202-
}
203-
.onDisappear {
204-
resourceMonitor.stop()
205-
}
206-
Button(action: { showingLogs = true }) {
207-
Image(systemName: "list.bullet.rectangle")
208-
}
209-
}
183+
.navigationBarItems(
184+
leading:
185+
Button(action: {
186+
showingSettings.toggle()
187+
}) {
188+
Image(systemName: "gearshape")
189+
.imageScale(.large)
190+
},
191+
trailing:
192+
HStack {
193+
Menu {
194+
Section(header: Text("Memory")) {
195+
Text("Used: \(resourceMonitor.usedMemory) Mb")
196+
Text("Available: \(resourceMonitor.usedMemory) Mb")
197+
}
198+
} label: {
199+
Text("\(resourceMonitor.usedMemory) Mb")
200+
}
201+
.onAppear {
202+
resourceMonitor.start()
203+
}
204+
.onDisappear {
205+
resourceMonitor.stop()
206+
}
207+
Button(action: { showingLogs = true }) {
208+
Image(systemName: "list.bullet.rectangle")
209+
}
210+
}
210211
)
211212
.sheet(isPresented: $showingLogs) {
212213
NavigationView {
@@ -247,20 +248,24 @@ struct ContentView: View {
247248
isGenerating = true
248249
shouldStopGenerating = false
249250
shouldStopShowingToken = false
250-
let text = prompt
251+
let text = prompt.trimmingCharacters(in: .whitespacesAndNewlines)
251252
let seq_len = 768 // text: 256, vision: 768
252253
let modelPath = resourceManager.modelPath
253254
let tokenizerPath = resourceManager.tokenizerPath
254-
let useLlama = modelPath.range(of: "llama", options: .caseInsensitive) != nil
255+
let useLlama = modelPath.lowercased().contains("llama")
255256

256257
prompt = ""
257258
hideKeyboard()
258259
showingSettings = false
259260

261+
messages.append(Message(text: text))
262+
messages.append(Message(type: useLlama ? .llamagenerated : .llavagenerated))
263+
260264
runnerQueue.async {
261265
defer {
262266
DispatchQueue.main.async {
263267
isGenerating = false
268+
selectedImage = nil
264269
}
265270
}
266271

@@ -272,10 +277,7 @@ struct ContentView: View {
272277

273278
guard !shouldStopGenerating else { return }
274279
if useLlama {
275-
messages.append(Message(text: text))
276-
messages.append(Message(type: .llamagenerated))
277-
278-
if let runner = runnerHolder.runner, !runner.isloaded() {
280+
if let runner = runnerHolder.runner, !runner.isLoaded() {
279281
var error: Error?
280282
let startLoadTime = Date()
281283
do {
@@ -305,10 +307,7 @@ struct ContentView: View {
305307
}
306308
}
307309
} else {
308-
messages.append(Message(text: text))
309-
messages.append(Message(type: .llavagenerated))
310-
311-
if let runner = runnerHolder.llavaRunner, !runner.isloaded() {
310+
if let runner = runnerHolder.llavaRunner, !runner.isLoaded() {
312311
var error: Error?
313312
let startLoadTime = Date()
314313
do {
@@ -367,7 +366,7 @@ struct ContentView: View {
367366
if token != llava_prompt {
368367
if token == "</s>" {
369368
shouldStopGenerating = true
370-
runnerHolder.runner?.stop()
369+
runnerHolder.llavaRunner?.stop()
371370
} else {
372371
tokens.append(token)
373372
if tokens.count > 2 {
@@ -383,7 +382,7 @@ struct ContentView: View {
383382
}
384383
}
385384
if shouldStopGenerating {
386-
runnerHolder.runner?.stop()
385+
runnerHolder.llavaRunner?.stop()
387386
}
388387
}
389388
}
@@ -394,7 +393,7 @@ struct ContentView: View {
394393
try runnerHolder.runner?.generate(llama3_prompt, sequenceLength: seq_len) { token in
395394

396395
NSLog(">>> token={\(token)}")
397-
if token != llama3_prompt && !shouldStopShowingToken {
396+
if token != llama3_prompt {
398397
// hack to fix the issue that extension/llm/runner/text_token_generator.h
399398
// keeps generating after <|eot_id|>
400399
if token == "<|eot_id|>" {
@@ -458,6 +457,7 @@ struct ContentView: View {
458457
}
459458
runnerQueue.async {
460459
runnerHolder.runner = nil
460+
runnerHolder.llavaRunner = nil
461461
}
462462
switch pickerType {
463463
case .model:

examples/demo-apps/apple_ios/LLaMA/LLaMAPerfBenchmark/LLaMAPerfBenchmark.entitlements

Lines changed: 0 additions & 8 deletions
This file was deleted.

examples/demo-apps/apple_ios/LLaMA/LLaMAPerfBenchmark/LLaMAPerfBenchmarkApp.swift

Lines changed: 0 additions & 16 deletions
This file was deleted.

examples/demo-apps/apple_ios/LLaMA/LLaMAPerfBenchmarkTests/LLaMAPerfBenchmarkTests.swift

Lines changed: 0 additions & 50 deletions
This file was deleted.

examples/demo-apps/apple_ios/LLaMA/LLaMARunner/LLaMARunner/Exported/LLaMARunner.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ NS_SWIFT_NAME(Runner)
1818

1919
- (instancetype)initWithModelPath:(NSString*)filePath
2020
tokenizerPath:(NSString*)tokenizerPath;
21-
- (BOOL)isloaded;
21+
- (BOOL)isLoaded;
2222
- (BOOL)loadWithError:(NSError**)error;
2323
- (BOOL)generate:(NSString*)prompt
2424
sequenceLength:(NSInteger)seq_len
@@ -36,7 +36,7 @@ NS_SWIFT_NAME(LLaVARunner)
3636

3737
- (instancetype)initWithModelPath:(NSString*)filePath
3838
tokenizerPath:(NSString*)tokenizerPath;
39-
- (BOOL)isloaded;
39+
- (BOOL)isLoaded;
4040
- (BOOL)loadWithError:(NSError**)error;
4141
- (BOOL)generate:(void*)imageBuffer
4242
width:(CGFloat)width

examples/demo-apps/apple_ios/LLaMA/LLaMARunner/LLaMARunner/Exported/LLaMARunner.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ - (void)dealloc {
4040
[ExecuTorchLog.sharedLog removeSink:self];
4141
}
4242

43-
- (BOOL)isloaded {
43+
- (BOOL)isLoaded {
4444
return _runner->is_loaded();
4545
}
4646

@@ -128,7 +128,7 @@ - (void)dealloc {
128128
[ExecuTorchLog.sharedLog removeSink:self];
129129
}
130130

131-
- (BOOL)isloaded {
131+
- (BOOL)isLoaded {
132132
return _runner->is_loaded();
133133
}
134134

extension/llm/runner/text_token_generator.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace executorch {
1818
namespace extension {
1919
namespace llm {
2020

21-
class TextTokenGenerator {
21+
class ET_EXPERIMENTAL TextTokenGenerator {
2222
public:
2323
TextTokenGenerator(
2424
Tokenizer* tokenizer,
@@ -72,10 +72,11 @@ class TextTokenGenerator {
7272
// initialize tensor wrappers
7373
auto tokens_managed = from_blob(
7474
token_data.data(), token_shape, executorch::aten::ScalarType::Long);
75-
7675
auto start_pos_managed =
7776
from_blob(&pos, {1}, executorch::aten::ScalarType::Long);
7877

78+
should_stop_ = false;
79+
7980
// Generate our tokens
8081
while (pos < seq_len - 1) {
8182
// Run the model

0 commit comments

Comments
 (0)