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');