@@ -23,7 +23,6 @@ extension UIImage {
23
23
return UIGraphicsImageRenderer ( size: newSize, format: format) . image {
24
24
_ in draw ( in: CGRect ( origin: . zero, size: newSize) )
25
25
}
26
- return image
27
26
}
28
27
29
28
func toRGBArray( ) -> [ UInt8 ] ? {
@@ -180,33 +179,34 @@ struct ContentView: View {
180
179
}
181
180
}
182
181
. 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
- }
182
+ . navigationBarItems (
183
+ leading:
184
+ Button ( action: {
185
+ showingSettings. toggle ( )
186
+ } ) {
187
+ Image ( systemName: " gearshape " )
188
+ . imageScale ( . large)
189
+ } ,
190
+ trailing:
191
+ HStack {
192
+ Menu {
193
+ Section ( header: Text ( " Memory " ) ) {
194
+ Text ( " Used: \( resourceMonitor. usedMemory) Mb " )
195
+ Text ( " Available: \( resourceMonitor. usedMemory) 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
+ }
210
210
)
211
211
. sheet ( isPresented: $showingLogs) {
212
212
NavigationView {
@@ -247,20 +247,24 @@ struct ContentView: View {
247
247
isGenerating = true
248
248
shouldStopGenerating = false
249
249
shouldStopShowingToken = false
250
- let text = prompt
250
+ let text = prompt. trimmingCharacters ( in : . whitespacesAndNewlines )
251
251
let seq_len = 768 // text: 256, vision: 768
252
252
let modelPath = resourceManager. modelPath
253
253
let tokenizerPath = resourceManager. tokenizerPath
254
- let useLlama = modelPath. range ( of : " llama " , options : . caseInsensitive ) != nil
254
+ let useLlama = modelPath. lowercased ( ) . contains ( " llama " )
255
255
256
256
prompt = " "
257
257
hideKeyboard ( )
258
258
showingSettings = false
259
259
260
+ messages. append ( Message ( text: text) )
261
+ messages. append ( Message ( type: useLlama ? . llamagenerated : . llavagenerated) )
262
+
260
263
runnerQueue. async {
261
264
defer {
262
265
DispatchQueue . main. async {
263
266
isGenerating = false
267
+ selectedImage = nil
264
268
}
265
269
}
266
270
@@ -272,10 +276,7 @@ struct ContentView: View {
272
276
273
277
guard !shouldStopGenerating else { return }
274
278
if useLlama {
275
- messages. append ( Message ( text: text) )
276
- messages. append ( Message ( type: . llamagenerated) )
277
-
278
- if let runner = runnerHolder. runner, !runner. isloaded ( ) {
279
+ if let runner = runnerHolder. runner, !runner. isLoaded ( ) {
279
280
var error : Error ?
280
281
let startLoadTime = Date ( )
281
282
do {
@@ -305,10 +306,7 @@ struct ContentView: View {
305
306
}
306
307
}
307
308
} else {
308
- messages. append ( Message ( text: text) )
309
- messages. append ( Message ( type: . llavagenerated) )
310
-
311
- if let runner = runnerHolder. llavaRunner, !runner. isloaded ( ) {
309
+ if let runner = runnerHolder. llavaRunner, !runner. isLoaded ( ) {
312
310
var error : Error ?
313
311
let startLoadTime = Date ( )
314
312
do {
@@ -367,7 +365,7 @@ struct ContentView: View {
367
365
if token != llava_prompt {
368
366
if token == " </s> " {
369
367
shouldStopGenerating = true
370
- runnerHolder. runner ? . stop ( )
368
+ runnerHolder. llavaRunner ? . stop ( )
371
369
} else {
372
370
tokens. append ( token)
373
371
if tokens. count > 2 {
@@ -383,7 +381,7 @@ struct ContentView: View {
383
381
}
384
382
}
385
383
if shouldStopGenerating {
386
- runnerHolder. runner ? . stop ( )
384
+ runnerHolder. llavaRunner ? . stop ( )
387
385
}
388
386
}
389
387
}
@@ -394,7 +392,7 @@ struct ContentView: View {
394
392
try runnerHolder. runner? . generate ( llama3_prompt, sequenceLength: seq_len) { token in
395
393
396
394
NSLog ( " >>> token={ \( token) } " )
397
- if token != llama3_prompt && !shouldStopShowingToken {
395
+ if token != llama3_prompt {
398
396
// hack to fix the issue that extension/llm/runner/text_token_generator.h
399
397
// keeps generating after <|eot_id|>
400
398
if token == " <|eot_id|> " {
@@ -458,6 +456,7 @@ struct ContentView: View {
458
456
}
459
457
runnerQueue. async {
460
458
runnerHolder. runner = nil
459
+ runnerHolder. llavaRunner = nil
461
460
}
462
461
switch pickerType {
463
462
case . model:
0 commit comments