@@ -18,12 +18,9 @@ class RunnerHolder: ObservableObject {
1818
1919extension UIImage {
2020 func resized( to newSize: CGSize ) -> UIImage {
21- let format = UIGraphicsImageRendererFormat . default ( )
22- let renderer = UIGraphicsImageRenderer ( size: newSize, format: format)
23- let image = renderer. image { _ in
21+ UIGraphicsImageRenderer ( size: newSize) . image { _ in
2422 draw ( in: CGRect ( origin: . zero, size: newSize) )
2523 }
26- return image
2724 }
2825
2926 func toRGBArray( ) -> [ UInt8 ] ? {
@@ -71,10 +68,10 @@ extension UIImage {
7168 let g = UInt8 ( pixelData [ pixelIndex + 1 ] )
7269 let b = UInt8 ( pixelData [ pixelIndex + 2 ] )
7370
74- let rgbIndex = ( y * width + x)
71+ let rgbIndex = ( y * width + x) * 3
7572 rgbArray [ rgbIndex] = r
76- rgbArray [ rgbIndex + height * width ] = g
77- rgbArray [ rgbIndex + 2 * height * width ] = b
73+ rgbArray [ rgbIndex + 1 ] = g
74+ rgbArray [ rgbIndex + 2 ] = b
7875 }
7976 }
8077
@@ -207,33 +204,34 @@ struct ContentView: View {
207204 }
208205 }
209206 . navigationBarTitle ( title, displayMode: . inline)
210- . navigationBarItems ( leading:
211- Button ( action: {
212- showingSettings. toggle ( )
213- } ) {
214- Image ( systemName: " gearshape " )
215- . imageScale ( . large)
216- } )
217- . navigationBarItems ( trailing:
218- HStack {
219- Menu {
220- Section ( header: Text ( " Memory " ) ) {
221- Text ( " Used: \( resourceMonitor. usedMemory) Mb " )
222- Text ( " Available: \( resourceMonitor. availableMemory) Mb " )
223- }
224- } label: {
225- Text ( " \( resourceMonitor. usedMemory) Mb " )
226- }
227- . onAppear {
228- resourceMonitor. start ( )
229- }
230- . onDisappear {
231- resourceMonitor. stop ( )
232- }
233- Button ( action: { showingLogs = true } ) {
234- Image ( systemName: " list.bullet.rectangle " )
235- }
236- }
207+ . navigationBarItems (
208+ leading:
209+ Button ( action: {
210+ showingSettings. toggle ( )
211+ } ) {
212+ Image ( systemName: " gearshape " )
213+ . imageScale ( . large)
214+ } ,
215+ trailing:
216+ HStack {
217+ Menu {
218+ Section ( header: Text ( " Memory " ) ) {
219+ Text ( " Used: \( resourceMonitor. usedMemory) Mb " )
220+ Text ( " Available: \( resourceMonitor. usedMemory) Mb " )
221+ }
222+ } label: {
223+ Text ( " \( resourceMonitor. usedMemory) Mb " )
224+ }
225+ . onAppear {
226+ resourceMonitor. start ( )
227+ }
228+ . onDisappear {
229+ resourceMonitor. stop ( )
230+ }
231+ Button ( action: { showingLogs = true } ) {
232+ Image ( systemName: " list.bullet.rectangle " )
233+ }
234+ }
237235 )
238236 . sheet ( isPresented: $showingLogs) {
239237 NavigationView {
@@ -274,20 +272,24 @@ struct ContentView: View {
274272 isGenerating = true
275273 shouldStopGenerating = false
276274 shouldStopShowingToken = false
277- let text = prompt
275+ let text = prompt. trimmingCharacters ( in : . whitespacesAndNewlines )
278276 let seq_len = 768 // text: 256, vision: 768
279277 let modelPath = resourceManager. modelPath
280278 let tokenizerPath = resourceManager. tokenizerPath
281- let useLlama = modelPath. range ( of : " llama " , options : . caseInsensitive ) != nil
279+ let useLlama = modelPath. lowercased ( ) . contains ( " llama " )
282280
283281 prompt = " "
284282 hideKeyboard ( )
285283 showingSettings = false
286284
285+ messages. append ( Message ( text: text) )
286+ messages. append ( Message ( type: useLlama ? . llamagenerated : . llavagenerated) )
287+
287288 runnerQueue. async {
288289 defer {
289290 DispatchQueue . main. async {
290291 isGenerating = false
292+ selectedImage = nil
291293 }
292294 }
293295
@@ -299,10 +301,7 @@ struct ContentView: View {
299301
300302 guard !shouldStopGenerating else { return }
301303 if useLlama {
302- messages. append ( Message ( text: text) )
303- messages. append ( Message ( type: . llamagenerated) )
304-
305- if let runner = runnerHolder. runner, !runner. isloaded ( ) {
304+ if let runner = runnerHolder. runner, !runner. isLoaded ( ) {
306305 var error : Error ?
307306 let startLoadTime = Date ( )
308307 do {
@@ -332,10 +331,7 @@ struct ContentView: View {
332331 }
333332 }
334333 } else {
335- messages. append ( Message ( text: text) )
336- messages. append ( Message ( type: . llavagenerated) )
337-
338- if let runner = runnerHolder. llavaRunner, !runner. isloaded ( ) {
334+ if let runner = runnerHolder. llavaRunner, !runner. isLoaded ( ) {
339335 var error : Error ?
340336 let startLoadTime = Date ( )
341337 do {
@@ -394,7 +390,7 @@ struct ContentView: View {
394390 if token != llava_prompt {
395391 if token == " </s> " {
396392 shouldStopGenerating = true
397- runnerHolder. runner ? . stop ( )
393+ runnerHolder. llavaRunner ? . stop ( )
398394 } else {
399395 tokens. append ( token)
400396 if tokens. count > 2 {
@@ -410,7 +406,7 @@ struct ContentView: View {
410406 }
411407 }
412408 if shouldStopGenerating {
413- runnerHolder. runner ? . stop ( )
409+ runnerHolder. llavaRunner ? . stop ( )
414410 }
415411 }
416412 }
@@ -421,7 +417,7 @@ struct ContentView: View {
421417 try runnerHolder. runner? . generate ( llama3_prompt, sequenceLength: seq_len) { token in
422418
423419 NSLog ( " >>> token={ \( token) } " )
424- if token != llama3_prompt && !shouldStopShowingToken {
420+ if token != llama3_prompt {
425421 // hack to fix the issue that extension/llm/runner/text_token_generator.h
426422 // keeps generating after <|eot_id|>
427423 if token == " <|eot_id|> " {
@@ -485,6 +481,7 @@ struct ContentView: View {
485481 }
486482 runnerQueue. async {
487483 runnerHolder. runner = nil
484+ runnerHolder. llavaRunner = nil
488485 }
489486 switch pickerType {
490487 case . model:
0 commit comments