| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import { describe, expect, it } from 'vitest'
- import { getThreadPartsFromThread } from './trace-utils'
- // Sanitized mock of the thread shape returned by trace.getThread().
- const MOCK_THREAD = [
- {
- role: 'system',
- content: 'System instructions omitted for fixture.',
- },
- {
- role: 'assistant',
- content: "The user's current project is Acme Analytics.",
- },
- {
- role: 'user',
- content: 'What did we decide earlier?',
- },
- {
- role: 'assistant',
- content: [
- {
- type: 'text',
- text: 'We decided to add an orders table with RLS policies before generating sample data.',
- },
- ],
- },
- {
- role: 'user',
- content: 'Can you create that orders table now?',
- },
- {
- role: 'assistant',
- id: null,
- content: [
- {
- type: 'tool_call',
- tool_name: 'rename_chat',
- tool_call_id: 'call_dummy_rename',
- arguments: {
- type: 'valid',
- value: {
- newName: 'Create Orders Table',
- },
- },
- },
- ],
- },
- {
- role: 'tool',
- content: [
- {
- type: 'tool_result',
- tool_name: 'rename_chat',
- tool_call_id: 'call_dummy_rename',
- output: {
- status: 'Chat request sent to client',
- },
- },
- ],
- },
- {
- role: 'assistant',
- id: null,
- content: [
- {
- type: 'tool_call',
- tool_name: 'load_knowledge',
- tool_call_id: 'call_dummy_knowledge',
- arguments: {
- type: 'valid',
- value: {
- name: 'database',
- },
- },
- },
- {
- type: 'tool_call',
- tool_name: 'execute_sql',
- tool_call_id: 'call_dummy_sql',
- arguments: {
- type: 'valid',
- value: {
- sql: 'create table public.orders (id bigint generated by default as identity primary key);',
- },
- },
- },
- ],
- },
- {
- role: 'tool',
- content: [
- {
- type: 'tool_result',
- tool_name: 'load_knowledge',
- tool_call_id: 'call_dummy_knowledge',
- output: 'Knowledge fixture omitted.',
- },
- {
- type: 'tool_result',
- tool_name: 'execute_sql',
- tool_call_id: 'call_dummy_sql',
- output: {
- type: 'text',
- text: 'SQL executed successfully.',
- },
- },
- ],
- },
- {
- role: 'assistant',
- id: null,
- content:
- 'I created the public.orders table. You should add RLS policies before exposing it to users.',
- },
- ]
- describe('getThreadPartsFromThread', () => {
- it('parses a sanitized Braintrust trace.getThread payload', () => {
- expect(getThreadPartsFromThread(MOCK_THREAD)).toEqual({
- projectContext: "The user's current project is Acme Analytics.",
- priorConversation:
- '[user]\nWhat did we decide earlier?\n\n[assistant]\nWe decided to add an orders table with RLS policies before generating sample data.',
- currentUserInput: 'Can you create that orders table now?',
- lastAssistantTurn:
- '[assistant]\n[called rename_chat]\n\n[assistant]\n[called load_knowledge]\n[called execute_sql]\n\n[assistant]\nI created the public.orders table. You should add RLS policies before exposing it to users.',
- })
- })
- it('uses the most recent project context message', () => {
- expect(
- getThreadPartsFromThread([
- {
- role: 'assistant',
- content: "The user's current project is Old Project.",
- },
- ...MOCK_THREAD,
- ])
- ).toMatchObject({
- projectContext: "The user's current project is Acme Analytics.",
- })
- })
- it('returns prior conversation without current turn parts when there is no user message', () => {
- expect(
- getThreadPartsFromThread([
- {
- role: 'assistant',
- content: 'I can help with your Briven project.',
- },
- ])
- ).toEqual({
- projectContext: null,
- priorConversation: '[assistant]\nI can help with your Briven project.',
- currentUserInput: null,
- lastAssistantTurn: null,
- })
- })
- })
|