|
22 | 22 | import java.util.List; |
23 | 23 | import java.util.concurrent.ExecutorService; |
24 | 24 | import java.util.concurrent.Executors; |
25 | | -import java.util.concurrent.atomic.AtomicInteger; |
26 | | -import java.util.concurrent.atomic.AtomicLong; |
27 | 25 | import java.util.function.Consumer; |
28 | 26 |
|
29 | 27 | import ai.onnxruntime.genai.SimpleGenAI; |
@@ -150,26 +148,28 @@ public void run() { |
150 | 148 | generatorParams.setSearchOption("length_penalty", (double)lengthPenalty); |
151 | 149 | generatorParams.setSearchOption("max_length", (double)maxLength); |
152 | 150 | long startTime = System.currentTimeMillis(); |
153 | | - AtomicLong firstTokenTime = new AtomicLong(startTime); |
154 | | - AtomicInteger numTokens = new AtomicInteger(0); |
| 151 | + final long[] firstTokenTime = {startTime}; |
| 152 | + final long[] numTokens = {0}; |
155 | 153 |
|
156 | 154 | // Token listener for streaming tokens |
157 | 155 | Consumer<String> tokenListener = token -> { |
158 | | - firstTokenTime.compareAndSet(startTime, System.currentTimeMillis()); |
| 156 | + if (numTokens[0] == 0) { |
| 157 | + firstTokenTime[0] = System.currentTimeMillis(); |
159 | 158 | } |
| 159 | + |
160 | 160 |
|
161 | 161 | // Update UI with new token |
162 | 162 | MainActivity.this.accept(token); |
163 | 163 |
|
164 | 164 | Log.i(TAG, "Generated token: " + token); |
165 | | - numTokens.incrementAndGet(); |
| 165 | + numTokens[0] += 1; |
166 | 166 | }; |
167 | 167 |
|
168 | 168 | String fullResponse = genAI.generate(generatorParams, promptQuestion_formatted, tokenListener); |
169 | 169 |
|
170 | | - long totalTime = System.currentTimeMillis() - firstTokenTime.get(); |
171 | | - float promptProcessingTime = (firstTokenTime.get() - startTime) / 1000.0f; |
172 | | - float tokensPerSecond = numTokens.get() > 1 ? (1000.0f * (numTokens.get() - 1)) / totalTime : 0; |
| 170 | + long totalTime = System.currentTimeMillis() - firstTokenTime[0]; |
| 171 | + float promptProcessingTime = (firstTokenTime[0] - startTime) / 1000.0f; |
| 172 | + float tokensPerSecond = numTokens[0] > 1 ? (1000.0f * (numTokens[0] - 1)) / totalTime : 0; |
173 | 173 |
|
174 | 174 | runOnUiThread(() -> { |
175 | 175 | showTokenPopup(promptProcessingTime, tokensPerSecond); |
|
0 commit comments