// kazeia_engine_jni.cpp — bridge LLM Kazeia-Engine (llama.cpp upstream + Hexagon) // Split prefill NPU / decode CPU. Speaker + Thinker partagent ce moteur. // Lib: libllama.so + libggml*.so + libggml-htp-v79.so (sel. auto). STT reste ORT-QAIRT. #include #include #include "llama.h" // Couper le reasoning (sinon ramble anglais): equivaut --reasoning-budget 0. // Speaker decode CPU (15/8.4 t/s); prefill HTP via -dev HTP0 -ngl 99 cote modele. struct KEngine { llama_model* m; llama_context* c; const llama_vocab* v; }; extern "C" JNIEXPORT jlong JNICALL Java_com_kazeia_llm_EngineJni_load(JNIEnv* e, jobject, jstring path, jint nctx) { const char* p = e->GetStringUTFChars(path, 0); llama_backend_init(); auto mp = llama_model_default_params(); mp.n_gpu_layers = 99; // prefill HTP auto m = llama_model_load_from_file(p, mp); e->ReleaseStringUTFChars(path, p); if (!m) return 0; auto cp = llama_context_default_params(); cp.n_ctx = nctx; cp.n_threads = 8; // decode CPU auto* k = new KEngine{m, llama_init_from_model(m, cp), llama_model_get_vocab(m)}; return (jlong)k; } extern "C" JNIEXPORT jstring JNICALL Java_com_kazeia_llm_EngineJni_generate(JNIEnv* e, jobject, jlong h, jstring prompt, jint maxTok) { auto* k = (KEngine*)h; std::string out; // prefill+greedy, enable_thinking=false dans le template // tokenize -> llama_decode (prefill HTP batch) -> sample greedy -> decode (CPU) jusqu'a EOS/maxTok return e->NewStringUTF(out.c_str()); // squelette: voir INTEGRATION.md pour boucle complete } extern "C" JNIEXPORT void JNICALL Java_com_kazeia_llm_EngineJni_reset(JNIEnv*, jobject, jlong h){ llama_memory_clear(llama_get_memory(((KEngine*)h)->c), true); } extern "C" JNIEXPORT void JNICALL Java_com_kazeia_llm_EngineJni_free(JNIEnv*, jobject, jlong h){ auto*k=(KEngine*)h; llama_free(k->c); llama_model_free(k->m); delete k; }