libre-webui 0.12.0 → 0.12.1

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.
Files changed (45) hide show
  1. package/backend/dist/utils/pluginValidation.js +1 -1
  2. package/backend/dist/utils/pluginValidation.js.map +1 -1
  3. package/backend/package.json +5 -7
  4. package/frontend/dist/assets/{index-ONn9VIq7.js → index-CdGZAiI5.js} +4 -4
  5. package/frontend/dist/favicon-dark.png +0 -0
  6. package/frontend/dist/favicon-light.png +0 -0
  7. package/frontend/dist/index.html +3 -3
  8. package/frontend/dist/js/{ArtifactContainer-CqKsiKz0.js → ArtifactContainer-DK1FCylP.js} +1 -1
  9. package/frontend/dist/js/{ArtifactDemoPage-Dd5BjIu2.js → ArtifactDemoPage-CMy7LH8t.js} +1 -1
  10. package/frontend/dist/js/ArtifactSlideOutPanel-DS1K3sQL.js +1 -0
  11. package/frontend/dist/js/ChatPage-RYQ8mcOC.js +16 -0
  12. package/frontend/dist/js/{FirstTimeSetup-DcGhm0H0.js → FirstTimeSetup-Ckdm_Hpv.js} +1 -1
  13. package/frontend/dist/js/{GalleryPage-DNI2Evvf.js → GalleryPage-sQc_lBme.js} +1 -1
  14. package/frontend/dist/js/{LibreClawPage-CmTiROsJ.js → LibreClawPage-DsGFex9f.js} +1 -1
  15. package/frontend/dist/js/{ModelManagerModals-CfvSeNsT.js → ModelManagerModals-m5uCO3SS.js} +1 -1
  16. package/frontend/dist/js/{ModelsPage-CeTGqx4q.js → ModelsPage-CgtfQ2np.js} +2 -2
  17. package/frontend/dist/js/{PersonasPage-BUqu7gJ3.js → PersonasPage-D1Twd9rI.js} +1 -1
  18. package/frontend/dist/js/{RichMessageContent-B0JO8vkR.js → RichMessageContent-BOQDgLTR.js} +1 -1
  19. package/frontend/dist/js/{SettingsModal-B5aJ5vfV.js → SettingsModal-RU_GFjMK.js} +1 -1
  20. package/frontend/dist/js/{UserManagementPage-BqIIWX2M.js → UserManagementPage-BAEOziZX.js} +1 -1
  21. package/frontend/dist/js/{api-CbmZzKBu.js → api-BaWiKZy-.js} +2 -2
  22. package/frontend/dist/js/{ui-vendor-BJAeWL11.js → ui-vendor-njo77ljx.js} +1 -1
  23. package/frontend/dist/js/{useBaseQuery-6OJiOiyu.js → useBaseQuery-C03a5oZt.js} +1 -1
  24. package/frontend/dist/js/useQuery-iKrQD3gp.js +1 -0
  25. package/frontend/dist/logo-dark.png +0 -0
  26. package/frontend/dist/logo-light.png +0 -0
  27. package/frontend/dist/logo.svg +5 -3
  28. package/package.json +4 -11
  29. package/plugins/anthropic.json +7 -9
  30. package/plugins/elevenlabs.json +2 -0
  31. package/plugins/gemini.json +5 -41
  32. package/plugins/github.json +36 -11
  33. package/plugins/groq.json +12 -3
  34. package/plugins/huggingface.json +116 -22
  35. package/plugins/mistral.json +76 -42
  36. package/plugins/openai-tts.json +4 -8
  37. package/plugins/openai.json +6 -103
  38. package/plugins/openrouter.json +136 -138
  39. package/backend/dist/test-encryption.d.ts +0 -2
  40. package/backend/dist/test-encryption.d.ts.map +0 -1
  41. package/backend/dist/test-encryption.js +0 -66
  42. package/backend/dist/test-encryption.js.map +0 -1
  43. package/frontend/dist/js/ArtifactSlideOutPanel-Yc7ttIaY.js +0 -1
  44. package/frontend/dist/js/ChatPage-Cpy7lQ0D.js +0 -16
  45. package/frontend/dist/js/useQuery-DfkI6VAv.js +0 -1
@@ -9,210 +9,184 @@
9
9
  "key_env": "OPENROUTER_API_KEY"
10
10
  },
