Skip to main content

gproxy_transform/transform/common/
roles.rs

1/// Coarse role category used only for mechanical routing decisions.
2#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum RoleFamily {
4    Instruction,
5    User,
6    Assistant,
7    Tool,
8}
9
10pub fn openai_role_family(role: &str) -> Option<RoleFamily> {
11    match role {
12        "system" | "developer" => Some(RoleFamily::Instruction),
13        "user" => Some(RoleFamily::User),
14        "assistant" => Some(RoleFamily::Assistant),
15        "tool" | "function" => Some(RoleFamily::Tool),
16        _ => None,
17    }
18}
19
20pub fn claude_role_family(role: &str) -> Option<RoleFamily> {
21    match role {
22        "user" => Some(RoleFamily::User),
23        "assistant" => Some(RoleFamily::Assistant),
24        _ => None,
25    }
26}
27
28pub fn gemini_role_family(role: &str) -> Option<RoleFamily> {
29    match role {
30        "user" => Some(RoleFamily::User),
31        "model" => Some(RoleFamily::Assistant),
32        "function" => Some(RoleFamily::Tool),
33        _ => None,
34    }
35}