summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/resources/schema/common.rnc
blob: e130bed0297e51d0fd228591b4d540d479bcd121 (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
# Copyright Yahoo. 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) &
   GenericConfig* &
   Component*

HuggingFaceEmbedder =
   attribute type { "hugging-face-embedder" } &
   element transformer-model { ModelReference } &
   element tokenizer-model { 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 }? &
   element normalize { xsd:boolean }? &
   OnnxModelExecutionParams &
   EmbedderPoolingStrategy

HuggingFaceTokenizer =
    attribute type { "hugging-face-tokenizer" } &
    element model { attribute language { xsd:string }? & ModelReference }+ &
    element special-tokens { xsd:boolean }? &
    element max-length { xsd:integer }? &
    element truncation { xsd:boolean }? &
    element padding { xsd:boolean }?

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 }? &
    element transformer-start-sequence-token { xsd:integer }? &
    element transformer-end-sequence-token { xsd:integer }? &
    OnnxModelExecutionParams &
    EmbedderPoolingStrategy

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" }?