Skip to main content

context69_contracts/
extraction.rs

1use chrono::{DateTime, Utc};
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, ToSchema, JsonSchema)]
8pub struct ExtractionDirective {
9    pub template_key: String,
10    #[serde(default = "default_parameters")]
11    #[schema(value_type = Object)]
12    pub parameters: serde_json::Value,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
16pub struct ExtractionTemplateInput {
17    pub template_key: String,
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub description: Option<String>,
20    pub system_prompt: String,
21    #[schema(value_type = Object)]
22    pub output_schema: serde_json::Value,
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub max_output_tokens: Option<i32>,
25    #[serde(default = "default_enabled")]
26    pub enabled: bool,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
30pub struct ExtractionTemplateResponse {
31    pub template_key: String,
32    pub version: i32,
33    pub description: Option<String>,
34    pub system_prompt: String,
35    #[schema(value_type = Object)]
36    pub output_schema: serde_json::Value,
37    pub max_output_tokens: i32,
38    pub enabled: bool,
39    pub created_at: DateTime<Utc>,
40    pub updated_at: DateTime<Utc>,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema, JsonSchema)]
44#[serde(rename_all = "snake_case")]
45pub enum ExtractionJobStatus {
46    Queued,
47    Running,
48    Succeeded,
49    Failed,
50    Skipped,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
54pub struct ExtractionJobResponse {
55    pub job_id: Uuid,
56    pub document_id: i64,
57    pub template_key: String,
58    pub template_version: i32,
59    pub source_record_hash: String,
60    pub status: ExtractionJobStatus,
61    pub attempt_count: i32,
62    pub error_message: Option<String>,
63    pub created_at: DateTime<Utc>,
64    pub started_at: Option<DateTime<Utc>>,
65    pub finished_at: Option<DateTime<Utc>>,
66    pub updated_at: DateTime<Utc>,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
70pub struct ExtractionResultResponse {
71    pub version_id: Uuid,
72    pub document_id: i64,
73    pub template_key: String,
74    pub template_version: i32,
75    pub source_record_hash: String,
76    pub model_name: Option<String>,
77    #[schema(value_type = Object)]
78    pub result_json: serde_json::Value,
79    pub created_at: DateTime<Utc>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
83pub struct ExtractionJobsResponse {
84    pub jobs: Vec<ExtractionJobResponse>,
85    pub latest_results: Vec<ExtractionResultResponse>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
89pub struct RebuildDocumentExtractionsRequest {
90    #[serde(default)]
91    pub template_keys: Vec<String>,
92}
93
94fn default_parameters() -> serde_json::Value {
95    serde_json::json!({})
96}
97
98fn default_enabled() -> bool {
99    true
100}