kojev 0.1.0 — a Kotlin Multiplatform client for Jev / the System One API.
It also runs unchanged against
@pambrose 's laya-server, so: a local open-weight
model, a typed Kotlin API, no cloud.
Paul got to a Kotlin client first with jev4k, which is good and has more conveniences
on the JVM. kojev is the multiplatform one, and deliberately narrower:
- JVM, Android and iOS — question definitions live in shared code
- Choice
and Score answers come back as your own enums. Descriptions sit on the
enum constants, so a forgotten one is a compile error
- Exactly one typed way to read an answer: no string-id lookup, no default
thresholds, no helper that rounds a Score into a level
- State is any @Serializable value
- baseUrl is a first-class setting, so it isn't tied to TypeSafe's endpoint
On that last point: I pointed the published 0.1.0 at laya-server and changed nothing
on either side. kojev's parsing is strict — a distribution whose keys don't match the
options that were sent is an exception, never a default — and it never tripped, which
says something about how faithful laya-server's shape is.
state : "I was charged twice for August. Please fix this ASAP."
intent : REFUND confidence=0.569
REFUND=0.865, TECHNICAL=0.101, OTHER=0.034
is_angry : 0.861
urgency : mostLikely=NOW score=1.806 confidence=0.522
LATER=0.029, TODAY=0.137, NOW=0.835
~1.7–2.0s warm, CPU only (Ryzen AI 5 330, english checkpoint, no GPU). So: not Jev
latency, and laya-server says the rest itself — 512–1024 token context against Jev's
32k, input_tokens counted differently, and the answers are a different model's
answers. The typed contract carried over; what sits behind it did not.
(One rough edge I hit: kojev makes apiKey a required parameter, so against a local
server you end up passing a dummy. Undecided on what to do about that.)
io.github.itisnomatter
kojev0.1.0
github.com/ItisNoMatter/kojev
0.x and unofficial (not affiliated with TypeSafe AI). Feedback on the API shape welcome.