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