Junjie
2 天以前 63b01db83d9aad8a15276b4236a9a22e4aeef065
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.zy.ai.gateway.adapter.openai;
 
import com.zy.ai.entity.ChatCompletionRequest;
import com.zy.ai.entity.ChatCompletionResponse;
import com.zy.ai.gateway.model.AiMessage;
import com.zy.ai.gateway.model.AiRequest;
import com.zy.ai.gateway.model.AiResponse;
import org.junit.jupiter.api.Test;
 
import java.util.List;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
 
class OpenAiChatCompletionsMapperTest {
 
    private final OpenAiChatCompletionsMapper mapper = new OpenAiChatCompletionsMapper();
 
    @Test
    void toChatRequestMapsMessagesAndOptions() {
        AiMessage message = new AiMessage();
        message.setRole("user");
        message.setContent("hello");
 
        AiRequest request = new AiRequest();
        request.setModel("gpt-test");
        request.setMessages(List.of(message));
        request.setTemperature(0.2);
        request.setMaxTokens(128);
        request.setStream(false);
 
        ChatCompletionRequest result = mapper.toChatRequest(request);
 
        assertEquals("gpt-test", result.getModel());
        assertEquals(0.2, result.getTemperature());
        assertEquals(128, result.getMax_tokens());
        assertEquals(false, result.getStream());
        assertEquals("user", result.getMessages().get(0).getRole());
        assertEquals("hello", result.getMessages().get(0).getContent());
    }
 
    @Test
    void toAiResponseMapsTextAndUsage() {
        ChatCompletionRequest.Message message = new ChatCompletionRequest.Message();
        message.setRole("assistant");
        message.setContent("answer");
 
        ChatCompletionResponse.Choice choice = new ChatCompletionResponse.Choice();
        choice.setIndex(0);
        choice.setMessage(message);
 
        ChatCompletionResponse.Usage usage = new ChatCompletionResponse.Usage();
        usage.setPromptTokens(3);
        usage.setCompletionTokens(4);
        usage.setTotalTokens(7);
 
        ChatCompletionResponse response = new ChatCompletionResponse();
        response.setId("chatcmpl_test");
        response.setChoices(List.of(choice));
        response.setUsage(usage);
 
        AiResponse result = mapper.toAiResponse(response);
 
        assertEquals("chatcmpl_test", result.getId());
        assertEquals("answer", result.getText());
        assertEquals(3, result.getUsage().getInputTokens());
        assertEquals(4, result.getUsage().getOutputTokens());
        assertEquals(7, result.getUsage().getTotalTokens());
    }
 
    @Test
    void toChatResponsePreservesToolCallsWithoutText() {
        ChatCompletionRequest.Function function = new ChatCompletionRequest.Function();
        function.setName("lookup");
        function.setArguments("{}");
 
        ChatCompletionRequest.ToolCall toolCall = new ChatCompletionRequest.ToolCall();
        toolCall.setId("call_1");
        toolCall.setType("function");
        toolCall.setFunction(function);
 
        ChatCompletionRequest.Message message = new ChatCompletionRequest.Message();
        message.setRole("assistant");
        message.setTool_calls(List.of(toolCall));
 
        ChatCompletionResponse.Choice choice = new ChatCompletionResponse.Choice();
        choice.setIndex(0);
        choice.setMessage(message);
 
        ChatCompletionResponse chatResponse = new ChatCompletionResponse();
        chatResponse.setChoices(List.of(choice));
 
        AiResponse aiResponse = mapper.toAiResponse(chatResponse);
        ChatCompletionResponse result = mapper.toChatResponse(aiResponse);
 
        ChatCompletionRequest.Message resultMessage = result.getChoices().get(0).getMessage();
        assertEquals("assistant", resultMessage.getRole());
        assertEquals("call_1", resultMessage.getTool_calls().get(0).getId());
        assertEquals("lookup", resultMessage.getTool_calls().get(0).getFunction().getName());
    }
}