11
11
  "model_map": [
12
+ "~anthropic/claude-fable-latest",
13
+ "~anthropic/claude-haiku-latest",
14
+ "~anthropic/claude-opus-latest",
15
+ "~anthropic/claude-sonnet-latest",
16
+ "~google/gemini-flash-latest",
17
+ "~google/gemini-pro-latest",
18
+ "~moonshotai/kimi-latest",
19
+ "~openai/gpt-latest",
20
+ "~openai/gpt-mini-latest",
12
21
  "ai21/jamba-large-1.7",
13
- "ai21/jamba-mini-1.7",
14
22
  "aion-labs/aion-1.0",
15
23
  "aion-labs/aion-1.0-mini",
24
+ "aion-labs/aion-2.0",
16
25
  "aion-labs/aion-rp-llama-3.1-8b",
17
- "alfredpros/codellama-7b-instruct-solidity",
18
- "alibaba/tongyi-deepresearch-30b-a3b",
19
- "alibaba/tongyi-deepresearch-30b-a3b:free",
20
- "allenai/olmo-2-0325-32b-instruct",
21
- "allenai/olmo-3-32b-think:free",
22
- "allenai/olmo-3-7b-instruct",
23
- "allenai/olmo-3-7b-think",
24
- "allenai/olmo-3.1-32b-think:free",
25
- "alpindale/goliath-120b",
26
+ "allenai/olmo-3-32b-think",
26
27
  "amazon/nova-2-lite-v1",
27
- "amazon/nova-2-lite-v1:free",
28
28
  "amazon/nova-lite-v1",
29
29
  "amazon/nova-micro-v1",
30
30
  "amazon/nova-premier-v1",
31
31
  "amazon/nova-pro-v1",
32
32
  "anthracite-org/magnum-v4-72b",
33
33
  "anthropic/claude-3-haiku",
34
- "anthropic/claude-3-opus",
35
- "anthropic/claude-3.5-haiku",
36
- "anthropic/claude-3.5-haiku-20241022",
37
- "anthropic/claude-3.5-sonnet",
38
- "anthropic/claude-3.7-sonnet",
39
- "anthropic/claude-3.7-sonnet:thinking",
34
+ "anthropic/claude-fable-5",
40
35
  "anthropic/claude-haiku-4.5",
41
36
  "anthropic/claude-opus-4",
42
37
  "anthropic/claude-opus-4.1",
43
38
  "anthropic/claude-opus-4.5",
39
+ "anthropic/claude-opus-4.6",
40
+ "anthropic/claude-opus-4.7",
41
+ "anthropic/claude-opus-4.7-fast",
42
+ "anthropic/claude-opus-4.8",
43
+ "anthropic/claude-opus-4.8-fast",
44
44
  "anthropic/claude-sonnet-4",
45
45
  "anthropic/claude-sonnet-4.5",
46
+ "anthropic/claude-sonnet-4.6",
47
+ "anthropic/claude-sonnet-5",
46
48
  "arcee-ai/coder-large",
47
- "arcee-ai/maestro-reasoning",
48
- "arcee-ai/spotlight",
49
+ "arcee-ai/trinity-large-thinking",
49
50
  "arcee-ai/trinity-mini",
50
- "arcee-ai/trinity-mini:free",
51
51
  "arcee-ai/virtuoso-large",
52
- "arliai/qwq-32b-arliai-rpr-v1",
53
- "baidu/ernie-4.5-21b-a3b",
54
- "baidu/ernie-4.5-21b-a3b-thinking",
55
- "baidu/ernie-4.5-300b-a47b",
56
- "baidu/ernie-4.5-vl-28b-a3b",
57
52
  "baidu/ernie-4.5-vl-424b-a47b",
53
+ "bytedance-seed/seed-1.6",
54
+ "bytedance-seed/seed-1.6-flash",
55
+ "bytedance-seed/seed-2.0-lite",
56
+ "bytedance-seed/seed-2.0-mini",
58
57
  "bytedance/ui-tars-1.5-7b",
59
58
  "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
60
59
  "cohere/command-a",
61
60
  "cohere/command-r-08-2024",
62
61
  "cohere/command-r-plus-08-2024",
63
62
  "cohere/command-r7b-12-2024",
64
- "deepcogito/cogito-v2-preview-llama-109b-moe",
65
- "deepcogito/cogito-v2-preview-llama-405b",
66
- "deepcogito/cogito-v2-preview-llama-70b",
63
+ "cohere/north-mini-code:free",
67
64
  "deepcogito/cogito-v2.1-671b",
68
65
  "deepseek/deepseek-chat",
69
66
  "deepseek/deepseek-chat-v3-0324",
70
67
  "deepseek/deepseek-chat-v3.1",
71
- "deepseek/deepseek-prover-v2",
72
68
  "deepseek/deepseek-r1",
73
69
  "deepseek/deepseek-r1-0528",
74
- "deepseek/deepseek-r1-0528-qwen3-8b",
75
70
  "deepseek/deepseek-r1-distill-llama-70b",
76
- "deepseek/deepseek-r1-distill-qwen-14b",
77
- "deepseek/deepseek-r1-distill-qwen-32b",
78
71
  "deepseek/deepseek-v3.1-terminus",
79
- "deepseek/deepseek-v3.1-terminus:exacto",
80
72
  "deepseek/deepseek-v3.2",
81
73
  "deepseek/deepseek-v3.2-exp",
82
- "deepseek/deepseek-v3.2-speciale",
83
- "eleutherai/llemma_7b",
84
- "essentialai/rnj-1-instruct",
85
- "google/gemini-2.0-flash-001",
86
- "google/gemini-2.0-flash-exp:free",
87
- "google/gemini-2.0-flash-lite-001",
74
+ "deepseek/deepseek-v4-flash",
75
+ "deepseek/deepseek-v4-pro",
88
76
  "google/gemini-2.5-flash",
77
+ "google/gemini-2.5-flash-image",
89
78
  "google/gemini-2.5-flash-lite",
90
79
  "google/gemini-2.5-flash-lite-preview-09-2025",
91
- "google/gemini-2.5-flash-preview-09-2025",
92
80
  "google/gemini-2.5-pro",
93
81
  "google/gemini-2.5-pro-preview",
94
82
  "google/gemini-2.5-pro-preview-05-06",
95
- "google/gemini-3-pro-preview",
83
+ "google/gemini-3-flash-preview",
84
+ "google/gemini-3-pro-image",
85
+ "google/gemini-3-pro-image-preview",
86
+ "google/gemini-3.1-flash-image",
87
+ "google/gemini-3.1-flash-image-preview",
88
+ "google/gemini-3.1-flash-lite",
89
+ "google/gemini-3.1-flash-lite-image",
90
+ "google/gemini-3.1-flash-lite-preview",
91
+ "google/gemini-3.1-pro-preview",
92
+ "google/gemini-3.1-pro-preview-customtools",
93
+ "google/gemini-3.5-flash",
96
94
  "google/gemma-2-27b-it",
97
- "google/gemma-2-9b-it",
98
95
  "google/gemma-3-12b-it",
99
- "google/gemma-3-12b-it:free",
100
96
  "google/gemma-3-27b-it",
101
- "google/gemma-3-27b-it:free",
102
97
  "google/gemma-3-4b-it",
103
- "google/gemma-3-4b-it:free",
104
- "google/gemma-3n-e2b-it:free",
105
98
  "google/gemma-3n-e4b-it",
106
- "google/gemma-3n-e4b-it:free",
99
+ "google/gemma-4-26b-a4b-it",
100
+ "google/gemma-4-26b-a4b-it:free",
101
+ "google/gemma-4-31b-it",
102
+ "google/gemma-4-31b-it:free",
103
+ "google/lyria-3-clip-preview",
104
+ "google/lyria-3-pro-preview",
107
105
  "gryphe/mythomax-l2-13b",
108
106
  "ibm-granite/granite-4.0-h-micro",
109
- "inception/mercury",
110
- "inception/mercury-coder",
107
+ "ibm-granite/granite-4.1-8b",
108
+ "inception/mercury-2",
109
+ "inclusionai/ling-2.6-1t",
110
+ "inclusionai/ling-2.6-flash",
111
+ "inclusionai/ring-2.6-1t",
111
112
  "inflection/inflection-3-pi",
112
113
  "inflection/inflection-3-productivity",
113
- "kwaipilot/kat-coder-pro:free",
114
- "liquid/lfm-2.2-6b",
115
- "liquid/lfm2-8b-a1b",
114
+ "kwaipilot/kat-coder-pro-v2",
115
+ "liquid/lfm-2-24b-a2b",
116
+ "liquid/lfm-2.5-1.2b-instruct:free",
117
+ "liquid/lfm-2.5-1.2b-thinking:free",
116
118
  "mancer/weaver",
117
- "meituan/longcat-flash-chat",
118
- "meta-llama/llama-3-70b-instruct",
119
119
  "meta-llama/llama-3-8b-instruct",
120
- "meta-llama/llama-3.1-405b",
121
- "meta-llama/llama-3.1-405b-instruct",
122
120
  "meta-llama/llama-3.1-70b-instruct",
123
121
  "meta-llama/llama-3.1-8b-instruct",
124
122
  "meta-llama/llama-3.2-11b-vision-instruct",
125
123
  "meta-llama/llama-3.2-1b-instruct",
126
124
  "meta-llama/llama-3.2-3b-instruct",
127
125
  "meta-llama/llama-3.2-3b-instruct:free",
128
- "meta-llama/llama-3.2-90b-vision-instruct",
129
126
  "meta-llama/llama-3.3-70b-instruct",
130
127
  "meta-llama/llama-3.3-70b-instruct:free",
131
128
  "meta-llama/llama-4-maverick",
132
129
  "meta-llama/llama-4-scout",
133
- "meta-llama/llama-guard-2-8b",
134
- "meta-llama/llama-guard-3-8b",
135
130
  "meta-llama/llama-guard-4-12b",
136
- "microsoft/phi-3-medium-128k-instruct",
137
- "microsoft/phi-3-mini-128k-instruct",
138
- "microsoft/phi-3.5-mini-128k-instruct",
139
131
  "microsoft/phi-4",
140
- "microsoft/phi-4-multimodal-instruct",
141
- "microsoft/phi-4-reasoning-plus",
142
132
  "microsoft/wizardlm-2-8x22b",
143
133
  "minimax/minimax-01",
144
134
  "minimax/minimax-m1",
145
135
  "minimax/minimax-m2",
136
+ "minimax/minimax-m2-her",
137
+ "minimax/minimax-m2.1",
138
+ "minimax/minimax-m2.5",
139
+ "minimax/minimax-m2.7",
140
+ "minimax/minimax-m3",
146
141
  "mistralai/codestral-2508",
147
142
  "mistralai/devstral-2512",
148
- "mistralai/devstral-2512:free",
149
- "mistralai/devstral-medium",
150
- "mistralai/devstral-small",
151
- "mistralai/devstral-small-2505",
152
143
  "mistralai/ministral-14b-2512",
153
- "mistralai/ministral-3b",
154
144
  "mistralai/ministral-3b-2512",
155
- "mistralai/ministral-8b",
156
145
  "mistralai/ministral-8b-2512",
157
- "mistralai/mistral-7b-instruct",
158
- "mistralai/mistral-7b-instruct-v0.1",
159
- "mistralai/mistral-7b-instruct-v0.2",
160
- "mistralai/mistral-7b-instruct-v0.3",
161
- "mistralai/mistral-7b-instruct:free",
162
146
  "mistralai/mistral-large",
163
147
  "mistralai/mistral-large-2407",
164
- "mistralai/mistral-large-2411",
165
148
  "mistralai/mistral-large-2512",
166
149
  "mistralai/mistral-medium-3",
150
+ "mistralai/mistral-medium-3-5",
167
151
  "mistralai/mistral-medium-3.1",
168
152
  "mistralai/mistral-nemo",
169
153
  "mistralai/mistral-saba",
170
154
  "mistralai/mistral-small-24b-instruct-2501",
155
+ "mistralai/mistral-small-2603",
171
156
  "mistralai/mistral-small-3.1-24b-instruct",
172
- "mistralai/mistral-small-3.1-24b-instruct:free",
173
157
  "mistralai/mistral-small-3.2-24b-instruct",
174
- "mistralai/mistral-small-creative",
175
- "mistralai/mistral-tiny",
176
158
  "mistralai/mixtral-8x22b-instruct",
177
- "mistralai/mixtral-8x7b-instruct",
178
- "mistralai/pixtral-12b",
179
- "mistralai/pixtral-large-2411",
180
159
  "mistralai/voxtral-small-24b-2507",
181
- "moonshotai/kimi-dev-72b",
182
160
  "moonshotai/kimi-k2",
183
161
  "moonshotai/kimi-k2-0905",
184
- "moonshotai/kimi-k2-0905:exacto",
185
162
  "moonshotai/kimi-k2-thinking",
186
- "moonshotai/kimi-k2:free",
163
+ "moonshotai/kimi-k2.5",
164
+ "moonshotai/kimi-k2.6",
165
+ "moonshotai/kimi-k2.7-code",
187
166
  "morph/morph-v3-fast",
188
167
  "morph/morph-v3-large",
189
- "neversleep/llama-3.1-lumimaid-8b",
190
- "neversleep/noromaid-20b",
191
- "nex-agi/deepseek-v3.1-nex-n1:free",
192
- "nousresearch/deephermes-3-mistral-24b-preview",
193
- "nousresearch/hermes-2-pro-llama-3-8b",
168
+ "nex-agi/nex-n2-pro",
194
169
  "nousresearch/hermes-3-llama-3.1-405b",
195
170
  "nousresearch/hermes-3-llama-3.1-405b:free",
196
171
  "nousresearch/hermes-3-llama-3.1-70b",
197
172
  "nousresearch/hermes-4-405b",
198
173
  "nousresearch/hermes-4-70b",
199
- "nvidia/llama-3.1-nemotron-70b-instruct",
200
- "nvidia/llama-3.1-nemotron-ultra-253b-v1",
201
174
  "nvidia/llama-3.3-nemotron-super-49b-v1.5",
175
+ "nvidia/nemotron-3-nano-30b-a3b",
202
176
  "nvidia/nemotron-3-nano-30b-a3b:free",
203
- "nvidia/nemotron-nano-12b-v2-vl",
177
+ "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
178
+ "nvidia/nemotron-3-super-120b-a12b",
179
+ "nvidia/nemotron-3-super-120b-a12b:free",
180
+ "nvidia/nemotron-3-ultra-550b-a55b",
181
+ "nvidia/nemotron-3-ultra-550b-a55b:free",
182
+ "nvidia/nemotron-3.5-content-safety:free",
204
183
  "nvidia/nemotron-nano-12b-v2-vl:free",
205
- "nvidia/nemotron-nano-9b-v2",
206
184
  "nvidia/nemotron-nano-9b-v2:free",
207
- "openai/chatgpt-4o-latest",
208
- "openai/codex-mini",
209
185
  "openai/gpt-3.5-turbo",
210
186
  "openai/gpt-3.5-turbo-0613",
211
187
  "openai/gpt-3.5-turbo-16k",
212
188
  "openai/gpt-3.5-turbo-instruct",
213
189
  "openai/gpt-4",
214
- "openai/gpt-4-0314",
215
- "openai/gpt-4-1106-preview",
216
190
  "openai/gpt-4-turbo",
217
191
  "openai/gpt-4-turbo-preview",
218
192
  "openai/gpt-4.1",
@@ -222,15 +196,15 @@
222
196
  "openai/gpt-4o-2024-05-13",
223
197
  "openai/gpt-4o-2024-08-06",
224
198
  "openai/gpt-4o-2024-11-20",
225
- "openai/gpt-4o-audio-preview",
226
199
  "openai/gpt-4o-mini",
227
200
  "openai/gpt-4o-mini-2024-07-18",
228
201
  "openai/gpt-4o-mini-search-preview",
229
202
  "openai/gpt-4o-search-preview",
230
- "openai/gpt-4o:extended",
231
203
  "openai/gpt-5",
232
204
  "openai/gpt-5-chat",
233
205
  "openai/gpt-5-codex",
206
+ "openai/gpt-5-image",
207
+ "openai/gpt-5-image-mini",
234
208
  "openai/gpt-5-mini",
235
209
  "openai/gpt-5-nano",
236
210
  "openai/gpt-5-pro",
@@ -241,9 +215,21 @@
241
215
  "openai/gpt-5.1-codex-mini",
242
216
  "openai/gpt-5.2",
243
217
  "openai/gpt-5.2-chat",
218
+ "openai/gpt-5.2-codex",
244
219
  "openai/gpt-5.2-pro",
220
+ "openai/gpt-5.3-chat",
221
+ "openai/gpt-5.3-codex",
222
+ "openai/gpt-5.4",
223
+ "openai/gpt-5.4-image-2",
224
+ "openai/gpt-5.4-mini",
225
+ "openai/gpt-5.4-nano",
226
+ "openai/gpt-5.4-pro",
227
+ "openai/gpt-5.5",
228
+ "openai/gpt-5.5-pro",
229
+ "openai/gpt-audio",
230
+ "openai/gpt-audio-mini",
231
+ "openai/gpt-chat-latest",
245
232
  "openai/gpt-oss-120b",
246
- "openai/gpt-oss-120b:exacto",
247
233
  "openai/gpt-oss-120b:free",
248
234
  "openai/gpt-oss-20b",
249
235
  "openai/gpt-oss-20b:free",
@@ -258,97 +244,109 @@
258
244
  "openai/o4-mini",
259
245
  "openai/o4-mini-deep-research",
260
246
  "openai/o4-mini-high",
261
- "opengvlab/internvl3-78b",
262
247
  "openrouter/auto",
263
248
  "openrouter/bodybuilder",
249
+ "openrouter/free",
250
+ "openrouter/fusion",
251
+ "openrouter/pareto-code",
252
+ "perceptron/perceptron-mk1",
264
253
  "perplexity/sonar",
265
254
  "perplexity/sonar-deep-research",
266
255
  "perplexity/sonar-pro",
267
256
  "perplexity/sonar-pro-search",
268
- "perplexity/sonar-reasoning",
269
257
  "perplexity/sonar-reasoning-pro",
270
- "prime-intellect/intellect-3",
258
+ "poolside/laguna-m.1",
259
+ "poolside/laguna-m.1:free",
260
+ "poolside/laguna-xs.2",
261
+ "poolside/laguna-xs.2:free",
271
262
  "qwen/qwen-2.5-72b-instruct",
272
263
  "qwen/qwen-2.5-7b-instruct",
273
264
  "qwen/qwen-2.5-coder-32b-instruct",
274
- "qwen/qwen-2.5-vl-7b-instruct",
275
- "qwen/qwen-max",
276
265
  "qwen/qwen-plus",
277
266
  "qwen/qwen-plus-2025-07-28",
278
267
  "qwen/qwen-plus-2025-07-28:thinking",
279
- "qwen/qwen-turbo",
280
- "qwen/qwen-vl-max",
281
- "qwen/qwen-vl-plus",
282
- "qwen/qwen2.5-coder-7b-instruct",
283
- "qwen/qwen2.5-vl-32b-instruct",
284
268
  "qwen/qwen2.5-vl-72b-instruct",
285
269
  "qwen/qwen3-14b",
286
270
  "qwen/qwen3-235b-a22b",
287
271
  "qwen/qwen3-235b-a22b-2507",
288
272
  "qwen/qwen3-235b-a22b-thinking-2507",
289
- "qwen/qwen3-235b-a22b:free",
290
273
  "qwen/qwen3-30b-a3b",
291
274
  "qwen/qwen3-30b-a3b-instruct-2507",
292
275
  "qwen/qwen3-30b-a3b-thinking-2507",
293
276
  "qwen/qwen3-32b",
294
- "qwen/qwen3-4b:free",
295
277
  "qwen/qwen3-8b",
296
278
  "qwen/qwen3-coder",
297
279
  "qwen/qwen3-coder-30b-a3b-instruct",
298
280
  "qwen/qwen3-coder-flash",
281
+ "qwen/qwen3-coder-next",
299
282
  "qwen/qwen3-coder-plus",
300
- "qwen/qwen3-coder:exacto",
301
283
  "qwen/qwen3-coder:free",
302
284
  "qwen/qwen3-max",
285
+ "qwen/qwen3-max-thinking",
303
286
  "qwen/qwen3-next-80b-a3b-instruct",
287
+ "qwen/qwen3-next-80b-a3b-instruct:free",
304
288
  "qwen/qwen3-next-80b-a3b-thinking",
305
289
  "qwen/qwen3-vl-235b-a22b-instruct",
306
290
  "qwen/qwen3-vl-235b-a22b-thinking",
307
291
  "qwen/qwen3-vl-30b-a3b-instruct",
308
292
  "qwen/qwen3-vl-30b-a3b-thinking",
293
+ "qwen/qwen3-vl-32b-instruct",
309
294
  "qwen/qwen3-vl-8b-instruct",
310
295
  "qwen/qwen3-vl-8b-thinking",
311
- "qwen/qwq-32b",
312
- "raifle/sorcererlm-8x22b",
296
+ "qwen/qwen3.5-122b-a10b",
297
+ "qwen/qwen3.5-27b",
298
+ "qwen/qwen3.5-35b-a3b",
299
+ "qwen/qwen3.5-397b-a17b",
300
+ "qwen/qwen3.5-9b",
301
+ "qwen/qwen3.5-flash-02-23",
302
+ "qwen/qwen3.5-plus-02-15",
303
+ "qwen/qwen3.5-plus-20260420",
304
+ "qwen/qwen3.6-27b",
305
+ "qwen/qwen3.6-35b-a3b",
306
+ "qwen/qwen3.6-flash",
307
+ "qwen/qwen3.6-max-preview",
308
+ "qwen/qwen3.6-plus",
309
+ "qwen/qwen3.7-max",
310
+ "qwen/qwen3.7-plus",
311
+ "rekaai/reka-edge",
312
+ "rekaai/reka-flash-3",
313
313
  "relace/relace-apply-3",
314
314
  "relace/relace-search",
315
- "sao10k/l3-euryale-70b",
315
+ "sakana/fugu-ultra",
316
316
  "sao10k/l3-lunaris-8b",
317
317
  "sao10k/l3.1-70b-hanami-x1",
318
318
  "sao10k/l3.1-euryale-70b",
319
319
  "sao10k/l3.3-euryale-70b",
320
- "stepfun-ai/step3",
320
+ "stepfun/step-3.5-flash",
321
+ "stepfun/step-3.7-flash",
321
322
  "switchpoint/router",
322
323
  "tencent/hunyuan-a13b-instruct",
324
+ "tencent/hy3-preview",
323
325
  "thedrummer/cydonia-24b-v4.1",
324
326
  "thedrummer/rocinante-12b",
325
327
  "thedrummer/skyfall-36b-v2",
326
328
  "thedrummer/unslopnemo-12b",
327
- "thudm/glm-4.1v-9b-thinking",
328
- "tngtech/deepseek-r1t-chimera",
329
- "tngtech/deepseek-r1t-chimera:free",
330
- "tngtech/deepseek-r1t2-chimera",
331
- "tngtech/deepseek-r1t2-chimera:free",
332
- "tngtech/tng-r1t-chimera",
333
- "tngtech/tng-r1t-chimera:free",
334
329
  "undi95/remm-slerp-l2-13b",
335
- "x-ai/grok-3",
336
- "x-ai/grok-3-beta",
337
- "x-ai/grok-3-mini",
338
- "x-ai/grok-3-mini-beta",
339
- "x-ai/grok-4",
340
- "x-ai/grok-4-fast",
341
- "x-ai/grok-4.1-fast",
342
- "x-ai/grok-code-fast-1",
343
- "xiaomi/mimo-v2-flash:free",
344
- "z-ai/glm-4-32b",
330
+ "upstage/solar-pro-3",
331
+ "writer/palmyra-x5",
332
+ "x-ai/grok-4.20",
333
+ "x-ai/grok-4.20-multi-agent",
334
+ "x-ai/grok-4.3",
335
+ "x-ai/grok-build-0.1",
336
+ "xiaomi/mimo-v2.5",
337
+ "xiaomi/mimo-v2.5-pro",
345
338
  "z-ai/glm-4.5",
346
339
  "z-ai/glm-4.5-air",
347
- "z-ai/glm-4.5-air:free",
348
340
  "z-ai/glm-4.5v",
349
341
  "z-ai/glm-4.6",
350
- "z-ai/glm-4.6:exacto",
351
- "z-ai/glm-4.6v"
342
+ "z-ai/glm-4.6v",
343
+ "z-ai/glm-4.7",
344
+ "z-ai/glm-4.7-flash",
345
+ "z-ai/glm-5",
346
+ "z-ai/glm-5-turbo",
347
+ "z-ai/glm-5.1",
348
+ "z-ai/glm-5.2",
349
+ "z-ai/glm-5v-turbo"
352
350
  ],
