genai-lite 0.8.2 → 0.9.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/LICENSE +21 -21
- package/README.md +210 -207
- package/dist/adapters/image/GenaiElectronImageAdapter.d.ts +1 -0
- package/dist/adapters/image/GenaiElectronImageAdapter.js +5 -5
- package/dist/adapters/image/OpenAIImageAdapter.d.ts +1 -0
- package/dist/adapters/image/OpenAIImageAdapter.js +4 -4
- package/dist/config/llm-presets.json +24 -0
- package/dist/image/ImageService.js +2 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +6 -1
- package/dist/llm/LLMService.d.ts +30 -1
- package/dist/llm/LLMService.js +43 -5
- package/dist/llm/clients/AnthropicClientAdapter.d.ts +6 -2
- package/dist/llm/clients/AnthropicClientAdapter.js +26 -11
- package/dist/llm/clients/GeminiClientAdapter.d.ts +6 -2
- package/dist/llm/clients/GeminiClientAdapter.js +21 -9
- package/dist/llm/clients/LlamaCppClientAdapter.d.ts +8 -4
- package/dist/llm/clients/LlamaCppClientAdapter.js +131 -28
- package/dist/llm/clients/MistralClientAdapter.d.ts +6 -2
- package/dist/llm/clients/MistralClientAdapter.js +22 -11
- package/dist/llm/clients/MockClientAdapter.d.ts +2 -2
- package/dist/llm/clients/MockClientAdapter.js +36 -19
- package/dist/llm/clients/OpenAIClientAdapter.d.ts +6 -2
- package/dist/llm/clients/OpenAIClientAdapter.js +33 -9
- package/dist/llm/clients/OpenRouterClientAdapter.d.ts +6 -2
- package/dist/llm/clients/OpenRouterClientAdapter.js +87 -16
- package/dist/llm/clients/types.d.ts +18 -1
- package/dist/llm/clients/types.js +4 -0
- package/dist/llm/config.d.ts +9 -2
- package/dist/llm/config.js +697 -33
- package/dist/llm/services/ModelResolver.d.ts +6 -0
- package/dist/llm/services/ModelResolver.js +57 -17
- package/dist/llm/services/RequestValidator.d.ts +8 -0
- package/dist/llm/services/RequestValidator.js +9 -2
- package/dist/llm/services/SettingsManager.d.ts +1 -1
- package/dist/llm/services/SettingsManager.js +92 -4
- package/dist/llm/types.d.ts +127 -0
- package/dist/prompting/index.d.ts +1 -1
- package/dist/prompting/index.js +2 -1
- package/dist/prompting/parser.d.ts +23 -0
- package/dist/prompting/parser.js +33 -0
- package/dist/shared/adapters/errorUtils.d.ts +15 -0
- package/dist/shared/adapters/errorUtils.js +69 -1
- package/dist/shared/adapters/logprobsUtils.d.ts +13 -0
- package/dist/shared/adapters/logprobsUtils.js +33 -0
- package/dist/shared/services/AdapterRegistry.js +3 -1
- package/dist/shared/services/withRetry.d.ts +50 -0
- package/dist/shared/services/withRetry.js +78 -0
- package/dist/types/image.d.ts +2 -0
- package/package.json +59 -59
- package/src/config/image-presets.json +212 -212
- package/src/config/llm-presets.json +623 -599
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "openai-gpt-image-1-mini-default",
|
|
4
|
-
"displayName": "OpenAI - GPT-Image 1 Mini",
|
|
5
|
-
"description": "Fast and efficient image generation with GPT-Image (32K char prompts)",
|
|
6
|
-
"providerId": "openai-images",
|
|
7
|
-
"modelId": "gpt-image-1-mini",
|
|
8
|
-
"settings": {
|
|
9
|
-
"width": 1024,
|
|
10
|
-
"height": 1024,
|
|
11
|
-
"quality": "auto",
|
|
12
|
-
"responseFormat": "buffer",
|
|
13
|
-
"openai": {
|
|
14
|
-
"outputFormat": "png",
|
|
15
|
-
"background": "auto",
|
|
16
|
-
"moderation": "auto"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": "openai-gpt-image-1-quality",
|
|
22
|
-
"displayName": "OpenAI - GPT-Image 1 (High Quality)",
|
|
23
|
-
"description": "Highest quality OpenAI image model with advanced features (32K char prompts)",
|
|
24
|
-
"providerId": "openai-images",
|
|
25
|
-
"modelId": "gpt-image-1",
|
|
26
|
-
"settings": {
|
|
27
|
-
"width": 1024,
|
|
28
|
-
"height": 1024,
|
|
29
|
-
"quality": "high",
|
|
30
|
-
"responseFormat": "buffer",
|
|
31
|
-
"openai": {
|
|
32
|
-
"outputFormat": "png",
|
|
33
|
-
"background": "auto",
|
|
34
|
-
"moderation": "auto"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"id": "openai-dalle-3-hd",
|
|
40
|
-
"displayName": "OpenAI - DALL-E 3 HD",
|
|
41
|
-
"description": "High-quality DALL-E 3 with vivid style (4K char prompts)",
|
|
42
|
-
"providerId": "openai-images",
|
|
43
|
-
"modelId": "dall-e-3",
|
|
44
|
-
"settings": {
|
|
45
|
-
"width": 1024,
|
|
46
|
-
"height": 1024,
|
|
47
|
-
"quality": "hd",
|
|
48
|
-
"style": "vivid",
|
|
49
|
-
"responseFormat": "buffer"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"id": "openai-dalle-3-natural",
|
|
54
|
-
"displayName": "OpenAI - DALL-E 3 Natural",
|
|
55
|
-
"description": "DALL-E 3 with natural style for realistic photographs (4K char prompts)",
|
|
56
|
-
"providerId": "openai-images",
|
|
57
|
-
"modelId": "dall-e-3",
|
|
58
|
-
"settings": {
|
|
59
|
-
"width": 1024,
|
|
60
|
-
"height": 1024,
|
|
61
|
-
"quality": "standard",
|
|
62
|
-
"style": "natural",
|
|
63
|
-
"responseFormat": "buffer"
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"id": "openai-dalle-2-default",
|
|
68
|
-
"displayName": "OpenAI - DALL-E 2",
|
|
69
|
-
"description": "Cost-effective DALL-E 2 generation (1K char prompts)",
|
|
70
|
-
"providerId": "openai-images",
|
|
71
|
-
"modelId": "dall-e-2",
|
|
72
|
-
"settings": {
|
|
73
|
-
"width": 1024,
|
|
74
|
-
"height": 1024,
|
|
75
|
-
"quality": "standard",
|
|
76
|
-
"responseFormat": "buffer"
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"id": "openai-dalle-2-fast",
|
|
81
|
-
"displayName": "OpenAI - DALL-E 2 Fast",
|
|
82
|
-
"description": "Rapid prototyping with smaller image size (1K char prompts)",
|
|
83
|
-
"providerId": "openai-images",
|
|
84
|
-
"modelId": "dall-e-2",
|
|
85
|
-
"settings": {
|
|
86
|
-
"width": 512,
|
|
87
|
-
"height": 512,
|
|
88
|
-
"quality": "standard",
|
|
89
|
-
"responseFormat": "buffer"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"id": "genai-electron-sdxl-quality",
|
|
94
|
-
"displayName": "Local - SDXL Quality",
|
|
95
|
-
"description": "High-quality SDXL generation for final production images",
|
|
96
|
-
"providerId": "genai-electron-images",
|
|
97
|
-
"modelId": "stable-diffusion",
|
|
98
|
-
"settings": {
|
|
99
|
-
"width": 1024,
|
|
100
|
-
"height": 1024,
|
|
101
|
-
"responseFormat": "buffer",
|
|
102
|
-
"diffusion": {
|
|
103
|
-
"steps": 30,
|
|
104
|
-
"cfgScale": 7.5,
|
|
105
|
-
"sampler": "dpm++2m"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
"id": "genai-electron-sdxl-balanced",
|
|
111
|
-
"displayName": "Local - SDXL Balanced",
|
|
112
|
-
"description": "Balanced quality and speed for general use",
|
|
113
|
-
"providerId": "genai-electron-images",
|
|
114
|
-
"modelId": "stable-diffusion",
|
|
115
|
-
"settings": {
|
|
116
|
-
"width": 768,
|
|
117
|
-
"height": 768,
|
|
118
|
-
"responseFormat": "buffer",
|
|
119
|
-
"diffusion": {
|
|
120
|
-
"steps": 20,
|
|
121
|
-
"cfgScale": 7.0,
|
|
122
|
-
"sampler": "euler_a"
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
"id": "genai-electron-sdxl-fast",
|
|
128
|
-
"displayName": "Local - SDXL Fast",
|
|
129
|
-
"description": "Quick iterations with reduced steps",
|
|
130
|
-
"providerId": "genai-electron-images",
|
|
131
|
-
"modelId": "stable-diffusion",
|
|
132
|
-
"settings": {
|
|
133
|
-
"width": 512,
|
|
134
|
-
"height": 512,
|
|
135
|
-
"responseFormat": "buffer",
|
|
136
|
-
"diffusion": {
|
|
137
|
-
"steps": 15,
|
|
138
|
-
"cfgScale": 6.5,
|
|
139
|
-
"sampler": "euler_a"
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"id": "genai-electron-sdxl-portrait",
|
|
145
|
-
"displayName": "Local - SDXL Portrait",
|
|
146
|
-
"description": "Portrait-oriented image generation",
|
|
147
|
-
"providerId": "genai-electron-images",
|
|
148
|
-
"modelId": "stable-diffusion",
|
|
149
|
-
"settings": {
|
|
150
|
-
"width": 768,
|
|
151
|
-
"height": 1024,
|
|
152
|
-
"responseFormat": "buffer",
|
|
153
|
-
"diffusion": {
|
|
154
|
-
"steps": 20,
|
|
155
|
-
"cfgScale": 7.5,
|
|
156
|
-
"sampler": "dpm++2m"
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"id": "genai-electron-sdxl-turbo",
|
|
162
|
-
"displayName": "Local - SDXL Turbo",
|
|
163
|
-
"description": "Real-time generation with SDXL Turbo (optimal at 512x512, 1-4 steps)",
|
|
164
|
-
"providerId": "genai-electron-images",
|
|
165
|
-
"modelId": "stable-diffusion",
|
|
166
|
-
"settings": {
|
|
167
|
-
"width": 512,
|
|
168
|
-
"height": 512,
|
|
169
|
-
"responseFormat": "buffer",
|
|
170
|
-
"diffusion": {
|
|
171
|
-
"steps": 4,
|
|
172
|
-
"cfgScale": 1.0,
|
|
173
|
-
"sampler": "euler_a"
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
"id": "genai-electron-sdxl-lightning",
|
|
179
|
-
"displayName": "Local - SDXL Lightning (Large)",
|
|
180
|
-
"displayName": "Local - SDXL Lightning (Large)",
|
|
181
|
-
"description": "Lightning-fast generation with quality (trained at 1024x1024, 2-8 steps)",
|
|
182
|
-
"providerId": "genai-electron-images",
|
|
183
|
-
"modelId": "stable-diffusion",
|
|
184
|
-
"settings": {
|
|
185
|
-
"width": 1024,
|
|
186
|
-
"height": 1024,
|
|
187
|
-
"responseFormat": "buffer",
|
|
188
|
-
"diffusion": {
|
|
189
|
-
"steps": 8,
|
|
190
|
-
"cfgScale": 1.5,
|
|
191
|
-
"sampler": "euler_a"
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
"id": "genai-electron-sdxl-lightning-medium",
|
|
197
|
-
"displayName": "Local - SDXL Lightning (Medium)",
|
|
198
|
-
"description": "Lightning-fast generation at medium size (trained at 1024x1024, 2-8 steps)",
|
|
199
|
-
"providerId": "genai-electron-images",
|
|
200
|
-
"modelId": "stable-diffusion",
|
|
201
|
-
"settings": {
|
|
202
|
-
"width": 768,
|
|
203
|
-
"height": 768,
|
|
204
|
-
"responseFormat": "buffer",
|
|
205
|
-
"diffusion": {
|
|
206
|
-
"steps": 8,
|
|
207
|
-
"cfgScale": 1.5,
|
|
208
|
-
"sampler": "euler_a"
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
]
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "openai-gpt-image-1-mini-default",
|
|
4
|
+
"displayName": "OpenAI - GPT-Image 1 Mini",
|
|
5
|
+
"description": "Fast and efficient image generation with GPT-Image (32K char prompts)",
|
|
6
|
+
"providerId": "openai-images",
|
|
7
|
+
"modelId": "gpt-image-1-mini",
|
|
8
|
+
"settings": {
|
|
9
|
+
"width": 1024,
|
|
10
|
+
"height": 1024,
|
|
11
|
+
"quality": "auto",
|
|
12
|
+
"responseFormat": "buffer",
|
|
13
|
+
"openai": {
|
|
14
|
+
"outputFormat": "png",
|
|
15
|
+
"background": "auto",
|
|
16
|
+
"moderation": "auto"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "openai-gpt-image-1-quality",
|
|
22
|
+
"displayName": "OpenAI - GPT-Image 1 (High Quality)",
|
|
23
|
+
"description": "Highest quality OpenAI image model with advanced features (32K char prompts)",
|
|
24
|
+
"providerId": "openai-images",
|
|
25
|
+
"modelId": "gpt-image-1",
|
|
26
|
+
"settings": {
|
|
27
|
+
"width": 1024,
|
|
28
|
+
"height": 1024,
|
|
29
|
+
"quality": "high",
|
|
30
|
+
"responseFormat": "buffer",
|
|
31
|
+
"openai": {
|
|
32
|
+
"outputFormat": "png",
|
|
33
|
+
"background": "auto",
|
|
34
|
+
"moderation": "auto"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "openai-dalle-3-hd",
|
|
40
|
+
"displayName": "OpenAI - DALL-E 3 HD",
|
|
41
|
+
"description": "High-quality DALL-E 3 with vivid style (4K char prompts)",
|
|
42
|
+
"providerId": "openai-images",
|
|
43
|
+
"modelId": "dall-e-3",
|
|
44
|
+
"settings": {
|
|
45
|
+
"width": 1024,
|
|
46
|
+
"height": 1024,
|
|
47
|
+
"quality": "hd",
|
|
48
|
+
"style": "vivid",
|
|
49
|
+
"responseFormat": "buffer"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "openai-dalle-3-natural",
|
|
54
|
+
"displayName": "OpenAI - DALL-E 3 Natural",
|
|
55
|
+
"description": "DALL-E 3 with natural style for realistic photographs (4K char prompts)",
|
|
56
|
+
"providerId": "openai-images",
|
|
57
|
+
"modelId": "dall-e-3",
|
|
58
|
+
"settings": {
|
|
59
|
+
"width": 1024,
|
|
60
|
+
"height": 1024,
|
|
61
|
+
"quality": "standard",
|
|
62
|
+
"style": "natural",
|
|
63
|
+
"responseFormat": "buffer"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "openai-dalle-2-default",
|
|
68
|
+
"displayName": "OpenAI - DALL-E 2",
|
|
69
|
+
"description": "Cost-effective DALL-E 2 generation (1K char prompts)",
|
|
70
|
+
"providerId": "openai-images",
|
|
71
|
+
"modelId": "dall-e-2",
|
|
72
|
+
"settings": {
|
|
73
|
+
"width": 1024,
|
|
74
|
+
"height": 1024,
|
|
75
|
+
"quality": "standard",
|
|
76
|
+
"responseFormat": "buffer"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "openai-dalle-2-fast",
|
|
81
|
+
"displayName": "OpenAI - DALL-E 2 Fast",
|
|
82
|
+
"description": "Rapid prototyping with smaller image size (1K char prompts)",
|
|
83
|
+
"providerId": "openai-images",
|
|
84
|
+
"modelId": "dall-e-2",
|
|
85
|
+
"settings": {
|
|
86
|
+
"width": 512,
|
|
87
|
+
"height": 512,
|
|
88
|
+
"quality": "standard",
|
|
89
|
+
"responseFormat": "buffer"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "genai-electron-sdxl-quality",
|
|
94
|
+
"displayName": "Local - SDXL Quality",
|
|
95
|
+
"description": "High-quality SDXL generation for final production images",
|
|
96
|
+
"providerId": "genai-electron-images",
|
|
97
|
+
"modelId": "stable-diffusion",
|
|
98
|
+
"settings": {
|
|
99
|
+
"width": 1024,
|
|
100
|
+
"height": 1024,
|
|
101
|
+
"responseFormat": "buffer",
|
|
102
|
+
"diffusion": {
|
|
103
|
+
"steps": 30,
|
|
104
|
+
"cfgScale": 7.5,
|
|
105
|
+
"sampler": "dpm++2m"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "genai-electron-sdxl-balanced",
|
|
111
|
+
"displayName": "Local - SDXL Balanced",
|
|
112
|
+
"description": "Balanced quality and speed for general use",
|
|
113
|
+
"providerId": "genai-electron-images",
|
|
114
|
+
"modelId": "stable-diffusion",
|
|
115
|
+
"settings": {
|
|
116
|
+
"width": 768,
|
|
117
|
+
"height": 768,
|
|
118
|
+
"responseFormat": "buffer",
|
|
119
|
+
"diffusion": {
|
|
120
|
+
"steps": 20,
|
|
121
|
+
"cfgScale": 7.0,
|
|
122
|
+
"sampler": "euler_a"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "genai-electron-sdxl-fast",
|
|
128
|
+
"displayName": "Local - SDXL Fast",
|
|
129
|
+
"description": "Quick iterations with reduced steps",
|
|
130
|
+
"providerId": "genai-electron-images",
|
|
131
|
+
"modelId": "stable-diffusion",
|
|
132
|
+
"settings": {
|
|
133
|
+
"width": 512,
|
|
134
|
+
"height": 512,
|
|
135
|
+
"responseFormat": "buffer",
|
|
136
|
+
"diffusion": {
|
|
137
|
+
"steps": 15,
|
|
138
|
+
"cfgScale": 6.5,
|
|
139
|
+
"sampler": "euler_a"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "genai-electron-sdxl-portrait",
|
|
145
|
+
"displayName": "Local - SDXL Portrait",
|
|
146
|
+
"description": "Portrait-oriented image generation",
|
|
147
|
+
"providerId": "genai-electron-images",
|
|
148
|
+
"modelId": "stable-diffusion",
|
|
149
|
+
"settings": {
|
|
150
|
+
"width": 768,
|
|
151
|
+
"height": 1024,
|
|
152
|
+
"responseFormat": "buffer",
|
|
153
|
+
"diffusion": {
|
|
154
|
+
"steps": 20,
|
|
155
|
+
"cfgScale": 7.5,
|
|
156
|
+
"sampler": "dpm++2m"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "genai-electron-sdxl-turbo",
|
|
162
|
+
"displayName": "Local - SDXL Turbo",
|
|
163
|
+
"description": "Real-time generation with SDXL Turbo (optimal at 512x512, 1-4 steps)",
|
|
164
|
+
"providerId": "genai-electron-images",
|
|
165
|
+
"modelId": "stable-diffusion",
|
|
166
|
+
"settings": {
|
|
167
|
+
"width": 512,
|
|
168
|
+
"height": 512,
|
|
169
|
+
"responseFormat": "buffer",
|
|
170
|
+
"diffusion": {
|
|
171
|
+
"steps": 4,
|
|
172
|
+
"cfgScale": 1.0,
|
|
173
|
+
"sampler": "euler_a"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "genai-electron-sdxl-lightning",
|
|
179
|
+
"displayName": "Local - SDXL Lightning (Large)",
|
|
180
|
+
"displayName": "Local - SDXL Lightning (Large)",
|
|
181
|
+
"description": "Lightning-fast generation with quality (trained at 1024x1024, 2-8 steps)",
|
|
182
|
+
"providerId": "genai-electron-images",
|
|
183
|
+
"modelId": "stable-diffusion",
|
|
184
|
+
"settings": {
|
|
185
|
+
"width": 1024,
|
|
186
|
+
"height": 1024,
|
|
187
|
+
"responseFormat": "buffer",
|
|
188
|
+
"diffusion": {
|
|
189
|
+
"steps": 8,
|
|
190
|
+
"cfgScale": 1.5,
|
|
191
|
+
"sampler": "euler_a"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"id": "genai-electron-sdxl-lightning-medium",
|
|
197
|
+
"displayName": "Local - SDXL Lightning (Medium)",
|
|
198
|
+
"description": "Lightning-fast generation at medium size (trained at 1024x1024, 2-8 steps)",
|
|
199
|
+
"providerId": "genai-electron-images",
|
|
200
|
+
"modelId": "stable-diffusion",
|
|
201
|
+
"settings": {
|
|
202
|
+
"width": 768,
|
|
203
|
+
"height": 768,
|
|
204
|
+
"responseFormat": "buffer",
|
|
205
|
+
"diffusion": {
|
|
206
|
+
"steps": 8,
|
|
207
|
+
"cfgScale": 1.5,
|
|
208
|
+
"sampler": "euler_a"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
]
|