dsh-knowhub 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -135,7 +135,7 @@ cmd /c mklink /J "$env:USERPROFILE\.dsh\profiles\knowhub\node_modules\dsh-knowhu
|
|
|
135
135
|
|
|
136
136
|
**初始化或增量任务失败,提示模型调用失败怎么办?**
|
|
137
137
|
|
|
138
|
-
在知识库详情点右上「编辑配置」→「测试模型」,先用一句 ping 确认该 provider / model 当前能否调通;不通说明是模型配置问题(凭据、baseURL、模型名),与知识库无关。若提示「模型输出被截断」,说明该模型把输出预算消耗在思考过程上:换一个非推理模型,或把「模型使用策略」调高(economy
|
|
138
|
+
在知识库详情点右上「编辑配置」→「测试模型」,先用一句 ping 确认该 provider / model 当前能否调通;不通说明是模型配置问题(凭据、baseURL、模型名),与知识库无关。若提示「模型输出被截断」,说明该模型把输出预算消耗在思考过程上:换一个非推理模型,或把「模型使用策略」调高(economy 10000 → balanced 20000 → quality 50000 tokens,截断时还会自动加倍重试一次)。
|
|
139
139
|
|
|
140
140
|
**为什么生成的知识都是「待审核」?**
|
|
141
141
|
|
package/lib/host/model.js
CHANGED
|
@@ -155,7 +155,7 @@ export async function runModelCall(ctx, input) {
|
|
|
155
155
|
const model = input.model.trim();
|
|
156
156
|
if (provider === '' || model === '')
|
|
157
157
|
throw new Error('必须同时提供 provider 与 model');
|
|
158
|
-
const maxTokens = typeof input.maxTokens === 'number' && Number.isFinite(input.maxTokens) ? Math.max(1, Math.min(
|
|
158
|
+
const maxTokens = typeof input.maxTokens === 'number' && Number.isFinite(input.maxTokens) ? Math.max(1, Math.min(100000, Math.trunc(input.maxTokens))) : 1200;
|
|
159
159
|
const timeoutMs = typeof input.timeoutMs === 'number' && Number.isFinite(input.timeoutMs) ? Math.max(5000, Math.min(180000, Math.trunc(input.timeoutMs))) : 90000;
|
|
160
160
|
const controller = new AbortController();
|
|
161
161
|
const onExternalAbort = () => controller.abort();
|
|
@@ -34,9 +34,9 @@ export class IncrementalError extends Error {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
const LIMITS = {
|
|
37
|
-
economy: { maxFiles: 12000, maxHashes: 1500, maxDocs: 2, maxTokens:
|
|
38
|
-
balanced: { maxFiles: 20000, maxHashes: 3000, maxDocs: 4, maxTokens:
|
|
39
|
-
quality: { maxFiles: 30000, maxHashes: 6000, maxDocs: 7, maxTokens:
|
|
37
|
+
economy: { maxFiles: 12000, maxHashes: 1500, maxDocs: 2, maxTokens: 10000, maxSnippetFiles: 4, maxSnippetChars: 4000 },
|
|
38
|
+
balanced: { maxFiles: 20000, maxHashes: 3000, maxDocs: 4, maxTokens: 20000, maxSnippetFiles: 6, maxSnippetChars: 6000 },
|
|
39
|
+
quality: { maxFiles: 30000, maxHashes: 6000, maxDocs: 7, maxTokens: 50000, maxSnippetFiles: 8, maxSnippetChars: 8000 },
|
|
40
40
|
};
|
|
41
41
|
const UPDATE_SYSTEM = [
|
|
42
42
|
'你是知枢 KnowHub 的 Repo Wiki 维护助手。',
|
|
@@ -33,9 +33,9 @@ export class InitError extends Error {
|
|
|
33
33
|
}
|
|
34
34
|
const DOC_KINDS = new Set(['wiki', 'decision', 'issue', 'todo', 'memory', 'convention', 'preference']);
|
|
35
35
|
const STRATEGY_LIMITS = {
|
|
36
|
-
economy: { maxFiles: 12000, maxHashes: 1500, maxContextChars: 12000, maxTokens:
|
|
37
|
-
balanced: { maxFiles: 20000, maxHashes: 3000, maxContextChars: 20000, maxTokens:
|
|
38
|
-
quality: { maxFiles: 30000, maxHashes: 6000, maxContextChars: 30000, maxTokens:
|
|
36
|
+
economy: { maxFiles: 12000, maxHashes: 1500, maxContextChars: 12000, maxTokens: 10000, wikiPages: 2 },
|
|
37
|
+
balanced: { maxFiles: 20000, maxHashes: 3000, maxContextChars: 20000, maxTokens: 20000, wikiPages: 4 },
|
|
38
|
+
quality: { maxFiles: 30000, maxHashes: 6000, maxContextChars: 30000, maxTokens: 50000, wikiPages: 7 },
|
|
39
39
|
};
|
|
40
40
|
function planCalls(strategy) {
|
|
41
41
|
const base = [{ purpose: 'wiki-overview', topics: ['项目总览', '技术栈与依赖'] }];
|
|
@@ -10,10 +10,10 @@ export const MAX_OUTPUT_ATTEMPTS = 2;
|
|
|
10
10
|
export function isTruncatedModelOutput(meta) {
|
|
11
11
|
return meta.finishKind === 'max-tokens';
|
|
12
12
|
}
|
|
13
|
-
/** 截断重试时的预算:翻倍,但不超过 runModelCall 的上限
|
|
13
|
+
/** 截断重试时的预算:翻倍,但不超过 runModelCall 的上限 100000。 */
|
|
14
14
|
export function retryTokenBudget(maxTokens) {
|
|
15
15
|
const base = Number.isFinite(maxTokens) ? Math.max(1, Math.trunc(maxTokens)) : 1;
|
|
16
|
-
return Math.min(
|
|
16
|
+
return Math.min(100000, base * 2);
|
|
17
17
|
}
|
|
18
18
|
function compactHead(text) {
|
|
19
19
|
const compact = text.replace(/\s+/g, ' ').trim();
|