{% include 'includes/loading_overlay.html' %}

{{ html_title }} Logo {{ html_title }}

管理仪表盘

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %}

${t('adminDashboard.userManagement')}

${t('adminDashboard.id')} ${t('adminDashboard.username')} ${t('adminDashboard.email')} ${t('adminDashboard.admin')} ${t('adminDashboard.recordings')} ${t('adminDashboard.storageUsed')} ${t('adminDashboard.actions')}
${ user.id } ${ user.username } ${ user.email } Yes No ${ user.recordings_count } ${ formatFileSize(user.storage_used) }
Loading users...
No users found.

${t('adminDashboard.systemStatistics')}

${t('adminDashboard.totalUsers')}

${ stats.total_users }

${t('adminDashboard.totalRecordings')}

${ stats.total_recordings }

${t('adminDashboard.totalStorage')}

${ formatFileSize(stats.total_storage) }

${t('adminDashboard.totalQueries')}

${ stats.total_queries }

${t('adminDashboard.recordingStatusDistribution')}

${ stats.completed_recordings } ${t('adminDashboard.completedRecordings')}
${ stats.processing_recordings } ${t('adminDashboard.processingRecordings')}
${ stats.pending_recordings } ${t('adminDashboard.pendingRecordings')}
${ stats.failed_recordings } ${t('adminDashboard.failedRecordings')}

${t('adminDashboard.topUsersByStorage')}

${ user.username }
${ formatFileSize(user.storage_used) } (${ user.recordings_count} 录音文件)
No data available

${t('adminDashboard.systemSettings')}

${ setting.key }

${ getSettingDescription(setting) }

${ setting.setting_type } ${t('adminDashboard.lastUpdated')}: ${ formatDate(setting.updated_at) }
Enabled Disabled ${t('adminDashboard.noLimit')} ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.characters')} ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.megabytes')} ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.seconds')} ${ setting.value || t('adminDashboard.notSet') }
Loading settings...
No system settings found.

${t('adminDashboard.defaultPrompts')}

${t('adminDashboard.defaultPromptInfo')}

${t('adminDashboard.promptDescription')}

${ promptSaveMessage }

${t('adminDashboard.promptHierarchy')}

${t('adminDashboard.promptPriorityDescription')}

  1. ${t('adminDashboard.tagCustomPrompt')}: ${t('adminDashboard.tagCustomPromptDesc')}
  2. ${t('adminDashboard.userCustomPrompt')}: ${t('adminDashboard.userCustomPromptDesc')}
  3. ${t('adminDashboard.adminDefaultPrompt')}: ${t('adminDashboard.adminDefaultPromptDesc')}
  4. ${t('adminDashboard.systemFallback')}: ${t('adminDashboard.systemFallbackDesc')}
${t('adminDashboard.systemPrompt')}:
You are an AI assistant that generates comprehensive summaries for meeting transcripts. Respond only with the summary in Markdown format. Do NOT use markdown code blocks (```markdown). Provide raw markdown content directly.

Context:
- Current date: {current_date}
- Tags applied to this transcript by the user: {tag_names} (if tags exist)
- Information about the user: Name: {name}, Job title: {job_title}, Company: {company} (if provided)

Language Requirement: You MUST generate the entire summary in {user_output_language}. This is mandatory. (if language preference is set)
${t('adminDashboard.userMessageTemplate')}:
Transcription:
"""
{transcript_text}
"""

Summarization Instructions:
/* This section is dynamically replaced with one of the following (in order of priority):
   1. Combined tag prompts (if tags with custom prompts are selected)
   2. User's personal summarization prompt (if set in account settings)
   3. Admin default prompt (shown below)
   4. System fallback prompt */
${ defaultSummaryPrompt || originalDefaultPrompt }

{language_directive} (e.g., "Ensure your response is in {language}." if language is set)

${t('adminDashboard.placeholdersNote')}

${t('adminDashboard.additionalContext')}:
  • ${t('adminDashboard.contextNotes.transcriptLimit')}
  • ${t('adminDashboard.contextNotes.jsonConversion')}
  • ${t('adminDashboard.contextNotes.tagPrompts')}
  • ${t('adminDashboard.contextNotes.modelConfig')}

${t('adminDashboard.vectorStoreManagement')}

${t('adminDashboard.aboutInquireMode')}

${t('adminDashboard.inquireModeDescription')}

${t('adminDashboard.chunkSize')}: 500 ${t('adminDashboard.characters')}
${t('adminDashboard.overlap')}: 50 ${t('adminDashboard.characters')}
${t('adminDashboard.embeddingModel')}: all-MiniLM-L6-v2
${t('adminDashboard.vectorDimensions')}: 384

${t('adminDashboard.totalRecordings')}

${ inquireStatus.total_completed_recordings || 0 }

${t('adminDashboard.processedForInquire')}

${ inquireStatus.processed_for_inquire || 0 }

${t('adminDashboard.needProcessing')}

${ inquireStatus.need_processing || 0 }

${t('adminDashboard.totalChunks')}

${ inquireStatus.total_chunks || 0 }

${t('adminDashboard.embeddingsStatus')}

${ inquireStatus.embeddings_available ? t('adminDashboard.available') : t('adminDashboard.textSearchOnly') }

${t('adminDashboard.processingProgress')}

${ getProcessingProgress() }% ${t('adminDashboard.complete')}

${t('adminDashboard.processingActions')}

${t('adminDashboard.recordingsNeedProcessing').replace('{{count}}', inquireStatus.need_processing)}

${ processingResult.message }

Failed recordings:

  • ID ${ fail.id }: ${ fail.title } - ${ fail.reason }

${t('adminDashboard.allRecordingsProcessed')}

${t('adminDashboard.vectorStoreUpToDate')}

${t('adminDashboard.addNewUser')}

${t('adminDashboard.editUser')}

Confirm Delete

Are you sure you want to delete the user ${ userToDelete?.username }? This action cannot be undone.

编辑系统设置

${ editingSetting.key }
${ editingSetting.description || 'No description available' }
${ editingSetting.setting_type }
${t('adminDashboard.noLimit')} ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.characters')} ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.megabytes')} ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.seconds')} (${ Math.round(Number(editingSetting.value) / 60) } ${t('adminDashboard.minutes')}) ${ editingSetting.value || t('adminDashboard.notSet') }
Recommended: 30000-50000 characters for most LLMs
${t('adminDashboard.maxFileSizeHelp')}
${t('adminDashboard.minutes')}
${t('adminDashboard.seconds')}
${t('adminDashboard.total')}: ${ (settingTimeoutMinutes * 60 + settingTimeoutSeconds).toLocaleString() } ${t('adminDashboard.seconds')}
${t('adminDashboard.timeoutRecommendation')}
${ settingError }