feat: add scoped read-only audio preview and isolated Dify transport
This commit is contained in:
@@ -71,8 +71,15 @@ final class FollowupAudioPipelineCheckpoint
|
||||
|
||||
private static function entry(array $entry, bool $extraction): void
|
||||
{
|
||||
$allowed = $extraction ? ['state', 'request_id', 'answer'] : ['id', 'start_ms', 'end_ms', 'channel', 'state', 'request_id', 'text', 'source', 'pcm_sha256', 'pcm_bytes'];
|
||||
$allowed = $extraction ? ['state', 'request_id', 'answer', 'upstream_ids'] : ['id', 'start_ms', 'end_ms', 'channel', 'state', 'request_id', 'text', 'source', 'pcm_sha256', 'pcm_bytes', 'upstream_ids'];
|
||||
if (array_diff(array_keys($entry), $allowed) || !in_array($entry['state'] ?? '', ['pending', 'intent', 'complete', 'rejected', 'local_silence'], true)) { self::invalid(); }
|
||||
if (array_key_exists('upstream_ids', $entry)) {
|
||||
if (!is_array($entry['upstream_ids']) || $entry['upstream_ids'] === [] || !in_array($entry['state'], ['complete', 'rejected'], true)) { self::invalid(); }
|
||||
foreach ($entry['upstream_ids'] as $key => $value) {
|
||||
if (!in_array($key, ['task_id', 'message_id', 'conversation_id'], true) || !is_string($value)
|
||||
|| !preg_match('/^[A-Za-z0-9_.:-]{1,190}$/D', $value)) { self::invalid(); }
|
||||
}
|
||||
}
|
||||
if (array_key_exists('channel', $entry) && (!is_int($entry['channel']) || !in_array($entry['channel'], [0, 1], true))) { self::invalid(); }
|
||||
if ($entry['state'] === 'local_silence') {
|
||||
if ($extraction || array_key_exists('request_id', $entry) || ($entry['text'] ?? null) !== '' || ($entry['source'] ?? '') !== 'local_silence'
|
||||
|
||||
Reference in New Issue
Block a user