assistant.eval.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import assert from 'node:assert'
  2. import { Eval } from 'braintrust'
  3. import { dataset } from './dataset'
  4. import {
  5. completenessScorer,
  6. concisenessScorer,
  7. correctnessScorer,
  8. docsFaithfulnessScorer,
  9. goalCompletionScorer,
  10. knowledgeUsageScorer,
  11. safetyScorer,
  12. toolUsageScorer,
  13. urlValidityScorer,
  14. } from './scorer'
  15. import { sqlIdentifierQuotingScorer, sqlSyntaxScorer } from './scorer-wasm'
  16. import { generateAssistantResponse } from '@/lib/ai/generate-assistant-response'
  17. import { getModel } from '@/lib/ai/model'
  18. import { DEFAULT_ASSISTANT_BASE_MODEL_ID, getAssistantModelEntry } from '@/lib/ai/model.utils'
  19. import { getMockTools } from '@/lib/ai/tools/mock-tools'
  20. assert(process.env.BRAINTRUST_PROJECT_ID, 'BRAINTRUST_PROJECT_ID is not set')
  21. assert(process.env.OPENAI_API_KEY, 'OPENAI_API_KEY is not set')
  22. Eval('Assistant', {
  23. projectId: process.env.BRAINTRUST_PROJECT_ID,
  24. trialCount: process.env.CI ? 3 : 1,
  25. data: () => dataset,
  26. task: async (input) => {
  27. const modelEntry = getAssistantModelEntry(DEFAULT_ASSISTANT_BASE_MODEL_ID)
  28. const modelResponse = await getModel({ provider: 'openai', modelEntry })
  29. if (modelResponse.error) throw modelResponse.error
  30. const result = await generateAssistantResponse({
  31. ...modelResponse.modelParams,
  32. messages: [
  33. {
  34. id: '1',
  35. role: 'user',
  36. parts: [{ type: 'text', text: input.prompt }],
  37. },
  38. ],
  39. tools: await getMockTools(input.mockTables ? { list_tables: input.mockTables } : undefined),
  40. })
  41. const finishReason = await result.finishReason
  42. return { finishReason }
  43. },
  44. scores: [
  45. toolUsageScorer,
  46. knowledgeUsageScorer,
  47. sqlSyntaxScorer,
  48. sqlIdentifierQuotingScorer,
  49. goalCompletionScorer,
  50. concisenessScorer,
  51. completenessScorer,
  52. docsFaithfulnessScorer,
  53. correctnessScorer,
  54. safetyScorer,
  55. urlValidityScorer,
  56. ],
  57. })