Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions dashboard/src/composables/useProviderSources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,26 @@ export function useProviderSources(options: UseProviderSourcesOptions) {
})
})

function buildMetadataFromProvider(provider: any) {
if (!provider) return null
const mods = provider.modalities || []
if (!mods.length && !provider.max_context_tokens) return null
const input: string[] = []
if (mods.includes('image')) input.push('image')
if (mods.includes('audio')) input.push('audio')
return {
modalities: { input },
tool_call: mods.includes('tool_use'),
reasoning: Boolean(provider.reasoning),
limit: { context: provider.max_context_tokens || 0 }
}
}

const mergedModelEntries = computed(() => {
const configuredEntries = (sourceProviders.value || []).map((provider: any) => ({
type: 'configured',
provider,
metadata: getModelMetadata(provider.model)
metadata: getModelMetadata(provider.model) || buildMetadataFromProvider(provider)
}))

const availableEntries = (sortedAvailableModels.value || [])
Expand Down Expand Up @@ -575,7 +590,8 @@ export function useProviderSources(options: UseProviderSourcesOptions) {
model: modelName,
modalities,
custom_extra_body: {},
max_context_tokens: max_context_tokens
max_context_tokens: max_context_tokens,
reasoning: supportsReasoning(metadata)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,10 @@ const loadDocuments = async () => {
loading.value = true
try {
const response = await axios.get('/api/kb/document/list', {
params: { kb_id: props.kbId }
params: {
kb_id: props.kbId,
page_size: props.kb?.doc_count || 10000
Comment on lines +345 to +346
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

问题分析\n1. 当文档上传完成时,系统会先调用 loadDocuments()(第 602 行),然后调用 emit('refresh')(第 603 行)。\n2. 在调用 loadDocuments() 的瞬间,props.kb?.doc_count 还没有被更新,依然是旧的文档数量(例如 100)。\n3. 由于 100 是真值(truthy),page_size 会被设置为 100。此时后端只会返回前 100 条文档,导致新上传的文档被截断。\n4. 虽然随后调用了 emit('refresh') 来更新父组件的状态,但由于 DocumentsTab.vue 中没有对 props.kbwatch 监听器,loadDocuments() 不会再次触发。因此,新上传的文档在列表里将无法显示,直到用户手动刷新页面或重新挂载组件。\n\n### 解决方案\n为了确保在 props.kb?.doc_count 临时不同步的情况下,依然能请求到足够大的 page_size 以包含新上传的文档,建议使用 Math.max(props.kb?.doc_count || 0, 10000)。这样可以保证最小请求大小为 10000,同时在文档总数超过 10000 时也能自动向上扩展。

        kb_id: props.kbId,
        page_size: Math.max(props.kb?.doc_count || 0, 10000)

}
})
if (response.data.status === 'ok') {
documents.value = response.data.data.items || []
Expand Down
Loading