File size: 1,502 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import { createDecorator } from '#/_base/di/instantiation';
import type { AgentContext } from '#/agent/agentContext/agentContext';
import type {
ContextSize,
TokenCountingRequest,
TokenCountingStrategy,
} from '#/agent/tokenCounting/tokenCounting';
import type { Message } from '#/llm-adapter/contract/message';
import type { ToolDescription as Tool } from '#human/llm/message';
import type { TokenUsage } from '#human/llm/usage';
export interface TokenCountingRebaseInput {
readonly length: number;
readonly tokens: number;
readonly measured: boolean;
}
export interface ISessionTokenCountingService {
readonly _serviceBrand: undefined;
readonly strategy: TokenCountingStrategy;
get(agent: AgentContext, start?: number, end?: number): ContextSize;
measured(
agent: AgentContext,
input: readonly Message[],
output: readonly Message[],
usage: TokenUsage,
): void;
latestMeasured(agent: AgentContext): number;
statusSize(agent: AgentContext): number;
recordTruncation(agent: AgentContext, cutIndex: number): void;
rebase(agent: AgentContext, input: TokenCountingRebaseInput): void;
requestSize(request: TokenCountingRequest): number;
estimateText(text: string): number;
estimateMessage(message: Message): number;
estimateMessages(messages: readonly Message[]): number;
estimateTools(tools: readonly Tool[]): number;
}
export const ISessionTokenCountingService =
createDecorator<ISessionTokenCountingService>('sessionTokenCountingService');
|