Files

1 line
33 KiB
JSON

{"repo": "bazs0328/graduationdesign", "files": {"web/tests/unit/fixtures/settingsFixtures.js": {"6b572b052e0218d2fb7c0b7b82e25ecae0a19ae8": {"t": 1785746686.9044018, "n": 4469, "h": "6fcf76d727ff0f6f", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n notices: [],\n version_info: { app_name: 'StudyCompass' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "d019a847610d50b21c4d0470132235696785b9b7": {"t": 1785766842.9819067, "n": 4469, "h": "6fcf76d727ff0f6f", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n notices: [],\n version_info: { app_name: 'StudyCompass' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "cf449ed52f498e40fcd4522dd255aee8da518563": {"t": 1785766845.4391057, "n": 4503, "h": "a75b6747a1d3afc3", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true, auth_secret_key_configured: true },\n notices: [],\n version_info: { app_name: 'StudyCompass' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'international', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "f34afbd08f0b7cdfa293a69401368e8fc5d54e32": {"t": 1785766848.3232436, "n": 4441, "h": "ffc4c8631d3b68a5", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults_from_env: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n version_info: { app_name: 'StudyCompass' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "4d3bf97d18f8bbe59137c8aa10da450424db75c7": {"t": 1785766849.8664246, "n": 4438, "h": "890cb76ac82fa9a7", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults_from_env: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n version_info: { app_name: 'GradTutor' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "90f6fbdb2b019318195a3b99dc73d41d84405170": {"t": 1785766851.2094226, "n": 4497, "h": "98efec0e05766524", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults_from_env: { qa_top_k: 4, qa_fetch_k: 12, qa_dynamic_window_enabled: true, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n version_info: { app_name: 'GradTutor' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'deepseek', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n embedding_model: 'deepseek-embedding',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}, "8b0696b8c2f29fe93ec7e30da6fc9c8e2e9d40d6": {"t": 1785766852.6488435, "n": 4464, "h": "bd9deab1c8e6acfa", "c": "function isObject(value) {\n return value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(base, patch) {\n if (!isObject(base)) return isObject(patch) ? { ...patch } : patch\n const next = { ...base }\n if (!isObject(patch)) return next\n for (const [key, value] of Object.entries(patch)) {\n if (isObject(value) && isObject(next[key])) {\n next[key] = deepMerge(next[key], value)\n } else {\n next[key] = value\n }\n }\n return next\n}\n\nexport function buildProviderSetup(overrides = {}) {\n return deepMerge(\n {\n llm_ready: true,\n embedding_ready: true,\n missing: [],\n current_llm_provider: 'qwen',\n current_embedding_provider: 'dashscope',\n },\n overrides,\n )\n}\n\nexport function buildSettingsResponse(overrides = {}) {\n const base = {\n system_status: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n llm_provider_configured: 'qwen',\n embedding_provider_configured: 'dashscope',\n llm_provider_source: 'manual',\n embedding_provider_source: 'manual',\n qa_defaults_from_env: { qa_top_k: 4, qa_fetch_k: 12, rag_mode: 'hybrid' },\n ocr_enabled: true,\n pdf_parser_mode: 'auto',\n auth_require_login: true,\n secrets_configured: { qwen_api_key: true },\n version_info: { app_name: 'GradTutor' },\n provider_setup: buildProviderSetup(),\n },\n user_defaults: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: null, fetch_k: null },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n kb_overrides: null,\n effective: {\n qa: { mode: 'normal', retrieval_preset: 'balanced', top_k: 4, fetch_k: 12 },\n quiz: { count_default: 5, auto_adapt_default: true, difficulty_default: 'medium' },\n ui: { show_advanced_controls: false, density: 'comfortable' },\n upload: { post_upload_suggestions: true },\n },\n meta: {\n qa_modes: ['normal', 'explain'],\n retrieval_presets: ['fast', 'balanced', 'deep'],\n quiz_difficulty_options: ['easy', 'medium', 'hard'],\n preset_map: {\n fast: { top_k: 3, fetch_k: 8 },\n balanced: { top_k: 4, fetch_k: 12 },\n deep: { top_k: 6, fetch_k: 20 },\n },\n ranges: { qa: { top_k_min: 1, top_k_max: 20, fetch_k_min: 1, fetch_k_max: 50 } },\n defaults: {},\n },\n }\n return deepMerge(base, overrides)\n}\n\nexport function buildSystemSettingsResponse(overrides = {}) {\n return deepMerge(\n {\n editable_keys: [],\n overrides: {},\n effective: {},\n schema: {\n groups: [],\n fields: [],\n },\n },\n overrides,\n )\n}\n\nexport function buildProviderConfigResponse(overrides = {}) {\n const base = {\n editable: true,\n read_only_reason: '',\n supported_llm_providers: ['auto', 'deepseek', 'qwen'],\n supported_embedding_providers: ['auto', 'deepseek', 'qwen', 'dashscope'],\n region_presets: {\n qwen: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n dashscope: [\n { id: 'china', label: '中国站', base_url: 'https://dashscope.aliyuncs.com/api/v1' },\n { id: 'intl', label: '国际站', base_url: 'https://dashscope-intl.aliyuncs.com/api/v1' },\n { id: 'custom', label: '自定义', base_url: null },\n ],\n },\n effective: {\n llm_provider: 'qwen',\n embedding_provider: 'dashscope',\n deepseek: {\n api_key_configured: false,\n api_key_masked: '',\n base_url: 'https://api.deepseek.com/v1',\n model: 'deepseek-chat',\n embedding_model: 'deepseek-embedding',\n },\n qwen: {\n api_key_configured: true,\n api_key_masked: '••••abcd',\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n model: 'qwen-max',\n embedding_model: 'text-embedding-v4',\n },\n dashscope: {\n region: 'china',\n base_url: 'https://dashscope.aliyuncs.com/api/v1',\n embedding_model: 'text-embedding-v4',\n using_shared_api_key: true,\n },\n },\n setup: buildProviderSetup(),\n }\n return deepMerge(base, overrides)\n}\n"}}}}