headless_lms_models/
application_task_default_language_models.rs1use 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}