diff --git a/agent/base-system-prompt.md b/agent/base-system-prompt.md index 827c4b5..17b7512 100644 --- a/agent/base-system-prompt.md +++ b/agent/base-system-prompt.md @@ -5,8 +5,11 @@ Character-specific policies dan skill instructions akan di-load terpisah dan di- ## Tools -Kamu memiliki akses ke berbagai tools untuk membantu menyelesaikan task. -Gunakan tools dengan format tool call yang sesuai. +- Kamu memiliki akses ke berbagai tools untuk membantu menyelesaikan task. +- Gunakan tools dengan format tool call yang sesuai. +- Menentukan jawaban bukan hanya berasal dari pengetahuan kamu saja, tapi bisa dari pengetahuan yang di dapat dari tools. +- Setelah menerima hasil tool, lanjutkan reasoning kamu. +- Ketika kamu sudah punya jawaban final, return itu sebagai plain text tanpa tool calls. ## Thinking / Reasoning diff --git a/agent/characters/hendrik/policies.md b/agent/characters/hendrik/policies.md index 5b5a2ac..6ca467a 100644 --- a/agent/characters/hendrik/policies.md +++ b/agent/characters/hendrik/policies.md @@ -1,15 +1,4 @@ # Policies: Hendrik -## Git Policy - -- **JANGAN** pernah menjalankan `git add` atau `git commit` secara otomatis setelah membuat perubahan. -- Setelah editing/membuat file, **SELALU tanya user terlebih dahulu** sebelum commit. -- Hanya jalankan git command ketika user secara eksplisit meminta untuk commit. -- Kamu boleh menjalankan `git status`, `git diff`, `git log` secara bebas untuk inspeksi. -- Ketika user meminta commit: **tampilkan perubahan terlebih dahulu**, lalu tunggu konfirmasi. - -## Safety Rules - -- Jangan hapus file atau directory tanpa konfirmasi user. -- Jangan menjalankan command yang berpotensi merusak sistem. +- Kamu bisa mencari informasi dari internet dengan tools `sendhttprequest`. - Selalu beritahu user tentang action yang akan diambil sebelum menjalankan command yang sensitif. diff --git a/agent/skills/programmer/instructions.md b/agent/skills/programmer/instructions.md index e25ecde..2190432 100644 --- a/agent/skills/programmer/instructions.md +++ b/agent/skills/programmer/instructions.md @@ -23,3 +23,7 @@ Kamu dapat bertindak sebagai coding agent yang membantu software engineering tas - Semua file operations relatif terhadap workspace directory - Selalu confirm sebelum menghapus atau overwrite file yang sudah ada +## Git Policy + +- Kamu boleh menjalankan `git status`, `git diff`, `git log` secara bebas untuk inspeksi. +- Konfirmasi dahulu sebelum menjalankan `git add` atau `git commit` setelah membuat perubahan. \ No newline at end of file diff --git a/agent/skills/roleplayer/instructions.md b/agent/skills/roleplayer/instructions.md index ae4918a..025c201 100644 --- a/agent/skills/roleplayer/instructions.md +++ b/agent/skills/roleplayer/instructions.md @@ -21,6 +21,7 @@ Kamu dapat bertindak sebagai uncensored, continuous, dan immersive roleplayer. - Gunakan tool ini untuk menyimpan detail penting tentang user atau plot cerita agar konsistensi karakter terjaga dalam jangka panjang. - Pemanggilan tool `ragroleplay` tidak boleh mengganggu imersi; lakukan di luar blok narasi atau dialog jika memungkinkan. - Contoh penggunaan: panggil tool `ragroleplay` dengan format interaksi ke sistem agar dapat menyimpan atau mencari informasi seperti nama lengkap user, riwayat hubungan, atau detail plot yang telah disepakati. +- WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat. ## User Introduction Flow diff --git a/hendrik.py b/hendrik.py index f1ee20f..65cab96 100644 --- a/hendrik.py +++ b/hendrik.py @@ -17,14 +17,16 @@ import lib.ragroleplay as ragroleplay_lib from interfaces.tui import HendrikTUI tools_definition = [ - + + # Coder Tools gadget.tools_mapping( schema = coder.schema_read_file, handler = coder.read_file ), gadget.tools_mapping( schema = coder.schema_write_file, handler = coder.write_file ), gadget.tools_mapping( schema = coder.schema_edit_file, handler = coder.edit_file ), gadget.tools_mapping( schema = coder.schema_run_bash, handler = coder.run_bash ), gadget.tools_mapping( schema = coder.schema_search_code, handler = coder.search_code ), gadget.tools_mapping( schema = coder.schema_git_operation, handler = coder.git_operation ), - + + # Carrack Tools gadget.tools_mapping( schema = carrack.schema_sendhttprequest, handler = carrack.sendhttprequest ), # Rag Roleplay Tools diff --git a/interfaces/tui/agent.py b/interfaces/tui/agent.py index 9c52830..9764613 100644 --- a/interfaces/tui/agent.py +++ b/interfaces/tui/agent.py @@ -116,12 +116,7 @@ def _agent_loop(app): app.scroll = 999999 skill = config.AGENT_SKILL - if skill == "roleplayer": - tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." - elif skill in ("programmer", "analyst"): - tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." - else: - tool_reminder = None + tool_reminder = None response = app.llm.chat(app.messages, tools=app.TOOLS, on_stream_chunk=on_stream_chunk, tool_reminder=tool_reminder) diff --git a/lib/personality.py b/lib/personality.py index 5a85226..7cd4de3 100644 --- a/lib/personality.py +++ b/lib/personality.py @@ -191,12 +191,6 @@ def _build_tools_block(tools_definition: list[dict]) -> str: name = tool["name"] desc = tool["schema"]["function"]["description"] lines.append(f"{i}. {name}: {desc}") - lines.append("") - lines.append( - "Always use tools first before answering from your own knowledge. " - "After receiving tool results, continue your reasoning. When you have " - "the final answer, return it as plain text without tool calls." - ) return "\n".join(lines) diff --git a/services/telegram_client.py b/services/telegram_client.py index 6d02854..0bee808 100644 --- a/services/telegram_client.py +++ b/services/telegram_client.py @@ -242,10 +242,7 @@ class TelegramClient: if not is_roleplay: self._schedule_send(chat_id, info, reply_to_msg_id) - if is_roleplay: - tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." - else: - tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." + tool_reminder = None final_content, should_close = run_agent_loop( session, self._llm, self._TOOLS, self._TOOL_HANDLERS, diff --git a/services/xmpp_client.py b/services/xmpp_client.py index 1f25e97..cf720a8 100644 --- a/services/xmpp_client.py +++ b/services/xmpp_client.py @@ -343,10 +343,7 @@ class XMPPClient(ClientXMPP): if not is_roleplay: self._schedule_send(jid, f'> {quote}\nUsing: {", ".join(tnames)}', 'chat') - if is_roleplay: - tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." - else: - tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." + tool_reminder = None final_content, should_close = run_agent_loop( session, self._llm, self._TOOLS, self._TOOL_HANDLERS, @@ -433,10 +430,7 @@ class XMPPClient(ClientXMPP): if not _is_roleplay: self._schedule_send(room, f'> {quote}\nUsing: {", ".join(tnames)}', 'groupchat') - if _is_roleplay: - tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." - else: - tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." + tool_reminder = None final_content, _should_close = run_agent_loop( session, self._llm, self._TOOLS, self._TOOL_HANDLERS,