fix(observabilidade): stream cleanup, outcome logic e NaN guard no parser
This commit is contained in:
@@ -76,4 +76,25 @@ describe('parseSessionFile', () => {
|
||||
const result = await parseSessionFile(path)
|
||||
expect(result.meta.user_messages).toBe(1)
|
||||
})
|
||||
|
||||
it('devolve duration_sec null quando timestamps são inválidos', async () => {
|
||||
const path = writeJsonl([
|
||||
{ type: 'user', timestamp: 'not-a-date', message: { role: 'user', content: [{ type: 'text', text: 'a' }] } },
|
||||
{ type: 'assistant', timestamp: 'also-not-a-date', message: { role: 'assistant', content: [{ type: 'text', text: 'b' }] } },
|
||||
])
|
||||
const result = await parseSessionFile(path)
|
||||
expect(result.meta.duration_sec).toBeNull()
|
||||
})
|
||||
|
||||
it('classifica max_tokens como interrupted', async () => {
|
||||
const path = writeJsonl([
|
||||
{
|
||||
type: 'assistant',
|
||||
timestamp: '2026-04-23T10:00:00Z',
|
||||
message: { role: 'assistant', content: [{ type: 'text', text: 'resposta cortada' }], stop_reason: 'max_tokens' },
|
||||
},
|
||||
])
|
||||
const result = await parseSessionFile(path)
|
||||
expect(result.meta.outcome).toBe('interrupted')
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user