role.rs

 1use serde::{Deserialize, Serialize};
 2use std::fmt::{self, Display};
 3
 4#[derive(Clone, Copy, Serialize, Deserialize, Debug, Eq, PartialEq)]
 5#[serde(rename_all = "lowercase")]
 6pub enum Role {
 7    User,
 8    Assistant,
 9    System,
10}
11
12impl Role {
13    pub fn from_proto(role: i32) -> Role {
14        match proto::LanguageModelRole::from_i32(role) {
15            Some(proto::LanguageModelRole::LanguageModelUser) => Role::User,
16            Some(proto::LanguageModelRole::LanguageModelAssistant) => Role::Assistant,
17            Some(proto::LanguageModelRole::LanguageModelSystem) => Role::System,
18            Some(proto::LanguageModelRole::LanguageModelTool) => Role::System,
19            None => Role::User,
20        }
21    }
22
23    pub fn to_proto(&self) -> proto::LanguageModelRole {
24        match self {
25            Role::User => proto::LanguageModelRole::LanguageModelUser,
26            Role::Assistant => proto::LanguageModelRole::LanguageModelAssistant,
27            Role::System => proto::LanguageModelRole::LanguageModelSystem,
28        }
29    }
30
31    pub fn cycle(self) -> Role {
32        match self {
33            Role::User => Role::Assistant,
34            Role::Assistant => Role::System,
35            Role::System => Role::User,
36        }
37    }
38}
39
40impl Display for Role {
41    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {
42        match self {
43            Role::User => write!(f, "user"),
44            Role::Assistant => write!(f, "assistant"),
45            Role::System => write!(f, "system"),
46        }
47    }
48}
49
50impl From<Role> for ollama::Role {
51    fn from(val: Role) -> Self {
52        match val {
53            Role::User => ollama::Role::User,
54            Role::Assistant => ollama::Role::Assistant,
55            Role::System => ollama::Role::System,
56        }
57    }
58}
59
60impl From<Role> for open_ai::Role {
61    fn from(val: Role) -> Self {
62        match val {
63            Role::User => open_ai::Role::User,
64            Role::Assistant => open_ai::Role::Assistant,
65            Role::System => open_ai::Role::System,
66        }
67    }
68}