mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(chat): use Message.Character enum for roles and remove unused prompt helpers
This commit is contained in:
@@ -1,14 +0,0 @@
|
||||
package work.slhaf.partner.api.chat.constant;
|
||||
|
||||
public class ChatConstant {
|
||||
|
||||
public enum ResponseStatus {
|
||||
SUCCESS, FAILED
|
||||
}
|
||||
|
||||
public static class Character {
|
||||
public static final String USER = "user";
|
||||
public static final String SYSTEM = "system";
|
||||
public static final String ASSISTANT = "assistant";
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,39 @@
|
||||
package work.slhaf.partner.api.chat.pojo
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONCreator
|
||||
import com.alibaba.fastjson2.annotation.JSONField
|
||||
import com.fasterxml.jackson.annotation.JsonCreator
|
||||
import com.fasterxml.jackson.annotation.JsonValue
|
||||
import work.slhaf.partner.api.common.entity.PersistableObject
|
||||
import java.io.Serial
|
||||
|
||||
data class Message(
|
||||
val role: String,
|
||||
val role: Character,
|
||||
val content: String
|
||||
) : PersistableObject() {
|
||||
|
||||
fun roleValue(): String = role.value
|
||||
|
||||
enum class Character(
|
||||
@get:JsonValue
|
||||
@get:JSONField(value = true)
|
||||
val value: String
|
||||
) {
|
||||
USER("user"),
|
||||
SYSTEM("system"),
|
||||
ASSISTANT("assistant");
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
|
||||
@JSONCreator
|
||||
fun fromValue(value: String): Character {
|
||||
return entries.firstOrNull { it.value == value }
|
||||
?: throw IllegalArgumentException("Unsupported message role: $value")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@Serial
|
||||
private const val serialVersionUID = 1L
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.openai.models.chat.completions.ChatCompletionAssistantMessageParam;
|
||||
import com.openai.models.chat.completions.ChatCompletionMessageParam;
|
||||
import com.openai.models.chat.completions.ChatCompletionSystemMessageParam;
|
||||
import com.openai.models.chat.completions.ChatCompletionUserMessageParam;
|
||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
||||
import work.slhaf.partner.api.chat.pojo.Message;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -25,16 +24,15 @@ public final class OpenAiMessageAdapter {
|
||||
|
||||
public static ChatCompletionMessageParam toParam(Message message) {
|
||||
return switch (message.getRole()) {
|
||||
case ChatConstant.Character.SYSTEM -> ChatCompletionMessageParam.ofSystem(
|
||||
case SYSTEM -> ChatCompletionMessageParam.ofSystem(
|
||||
ChatCompletionSystemMessageParam.builder().content(message.getContent()).build()
|
||||
);
|
||||
case ChatConstant.Character.ASSISTANT -> ChatCompletionMessageParam.ofAssistant(
|
||||
case ASSISTANT -> ChatCompletionMessageParam.ofAssistant(
|
||||
ChatCompletionAssistantMessageParam.builder().content(message.getContent()).build()
|
||||
);
|
||||
case ChatConstant.Character.USER -> ChatCompletionMessageParam.ofUser(
|
||||
case USER -> ChatCompletionMessageParam.ofUser(
|
||||
ChatCompletionUserMessageParam.builder().content(message.getContent()).build()
|
||||
);
|
||||
default -> throw new IllegalArgumentException("Unsupported message role: " + message.getRole());
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package work.slhaf.partner.api.chat.pojo;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import work.slhaf.partner.api.chat.runtime.OpenAiMessageAdapter;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
class MessageTest {
|
||||
|
||||
@Test
|
||||
void shouldSerializeRoleAsProtocolValue() {
|
||||
String json = JSON.toJSONString(new Message(Message.Character.USER, "hello"));
|
||||
|
||||
assertEquals("{\"content\":\"hello\",\"role\":\"user\"}", json);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldDeserializeRoleFromProtocolValue() {
|
||||
Message message = JSON.parseObject("{\"role\":\"assistant\",\"content\":\"ok\"}", Message.class);
|
||||
|
||||
assertEquals(Message.Character.ASSISTANT, message.getRole());
|
||||
assertEquals("assistant", message.roleValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRejectUnsupportedRole() {
|
||||
assertThrows(IllegalArgumentException.class, () -> Message.Character.fromValue("tool"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAdaptAllSupportedRoles() {
|
||||
OpenAiMessageAdapter.toParam(new Message(Message.Character.USER, "u"));
|
||||
OpenAiMessageAdapter.toParam(new Message(Message.Character.SYSTEM, "s"));
|
||||
OpenAiMessageAdapter.toParam(new Message(Message.Character.ASSISTANT, "a"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user