ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.30: вынос ветки tool_gate_skip + chat fallback из assistantService в отдельный runtime-адаптер, чтобы в сервисе остался только orchestration flow.
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import type { AssistantMessageRequestPayload } from "../types/assistant";
|
||||
import type { NormalizeRequestPayload, NormalizeResponsePayload } from "../types/normalizer";
|
||||
|
||||
export interface AssistantDeepTurnFollowupBinding {
|
||||
normalizedQuestion: string;
|
||||
mergedContext: NormalizeRequestPayload["context"] | undefined;
|
||||
usage: unknown | null;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnNormalizationRuntimeInput {
|
||||
userMessage: string;
|
||||
payload: AssistantMessageRequestPayload;
|
||||
featureInvestigationStateV1: boolean;
|
||||
featureStateFollowupBindingV1: boolean;
|
||||
sessionInvestigationState: unknown | null | undefined;
|
||||
buildFollowupStateBinding: (input: {
|
||||
userMessage: string;
|
||||
payloadContext: NormalizeRequestPayload["context"] | undefined;
|
||||
investigationState: unknown;
|
||||
}) => AssistantDeepTurnFollowupBinding;
|
||||
normalize: (payload: NormalizeRequestPayload) => Promise<NormalizeResponsePayload>;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnNormalizationRuntimeOutput {
|
||||
followupBinding: AssistantDeepTurnFollowupBinding;
|
||||
normalizePayload: NormalizeRequestPayload;
|
||||
normalized: NormalizeResponsePayload;
|
||||
}
|
||||
|
||||
export async function buildAssistantDeepTurnNormalizationRuntime(
|
||||
input: BuildAssistantDeepTurnNormalizationRuntimeInput
|
||||
): Promise<BuildAssistantDeepTurnNormalizationRuntimeOutput> {
|
||||
const followupBinding =
|
||||
input.featureInvestigationStateV1 &&
|
||||
input.featureStateFollowupBindingV1 &&
|
||||
Boolean(input.sessionInvestigationState)
|
||||
? input.buildFollowupStateBinding({
|
||||
userMessage: input.userMessage,
|
||||
payloadContext: input.payload.context,
|
||||
investigationState: input.sessionInvestigationState as unknown
|
||||
})
|
||||
: {
|
||||
normalizedQuestion: input.userMessage,
|
||||
mergedContext: input.payload.context,
|
||||
usage: null
|
||||
};
|
||||
|
||||
const normalizePayload: NormalizeRequestPayload = {
|
||||
llmProvider: input.payload.llmProvider,
|
||||
apiKey: input.payload.apiKey,
|
||||
model: input.payload.model,
|
||||
baseUrl: input.payload.baseUrl,
|
||||
temperature: input.payload.temperature,
|
||||
maxOutputTokens: input.payload.maxOutputTokens,
|
||||
promptVersion: input.payload.promptVersion ?? "address_query_runtime_v1",
|
||||
systemPrompt: input.payload.systemPrompt,
|
||||
developerPrompt: input.payload.developerPrompt,
|
||||
domainPrompt: input.payload.domainPrompt,
|
||||
fewShotExamples: input.payload.fewShotExamples,
|
||||
userQuestion: followupBinding.normalizedQuestion,
|
||||
context: followupBinding.mergedContext,
|
||||
useMock: Boolean(input.payload.useMock)
|
||||
};
|
||||
|
||||
const normalized = await input.normalize(normalizePayload);
|
||||
|
||||
return {
|
||||
followupBinding,
|
||||
normalizePayload,
|
||||
normalized
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user