@@ -10,6 +10,11 @@ import kotlinx.coroutines.flow.catch
10
10
import kotlinx.coroutines.launch
11
11
12
12
class MainViewModel (private val llm : Llm = Llm .instance()): ViewModel() {
13
+ companion object {
14
+ @JvmStatic
15
+ private val NanosPerSecond = 1_000_000_000.0
16
+ }
17
+
13
18
private val tag: String? = this ::class .simpleName
14
19
15
20
var messages by mutableStateOf(listOf (" Initializing..." ))
@@ -39,9 +44,9 @@ class MainViewModel(private val llm: Llm = Llm.instance()): ViewModel() {
39
44
messages + = " "
40
45
41
46
viewModelScope.launch {
42
- llm.send(if ( text.last() == ' \n ' ) text else text + " \n " )
47
+ llm.send(text)
43
48
.catch {
44
- Log .e(tag, " send() flow failed" , it)
49
+ Log .e(tag, " send() failed" , it)
45
50
messages + = it.message!!
46
51
}
47
52
.collect { messages = messages.dropLast(1 ) + (messages.last() + it) }
@@ -51,8 +56,23 @@ class MainViewModel(private val llm: Llm = Llm.instance()): ViewModel() {
51
56
fun bench (pp : Int , tg : Int , pl : Int , nr : Int = 1) {
52
57
viewModelScope.launch {
53
58
try {
54
- llm.bench(pp, tg, pl, nr)
59
+ val start = System .nanoTime()
60
+ val warmupResult = llm.bench(pp, tg, pl, nr)
61
+ val end = System .nanoTime()
62
+
63
+ messages + = warmupResult
64
+
65
+ val warmup = (end - start).toDouble() / NanosPerSecond
66
+ messages + = " Warm up time: $warmup seconds, please wait..."
67
+
68
+ if (warmup > 5.0 ) {
69
+ messages + = " Warm up took too long, aborting benchmark"
70
+ return @launch
71
+ }
72
+
73
+ messages + = llm.bench(512 , 128 , 1 , 3 )
55
74
} catch (exc: IllegalStateException ) {
75
+ Log .e(tag, " bench() failed" , exc)
56
76
messages + = exc.message!!
57
77
}
58
78
}
@@ -64,6 +84,7 @@ class MainViewModel(private val llm: Llm = Llm.instance()): ViewModel() {
64
84
llm.load(pathToModel)
65
85
messages + = " Loaded $pathToModel "
66
86
} catch (exc: IllegalStateException ) {
87
+ Log .e(tag, " load() failed" , exc)
67
88
messages + = exc.message!!
68
89
}
69
90
}
0 commit comments