353
351
  "variables": [
354
352
  {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=test-encryption.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-encryption.d.ts","sourceRoot":"","sources":["../src/test-encryption.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- /*
2
- * Libre WebUI
3
- * Copyright (C) 2025 Kroonen AI, Inc.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at:
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { encryptionService } from './services/encryptionService.js';
18
- import { createLogger } from './utils/logger.js';
19
- const logger = createLogger('encryption-test');
20
- try {
21
- logger.info('Testing Database Encryption Service');
22
- logger.info('=====================================');
23
- // Test basic encryption/decryption
24
- const testData = 'Hello, this is sensitive data!';
25
- logger.info('Original:', testData);
26
- const encrypted = encryptionService.encrypt(testData);
27
- logger.info('Encrypted:', encrypted);
28
- const decrypted = encryptionService.decrypt(encrypted);
29
- logger.info('Decrypted:', decrypted);
30
- logger.info('Basic encryption test:', testData === decrypted ? 'PASSED' : 'FAILED');
31
- // Test object encryption
32
- const testObject = {
33
- message: 'Secret message',
34
- artifacts: [{ type: 'code', content: 'logger.debug("secret");' }],
35
- images: [
36
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==',
37
- ],
38
- statistics: { tokens: 150, duration: 1200 },
39
- };
40
- logger.info('Testing object encryption');
41
- logger.info('Original object:', JSON.stringify(testObject, null, 2));
42
- const encryptedObject = encryptionService.encryptObject(testObject);
43
- logger.info('Encrypted object:', encryptedObject);
44
- const decryptedObject = encryptionService.decryptObject(encryptedObject);
45
- logger.info('Decrypted object:', JSON.stringify(decryptedObject, null, 2));
46
- logger.info('Object encryption test:', JSON.stringify(testObject) === JSON.stringify(decryptedObject)
47
- ? 'PASSED'
48
- : 'FAILED');
49
- // Test empty/null values
50
- logger.info('Testing edge cases');
51
- try {
52
- const nullTest = encryptionService.encrypt('');
53
- const nullDecrypted = encryptionService.decrypt(nullTest);
54
- logger.info('Empty string test:', nullDecrypted === '' ? 'PASSED' : 'FAILED');
55
- }
56
- catch (error) {
57
- logger.error('Empty string test failed:', error.message);
58
- }
59
- logger.info('Encryption service is ready for production');
60
- logger.info('All sensitive data will be encrypted before storage in the database.');
61
- }
62
- catch (error) {
63
- logger.error('Error running encryption tests:', error);
64
- process.exit(1);
65
- }
66
- //# sourceMappingURL=test-encryption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-encryption.js","sourceRoot":"","sources":["../src/test-encryption.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{d as t,f as n}from"./markdown-core-fkbHPd-g.js";import{n as r}from"./react-vendor-Co1u1rWb.js";import{t as i}from"./logger-BmpKNkls.js";import{J as a,Ot as o,Rt as s,Y as c,dt as l,it as u,n as d,ot as f,st as p,tt as m,ut as ee,vt as h}from"./ui-vendor-BJAeWL11.js";import{t as g}from"./utils-BaPYjs_z.js";import{t as _}from"./Button-BUjLpHmR.js";import{k as v,y}from"../assets/index-ONn9VIq7.js";import{t as b}from"./OptimizedSyntaxHighlighter-CNjLqj1Z.js";import{n as x,r as S,t as te}from"./artifactHtml-B7Oy2e__.js";var C=e(n(),1),w=r(),T=t(),E=i(`components:artifact-slide-out-panel`),D=320,O=.9,k=600,A=()=>{let{t:e}=v(),{artifactPanelOpen:t,artifactPanelArtifact:n,closeArtifactPanel:r,theme:i}=y(),[A,j]=(0,C.useState)(!1),[M,N]=(0,C.useState)(`preview`),[P,F]=(0,C.useState)(k),[I,L]=(0,C.useState)(!1),R=(0,C.useRef)(null),z=(0,C.useRef)(null),B=(0,C.useRef)(null),V=(0,C.useRef)(0),H=(0,C.useRef)(0),U=(0,C.useRef)(null),W=(0,C.useRef)(null),G=(0,C.useRef)(P),K=n?.id??null;K!==B.current&&(B.current=K,M!==`preview`&&N(`preview`));let q=(0,C.useCallback)(e=>{G.current=e,W.current===null&&(W.current=window.requestAnimationFrame(()=>{W.current=null,F(G.current)}))},[]),J=(0,C.useCallback)(()=>{U.current=null,L(!1),W.current!==null&&(window.cancelAnimationFrame(W.current),W.current=null,F(G.current))},[]),Y=(0,C.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),U.current=e.pointerId,H.current=P,V.current=e.clientX,G.current=P,e.currentTarget.setPointerCapture(e.pointerId),L(!0)},[P]),X=(0,C.useCallback)(e=>{if(!I||U.current!==null&&e.pointerId!==U.current)return;e.preventDefault();let t=V.current-e.clientX,n=window.innerWidth*O;q(Math.min(n,Math.max(D,H.current+t)))},[I,q]);if((0,C.useEffect)(()=>{if(!I){document.body.style.userSelect=``,document.body.style.cursor=``;return}let e=e=>{(U.current===null||e.pointerId===U.current)&&J()};return window.addEventListener(`pointermove`,X,{passive:!1}),window.addEventListener(`pointerup`,e),window.addEventListener(`pointercancel`,e),window.addEventListener(`blur`,J),document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`,()=>{window.removeEventListener(`pointermove`,X),window.removeEventListener(`pointerup`,e),window.removeEventListener(`pointercancel`,e),window.removeEventListener(`blur`,J),document.body.style.userSelect=``,document.body.style.cursor=``}},[I,X,J]),(0,C.useEffect)(()=>{let e=()=>{let e=window.innerWidth*O;P>e&&F(e)};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[P]),(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,r]),(0,C.useEffect)(()=>{let e=e=>{I||z.current&&!z.current.contains(e.target)&&t&&r()},n=setTimeout(()=>{window.addEventListener(`mousedown`,e)},100);return()=>{clearTimeout(n),window.removeEventListener(`mousedown`,e)}},[t,r,I]),!n)return null;let Z=n,ne=async e=>{try{await navigator.clipboard.writeText(e),j(!0),setTimeout(()=>j(!1),2e3)}catch(e){E.error(`Failed to copy:`,e)}},re=()=>{let e=Z.type===`html`?S(Z.content,Z.title):Z.content,t=new Blob([e],{type:ie(Z.type)}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${Z.title}.${ae(Z.type)}`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},ie=e=>{switch(e){case`html`:return`text/html`;case`react`:return`text/javascript`;case`svg`:return`image/svg+xml`;case`css`:return`text/css`;case`json`:return`application/json`;default:return`text/plain`}},ae=e=>{switch(e){case`html`:return`html`;case`react`:return`jsx`;case`svg`:return`svg`;case`css`:return`css`;case`json`:return`json`;default:return`txt`}},oe=()=>{switch(Z.type){case`html`:return(0,T.jsx)(c,{className:`h-5 w-5`});case`react`:return(0,T.jsx)(l,{className:`h-5 w-5`});case`svg`:return(0,T.jsx)(m,{className:`h-5 w-5`});case`code`:return(0,T.jsx)(l,{className:`h-5 w-5`});default:return(0,T.jsx)(m,{className:`h-5 w-5`})}},se=()=>(0,T.jsx)(`div`,{"data-testid":`artifact-html-fallback`,className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg border border-gray-200 dark:border-dark-200 p-4`,children:(0,T.jsxs)(`div`,{className:`max-w-sm text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-3`}),(0,T.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`artifacts.previewUnavailable`)}),(0,T.jsx)(`p`,{className:`mt-1 text-sm text-gray-600 dark:text-gray-400`,children:e(`artifacts.previewUnavailableDescription`)}),(0,T.jsxs)(_,{variant:`outline`,size:`sm`,onClick:()=>N(`code`),className:`mt-4`,children:[(0,T.jsx)(s,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.code`)]})]})}),ce=()=>Z.content.trim()?(0,T.jsx)(`iframe`,{ref:R,"data-testid":`artifact-html-preview`,srcDoc:S(Z.content,Z.title),className:g(`w-full h-full border-0 rounded-lg bg-white`,I&&`pointer-events-none`),sandbox:x,allow:te,allowFullScreen:!0,title:Z.title}):se(),le=()=>{try{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg overflow-auto p-4`,dangerouslySetInnerHTML:{__html:Z.content}})}catch{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg`,children:(0,T.jsxs)(`div`,{className:`text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-2`}),(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-dark-600`,children:e(`artifacts.invalidSvg`)})]})})}},Q=()=>(0,T.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,T.jsx)(b,{language:(()=>{if(Z.language)return Z.language;switch(Z.type){case`html`:return`html`;case`react`:return`jsx`;case`svg`:return`xml`;case`json`:return`json`;default:return`text`}})(),isDark:i.mode===`dark`,className:`!m-0 !rounded-lg !h-full`,children:Z.content})}),ue=()=>{try{let e=JSON.parse(Z.content),t=JSON.stringify(e,null,2);return(0,T.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,T.jsx)(b,{language:`json`,isDark:i.mode===`dark`,className:`!m-0 !rounded-lg !h-full`,children:t})})}catch{return(0,T.jsx)(`div`,{className:`w-full h-full flex items-center justify-center bg-gray-50 dark:bg-dark-100 rounded-lg`,children:(0,T.jsxs)(`div`,{className:`text-center`,children:[(0,T.jsx)(o,{className:`h-8 w-8 text-primary-500 mx-auto mb-2`}),(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-dark-600`,children:e(`artifacts.invalidJson`)})]})})}},de=()=>{if(M===`code`)return Q();switch(Z.type){case`html`:return ce();case`svg`:return le();case`json`:return ue();default:return Q()}},fe=()=>Z.type===`html`||Z.type===`svg`||Z.type===`react`,$=typeof window<`u`&&window.innerWidth<640,pe=$?`100%`:`${P}px`;return(0,w.createPortal)((0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:g(`fixed inset-0 bg-black/30 dark:bg-black/50 z-40 transition-opacity duration-300`,t?`opacity-100`:`opacity-0 pointer-events-none`)}),I&&(0,T.jsx)(`div`,{className:`fixed inset-0 z-[55] cursor-col-resize select-none`,"aria-hidden":`true`}),(0,T.jsxs)(`div`,{ref:z,"data-testid":`artifact-slide-out-panel`,style:{width:pe},className:g(`fixed top-0 right-0 h-full z-50`,`bg-white dark:bg-dark-25`,`shadow-2xl border-l border-gray-200 dark:border-dark-200`,`flex flex-col`,`transform transition-transform duration-300 ease-out`,t?`translate-x-0`:`translate-x-full`),children:[!$&&(0,T.jsxs)(`div`,{onPointerDown:Y,"data-testid":`artifact-resize-handle`,className:g(`absolute left-0 top-0 bottom-0 w-4 -ml-2 cursor-col-resize z-[56]`,`flex items-center justify-center`,`touch-none select-none group`),children:[(0,T.jsx)(`div`,{className:g(`w-1 h-16 rounded-full transition-all duration-200`,`bg-gray-300 dark:bg-dark-300`,`group-hover:bg-primary-500 group-hover:h-24`,I&&`bg-primary-500 h-24`)}),(0,T.jsx)(`div`,{className:g(`absolute left-1/2 -translate-x-1/2 opacity-0 group-hover:opacity-100 transition-opacity`,`text-gray-400 dark:text-dark-500`,I&&`opacity-100`),children:(0,T.jsx)(a,{className:`h-4 w-4`})})]}),(0,T.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-gray-200 dark:border-dark-200`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0 flex-1`,children:[(0,T.jsx)(`div`,{className:`text-gray-600 dark:text-gray-400 flex-shrink-0`,children:oe()}),(0,T.jsx)(`h2`,{className:`font-semibold text-gray-900 dark:text-gray-100 truncate`,children:Z.title}),(0,T.jsx)(`span`,{className:`text-xs bg-primary-50 dark:bg-primary-900/20 text-primary-700 dark:text-primary-300 px-2 py-1 rounded-full font-medium flex-shrink-0`,children:Z.type.toUpperCase()})]}),(0,T.jsx)(_,{variant:`ghost`,size:`sm`,onClick:r,className:`h-8 w-8 p-0 hover:bg-gray-100 dark:hover:bg-dark-200 flex-shrink-0`,title:e(`artifacts.closePanelEsc`),children:(0,T.jsx)(d,{className:`h-5 w-5`})})]}),(0,T.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-gray-100 dark:border-dark-200 bg-gray-50 dark:bg-dark-100/50`,children:[(0,T.jsx)(`div`,{className:`flex items-center gap-1`,children:fe()&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(_,{variant:M===`preview`?`primary`:`ghost`,size:`sm`,onClick:()=>N(`preview`),className:`h-8 px-3 text-xs`,title:e(`artifacts.previewMode`),children:[(0,T.jsx)(u,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.preview`)]}),(0,T.jsxs)(_,{variant:M===`code`?`primary`:`ghost`,size:`sm`,onClick:()=>N(`code`),className:`h-8 px-3 text-xs`,title:e(`artifacts.codeMode`),children:[(0,T.jsx)(s,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.code`)]})]})}),(0,T.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,T.jsx)(_,{variant:`ghost`,size:`sm`,onClick:()=>ne(Z.content),className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.copyContent`),children:A?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(h,{className:`h-3.5 w-3.5 mr-1.5 text-green-500`}),e(`artifacts.copied`)]}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(ee,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.copyButton`)]})}),(0,T.jsxs)(_,{variant:`ghost`,size:`sm`,onClick:re,className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.download`),children:[(0,T.jsx)(p,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.download`)]}),(Z.type===`html`||Z.type===`react`)&&(0,T.jsxs)(_,{variant:`ghost`,size:`sm`,onClick:()=>{let e=window.open(``,`_blank`);e&&(e.document.write(S(Z.content,Z.title)),e.document.close())},className:`h-8 px-3 text-xs hover:bg-gray-100 dark:hover:bg-dark-200`,title:e(`artifacts.openInNewWindow`),children:[(0,T.jsx)(f,{className:`h-3.5 w-3.5 mr-1.5`}),e(`artifacts.open`)]})]})]}),Z.description&&(0,T.jsx)(`div`,{className:`px-4 py-3 border-b border-gray-100 dark:border-dark-200`,children:(0,T.jsx)(`p`,{className:`text-sm text-gray-600 dark:text-gray-400`,children:Z.description})}),(0,T.jsx)(`div`,{className:`flex-1 p-4 overflow-hidden`,children:de()}),(0,T.jsx)(`div`,{className:`px-4 py-2 border-t border-gray-100 dark:border-dark-200 bg-gray-50 dark:bg-dark-100/50`,children:(0,T.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,T.jsxs)(`div`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:[e(`artifacts.created`),`:`,` `,new Date(Z.createdAt).toLocaleString()]}),!$&&(0,T.jsx)(`div`,{className:`text-xs text-gray-400 dark:text-dark-500`,children:e(`artifacts.dragEdgeToResize`)})]})})]})]}),document.body)};export{A as ArtifactSlideOutPanel};