node-type-registry 0.18.1 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/authz/authz-allow-all.js +10 -10
- package/authz/authz-composite.js +28 -28
- package/authz/authz-deny-all.js +10 -10
- package/authz/authz-direct-owner-any.js +19 -18
- package/authz/authz-direct-owner.js +17 -16
- package/authz/authz-entity-membership.js +39 -38
- package/authz/authz-member-list.js +17 -16
- package/authz/authz-membership-check.js +34 -34
- package/authz/authz-not-read-only.js +23 -22
- package/authz/authz-org-hierarchy.js +33 -31
- package/authz/authz-peer-ownership.js +40 -39
- package/authz/authz-publishable.js +26 -24
- package/authz/authz-related-entity-membership.js +57 -55
- package/authz/authz-related-member-list.js +35 -32
- package/authz/authz-related-peer-ownership.js +62 -59
- package/authz/authz-temporal.js +32 -30
- package/authz/index.d.ts +9 -9
- package/authz/index.js +19 -19
- package/blueprint-types.generated.d.ts +10 -17
- package/blueprint-types.generated.js +1 -1
- package/codegen/generate-types.js +10 -21
- package/data/data-composite-field.js +27 -25
- package/data/data-direct-owner.js +24 -23
- package/data/data-entity-membership.js +24 -23
- package/data/data-force-current-user.js +17 -16
- package/data/data-id.js +16 -15
- package/data/data-immutable-fields.js +20 -19
- package/data/data-inflection.js +33 -32
- package/data/data-inherit-from-parent.js +31 -29
- package/data/data-job-trigger.js +87 -84
- package/data/data-jsonb.js +27 -26
- package/data/data-owned-fields.js +25 -23
- package/data/data-ownership-in-entity.js +21 -21
- package/data/data-peoplestamps.js +19 -19
- package/data/data-publishable.js +16 -16
- package/data/data-slug.js +21 -19
- package/data/data-soft-delete.js +14 -14
- package/data/data-status-field.js +32 -31
- package/data/data-tags.js +23 -22
- package/data/data-timestamps.js +15 -15
- package/data/index.d.ts +17 -17
- package/data/index.js +35 -35
- package/data/search-bm25.js +34 -33
- package/data/search-full-text.js +49 -47
- package/data/search-spatial-aggregate.js +77 -74
- package/data/search-spatial.js +51 -50
- package/data/search-trgm.js +20 -19
- package/data/search-unified.js +170 -162
- package/data/search-vector.js +104 -101
- package/data/table-organization-settings.js +13 -13
- package/data/table-user-profiles.js +13 -13
- package/data/table-user-settings.js +13 -13
- package/esm/authz/authz-allow-all.js +10 -10
- package/esm/authz/authz-composite.js +28 -28
- package/esm/authz/authz-deny-all.js +10 -10
- package/esm/authz/authz-direct-owner-any.js +19 -18
- package/esm/authz/authz-direct-owner.js +17 -16
- package/esm/authz/authz-entity-membership.js +39 -38
- package/esm/authz/authz-member-list.js +17 -16
- package/esm/authz/authz-membership-check.js +34 -34
- package/esm/authz/authz-not-read-only.js +23 -22
- package/esm/authz/authz-org-hierarchy.js +33 -31
- package/esm/authz/authz-peer-ownership.js +40 -39
- package/esm/authz/authz-publishable.js +26 -24
- package/esm/authz/authz-related-entity-membership.js +57 -55
- package/esm/authz/authz-related-member-list.js +35 -32
- package/esm/authz/authz-related-peer-ownership.js +62 -59
- package/esm/authz/authz-temporal.js +32 -30
- package/esm/authz/index.d.ts +9 -9
- package/esm/authz/index.js +9 -9
- package/esm/blueprint-types.generated.d.ts +10 -17
- package/esm/blueprint-types.generated.js +1 -1
- package/esm/codegen/generate-types.js +10 -21
- package/esm/data/data-composite-field.js +27 -25
- package/esm/data/data-direct-owner.js +24 -23
- package/esm/data/data-entity-membership.js +24 -23
- package/esm/data/data-force-current-user.js +17 -16
- package/esm/data/data-id.js +16 -15
- package/esm/data/data-immutable-fields.js +20 -19
- package/esm/data/data-inflection.js +33 -32
- package/esm/data/data-inherit-from-parent.js +31 -29
- package/esm/data/data-job-trigger.js +87 -84
- package/esm/data/data-jsonb.js +27 -26
- package/esm/data/data-owned-fields.js +25 -23
- package/esm/data/data-ownership-in-entity.js +21 -21
- package/esm/data/data-peoplestamps.js +19 -19
- package/esm/data/data-publishable.js +16 -16
- package/esm/data/data-slug.js +21 -19
- package/esm/data/data-soft-delete.js +14 -14
- package/esm/data/data-status-field.js +32 -31
- package/esm/data/data-tags.js +23 -22
- package/esm/data/data-timestamps.js +15 -15
- package/esm/data/index.d.ts +17 -17
- package/esm/data/index.js +17 -17
- package/esm/data/search-bm25.js +34 -33
- package/esm/data/search-full-text.js +49 -47
- package/esm/data/search-spatial-aggregate.js +77 -74
- package/esm/data/search-spatial.js +51 -50
- package/esm/data/search-trgm.js +20 -19
- package/esm/data/search-unified.js +170 -162
- package/esm/data/search-vector.js +104 -101
- package/esm/data/table-organization-settings.js +13 -13
- package/esm/data/table-user-profiles.js +13 -13
- package/esm/data/table-user-settings.js +13 -13
- package/esm/index.d.ts +3 -3
- package/esm/index.js +3 -3
- package/esm/module-presets/auth-email-magic.js +2 -2
- package/esm/module-presets/auth-email.js +8 -8
- package/esm/module-presets/auth-passkey.js +4 -4
- package/esm/module-presets/auth-sso.js +7 -7
- package/esm/module-presets/full.js +1 -1
- package/esm/module-presets/index.d.ts +5 -5
- package/esm/module-presets/index.js +4 -4
- package/esm/relation/index.d.ts +1 -1
- package/esm/relation/index.js +1 -1
- package/esm/relation/relation-belongs-to.js +41 -40
- package/esm/relation/relation-has-many.js +42 -41
- package/esm/relation/relation-has-one.js +42 -41
- package/esm/relation/relation-many-to-many.js +70 -68
- package/esm/relation/relation-spatial.js +54 -54
- package/esm/view/index.d.ts +3 -3
- package/esm/view/index.js +3 -3
- package/esm/view/view-aggregated.js +50 -48
- package/esm/view/view-composite.js +18 -18
- package/esm/view/view-filtered-table.js +37 -36
- package/esm/view/view-joined-tables.js +65 -61
- package/esm/view/view-table-projection.js +29 -28
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/module-presets/auth-email-magic.js +2 -2
- package/module-presets/auth-email.js +8 -8
- package/module-presets/auth-passkey.js +4 -4
- package/module-presets/auth-sso.js +7 -7
- package/module-presets/full.js +1 -1
- package/module-presets/index.d.ts +5 -5
- package/module-presets/index.js +7 -7
- package/package.json +2 -2
- package/relation/index.d.ts +1 -1
- package/relation/index.js +3 -3
- package/relation/relation-belongs-to.js +41 -40
- package/relation/relation-has-many.js +42 -41
- package/relation/relation-has-one.js +42 -41
- package/relation/relation-many-to-many.js +70 -68
- package/relation/relation-spatial.js +54 -54
- package/view/index.d.ts +3 -3
- package/view/index.js +7 -7
- package/view/view-aggregated.js +50 -48
- package/view/view-composite.js +18 -18
- package/view/view-filtered-table.js +37 -36
- package/view/view-joined-tables.js +65 -61
- package/view/view-table-projection.js +29 -28
package/data/search-unified.js
CHANGED
|
@@ -2,207 +2,215 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SearchUnified = void 0;
|
|
4
4
|
exports.SearchUnified = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
5
|
+
name: 'SearchUnified',
|
|
6
|
+
slug: 'search_unified',
|
|
7
|
+
category: 'search',
|
|
8
|
+
display_name: 'Unified Search',
|
|
9
|
+
description: 'Composite node type that orchestrates multiple search modalities (full-text search, BM25, embeddings, trigram) on a single table. Configures per-table search score weights, normalization strategy, and recency boost via the @searchConfig smart tag.',
|
|
10
|
+
parameter_schema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {
|
|
13
|
+
full_text_search: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
description: 'SearchFullText parameters. Omit to skip FTS setup.',
|
|
16
|
+
properties: {
|
|
17
|
+
field_name: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
format: 'column-ref',
|
|
20
|
+
default: 'search'
|
|
21
|
+
},
|
|
22
|
+
source_fields: {
|
|
23
|
+
type: 'array',
|
|
24
|
+
items: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
field: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
format: 'column-ref'
|
|
28
30
|
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
weight: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
enum: [
|
|
34
|
+
'A',
|
|
35
|
+
'B',
|
|
36
|
+
'C',
|
|
37
|
+
'D'
|
|
36
38
|
]
|
|
37
39
|
},
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
lang: {
|
|
41
|
+
type: 'string'
|
|
40
42
|
}
|
|
41
43
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
required: [
|
|
45
|
+
'field'
|
|
44
46
|
]
|
|
45
47
|
}
|
|
46
48
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
search_score_weight: {
|
|
50
|
+
type: 'number',
|
|
51
|
+
default: 1
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
55
|
+
bm25: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
description: 'SearchBm25 parameters. Omit to skip BM25 setup.',
|
|
58
|
+
properties: {
|
|
59
|
+
field_name: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
format: 'column-ref'
|
|
62
|
+
},
|
|
63
|
+
text_config: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
default: 'english'
|
|
66
|
+
},
|
|
67
|
+
k1: {
|
|
68
|
+
type: 'number'
|
|
69
|
+
},
|
|
70
|
+
b: {
|
|
71
|
+
type: 'number'
|
|
72
|
+
},
|
|
73
|
+
search_score_weight: {
|
|
74
|
+
type: 'number',
|
|
75
|
+
default: 1
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
},
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
embedding: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
description: 'SearchVector parameters. Omit to skip embedding setup.',
|
|
82
|
+
properties: {
|
|
83
|
+
field_name: {
|
|
84
|
+
type: 'string',
|
|
85
|
+
format: 'column-ref',
|
|
86
|
+
default: 'embedding'
|
|
87
|
+
},
|
|
88
|
+
dimensions: {
|
|
89
|
+
type: 'integer',
|
|
90
|
+
default: 768
|
|
91
|
+
},
|
|
92
|
+
index_method: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
enum: [
|
|
95
|
+
'hnsw',
|
|
96
|
+
'ivfflat'
|
|
93
97
|
]
|
|
94
98
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
metric: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
enum: [
|
|
102
|
+
'cosine',
|
|
103
|
+
'l2',
|
|
104
|
+
'ip'
|
|
101
105
|
]
|
|
102
106
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
+
source_fields: {
|
|
108
|
+
type: 'array',
|
|
109
|
+
items: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
format: 'column-ref'
|
|
107
112
|
}
|
|
108
113
|
},
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
search_score_weight: {
|
|
115
|
+
type: 'number',
|
|
116
|
+
default: 1
|
|
117
|
+
},
|
|
118
|
+
chunks: {
|
|
119
|
+
type: 'object',
|
|
120
|
+
description: 'Chunking configuration for long-text embedding. Creates an embedding_chunks record that drives automatic text splitting and per-chunk embedding. Omit to skip chunking.',
|
|
121
|
+
properties: {
|
|
122
|
+
content_field_name: {
|
|
123
|
+
type: 'string',
|
|
124
|
+
format: 'column-ref',
|
|
125
|
+
description: 'Name of the text content column in the chunks table',
|
|
126
|
+
default: 'content'
|
|
121
127
|
},
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
chunk_size: {
|
|
129
|
+
type: 'integer',
|
|
130
|
+
description: 'Maximum number of characters per chunk',
|
|
131
|
+
default: 1000
|
|
126
132
|
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
chunk_overlap: {
|
|
134
|
+
type: 'integer',
|
|
135
|
+
description: 'Number of overlapping characters between consecutive chunks',
|
|
136
|
+
default: 200
|
|
131
137
|
},
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
138
|
+
chunk_strategy: {
|
|
139
|
+
type: 'string',
|
|
140
|
+
enum: [
|
|
141
|
+
'fixed',
|
|
142
|
+
'sentence',
|
|
143
|
+
'paragraph',
|
|
144
|
+
'semantic'
|
|
139
145
|
],
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
description: 'Strategy for splitting text into chunks',
|
|
147
|
+
default: 'fixed'
|
|
142
148
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
149
|
+
metadata_fields: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
description: 'Metadata fields from parent to copy into chunks'
|
|
146
152
|
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
153
|
+
enqueue_chunking_job: {
|
|
154
|
+
type: 'boolean',
|
|
155
|
+
description: 'Whether to auto-enqueue a chunking job on insert/update',
|
|
156
|
+
default: true
|
|
151
157
|
},
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
chunking_task_name: {
|
|
159
|
+
type: 'string',
|
|
160
|
+
description: 'Task identifier for the chunking job queue',
|
|
161
|
+
default: 'generate_chunks'
|
|
156
162
|
}
|
|
157
163
|
}
|
|
158
164
|
}
|
|
159
165
|
}
|
|
160
166
|
},
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
167
|
+
trgm_fields: {
|
|
168
|
+
type: 'array',
|
|
169
|
+
items: {
|
|
170
|
+
type: 'string',
|
|
171
|
+
format: 'column-ref'
|
|
165
172
|
},
|
|
166
|
-
|
|
173
|
+
description: 'Field names to tag with @trgmSearch for fuzzy/typo-tolerant matching'
|
|
167
174
|
},
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
},
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
175
|
+
search_config: {
|
|
176
|
+
type: 'object',
|
|
177
|
+
description: 'Unified search score configuration written to @searchConfig smart tag',
|
|
178
|
+
properties: {
|
|
179
|
+
weights: {
|
|
180
|
+
type: 'object',
|
|
181
|
+
description: 'Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}'
|
|
182
|
+
},
|
|
183
|
+
normalization: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
enum: [
|
|
186
|
+
'linear',
|
|
187
|
+
'sigmoid'
|
|
181
188
|
],
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
},
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
189
|
+
description: 'Score normalization strategy',
|
|
190
|
+
default: 'linear'
|
|
191
|
+
},
|
|
192
|
+
boost_recent: {
|
|
193
|
+
type: 'boolean',
|
|
194
|
+
description: 'Enable recency boost for search results',
|
|
195
|
+
default: false
|
|
196
|
+
},
|
|
197
|
+
boost_recency_field: {
|
|
198
|
+
type: 'string',
|
|
199
|
+
format: 'column-ref',
|
|
200
|
+
description: 'Timestamp field for recency boost (e.g. created_at, updated_at)'
|
|
201
|
+
},
|
|
202
|
+
boost_recency_decay: {
|
|
203
|
+
type: 'number',
|
|
204
|
+
description: 'Decay rate for recency boost (0-1, lower = faster decay)',
|
|
205
|
+
default: 0.5
|
|
198
206
|
}
|
|
199
207
|
}
|
|
200
208
|
}
|
|
201
209
|
}
|
|
202
210
|
},
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
211
|
+
tags: [
|
|
212
|
+
'search',
|
|
213
|
+
'composite',
|
|
214
|
+
'schema'
|
|
207
215
|
]
|
|
208
216
|
};
|
package/data/search-vector.js
CHANGED
|
@@ -2,132 +2,135 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SearchVector = void 0;
|
|
4
4
|
exports.SearchVector = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
name: 'SearchVector',
|
|
6
|
+
slug: 'search_vector',
|
|
7
|
+
category: 'search',
|
|
8
|
+
display_name: 'Vector Search',
|
|
9
|
+
description: 'Adds a vector embedding column with HNSW or IVFFlat index for similarity search. Supports configurable dimensions, distance metrics (cosine, l2, ip), stale tracking strategies (column, null, hash), and automatic job enqueue triggers for embedding generation.',
|
|
10
|
+
parameter_schema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {
|
|
13
|
+
field_name: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
format: 'column-ref',
|
|
16
|
+
description: 'Name of the vector column',
|
|
17
|
+
default: 'embedding'
|
|
17
18
|
},
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
dimensions: {
|
|
20
|
+
type: 'integer',
|
|
21
|
+
description: 'Vector dimensions (e.g. 384, 768, 1536, 3072)',
|
|
22
|
+
default: 768
|
|
22
23
|
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
index_method: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
enum: [
|
|
27
|
+
'hnsw',
|
|
28
|
+
'ivfflat'
|
|
28
29
|
],
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
description: 'Index type for similarity search',
|
|
31
|
+
default: 'hnsw'
|
|
31
32
|
},
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
metric: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
enum: [
|
|
36
|
+
'cosine',
|
|
37
|
+
'l2',
|
|
38
|
+
'ip'
|
|
38
39
|
],
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
description: 'Distance metric (cosine, l2, ip)',
|
|
41
|
+
default: 'cosine'
|
|
41
42
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
index_options: {
|
|
44
|
+
type: 'object',
|
|
45
|
+
description: 'Index-specific options. HNSW: {m, ef_construction}. IVFFlat: {lists}.',
|
|
46
|
+
default: {}
|
|
46
47
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
include_stale_field: {
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
description: 'When stale_strategy is column, adds an embedding_stale boolean field',
|
|
51
|
+
default: true
|
|
51
52
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
source_fields: {
|
|
54
|
+
type: 'array',
|
|
55
|
+
items: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
format: 'column-ref'
|
|
56
58
|
},
|
|
57
|
-
|
|
59
|
+
description: 'Column names that feed the embedding. Used by stale trigger to detect content changes.'
|
|
58
60
|
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
enqueue_job: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
description: 'Auto-create trigger that enqueues embedding generation jobs',
|
|
64
|
+
default: true
|
|
63
65
|
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
job_task_name: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'Task identifier for the job queue',
|
|
69
|
+
default: 'generate_embedding'
|
|
68
70
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
stale_strategy: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
enum: [
|
|
74
|
+
'column',
|
|
75
|
+
'null',
|
|
76
|
+
'hash'
|
|
75
77
|
],
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
description: 'Strategy for tracking embedding staleness. column: embedding_stale boolean. null: set embedding to NULL. hash: md5 hash of source fields.',
|
|
79
|
+
default: 'column'
|
|
78
80
|
},
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
chunks: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
description: 'Chunking configuration for long-text embedding. Creates an embedding_chunks record that drives automatic text splitting and per-chunk embedding. Omit to skip chunking.',
|
|
84
|
+
properties: {
|
|
85
|
+
content_field_name: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
format: 'column-ref',
|
|
88
|
+
description: 'Name of the text content column in the chunks table',
|
|
89
|
+
default: 'content'
|
|
87
90
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
chunk_size: {
|
|
92
|
+
type: 'integer',
|
|
93
|
+
description: 'Maximum number of characters per chunk',
|
|
94
|
+
default: 1000
|
|
92
95
|
},
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
chunk_overlap: {
|
|
97
|
+
type: 'integer',
|
|
98
|
+
description: 'Number of overlapping characters between consecutive chunks',
|
|
99
|
+
default: 200
|
|
97
100
|
},
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
chunk_strategy: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
enum: [
|
|
104
|
+
'fixed',
|
|
105
|
+
'sentence',
|
|
106
|
+
'paragraph',
|
|
107
|
+
'semantic'
|
|
105
108
|
],
|
|
106
|
-
|
|
107
|
-
|
|
109
|
+
description: 'Strategy for splitting text into chunks',
|
|
110
|
+
default: 'fixed'
|
|
108
111
|
},
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
metadata_fields: {
|
|
113
|
+
type: 'object',
|
|
114
|
+
description: 'Metadata fields from parent to copy into chunks'
|
|
112
115
|
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
enqueue_chunking_job: {
|
|
117
|
+
type: 'boolean',
|
|
118
|
+
description: 'Whether to auto-enqueue a chunking job on insert/update',
|
|
119
|
+
default: true
|
|
117
120
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
chunking_task_name: {
|
|
122
|
+
type: 'string',
|
|
123
|
+
description: 'Task identifier for the chunking job queue',
|
|
124
|
+
default: 'generate_chunks'
|
|
122
125
|
}
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
tags: [
|
|
131
|
+
'embedding',
|
|
132
|
+
'vector',
|
|
133
|
+
'ai',
|
|
134
|
+
'schema'
|
|
132
135
|
]
|
|
133
136
|
};
|