Skip to main content

kproc_llm/
message.rs

1use serde::{Deserialize, Serialize};
2
3/// Speaker
4#[derive(Debug)]
5pub enum Role
6{
7  /// User role
8  User,
9  /// System role
10  System,
11  /// Assistant role
12  Assistant,
13  /// Custom role, defined by the string. Often fallback to User.
14  Custom(String),
15}
16
17/// Message
18#[derive(Debug, Serialize, Deserialize)]
19pub struct Message
20{
21  /// Role of the message
22  pub role: Role,
23  /// Content of the message
24  pub content: String,
25}
26
27impl Serialize for Role
28{
29  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30  where
31    S: serde::Serializer,
32  {
33    let s = match self
34    {
35      Role::User => "user",
36      Role::System => "system",
37      Role::Assistant => "assistant",
38      Role::Custom(s) => s.as_str(),
39    };
40    serializer.serialize_str(s)
41  }
42}
43
44impl<'de> Deserialize<'de> for Role
45{
46  fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
47  where
48    D: serde::Deserializer<'de>,
49  {
50    let s = String::deserialize(deserializer)?;
51    Ok(match s.as_str()
52    {
53      "user" => Role::User,
54      "system" => Role::System,
55      "assistant" => Role::Assistant,
56      other => Role::Custom(other.to_string()),
57    })
58  }
59}