headless_lms_models/
application_task_default_language_models.rs

1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy, Type)]
4#[sqlx(type_name = "application_task", rename_all = "kebab-case")]
5pub enum ApplicationTask {
6    ContentCleaning,
7    MessageSuggestion,
8    CmsParagraphSuggestion,
9}
10
11#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
12pub struct ApplicationTaskDefaultLanguageModel {
13    pub id: Uuid,
14    pub created_at: DateTime<Utc>,
15    pub updated_at: DateTime<Utc>,
16    pub deleted_at: Option<DateTime<Utc>>,
17    pub model_id: Uuid,
18    pub task: ApplicationTask,
19    pub context_utilization: f32,
20}
21
22impl Default for ApplicationTaskDefaultLanguageModel {
23    fn default() -> Self {
24        Self {
25            id: Uuid::nil(),
26            created_at: Default::default(),
27            updated_at: Default::default(),
28            deleted_at: None,
29            model_id: Default::default(),
30            task: ApplicationTask::ContentCleaning,
31            context_utilization: 0.75,
32        }
33    }
34}
35
36pub struct TaskLMSpec {
37    pub id: Uuid,
38    pub task: ApplicationTask,
39    pub context_utilization: f32,
40    pub model: String,
41    pub thinking: bool,
42    pub deployment_name: String,
43    pub context_size: i32,
44}
45
46pub async fn insert(
47    conn: &mut PgConnection,
48    input: ApplicationTaskDefaultLanguageModel,
49) -> ModelResult<ApplicationTaskDefaultLanguageModel> {
50    let res = sqlx::query_as!(
51        ApplicationTaskDefaultLanguageModel,
52        r#"
53INSERT INTO application_task_default_language_models (model_id, task, context_utilization)
54VALUES ($1, $2, $3)
55RETURNING
56    id,
57    created_at,
58    updated_at,
59    deleted_at,
60    model_id,
61    task as "task: ApplicationTask",
62    context_utilization
63        "#,
64        input.model_id,
65        input.task as ApplicationTask,
66        input.context_utilization
67    )
68    .fetch_one(conn)
69    .await?;
70    Ok(res)
71}
72
73pub async fn delete(conn: &mut PgConnection, id: Uuid) -> ModelResult<()> {
74    sqlx::query!(
75        r#"
76UPDATE application_task_default_language_models
77SET deleted_at = now()
78WHERE id = $1
79AND deleted_at IS NULL
80        "#,
81        id
82    )
83    .execute(conn)
84    .await?;
85    Ok(())
86}
87
88pub async fn get_for_task(
89    conn: &mut PgConnection,
90    task: ApplicationTask,
91) -> ModelResult<TaskLMSpec> {
92    let res = sqlx::query_as!(
93        TaskLMSpec,
94        r#"
95SELECT
96    a.id,
97    a.task as "task: ApplicationTask",
98    a.context_utilization,
99    model.model,
100    model.thinking,
101    model.deployment_name,
102    model.context_size
103FROM application_task_default_language_models AS a
104JOIN chatbot_configurations_models AS model ON model.id = a.model_id
105WHERE a.task = $1
106AND a.deleted_at IS NULL
107AND model.deleted_at IS NULL
108        "#,
109        task as ApplicationTask
110    )
111    .fetch_one(conn)
112    .await?;
113    Ok(res)
114}