Add user_prompt to WebUI
This commit is contained in:
@@ -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:
|
||||
|
@@ -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 = {
|
||||
|
@@ -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() {
|
||||
</div>
|
||||
</>
|
||||
|
||||
{/* User Prompt */}
|
||||
<>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<label htmlFor="user_prompt" className="ml-1 cursor-help">
|
||||
{t('retrievePanel.querySettings.userPrompt')}
|
||||
</label>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="left">
|
||||
<p>{t('retrievePanel.querySettings.userPromptTooltip')}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
<div>
|
||||
<Input
|
||||
id="user_prompt"
|
||||
value={querySettings.user_prompt}
|
||||
onChange={(e) => handleChange('user_prompt', e.target.value)}
|
||||
placeholder={t('retrievePanel.querySettings.userPromptPlaceholder')}
|
||||
className="h-9"
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
|
||||
{/* Toggle Options */}
|
||||
<>
|
||||
<div className="flex items-center gap-2">
|
||||
|
@@ -350,7 +350,10 @@
|
||||
"onlyNeedPrompt": "تحتاج فقط إلى المطالبة",
|
||||
"onlyNeedPromptTooltip": "إذا كان صحيحًا، يتم إرجاع المطالبة المولدة فقط دون إنتاج رد",
|
||||
"streamResponse": "تدفق الرد",
|
||||
"streamResponseTooltip": "إذا كان صحيحًا، يتيح إخراج التدفق للردود في الوقت الفعلي"
|
||||
"streamResponseTooltip": "إذا كان صحيحًا، يتيح إخراج التدفق للردود في الوقت الفعلي",
|
||||
"userPrompt": "مطالبة مخصصة",
|
||||
"userPromptTooltip": "تقديم متطلبات استجابة إضافية إلى نموذج اللغة الكبير (غير متعلقة بمحتوى الاستعلام، فقط لمعالجة المخرجات).",
|
||||
"userPromptPlaceholder": "أدخل مطالبة مخصصة (اختياري)"
|
||||
}
|
||||
},
|
||||
"apiSite": {
|
||||
|
@@ -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": {
|
||||
|
@@ -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": {
|
||||
|
@@ -350,7 +350,10 @@
|
||||
"onlyNeedPrompt": "仅需提示",
|
||||
"onlyNeedPromptTooltip": "如果为True,仅返回生成的提示而不产生响应",
|
||||
"streamResponse": "流式响应",
|
||||
"streamResponseTooltip": "如果为True,启用实时流式输出响应"
|
||||
"streamResponseTooltip": "如果为True,启用实时流式输出响应",
|
||||
"userPrompt": "用户提示词",
|
||||
"userPromptTooltip": "向LLM提供额外的响应要求(与查询内容无关,仅用于处理输出)。",
|
||||
"userPromptPlaceholder": "输入自定义提示词(可选)"
|
||||
}
|
||||
},
|
||||
"apiSite": {
|
||||
|
@@ -115,7 +115,8 @@ const useSettingsStoreBase = create<SettingsState>()(
|
||||
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<SettingsState>()(
|
||||
{
|
||||
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<SettingsState>()(
|
||||
// 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
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user