Fix false autonomous safety handoffs
This commit is contained in:
1 parent
84a133451f
commit
c0cc661a2f
6 files changed
+144
-29
No files matched your search
@@ -12,10 +12,10 @@ import {
|
||||
chooseConversationIntent,
|
||||
conversationMessageFingerprint,
|
||||
createConversationAutomationState,
|
||||
isSafeHybridMediaAsk,
|
||||
isSafeR4RReply,
|
||||
hybridMediaAskSafetyFailure,
|
||||
LEGACY_AUTOMATED_CONVERSATION_TURNS,
|
||||
mergeConversationState,
|
||||
r4rReplySafetyFailure,
|
||||
remainingAutomationTurns,
|
||||
type ConversationState,
|
||||
} from './conversation-state.js';
|
||||
@@ -355,22 +355,32 @@ export class ConversationAutomationService {
|
||||
if (isLegacy && intent.kind !== 'media-ask') {
|
||||
return this.finish(conversation, conversationId, state, incomingKey, 'human-required', intent.reason);
|
||||
}
|
||||
const reply = isLegacy
|
||||
? await this.ai.generateMediaAsk(mapped, conversation.username, state, intent)
|
||||
const generatePlannedReply = () => isLegacy
|
||||
? this.ai.generateMediaAsk(mapped, conversation.username, state, intent)
|
||||
: isHybridMediaAsk
|
||||
? await this.ai.generateR4RMediaAsk(mapped, conversation.username, state)
|
||||
: await this.ai.generateReply(mapped, conversation.username, state, intent);
|
||||
const safeReply = isLegacy || isHybridMediaAsk
|
||||
? isSafeHybridMediaAsk(reply)
|
||||
: isSafeR4RReply(reply);
|
||||
if (!safeReply) {
|
||||
? this.ai.generateR4RMediaAsk(mapped, conversation.username, state)
|
||||
: this.ai.generateReply(mapped, conversation.username, state, intent);
|
||||
let reply = await generatePlannedReply();
|
||||
let safetyFailure = isLegacy || isHybridMediaAsk
|
||||
? hybridMediaAskSafetyFailure(reply)
|
||||
: r4rReplySafetyFailure(reply);
|
||||
if ((isLegacy || isHybridMediaAsk)
|
||||
&& safetyFailure === 'media ask does not contain a recognizable image or video request') {
|
||||
this.logger.warn?.(
|
||||
`[automation] Regenerating media ask for u/${conversation.username}; the first response did not contain a recognizable request`,
|
||||
);
|
||||
reply = await generatePlannedReply();
|
||||
safetyFailure = hybridMediaAskSafetyFailure(reply);
|
||||
}
|
||||
if (safetyFailure) {
|
||||
const outputKind = isLegacy || isHybridMediaAsk ? 'media ask' : 'reply';
|
||||
return this.finish(
|
||||
conversation,
|
||||
conversationId,
|
||||
state,
|
||||
incomingKey,
|
||||
'human-required',
|
||||
'The generated reply failed autonomous safety checks.',
|
||||
`The generated ${outputKind} was rejected: ${safetyFailure}.`,
|
||||
);
|
||||
}
|
||||
if (this.dryRun) {
|
||||
|
||||
Reference in new issue
Block a user