aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/resources/schema/common.rnc
blob: 2f3b10742f39dbfd5de1e68ed384d7c5332fa173 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
service.attlist &= attribute hostalias { xsd:NCName }
service.attlist &= attribute baseport { xsd:unsignedShort }?
service.attlist &= attribute jvm-options { text }? # Remove in Vespa 9
service.attlist &= attribute jvm-gc-options { text }? # Remove in Vespa 9
# preload is for internal use only
service.attlist &= attribute preload { text }?

anyElement = element * {
   (attribute * { text }
    | text
    | anyElement)*
}

# Valid qualified java class name. See http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.8
JavaId = xsd:string { pattern = "([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*" }

Nodes = element nodes {
    attribute count { xsd:positiveInteger | xsd:string } &
    attribute flavor { xsd:string }? &
    attribute docker-image { xsd:string }? &
    Resources?
}

Resources = element resources {
    attribute vcpu { xsd:double { minExclusive = "0.0" } | xsd:string }? &
    attribute memory { xsd:string }? &
    attribute disk { xsd:string }? &
    attribute disk-speed { xsd:string }? &
    attribute storage-type { xsd:string }? &
    attribute architecture { xsd:string }? &
    GpuResources?
}

GpuResources = element gpu {
  attribute count { xsd:positiveInteger } &
  attribute memory { xsd:string }
}

OptionalDedicatedNodes = element nodes {
    attribute count { xsd:positiveInteger | xsd:string } &
    attribute flavor { xsd:string }? &
    attribute required { xsd:boolean }? &
    attribute docker-image { xsd:string }? &
    attribute dedicated { xsd:boolean }? &
    attribute exclusive { xsd:boolean }? &
    Resources?
}

GenericConfig = element config {
    attribute name { text },
    attribute version { text }?,
    anyElement*
}

ModelReference =
    attribute model-id { xsd:string }? &
    attribute path { xsd:string }? &
    attribute url { xsd:string }?

ComponentSpec =
    ( attribute id { xsd:Name | JavaId } | attribute idref { xsd:Name } | attribute ident { xsd:Name } )

ComponentId =
    ComponentSpec

BundleSpec =
    attribute class { xsd:Name | JavaId }? &
    attribute bundle { xsd:Name }?

Component = element component {
   (ComponentDefinition | TypedComponentDefinition)
}

ComponentDefinition =
   ComponentId &
   BundleSpec &
   GenericConfig* &
   Component*

TypedComponentDefinition =
   attribute id { xsd:Name } &
   (HuggingFaceEmbedder | HuggingFaceTokenizer | BertBaseEmbedder | ColBertEmbedder) &
   GenericConfig* &
   Component*

HuggingFaceEmbedder =
   attribute type { "hugging-face-embedder" } &
   element transformer-model { ModelReference } &
   element tokenizer-model { ModelReference }? &
   element max-tokens { xsd:positiveInteger }? &
   element transformer-input-ids { xsd:string }? &
   element transformer-attention-mask { xsd:string }? &
   element transformer-token-type-ids { xsd:string }? &
   element transformer-output { xsd:string }? &
   element normalize { xsd:boolean }? &
   OnnxModelExecutionParams &
   EmbedderPoolingStrategy

HuggingFaceTokenizer =
    attribute type { "hugging-face-tokenizer" } &
    element model { attribute language { xsd:string }? & ModelReference }+

BertBaseEmbedder =
    attribute type { "bert-embedder" } &
    element transformer-model { ModelReference } &
    element tokenizer-vocab { ModelReference } &
    element max-tokens { xsd:nonNegativeInteger }? &
    element transformer-input-ids { xsd:string }? &
    element transformer-attention-mask { xsd:string }? &
    element transformer-token-type-ids { xsd:string }? &
    element transformer-output { xsd:string }? &
    StartOfSequence &
    EndOfSequence &
    OnnxModelExecutionParams &
    EmbedderPoolingStrategy


ColBertEmbedder =
   attribute type { "colbert-embedder" } &
   element transformer-model { ModelReference } &
   element tokenizer-model { ModelReference }? &
   element max-tokens { xsd:positiveInteger }? &
   element max-query-tokens { xsd:positiveInteger }? &
   element max-document-tokens { xsd:positiveInteger }? &
   element transformer-mask-token { xsd:integer }? &
   element transformer-input-ids { xsd:string }? &
   element transformer-attention-mask { xsd:string }? &
   element transformer-token-type-ids { xsd:string }? &
   element transformer-output { xsd:string }? &
   element normalize { xsd:boolean }? &
   OnnxModelExecutionParams &
   StartOfSequence &
   EndOfSequence

OnnxModelExecutionParams =
    element onnx-execution-mode { "parallel" | "sequential" }? &
    element onnx-interop-threads { xsd:integer }? &
    element onnx-intraop-threads { xsd:integer }? &
    element onnx-gpu-device { xsd:integer }?

EmbedderPoolingStrategy = element pooling-strategy { "cls" | "mean" }?

StartOfSequence = element transformer-start-sequence-token { xsd:integer }?
EndOfSequence = element transformer-end-sequence-token { xsd:integer }?