File size: 2,623 Bytes
68d7816 | 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import { createDecorator } from '#/_base/di/instantiation';
import type { FinishReason } from '#human/llm/finish-reason';
import type { LlmCredentialProvider } from '#human/llm/requester/requester';
import type { ThinkingEffort } from '#human/llm/thinking';
import type { Message } from '#/llm-adapter/contract/message';
import type { StreamedMessagePart, ToolDescription as Tool } from '#human/llm/message';
import type { TokenUsage } from '#human/llm/usage';
import type { LLMRequestTrace } from '#/llm-adapter/contract/request-trace';
import type { ModelRequestTiming } from '#/llm-adapter/model/model-requester';
import type { LogContext } from '#/_base/log/log';
export type AgentLLMRequestLogFields = Readonly<LogContext>;
export type AgentLLMRequestSource =
| {
readonly type: 'turn';
readonly turnId: number;
readonly step?: number;
readonly logFields?: AgentLLMRequestLogFields;
}
| {
readonly type: 'operation';
readonly turnId?: number;
readonly requestKind?: string;
readonly logFields?: AgentLLMRequestLogFields;
};
export interface AgentLLMRequestFinish {
message: Message;
usage: TokenUsage;
model?: string | undefined;
providerFinishReason?: FinishReason;
rawFinishReason?: string;
providerMessageId?: string;
timing?: ModelRequestTiming;
traceId?: string;
}
export type AgentLLMRequestPartHandler = (part: StreamedMessagePart) => void | Promise<void>;
export interface AgentLLMRequestOverrides {
messages?: readonly Message[];
tools?: readonly Tool[];
systemPrompt?: string;
source?: AgentLLMRequestSource;
maxOutputSize?: number;
onAttemptRetry?: () => void;
}
export interface AgentLLMRequestTask {
readonly trace: LLMRequestTrace;
readonly result: Promise<AgentLLMRequestFinish>;
}
export interface PreparedTurnRequestConfig {
readonly thinkingEffort: ThinkingEffort;
}
export interface IAgentLLMRequesterService {
readonly _serviceBrand: undefined;
prepareTurnConfig(turnId: number): PreparedTurnRequestConfig | undefined;
currentCredentialProvider(): LlmCredentialProvider | undefined;
credentialProviderForTurn(turnId: number): LlmCredentialProvider | undefined;
request(
overrides?: AgentLLMRequestOverrides,
onPart?: AgentLLMRequestPartHandler,
signal?: AbortSignal,
): Promise<AgentLLMRequestFinish>;
start(
overrides?: AgentLLMRequestOverrides,
onPart?: AgentLLMRequestPartHandler,
signal?: AbortSignal,
): AgentLLMRequestTask;
}
export const IAgentLLMRequesterService = createDecorator<IAgentLLMRequesterService>(
'agentLLMRequesterService',
);
|