1use arrow_schema::{DataType, Field, Schema, TimeUnit};
4use std::sync::Arc;
5
6#[must_use]
8pub fn chunks_schema(embedding_dim: usize) -> Schema {
9 Schema::new(vec![
10 Field::new("chunk_id", DataType::Utf8, false),
12 Field::new("file_id", DataType::Utf8, false),
13 Field::new("file_path", DataType::Utf8, false),
14 Field::new("content", DataType::Utf8, false),
16 Field::new("content_type", DataType::Utf8, false),
17 Field::new("chunk_index", DataType::UInt32, false),
19 Field::new("start_byte", DataType::UInt64, false),
20 Field::new("end_byte", DataType::UInt64, false),
21 Field::new("start_line", DataType::UInt32, true),
22 Field::new("end_line", DataType::UInt32, true),
23 Field::new("parent_chunk_id", DataType::Utf8, true),
25 Field::new("depth", DataType::UInt8, false),
26 Field::new(
28 "embedding",
29 DataType::FixedSizeList(
30 Arc::new(Field::new("item", DataType::Float32, true)),
31 embedding_dim as i32,
32 ),
33 false,
34 ),
35 Field::new("embedding_model", DataType::Utf8, true),
37 Field::new(
38 "indexed_at",
39 DataType::Timestamp(TimeUnit::Millisecond, None),
40 false,
41 ),
42 Field::new("file_mime_type", DataType::Utf8, true),
44 Field::new("file_size_bytes", DataType::UInt64, true),
45 Field::new("language", DataType::Utf8, true),
47 Field::new("symbol_type", DataType::Utf8, true),
48 Field::new("symbol_name", DataType::Utf8, true),
49 ])
50}
51
52#[must_use]
54pub fn files_schema() -> Schema {
55 Schema::new(vec![
56 Field::new("file_id", DataType::Utf8, false),
57 Field::new("path", DataType::Utf8, false),
58 Field::new("size_bytes", DataType::UInt64, false),
59 Field::new("mime_type", DataType::Utf8, false),
60 Field::new("content_hash", DataType::Utf8, false),
61 Field::new(
62 "modified_at",
63 DataType::Timestamp(TimeUnit::Millisecond, None),
64 false,
65 ),
66 Field::new(
67 "indexed_at",
68 DataType::Timestamp(TimeUnit::Millisecond, None),
69 true,
70 ),
71 Field::new("chunk_count", DataType::UInt32, false),
72 Field::new("status", DataType::Utf8, false),
73 Field::new("error_message", DataType::Utf8, true),
74 ])
75}