llm.test.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { describe, expect, test } from "bun:test"
  2. import { LLM } from "../../src/session/llm"
  3. import type { ModelMessage } from "ai"
  4. describe("session.llm.hasToolCalls", () => {
  5. test("returns false for empty messages array", () => {
  6. expect(LLM.hasToolCalls([])).toBe(false)
  7. })
  8. test("returns false for messages with only text content", () => {
  9. const messages: ModelMessage[] = [
  10. {
  11. role: "user",
  12. content: [{ type: "text", text: "Hello" }],
  13. },
  14. {
  15. role: "assistant",
  16. content: [{ type: "text", text: "Hi there" }],
  17. },
  18. ]
  19. expect(LLM.hasToolCalls(messages)).toBe(false)
  20. })
  21. test("returns true when messages contain tool-call", () => {
  22. const messages = [
  23. {
  24. role: "user",
  25. content: [{ type: "text", text: "Run a command" }],
  26. },
  27. {
  28. role: "assistant",
  29. content: [
  30. {
  31. type: "tool-call",
  32. toolCallId: "call-123",
  33. toolName: "bash",
  34. },
  35. ],
  36. },
  37. ] as ModelMessage[]
  38. expect(LLM.hasToolCalls(messages)).toBe(true)
  39. })
  40. test("returns true when messages contain tool-result", () => {
  41. const messages = [
  42. {
  43. role: "tool",
  44. content: [
  45. {
  46. type: "tool-result",
  47. toolCallId: "call-123",
  48. toolName: "bash",
  49. },
  50. ],
  51. },
  52. ] as ModelMessage[]
  53. expect(LLM.hasToolCalls(messages)).toBe(true)
  54. })
  55. test("returns false for messages with string content", () => {
  56. const messages: ModelMessage[] = [
  57. {
  58. role: "user",
  59. content: "Hello world",
  60. },
  61. {
  62. role: "assistant",
  63. content: "Hi there",
  64. },
  65. ]
  66. expect(LLM.hasToolCalls(messages)).toBe(false)
  67. })
  68. test("returns true when tool-call is mixed with text content", () => {
  69. const messages = [
  70. {
  71. role: "assistant",
  72. content: [
  73. { type: "text", text: "Let me run that command" },
  74. {
  75. type: "tool-call",
  76. toolCallId: "call-456",
  77. toolName: "read",
  78. },
  79. ],
  80. },
  81. ] as ModelMessage[]
  82. expect(LLM.hasToolCalls(messages)).toBe(true)
  83. })
  84. })