test-fixtures.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import type { ToolUIPart, UIMessage } from 'ai'
  2. export function createUserMessage(content: string, id = 'user-msg-1'): UIMessage {
  3. return {
  4. id,
  5. role: 'user',
  6. parts: [
  7. {
  8. type: 'text',
  9. text: content,
  10. },
  11. ],
  12. }
  13. }
  14. export function createAssistantTextMessage(content: string, id = 'assistant-msg-1'): UIMessage {
  15. return {
  16. id,
  17. role: 'assistant',
  18. parts: [
  19. {
  20. type: 'text',
  21. text: content,
  22. },
  23. ],
  24. }
  25. }
  26. export function createAssistantMessageWithExecuteSqlTool(
  27. query: string,
  28. results: Array<Record<string, any>> = [{ id: 1, name: 'test' }],
  29. id = 'assistant-tool-msg-1'
  30. ): UIMessage {
  31. return {
  32. id,
  33. role: 'assistant',
  34. parts: [
  35. {
  36. type: 'text',
  37. text: "I'll run that SQL query for you.",
  38. },
  39. {
  40. type: 'tool-execute_sql',
  41. state: 'output-available',
  42. toolCallId: 'call-123',
  43. input: { sql: query },
  44. output: results,
  45. } satisfies ToolUIPart,
  46. ],
  47. }
  48. }
  49. export function createAssistantMessageWithMultipleTools(
  50. id = 'assistant-multi-tool-msg-1'
  51. ): UIMessage {
  52. return {
  53. id,
  54. role: 'assistant',
  55. parts: [
  56. {
  57. type: 'text',
  58. text: 'Let me check the database structure and run some queries.',
  59. },
  60. {
  61. type: 'tool-execute_sql',
  62. state: 'output-available',
  63. toolCallId: 'call-456',
  64. input: { sql: 'SELECT * FROM users LIMIT 5' },
  65. output: [
  66. { id: 1, email: 'user1@example.com' },
  67. { id: 2, email: 'user2@example.com' },
  68. ],
  69. } satisfies ToolUIPart,
  70. {
  71. type: 'tool-execute_sql',
  72. state: 'output-available',
  73. toolCallId: 'call-789',
  74. toolName: 'execute_sql',
  75. input: { sql: 'DESCRIBE users' },
  76. output: [
  77. { column: 'id', type: 'integer', nullable: false },
  78. { column: 'email', type: 'varchar', nullable: false },
  79. ],
  80. } as ToolUIPart,
  81. ],
  82. }
  83. }
  84. export function createLongConversation(): Array<UIMessage> {
  85. return [
  86. createUserMessage('Show me all users', 'msg-1'),
  87. createAssistantMessageWithExecuteSqlTool('SELECT * FROM users', [{ id: 1 }], 'msg-2'),
  88. createUserMessage('How many users are there?', 'msg-3'),
  89. createAssistantMessageWithExecuteSqlTool(
  90. 'SELECT COUNT(*) FROM users',
  91. [{ count: 100 }],
  92. 'msg-4'
  93. ),
  94. createUserMessage('Show me the schema', 'msg-5'),
  95. createAssistantTextMessage("Here's the database schema...", 'msg-6'),
  96. createUserMessage('Create a new table', 'msg-7'),
  97. createAssistantMessageWithExecuteSqlTool(
  98. 'CREATE TABLE posts (id SERIAL PRIMARY KEY)',
  99. [],
  100. 'msg-8'
  101. ),
  102. createUserMessage('Add some data', 'msg-9'),
  103. createAssistantMessageWithExecuteSqlTool(
  104. "INSERT INTO posts (title) VALUES ('Test')",
  105. [],
  106. 'msg-10'
  107. ),
  108. ]
  109. }