// Valide la logique de generate() (prefill HTP + greedy CPU) sur device, sans JNI. #include #include #include #include "llama.h" int main(int c, char** v){ llama_backend_init(); auto mp=llama_model_default_params(); mp.n_gpu_layers=99; auto m=llama_model_load_from_file(v[1],mp); if(!m){printf("nomodel\n");return 1;} 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="<|im_start|>system\nKazeia, psy bref FR.<|im_end|>\n<|im_start|>user\nje vais mal<|im_end|>\n<|im_start|>assistant\n\n\n\n\n"; int n=-llama_tokenize(vo,pr,strlen(pr),0,0,true,true); std::vectort(n); llama_tokenize(vo,pr,strlen(pr),t.data(),n,true,true); auto b=llama_batch_get_one(t.data(),n); printf("OUT:"); for(int i=0;i<20&&llama_decode(ctx,b)==0;i++){auto id=llama_sampler_sample(s,ctx,-1); if(llama_vocab_is_eog(vo,id))break; char z[128]; int l=llama_token_to_piece(vo,id,z,128,0,true); if(l>0)fwrite(z,1,l,stdout); b=llama_batch_get_one(&id,1);} printf("\n"); return 0; }