@4djs/assistant 0.1.4 → 0.1.5
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/dist/core/chat-history.d.ts.map +1 -1
- package/dist/core/create-assistant-store.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +133 -133
- package/dist/core/llm-chat.d.ts.map +1 -1
- package/dist/core/llm-context-breakdown.d.ts.map +1 -1
- package/dist/index.js +286 -285
- package/dist/react/components/MermaidDiagram.d.ts.map +1 -1
- package/dist/react/components/chat/ContextUsageStrip.d.ts.map +1 -1
- package/dist/react/components/chat/context-usage-utils.d.ts +1 -1
- package/dist/react/components/chat/context-usage-utils.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/lib/sanitize-mermaid.d.ts +3 -0
- package/dist/react/lib/sanitize-mermaid.d.ts.map +1 -0
- package/dist/styles.css +77 -57
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-history.d.ts","sourceRoot":"","sources":["../../src/core/chat-history.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-history.d.ts","sourceRoot":"","sources":["../../src/core/chat-history.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAK5E,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,gBAAgB,CAAC;CACpE;AA8DD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB;qBAI5C,gBAAgB,EAAE,GAAG,IAAI;wBAapB,gBAAgB,EAAE;;uBAYnB,uBAAuB,KAAG,gBAAgB,EAAE;EAYvE;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-assistant-store.d.ts","sourceRoot":"","sources":["../../src/core/create-assistant-store.ts"],"names":[],"mappings":"AA0BA,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAS3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"create-assistant-store.d.ts","sourceRoot":"","sources":["../../src/core/create-assistant-store.ts"],"names":[],"mappings":"AA0BA,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAS3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAEV,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAEjC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,kBAAkB,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxD,eAAe,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,eAAe,EAAE,CACf,MAAM,EAAE,qBAAqB,KAC1B,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,uBAAuB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,2BAA2B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACvE,2BAA2B,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AA8HD,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,0BAA0B,GAC/B,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC,GACvE,0BAA0B,CAkB3B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,0BAA0B,+EAogBpE;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -12,12 +12,12 @@ export { CHOICES_TOOL, type ChoiceOption, type ChoicesToolArgs, CONFIRMATION_TOO
|
|
|
12
12
|
export type { AgentStepResult, LlmChatStatus, StreamHandlers, ToolHandlers, } from "./llm-chat.js";
|
|
13
13
|
export { buildLlmHistory, ChatAbortedError, computeBaselineContextBreakdown, fetchLlmStatus, LlmNotConfiguredError, LlmUpstreamError, requestLlmCompletion, runLlmAgent, sanitizeLlmMessages, } from "./llm-chat.js";
|
|
14
14
|
export { buildCompletionsUrl, buildLlmRequestHeaders, buildModelsUrl, DEFAULT_LLM_BASE_URL, DEFAULT_LLM_MODEL, getFallbackModels, isLlmConfigured, isLlmUnavailableMessage, isLocalLlmBaseUrl, LLM_UNAVAILABLE_MESSAGE, } from "./llm-config.js";
|
|
15
|
+
export type { ContextCategorySegment, ContextUsageBreakdown, ContextUsageCategory, } from "./llm-context-breakdown.js";
|
|
16
|
+
export { buildContextBreakdown, estimatePromptParts, estimateTokenCount, formatApproxTokens, mergeBreakdownSegments, } from "./llm-context-breakdown.js";
|
|
15
17
|
export { clearProviderModelCache, fetchProviderModels, } from "./llm-models.js";
|
|
16
18
|
export { configureAssistantLlm, resetAssistantLlm, resolveAssistantLlmSettings, testLlmConnection, } from "./llm-provider.js";
|
|
17
19
|
export type { LlmSettingsFormState, LlmSettingsFormValues, StoredLlmUserSettings, } from "./llm-settings-storage.js";
|
|
18
20
|
export { assistantToStored, buildDefaultLlmSettings, createDefaultStoredSettings, createLlmSettingsFormState, createLlmSettingsFormStateFromStored, createLlmSettingsStorage, DEFAULT_LLM_SETTINGS_STORAGE_KEY, formatModelsText, isLlmSettingsFormDirty, mergeLlmSettings, migrateLegacyModelStorage, normalizeStoredSettings, normalizeStoredSystemPrompt, parseModelsText, peekStoredModel, persistStoredModelSelection, resolveSelectedModel, storedSettingsHaveOverrides, storedToAssistant, toStoredSettings, } from "./llm-settings-storage.js";
|
|
19
|
-
export type { ContextCategorySegment, ContextUsageBreakdown, ContextUsageCategory, } from "./llm-context-breakdown.js";
|
|
20
|
-
export { buildContextBreakdown, estimatePromptParts, estimateTokenCount, formatApproxTokens, mergeBreakdownSegments, } from "./llm-context-breakdown.js";
|
|
21
21
|
export type { ClientToolDefinition, LlmChatMessage, OpenAiToolCall, } from "./llm-types.js";
|
|
22
22
|
export type { LlmSessionUsage, LlmTurnUsage, LlmUsageRecord, } from "./llm-usage.js";
|
|
23
23
|
export { aggregateUsage, appendSessionUsage, buildTurnUsage, computeTokensPerSecond, createEmptySessionUsage, formatTokenCount, isStoredLlmTurnUsage, parseUsage, rebuildSessionUsageFromMessages, resolveContextWindow, } from "./llm-usage.js";
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,oBAAoB,EACpB,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,6BAA6B,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,+BAA+B,EAC/B,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,+BAA+B,EAC/B,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,oCAAoC,EACpC,wBAAwB,EACxB,gCAAgC,EAChC,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.js
CHANGED
|
@@ -2923,6 +2923,139 @@ function buildLlmRequestHeaders(apiKey) {
|
|
|
2923
2923
|
return headers;
|
|
2924
2924
|
}
|
|
2925
2925
|
|
|
2926
|
+
// src/core/llm-context-breakdown.ts
|
|
2927
|
+
function estimateTokenCount(text) {
|
|
2928
|
+
if (!text.trim())
|
|
2929
|
+
return 0;
|
|
2930
|
+
return Math.max(1, Math.ceil(text.length / 4));
|
|
2931
|
+
}
|
|
2932
|
+
function estimateToolsTokens(tools) {
|
|
2933
|
+
if (tools.length === 0)
|
|
2934
|
+
return 0;
|
|
2935
|
+
return estimateTokenCount(JSON.stringify(tools));
|
|
2936
|
+
}
|
|
2937
|
+
function estimateMessagesTokens(messages) {
|
|
2938
|
+
return messages.reduce((sum, message) => {
|
|
2939
|
+
let tokens = 4;
|
|
2940
|
+
if (typeof message.content === "string" && message.content.length > 0) {
|
|
2941
|
+
tokens += estimateTokenCount(message.content);
|
|
2942
|
+
}
|
|
2943
|
+
if (message.tool_calls?.length) {
|
|
2944
|
+
tokens += estimateTokenCount(JSON.stringify(message.tool_calls));
|
|
2945
|
+
}
|
|
2946
|
+
if (message.tool_call_id) {
|
|
2947
|
+
tokens += estimateTokenCount(message.tool_call_id);
|
|
2948
|
+
}
|
|
2949
|
+
return sum + tokens;
|
|
2950
|
+
}, 0);
|
|
2951
|
+
}
|
|
2952
|
+
function scaleParts(parts, targetTotal) {
|
|
2953
|
+
const rawTotal = parts.systemPrompt + parts.toolDefinitions + parts.conversation;
|
|
2954
|
+
if (targetTotal <= 0 || rawTotal <= 0) {
|
|
2955
|
+
return { systemPrompt: 0, toolDefinitions: 0, conversation: 0 };
|
|
2956
|
+
}
|
|
2957
|
+
const scale = targetTotal / rawTotal;
|
|
2958
|
+
return {
|
|
2959
|
+
systemPrompt: Math.round(parts.systemPrompt * scale),
|
|
2960
|
+
toolDefinitions: Math.round(parts.toolDefinitions * scale),
|
|
2961
|
+
conversation: Math.round(parts.conversation * scale)
|
|
2962
|
+
};
|
|
2963
|
+
}
|
|
2964
|
+
function estimatePromptParts(input) {
|
|
2965
|
+
return {
|
|
2966
|
+
systemPrompt: estimateTokenCount(input.systemPrompt),
|
|
2967
|
+
toolDefinitions: estimateToolsTokens(input.tools),
|
|
2968
|
+
conversation: estimateMessagesTokens(input.messages)
|
|
2969
|
+
};
|
|
2970
|
+
}
|
|
2971
|
+
function buildContextBreakdown(input) {
|
|
2972
|
+
const parts = estimatePromptParts({
|
|
2973
|
+
systemPrompt: input.systemPrompt,
|
|
2974
|
+
tools: input.tools,
|
|
2975
|
+
messages: input.messages
|
|
2976
|
+
});
|
|
2977
|
+
const promptTokens = input.usage?.promptTokens ?? 0;
|
|
2978
|
+
const completionTokens = input.usage?.completionTokens ?? 0;
|
|
2979
|
+
const cachedTokens = input.usage?.cachedTokens ?? 0;
|
|
2980
|
+
const reasoningTokens = input.usage?.reasoningTokens ?? 0;
|
|
2981
|
+
const scaled = promptTokens > 0 ? scaleParts(parts, Math.max(0, promptTokens - cachedTokens)) : parts;
|
|
2982
|
+
const segments = [];
|
|
2983
|
+
if (scaled.systemPrompt > 0 || promptTokens === 0) {
|
|
2984
|
+
segments.push({
|
|
2985
|
+
id: "systemPrompt",
|
|
2986
|
+
tokens: scaled.systemPrompt,
|
|
2987
|
+
estimated: promptTokens > 0
|
|
2988
|
+
});
|
|
2989
|
+
}
|
|
2990
|
+
if (scaled.toolDefinitions > 0 || promptTokens === 0 && input.tools.length > 0) {
|
|
2991
|
+
segments.push({
|
|
2992
|
+
id: "toolDefinitions",
|
|
2993
|
+
tokens: scaled.toolDefinitions || parts.toolDefinitions,
|
|
2994
|
+
estimated: true
|
|
2995
|
+
});
|
|
2996
|
+
}
|
|
2997
|
+
if (scaled.conversation > 0 || promptTokens === 0 && input.messages.length > 0) {
|
|
2998
|
+
segments.push({
|
|
2999
|
+
id: "conversation",
|
|
3000
|
+
tokens: scaled.conversation || parts.conversation,
|
|
3001
|
+
estimated: promptTokens === 0 || promptTokens > 0
|
|
3002
|
+
});
|
|
3003
|
+
}
|
|
3004
|
+
if (completionTokens > 0) {
|
|
3005
|
+
segments.push({ id: "completion", tokens: completionTokens });
|
|
3006
|
+
}
|
|
3007
|
+
if (cachedTokens > 0) {
|
|
3008
|
+
segments.push({ id: "cached", tokens: cachedTokens });
|
|
3009
|
+
}
|
|
3010
|
+
if (reasoningTokens > 0) {
|
|
3011
|
+
segments.push({ id: "reasoning", tokens: reasoningTokens });
|
|
3012
|
+
}
|
|
3013
|
+
const totalTokens = input.usage?.totalTokens ?? segments.reduce((sum, segment) => sum + segment.tokens, 0);
|
|
3014
|
+
const contextWindow = resolveContextWindow(input.model, input.modelContextWindows);
|
|
3015
|
+
const contextUsedPercent = contextWindow && totalTokens > 0 ? Math.min(100, totalTokens / contextWindow * 100) : null;
|
|
3016
|
+
return {
|
|
3017
|
+
segments: segments.filter((segment) => segment.tokens > 0),
|
|
3018
|
+
promptTokens,
|
|
3019
|
+
completionTokens,
|
|
3020
|
+
totalTokens,
|
|
3021
|
+
contextWindow,
|
|
3022
|
+
contextUsedPercent
|
|
3023
|
+
};
|
|
3024
|
+
}
|
|
3025
|
+
function mergeBreakdownSegments(target, source) {
|
|
3026
|
+
const map = new Map;
|
|
3027
|
+
for (const segment of target.segments) {
|
|
3028
|
+
map.set(segment.id, { ...segment });
|
|
3029
|
+
}
|
|
3030
|
+
for (const segment of source.segments) {
|
|
3031
|
+
const existing = map.get(segment.id);
|
|
3032
|
+
if (existing) {
|
|
3033
|
+
existing.tokens += segment.tokens;
|
|
3034
|
+
} else {
|
|
3035
|
+
map.set(segment.id, { ...segment });
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
const segments = [...map.values()].filter((segment) => segment.tokens > 0);
|
|
3039
|
+
const totalTokens = segments.reduce((sum, segment) => sum + segment.tokens, 0);
|
|
3040
|
+
const promptTokens = target.promptTokens + source.promptTokens;
|
|
3041
|
+
const completionTokens = target.completionTokens + source.completionTokens;
|
|
3042
|
+
const contextWindow = target.contextWindow ?? source.contextWindow;
|
|
3043
|
+
const contextUsedPercent = contextWindow && totalTokens > 0 ? Math.min(100, totalTokens / contextWindow * 100) : null;
|
|
3044
|
+
return {
|
|
3045
|
+
segments,
|
|
3046
|
+
promptTokens,
|
|
3047
|
+
completionTokens,
|
|
3048
|
+
totalTokens,
|
|
3049
|
+
contextWindow,
|
|
3050
|
+
contextUsedPercent
|
|
3051
|
+
};
|
|
3052
|
+
}
|
|
3053
|
+
function formatApproxTokens(value) {
|
|
3054
|
+
if (value <= 0)
|
|
3055
|
+
return "0";
|
|
3056
|
+
return `~${formatTokenCount(value)}`;
|
|
3057
|
+
}
|
|
3058
|
+
|
|
2926
3059
|
// src/core/llm-models.ts
|
|
2927
3060
|
var CACHE_TTL_MS = 5 * 60 * 1000;
|
|
2928
3061
|
var EXCLUDED_MODEL_PATTERNS = [
|
|
@@ -3071,139 +3204,6 @@ async function testLlmConnection(settings) {
|
|
|
3071
3204
|
}
|
|
3072
3205
|
}
|
|
3073
3206
|
|
|
3074
|
-
// src/core/llm-context-breakdown.ts
|
|
3075
|
-
function estimateTokenCount(text) {
|
|
3076
|
-
if (!text.trim())
|
|
3077
|
-
return 0;
|
|
3078
|
-
return Math.max(1, Math.ceil(text.length / 4));
|
|
3079
|
-
}
|
|
3080
|
-
function estimateToolsTokens(tools) {
|
|
3081
|
-
if (tools.length === 0)
|
|
3082
|
-
return 0;
|
|
3083
|
-
return estimateTokenCount(JSON.stringify(tools));
|
|
3084
|
-
}
|
|
3085
|
-
function estimateMessagesTokens(messages) {
|
|
3086
|
-
return messages.reduce((sum, message) => {
|
|
3087
|
-
let tokens = 4;
|
|
3088
|
-
if (typeof message.content === "string" && message.content.length > 0) {
|
|
3089
|
-
tokens += estimateTokenCount(message.content);
|
|
3090
|
-
}
|
|
3091
|
-
if (message.tool_calls?.length) {
|
|
3092
|
-
tokens += estimateTokenCount(JSON.stringify(message.tool_calls));
|
|
3093
|
-
}
|
|
3094
|
-
if (message.tool_call_id) {
|
|
3095
|
-
tokens += estimateTokenCount(message.tool_call_id);
|
|
3096
|
-
}
|
|
3097
|
-
return sum + tokens;
|
|
3098
|
-
}, 0);
|
|
3099
|
-
}
|
|
3100
|
-
function scaleParts(parts, targetTotal) {
|
|
3101
|
-
const rawTotal = parts.systemPrompt + parts.toolDefinitions + parts.conversation;
|
|
3102
|
-
if (targetTotal <= 0 || rawTotal <= 0) {
|
|
3103
|
-
return { systemPrompt: 0, toolDefinitions: 0, conversation: 0 };
|
|
3104
|
-
}
|
|
3105
|
-
const scale = targetTotal / rawTotal;
|
|
3106
|
-
return {
|
|
3107
|
-
systemPrompt: Math.round(parts.systemPrompt * scale),
|
|
3108
|
-
toolDefinitions: Math.round(parts.toolDefinitions * scale),
|
|
3109
|
-
conversation: Math.round(parts.conversation * scale)
|
|
3110
|
-
};
|
|
3111
|
-
}
|
|
3112
|
-
function estimatePromptParts(input) {
|
|
3113
|
-
return {
|
|
3114
|
-
systemPrompt: estimateTokenCount(input.systemPrompt),
|
|
3115
|
-
toolDefinitions: estimateToolsTokens(input.tools),
|
|
3116
|
-
conversation: estimateMessagesTokens(input.messages)
|
|
3117
|
-
};
|
|
3118
|
-
}
|
|
3119
|
-
function buildContextBreakdown(input) {
|
|
3120
|
-
const parts = estimatePromptParts({
|
|
3121
|
-
systemPrompt: input.systemPrompt,
|
|
3122
|
-
tools: input.tools,
|
|
3123
|
-
messages: input.messages
|
|
3124
|
-
});
|
|
3125
|
-
const promptTokens = input.usage?.promptTokens ?? 0;
|
|
3126
|
-
const completionTokens = input.usage?.completionTokens ?? 0;
|
|
3127
|
-
const cachedTokens = input.usage?.cachedTokens ?? 0;
|
|
3128
|
-
const reasoningTokens = input.usage?.reasoningTokens ?? 0;
|
|
3129
|
-
const scaled = promptTokens > 0 ? scaleParts(parts, Math.max(0, promptTokens - cachedTokens)) : parts;
|
|
3130
|
-
const segments = [];
|
|
3131
|
-
if (scaled.systemPrompt > 0 || promptTokens === 0) {
|
|
3132
|
-
segments.push({
|
|
3133
|
-
id: "systemPrompt",
|
|
3134
|
-
tokens: scaled.systemPrompt,
|
|
3135
|
-
estimated: promptTokens > 0
|
|
3136
|
-
});
|
|
3137
|
-
}
|
|
3138
|
-
if (scaled.toolDefinitions > 0 || promptTokens === 0 && input.tools.length > 0) {
|
|
3139
|
-
segments.push({
|
|
3140
|
-
id: "toolDefinitions",
|
|
3141
|
-
tokens: scaled.toolDefinitions || parts.toolDefinitions,
|
|
3142
|
-
estimated: true
|
|
3143
|
-
});
|
|
3144
|
-
}
|
|
3145
|
-
if (scaled.conversation > 0 || promptTokens === 0 && input.messages.length > 0) {
|
|
3146
|
-
segments.push({
|
|
3147
|
-
id: "conversation",
|
|
3148
|
-
tokens: scaled.conversation || parts.conversation,
|
|
3149
|
-
estimated: promptTokens === 0 || promptTokens > 0
|
|
3150
|
-
});
|
|
3151
|
-
}
|
|
3152
|
-
if (completionTokens > 0) {
|
|
3153
|
-
segments.push({ id: "completion", tokens: completionTokens });
|
|
3154
|
-
}
|
|
3155
|
-
if (cachedTokens > 0) {
|
|
3156
|
-
segments.push({ id: "cached", tokens: cachedTokens });
|
|
3157
|
-
}
|
|
3158
|
-
if (reasoningTokens > 0) {
|
|
3159
|
-
segments.push({ id: "reasoning", tokens: reasoningTokens });
|
|
3160
|
-
}
|
|
3161
|
-
const totalTokens = input.usage?.totalTokens ?? segments.reduce((sum, segment) => sum + segment.tokens, 0);
|
|
3162
|
-
const contextWindow = resolveContextWindow(input.model, input.modelContextWindows);
|
|
3163
|
-
const contextUsedPercent = contextWindow && totalTokens > 0 ? Math.min(100, totalTokens / contextWindow * 100) : null;
|
|
3164
|
-
return {
|
|
3165
|
-
segments: segments.filter((segment) => segment.tokens > 0),
|
|
3166
|
-
promptTokens,
|
|
3167
|
-
completionTokens,
|
|
3168
|
-
totalTokens,
|
|
3169
|
-
contextWindow,
|
|
3170
|
-
contextUsedPercent
|
|
3171
|
-
};
|
|
3172
|
-
}
|
|
3173
|
-
function mergeBreakdownSegments(target, source) {
|
|
3174
|
-
const map = new Map;
|
|
3175
|
-
for (const segment of target.segments) {
|
|
3176
|
-
map.set(segment.id, { ...segment });
|
|
3177
|
-
}
|
|
3178
|
-
for (const segment of source.segments) {
|
|
3179
|
-
const existing = map.get(segment.id);
|
|
3180
|
-
if (existing) {
|
|
3181
|
-
existing.tokens += segment.tokens;
|
|
3182
|
-
} else {
|
|
3183
|
-
map.set(segment.id, { ...segment });
|
|
3184
|
-
}
|
|
3185
|
-
}
|
|
3186
|
-
const segments = [...map.values()].filter((segment) => segment.tokens > 0);
|
|
3187
|
-
const totalTokens = segments.reduce((sum, segment) => sum + segment.tokens, 0);
|
|
3188
|
-
const promptTokens = target.promptTokens + source.promptTokens;
|
|
3189
|
-
const completionTokens = target.completionTokens + source.completionTokens;
|
|
3190
|
-
const contextWindow = target.contextWindow ?? source.contextWindow;
|
|
3191
|
-
const contextUsedPercent = contextWindow && totalTokens > 0 ? Math.min(100, totalTokens / contextWindow * 100) : null;
|
|
3192
|
-
return {
|
|
3193
|
-
segments,
|
|
3194
|
-
promptTokens,
|
|
3195
|
-
completionTokens,
|
|
3196
|
-
totalTokens,
|
|
3197
|
-
contextWindow,
|
|
3198
|
-
contextUsedPercent
|
|
3199
|
-
};
|
|
3200
|
-
}
|
|
3201
|
-
function formatApproxTokens(value) {
|
|
3202
|
-
if (value <= 0)
|
|
3203
|
-
return "0";
|
|
3204
|
-
return `~${formatTokenCount(value)}`;
|
|
3205
|
-
}
|
|
3206
|
-
|
|
3207
3207
|
// src/core/llm-sse.ts
|
|
3208
3208
|
function createStreamParser() {
|
|
3209
3209
|
let content = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-chat.d.ts","sourceRoot":"","sources":["../../src/core/llm-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-chat.d.ts","sourceRoot":"","sources":["../../src/core/llm-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context-breakdown.d.ts","sourceRoot":"","sources":["../../src/core/llm-context-breakdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,oBAAoB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;
|
|
1
|
+
{"version":3,"file":"llm-context-breakdown.d.ts","sourceRoot":"","sources":["../../src/core/llm-context-breakdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,oBAAoB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAwCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAMA;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C,GAAG,qBAAqB,CA6ExB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAmCvB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD"}
|