From d914de441ef99436c171a3e4011ff6207d43df58 Mon Sep 17 00:00:00 2001 From: yangdx Date: Thu, 8 May 2025 04:15:21 +0800 Subject: [PATCH] Add user_prompt to WebUI --- lightrag/api/routers/query_routes.py | 5 ++++ lightrag_webui/src/api/lightrag.ts | 2 ++ .../components/retrieval/QuerySettings.tsx | 26 +++++++++++++++++++ lightrag_webui/src/locales/ar.json | 5 +++- lightrag_webui/src/locales/en.json | 5 +++- lightrag_webui/src/locales/fr.json | 5 +++- lightrag_webui/src/locales/zh.json | 5 +++- lightrag_webui/src/stores/settings.ts | 11 ++++++-- 8 files changed, 58 insertions(+), 6 deletions(-) diff --git a/lightrag/api/routers/query_routes.py b/lightrag/api/routers/query_routes.py index 600e680e..6fe86f79 100644 --- a/lightrag/api/routers/query_routes.py +++ b/lightrag/api/routers/query_routes.py @@ -78,6 +78,11 @@ class QueryRequest(BaseModel): description="Number of complete conversation turns (user-assistant pairs) to consider in the response context.", ) + user_prompt: Optional[str] = Field( + default=None, + description="User-provided prompt for the query. If provided, this will be used instead of the default value from prompt template.", + ) + @field_validator("query", mode="after") @classmethod def query_strip_after(cls, query: str) -> str: diff --git a/lightrag_webui/src/api/lightrag.ts b/lightrag_webui/src/api/lightrag.ts index 5adeb8be..55046e15 100644 --- a/lightrag_webui/src/api/lightrag.ts +++ b/lightrag_webui/src/api/lightrag.ts @@ -101,6 +101,8 @@ export type QueryRequest = { conversation_history?: Message[] /** Number of complete conversation turns (user-assistant pairs) to consider in the response context. */ history_turns?: number + /** User-provided prompt for the query. If provided, this will be used instead of the default value from prompt template. */ + user_prompt?: string } export type QueryResponse = { diff --git a/lightrag_webui/src/components/retrieval/QuerySettings.tsx b/lightrag_webui/src/components/retrieval/QuerySettings.tsx index b51ddc75..735a4190 100644 --- a/lightrag_webui/src/components/retrieval/QuerySettings.tsx +++ b/lightrag_webui/src/components/retrieval/QuerySettings.tsx @@ -3,6 +3,7 @@ import { QueryMode, QueryRequest } from '@/api/lightrag' // Removed unused import for Text component import Checkbox from '@/components/ui/Checkbox' import NumberInput from '@/components/ui/NumberInput' +import Input from '@/components/ui/Input' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card' import { Select, @@ -241,6 +242,31 @@ export default function QuerySettings() { + {/* User Prompt */} + <> + + + + + + +

{t('retrievePanel.querySettings.userPromptTooltip')}

+
+
+
+
+ handleChange('user_prompt', e.target.value)} + placeholder={t('retrievePanel.querySettings.userPromptPlaceholder')} + className="h-9" + /> +
+ + {/* Toggle Options */} <>
diff --git a/lightrag_webui/src/locales/ar.json b/lightrag_webui/src/locales/ar.json index 8b07f1bc..c3cfa465 100644 --- a/lightrag_webui/src/locales/ar.json +++ b/lightrag_webui/src/locales/ar.json @@ -350,7 +350,10 @@ "onlyNeedPrompt": "تحتاج فقط إلى المطالبة", "onlyNeedPromptTooltip": "إذا كان صحيحًا، يتم إرجاع المطالبة المولدة فقط دون إنتاج رد", "streamResponse": "تدفق الرد", - "streamResponseTooltip": "إذا كان صحيحًا، يتيح إخراج التدفق للردود في الوقت الفعلي" + "streamResponseTooltip": "إذا كان صحيحًا، يتيح إخراج التدفق للردود في الوقت الفعلي", + "userPrompt": "مطالبة مخصصة", + "userPromptTooltip": "تقديم متطلبات استجابة إضافية إلى نموذج اللغة الكبير (غير متعلقة بمحتوى الاستعلام، فقط لمعالجة المخرجات).", + "userPromptPlaceholder": "أدخل مطالبة مخصصة (اختياري)" } }, "apiSite": { diff --git a/lightrag_webui/src/locales/en.json b/lightrag_webui/src/locales/en.json index 80453d76..1594db33 100644 --- a/lightrag_webui/src/locales/en.json +++ b/lightrag_webui/src/locales/en.json @@ -350,7 +350,10 @@ "onlyNeedPrompt": "Only Need Prompt", "onlyNeedPromptTooltip": "If True, only returns the generated prompt without producing a response", "streamResponse": "Stream Response", - "streamResponseTooltip": "If True, enables streaming output for real-time responses" + "streamResponseTooltip": "If True, enables streaming output for real-time responses", + "userPrompt": "User Prompt", + "userPromptTooltip": "Provide additional response requirements to the LLM (unrelated to query content, only for output processing).", + "userPromptPlaceholder": "Enter custom prompt (optional)" } }, "apiSite": { diff --git a/lightrag_webui/src/locales/fr.json b/lightrag_webui/src/locales/fr.json index 993c48a4..cd1a0823 100644 --- a/lightrag_webui/src/locales/fr.json +++ b/lightrag_webui/src/locales/fr.json @@ -350,7 +350,10 @@ "onlyNeedPrompt": "Besoin uniquement de l'invite", "onlyNeedPromptTooltip": "Si vrai, ne renvoie que l'invite générée sans produire de réponse", "streamResponse": "Réponse en flux", - "streamResponseTooltip": "Si vrai, active la sortie en flux pour des réponses en temps réel" + "streamResponseTooltip": "Si vrai, active la sortie en flux pour des réponses en temps réel", + "userPrompt": "Invite personnalisée", + "userPromptTooltip": "Fournir des exigences de réponse supplémentaires au LLM (sans rapport avec le contenu de la requête, uniquement pour le traitement de sortie).", + "userPromptPlaceholder": "Entrez une invite personnalisée (facultatif)" } }, "apiSite": { diff --git a/lightrag_webui/src/locales/zh.json b/lightrag_webui/src/locales/zh.json index dc6213a6..0a276d53 100644 --- a/lightrag_webui/src/locales/zh.json +++ b/lightrag_webui/src/locales/zh.json @@ -350,7 +350,10 @@ "onlyNeedPrompt": "仅需提示", "onlyNeedPromptTooltip": "如果为True,仅返回生成的提示而不产生响应", "streamResponse": "流式响应", - "streamResponseTooltip": "如果为True,启用实时流式输出响应" + "streamResponseTooltip": "如果为True,启用实时流式输出响应", + "userPrompt": "用户提示词", + "userPromptTooltip": "向LLM提供额外的响应要求(与查询内容无关,仅用于处理输出)。", + "userPromptPlaceholder": "输入自定义提示词(可选)" } }, "apiSite": { diff --git a/lightrag_webui/src/stores/settings.ts b/lightrag_webui/src/stores/settings.ts index 7de78f15..fb3246ea 100644 --- a/lightrag_webui/src/stores/settings.ts +++ b/lightrag_webui/src/stores/settings.ts @@ -115,7 +115,8 @@ const useSettingsStoreBase = create()( stream: true, history_turns: 3, hl_keywords: [], - ll_keywords: [] + ll_keywords: [], + user_prompt: '' }, setTheme: (theme: Theme) => set({ theme }), @@ -167,7 +168,7 @@ const useSettingsStoreBase = create()( { name: 'settings-storage', storage: createJSONStorage(() => localStorage), - version: 12, + version: 13, migrate: (state: any, version: number) => { if (version < 2) { state.showEdgeLabel = false @@ -225,6 +226,12 @@ const useSettingsStoreBase = create()( // Clear retrieval history to avoid compatibility issues with MessageWithError type state.retrievalHistory = [] } + if (version < 13) { + // Add user_prompt field for older versions + if (state.querySettings) { + state.querySettings.user_prompt = '' + } + } return state } }