First commit

This commit is contained in:
Saufi
2026-05-18 08:56:23 +08:00
commit fd3d3a4d2b
147 changed files with 22099 additions and 0 deletions

86
config/ollama.php Normal file
View File

@@ -0,0 +1,86 @@
<?php
// config/ollama.php
// Konfigurasi untuk Ollama API (local LLM + embedding)
// Nilai diambil dari .env supaya mudah tukar tanpa ubah code
return [
/*
|--------------------------------------------------------------------------
| Ollama Base URL
|--------------------------------------------------------------------------
| URL Ollama yang berjalan secara lokal atau dalam rangkaian dalaman.
| Default: http://localhost:11434
*/
'base_url' => env('OLLAMA_BASE_URL', 'http://localhost:11434'),
/*
|--------------------------------------------------------------------------
| Model Chat (LLM)
|--------------------------------------------------------------------------
| Model yang digunakan untuk chat/generate.
| Contoh: llama3, mistral, qwen2, gemma2
*/
'chat_model' => env('OLLAMA_CHAT_MODEL', 'llama3'),
/*
|--------------------------------------------------------------------------
| Model Embedding
|--------------------------------------------------------------------------
| Model yang digunakan untuk jana embedding vector.
| Cadangan: nomic-embed-text (pilihan terbaik untuk teks Melayu/English)
| Alternatif: mxbai-embed-large
*/
'embedding_model' => env('OLLAMA_EMBEDDING_MODEL', 'nomic-embed-text'),
/*
|--------------------------------------------------------------------------
| Timeout (dalam saat)
|--------------------------------------------------------------------------
*/
'timeout' => [
'connect' => (int) env('OLLAMA_CONNECT_TIMEOUT', 5),
'chat' => (int) env('OLLAMA_CHAT_TIMEOUT', 120),
'embed' => (int) env('OLLAMA_EMBED_TIMEOUT', 30),
],
/*
|--------------------------------------------------------------------------
| Retry Configuration
|--------------------------------------------------------------------------
*/
'retry' => [
'times' => (int) env('OLLAMA_RETRY_TIMES', 2),
'sleep' => (int) env('OLLAMA_RETRY_SLEEP', 1000), // milliseconds
],
/*
|--------------------------------------------------------------------------
| Chat Parameters
|--------------------------------------------------------------------------
*/
'chat' => [
'temperature' => (float) env('OLLAMA_TEMPERATURE', 0.1),
// Rendah = lebih deterministik, sesuai untuk RAG
'top_p' => (float) env('OLLAMA_TOP_P', 0.9),
'num_ctx' => (int) env('OLLAMA_NUM_CTX', 4096),
// Context window — bergantung pada model
],
/*
|--------------------------------------------------------------------------
| RAG System Prompt
|--------------------------------------------------------------------------
| Prompt sistem untuk kawalan jawapan RAG.
| Dipisah dari code supaya mudah disesuaikan.
*/
'rag_system_prompt' => env(
'OLLAMA_RAG_SYSTEM_PROMPT',
'Anda adalah pembantu maklumat rasmi untuk jabatan kerajaan tempatan. ' .
'Jawab soalan berdasarkan konteks yang diberikan SAHAJA. ' .
'Jika maklumat tidak terdapat dalam konteks, jawab: ' .
'"Maaf, saya tidak menemui maklumat berkaitan dalam pangkalan pengetahuan kami. ' .
'Sila hubungi pejabat kami untuk maklumat lanjut." ' .
'Jangan reka-reka jawapan. Gunakan Bahasa Melayu yang formal.'
),
];