| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // npx jest src/api/transform/__tests__/openai-format.test.ts
- import { Anthropic } from "@anthropic-ai/sdk"
- import OpenAI from "openai"
- import { convertToOpenAiMessages } from "../openai-format"
- describe("convertToOpenAiMessages", () => {
- it("should convert simple text messages", () => {
- const anthropicMessages: Anthropic.Messages.MessageParam[] = [
- {
- role: "user",
- content: "Hello",
- },
- {
- role: "assistant",
- content: "Hi there!",
- },
- ]
- const openAiMessages = convertToOpenAiMessages(anthropicMessages)
- expect(openAiMessages).toHaveLength(2)
- expect(openAiMessages[0]).toEqual({
- role: "user",
- content: "Hello",
- })
- expect(openAiMessages[1]).toEqual({
- role: "assistant",
- content: "Hi there!",
- })
- })
- it("should handle messages with image content", () => {
- const anthropicMessages: Anthropic.Messages.MessageParam[] = [
- {
- role: "user",
- content: [
- {
- type: "text",
- text: "What is in this image?",
- },
- {
- type: "image",
- source: {
- type: "base64",
- media_type: "image/jpeg",
- data: "base64data",
- },
- },
- ],
- },
- ]
- const openAiMessages = convertToOpenAiMessages(anthropicMessages)
- expect(openAiMessages).toHaveLength(1)
- expect(openAiMessages[0].role).toBe("user")
- const content = openAiMessages[0].content as Array<{
- type: string
- text?: string
- image_url?: { url: string }
- }>
- expect(Array.isArray(content)).toBe(true)
- expect(content).toHaveLength(2)
- expect(content[0]).toEqual({ type: "text", text: "What is in this image?" })
- expect(content[1]).toEqual({
- type: "image_url",
- image_url: { url: "data:image/jpeg;base64,base64data" },
- })
- })
- it("should handle assistant messages with tool use", () => {
- const anthropicMessages: Anthropic.Messages.MessageParam[] = [
- {
- role: "assistant",
- content: [
- {
- type: "text",
- text: "Let me check the weather.",
- },
- {
- type: "tool_use",
- id: "weather-123",
- name: "get_weather",
- input: { city: "London" },
- },
- ],
- },
- ]
- const openAiMessages = convertToOpenAiMessages(anthropicMessages)
- expect(openAiMessages).toHaveLength(1)
- const assistantMessage = openAiMessages[0] as OpenAI.Chat.ChatCompletionAssistantMessageParam
- expect(assistantMessage.role).toBe("assistant")
- expect(assistantMessage.content).toBe("Let me check the weather.")
- expect(assistantMessage.tool_calls).toHaveLength(1)
- expect(assistantMessage.tool_calls![0]).toEqual({
- id: "weather-123",
- type: "function",
- function: {
- name: "get_weather",
- arguments: JSON.stringify({ city: "London" }),
- },
- })
- })
- it("should handle user messages with tool results", () => {
- const anthropicMessages: Anthropic.Messages.MessageParam[] = [
- {
- role: "user",
- content: [
- {
- type: "tool_result",
- tool_use_id: "weather-123",
- content: "Current temperature in London: 20°C",
- },
- ],
- },
- ]
- const openAiMessages = convertToOpenAiMessages(anthropicMessages)
- expect(openAiMessages).toHaveLength(1)
- const toolMessage = openAiMessages[0] as OpenAI.Chat.ChatCompletionToolMessageParam
- expect(toolMessage.role).toBe("tool")
- expect(toolMessage.tool_call_id).toBe("weather-123")
- expect(toolMessage.content).toBe("Current temperature in London: 20°C")
- })
- })
|