Skip to content

Commit fe44ce6

Browse files
committed
chore: add benchmark
1 parent 626bf0a commit fe44ce6

File tree

5 files changed

+77
-1
lines changed

5 files changed

+77
-1
lines changed

benchmark/build.gradle.kts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import kotlinx.benchmark.gradle.JvmBenchmarkTarget
2+
import kotlinx.benchmark.gradle.benchmark
3+
import org.jetbrains.kotlin.allopen.gradle.AllOpenExtension
4+
5+
plugins {
6+
java
7+
kotlin("jvm")
8+
kotlin("plugin.allopen")
9+
id("org.jetbrains.kotlinx.benchmark")
10+
}
11+
12+
sourceSets.all {
13+
java.setSrcDirs(listOf("$name/src"))
14+
resources.setSrcDirs(listOf("$name/resources"))
15+
}
16+
17+
configure<AllOpenExtension> {
18+
annotation("org.openjdk.jmh.annotations.State")
19+
}
20+
21+
dependencies {
22+
implementation(project(":ktoken"))
23+
implementation(libs.kotlinx.benchmark)
24+
}
25+
26+
benchmark {
27+
configurations {
28+
named("main") {
29+
warmups = 1
30+
iterations = 5
31+
}
32+
}
33+
targets {
34+
register("main") {
35+
this as JvmBenchmarkTarget
36+
jmhVersion = "1.37"
37+
}
38+
}
39+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.aallam.ktoken.benchmark
2+
3+
import com.aallam.ktoken.Tokenizer
4+
import kotlinx.coroutines.runBlocking
5+
import org.openjdk.jmh.annotations.*
6+
import java.net.URL
7+
import java.nio.charset.StandardCharsets
8+
import java.util.*
9+
10+
@State(Scope.Benchmark)
11+
@Fork(2)
12+
@BenchmarkMode(Mode.SingleShotTime)
13+
class EncodeBenchmark {
14+
private lateinit var text: String
15+
private lateinit var tokenizer: Tokenizer
16+
17+
@Setup
18+
fun setUp() = runBlocking {
19+
val url = URL("https://unicode.org/udhr/assemblies/full_all.txt")
20+
Scanner(url.openStream(), StandardCharsets.UTF_8.name())
21+
.use { scanner -> text = scanner.useDelimiter("\\A").next() }
22+
tokenizer = Tokenizer.encodingForModel("gpt-4")
23+
}
24+
25+
@Benchmark
26+
fun encode(): Int {
27+
return tokenizer.encode(text).size
28+
}
29+
}

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
33
import org.gradle.api.tasks.testing.logging.TestLogEvent.*
44
import org.jetbrains.dokka.gradle.DokkaMultiModuleTask
55

6-
@Suppress("DSL_SCOPE_VIOLATION")
76
plugins {
87
alias(libs.plugins.kotlin.multiplaform) apply false
98
alias(libs.plugins.kotlinx.binary.validator) apply false
109
alias(libs.plugins.maven.publish) apply false
1110
alias(libs.plugins.spotless) apply false
11+
alias(libs.plugins.kotlinx.benchmark) apply false
12+
alias(libs.plugins.kotlin.allopen) apply false
1213
alias(libs.plugins.dokka)
1314
}
1415

gradle/libs.versions.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ktor = "2.3.5"
55
okio = "3.6.0"
66
openai = "3.5.0"
77
dataframe = "0.11.1"
8+
benchmark = "0.4.9"
89

910
[libraries]
1011
# Coroutines
@@ -24,10 +25,15 @@ okio = { group = "com.squareup.okio", name = "okio", version.ref = "okio" }
2425
openai-client = { group = "com.aallam.openai", name = "openai-client", version.ref = "openai" }
2526
# Dataframe
2627
dataframe = { group = "org.jetbrains.kotlinx", name = "dataframe", version.ref = "dataframe" }
28+
# benchmark
29+
kotlinx-benchmark = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "benchmark" }
30+
2731

2832
[plugins]
2933
kotlin-multiplaform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
3034
kotlinx-binary-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.13.2" }
3135
maven-publish = { id = "com.vanniktech.maven.publish", version = "0.25.3" }
3236
spotless = { id = "com.diffplug.gradle.spotless", version = "6.22.0" }
3337
dokka = { id = "org.jetbrains.dokka", version = "1.8.20" }
38+
kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "benchmark" }
39+
kotlin-allopen = { id = "org.jetbrains.kotlin.plugin.allopen", version.ref = "kotlin" }

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ rootProject.name = "ktoken"
33
include(":ktoken")
44
include(":ktoken-bom")
55
include(":sample")
6+
include(":benchmark")
67

78
pluginManagement {
89
repositories {

0 commit comments

Comments
 (0)