Bridge v3 utilisable: thinking-off ChatML, sys+usr, cap; static intact
This commit is contained in:
parent
fe6826a3be
commit
7a5780ca1d
|
|
@ -34,3 +34,6 @@ test_native (=logique generate bridge) sur Pad3: load 4B HTP+decode CPU+detok =
|
|||
|
||||
## v2 STATIC (collision libllama TTS resolue)
|
||||
TTS Talker/CP linke vs son libllama.so -> conflit ABI. FIX: libkazeia_engine.so STATIC (llama+ggml+ggml-cpu+hexagon en .a, --whole-archive hexagon). NEEDED= libm/log/dl/c only, 42MB. Coexiste avec libllama TTS. Drop: libkazeia_engine.so + libggml-htp-v79.so. Valide device 4B HTP. Build: bstatic BUILD_SHARED_LIBS=OFF.
|
||||
|
||||
## v3 utilisable: thinking-off bridge
|
||||
generate(sys,usr,max): wrap ChatML + <think></think> vide = stop reasoning, decode 4B 15tok/s ~5s/tour. test 4B: "Je suis desole..." 40s(load)+gen. signature 2-arg. cap maxTok 64. dist=libkazeia_engine.so static + htp-v79. #277 fix livre.
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ package com.kazeia.llm
|
|||
// Remplace ExecuTorchLlmEngine. Mono-moteur Speaker+Thinker (budget thinking off).
|
||||
class EngineJni {
|
||||
external fun load(ggufPath: String, nCtx: Int): Long
|
||||
external fun generate(h: Long, prompt: String, maxTok: Int): String
|
||||
external fun generate(h: Long, sys: String, usr: String, maxTok: Int): String
|
||||
external fun reset(h: Long); external fun free(h: Long)
|
||||
companion object { init { System.loadLibrary("kazeia_engine") } }
|
||||
}
|
||||
class EngineLlmEngine(model: String, ctx: Int = 2048) {
|
||||
private val jni = EngineJni(); private val h = jni.load(model, ctx)
|
||||
// Thinker: bullets; Speaker: SYS_KAZEIA + bullets. reset() entre tours, ou cache persistant.
|
||||
fun generate(p: String, max: Int = 64) = jni.generate(h, p, max)
|
||||
fun generate(sys: String, usr: String, max: Int = 64) = jni.generate(h, sys, usr, max)
|
||||
fun reset() = jni.reset(h); fun release() = jni.free(h)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,15 @@ Java_com_kazeia_llm_EngineJni_load(JNIEnv* e, jobject, jstring path, jint nctx)
|
|||
}
|
||||
|
||||
extern "C" JNIEXPORT jstring JNICALL
|
||||
Java_com_kazeia_llm_EngineJni_generate(JNIEnv* e, jobject, jlong h, jstring prompt, jint maxTok) {
|
||||
auto* k = (KEngine*)h; const char* pr = e->GetStringUTFChars(prompt, 0);
|
||||
int n = -llama_tokenize(k->v, pr, strlen(pr), nullptr, 0, true, true);
|
||||
std::vector<llama_token> t(n); llama_tokenize(k->v, pr, strlen(pr), t.data(), n, true, true);
|
||||
e->ReleaseStringUTFChars(prompt, pr);
|
||||
Java_com_kazeia_llm_EngineJni_generate(JNIEnv* e, jobject, jlong h, jstring sys, jstring usr, jint maxTok) {
|
||||
auto* k = (KEngine*)h;
|
||||
const char* sp = e->GetStringUTFChars(sys, 0); const char* up = e->GetStringUTFChars(usr, 0);
|
||||
// ChatML Qwen3.5 + <think></think> vide = thinking OFF deterministe (sinon boucle infinie)
|
||||
std::string p = "<|im_start|>system\n"; p+=sp; p+="<|im_end|>\n<|im_start|>user\n"; p+=up;
|
||||
p += "<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n";
|
||||
e->ReleaseStringUTFChars(sys, sp); e->ReleaseStringUTFChars(usr, up);
|
||||
int n = -llama_tokenize(k->v, p.c_str(), p.size(), nullptr, 0, true, true);
|
||||
std::vector<llama_token> t(n); llama_tokenize(k->v, p.c_str(), p.size(), t.data(), n, true, true);
|
||||
llama_batch b = llama_batch_get_one(t.data(), n); // prefill batch -> HTP
|
||||
std::string out; char buf[256];
|
||||
for (int i = 0; i < maxTok && llama_decode(k->c, b) == 0; ++i) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ int main(int c, char** v){
|
|||
auto cp=llama_context_default_params(); cp.n_ctx=2048; cp.n_threads=8; cp.n_batch=512;
|
||||
auto ctx=llama_init_from_model(m,cp); auto vo=llama_model_get_vocab(m);
|
||||
auto s=llama_sampler_init_greedy();
|
||||
const char* pr="Kazeia psy. Patient: je vais mal. Une phrase:";
|
||||
const char* pr="<|im_start|>system\nKazeia, psy bref FR.<|im_end|>\n<|im_start|>user\nje vais mal<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n";
|
||||
int n=-llama_tokenize(vo,pr,strlen(pr),0,0,true,true); std::vector<llama_token>t(n);
|
||||
llama_tokenize(vo,pr,strlen(pr),t.data(),n,true,true);
|
||||
auto b=llama_batch_get_one(t.data(),n); printf("OUT:");
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue