44#include " utils/llama_exception.h"
55#include " engine.h"
66
7+ namespace jni_refs {
8+ constexpr auto token_generation_result_class = " com/suhel/llamabro/sdk/internal/LlamaSessionImpl$NativeTokenGenerationResult" ;
9+ constexpr auto token_generation_result_constructor_sig = " (Ljava/lang/String;Z)V" ;
10+ }
11+
12+ static jclass jTokenGenerationResultClass = nullptr ;
13+ static jmethodID jTokenGenerationResultConstructor = nullptr ;
14+
15+ static void cache_refs (JNIEnv *env) {
16+ auto local = env->FindClass (jni_refs::token_generation_result_class);
17+
18+ jTokenGenerationResultClass = reinterpret_cast <jclass>(env->NewGlobalRef (local));
19+ jTokenGenerationResultConstructor = env->GetMethodID (jTokenGenerationResultClass,
20+ " <init>" ,
21+ jni_refs::token_generation_result_constructor_sig);
22+ env->DeleteLocalRef (local);
23+ }
24+
25+ JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM *vm, void *) {
26+ JNIEnv *env;
27+ if (vm->GetEnv (reinterpret_cast <void **>(&env), JNI_VERSION_1_6) != JNI_OK) {
28+ return JNI_ERR;
29+ }
30+
31+ cache_refs (env);
32+ return JNI_VERSION_1_6;
33+ }
34+
735// ── create ────────────────────────────────────────────────────────────────────
836
937extern " C"
1038JNIEXPORT jlong JNICALL
1139Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_create (JNIEnv *env,
1240 jclass,
13- jlong kEnginePtr ,
14- jobject kParams ) {
15- auto engine = reinterpret_cast <LlamaEngine *>(kEnginePtr );
16- auto configReader = JniConfigReader (env, kParams );
41+ jlong jEnginePtr ,
42+ jobject jParams ) {
43+ auto engine = reinterpret_cast <LlamaEngine *>(jEnginePtr );
44+ auto configReader = JniConfigReader (env, jParams );
1745
1846 auto config = NativeSessionParams{
1947 .context_size = configReader.getInt (" contextSize" ),
@@ -46,16 +74,16 @@ Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_create(JNIEnv *en
4674extern " C"
4775JNIEXPORT void JNICALL
4876Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_setSystemPrompt (JNIEnv *env, jclass,
49- jlong kSessionPtr ,
50- jstring kText ,
51- jboolean kAddSpecial ) {
52- auto session = reinterpret_cast <LlamaSession *>(kSessionPtr );
53- auto text = env->GetStringUTFChars (kText , nullptr );
54- std::string textStr (text);
55- env->ReleaseStringUTFChars (kText , text);
77+ jlong jSessionPtr ,
78+ jstring jText ,
79+ jboolean jAddSpecial ) {
80+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr );
81+ auto text = env->GetStringUTFChars (jText , nullptr );
82+ auto textStr = std::string (text);
83+ env->ReleaseStringUTFChars (jText , text);
5684
5785 try {
58- session->setSystemPrompt (textStr, kAddSpecial );
86+ session->setSystemPrompt (textStr, jAddSpecial );
5987 } catch (const LlamaException &ex) {
6088 throwLlamaError (env, ex);
6189 }
@@ -64,16 +92,16 @@ Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_setSystemPrompt(J
6492extern " C"
6593JNIEXPORT void JNICALL
6694Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_injectPrompt (JNIEnv *env, jclass,
67- jlong kSessionPtr ,
68- jstring kText ,
69- jboolean kAddSpecial ) {
70- auto session = reinterpret_cast <LlamaSession *>(kSessionPtr );
71- auto text = env->GetStringUTFChars (kText , nullptr );
72- std::string textStr (text);
73- env->ReleaseStringUTFChars (kText , text);
95+ jlong jSessionPtr ,
96+ jstring jText ,
97+ jboolean jAddSpecial ) {
98+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr );
99+ auto text = env->GetStringUTFChars (jText , nullptr );
100+ auto textStr = std::string (text);
101+ env->ReleaseStringUTFChars (jText , text);
74102
75103 try {
76- session->injectPrompt (textStr, kAddSpecial );
104+ session->injectPrompt (textStr, jAddSpecial );
77105 } catch (const LlamaException &ex) {
78106 throwLlamaError (env, ex);
79107 }
@@ -84,9 +112,11 @@ Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_injectPrompt(JNIE
84112extern " C"
85113JNIEXPORT void JNICALL
86114Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_clear (JNIEnv *env, jclass,
87- jlong kSessionPtr ) {
115+ jlong jSessionPtr) {
116+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr);
117+
88118 try {
89- reinterpret_cast <LlamaSession *>( kSessionPtr ) ->clear ();
119+ session ->clear ();
90120 } catch (const LlamaException &ex) {
91121 throwLlamaError (env, ex);
92122 }
@@ -97,25 +127,31 @@ Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_clear(JNIEnv *env
97127extern " C"
98128JNIEXPORT void JNICALL
99129Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_abort (JNIEnv *, jclass,
100- jlong kSessionPtr ) {
101- reinterpret_cast <LlamaSession *>(kSessionPtr )->abort ();
130+ jlong jSessionPtr) {
131+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr);
132+ session->abort ();
102133}
103134
104135// ── generate ─────────────────────────────────────────────────────────────────
105136
106137extern " C"
107- JNIEXPORT jstring JNICALL
138+ JNIEXPORT jobject JNICALL
108139Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_generate (JNIEnv *env, jclass,
109- jlong kSessionPtr ) {
140+ jlong jSessionPtr) {
141+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr);
142+
110143 try {
111- auto result = reinterpret_cast <LlamaSession *>(kSessionPtr )->generate ();
144+ auto gen = session->generate ();
145+ auto token = gen.token ;
112146
113- if (result.has_value ()) {
114- const auto &utf16 = result.value ();
115- return env->NewString (reinterpret_cast <const jchar *>(utf16.data ()),
116- static_cast <jsize>(utf16.size ()));
117- }
118- return nullptr ;
147+ auto jToken = token.has_value ()
148+ ? env->NewString (reinterpret_cast <const jchar *>(token.value ().data ()),
149+ static_cast <jsize>(token.value ().size ()))
150+ : nullptr ;
151+ auto jIsComplete = static_cast <jboolean>(gen.is_complete );
152+
153+ return env->NewObject (jTokenGenerationResultClass, jTokenGenerationResultConstructor,
154+ jToken, jIsComplete);
119155 } catch (const LlamaException &ex) {
120156 throwLlamaError (env, ex);
121157 return nullptr ;
@@ -127,6 +163,7 @@ Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_generate(JNIEnv *
127163extern " C"
128164JNIEXPORT void JNICALL
129165Java_com_suhel_llamabro_sdk_internal_LlamaSessionImpl_00024Jni_destroy (JNIEnv *, jclass,
130- jlong kSessionPtr ) {
131- delete reinterpret_cast <LlamaSession *>(kSessionPtr );
166+ jlong jSessionPtr) {
167+ auto session = reinterpret_cast <LlamaSession *>(jSessionPtr);
168+ delete session;
132169}
0 commit comments