@marimo-team/frontend 0.23.9-dev20 → 0.23.9-dev22

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 (76) hide show
  1. package/dist/assets/{CellStatus-cST_KROR.js → CellStatus-BqCsCfF0.js} +1 -1
  2. package/dist/assets/{JsonOutput-BwgMLuPn.js → JsonOutput-7sNcAFVa.js} +1 -1
  3. package/dist/assets/{MarimoErrorOutput-DIbgMg0T.js → MarimoErrorOutput-BOi3ico3.js} +1 -1
  4. package/dist/assets/{RenderHTML-CH8QrLVl.js → RenderHTML-CUf8D25v.js} +1 -1
  5. package/dist/assets/{add-cell-with-ai-DDmHtapY.js → add-cell-with-ai-XU2qpbrH.js} +1 -1
  6. package/dist/assets/{add-connection-dialog-CRbrpdQu.js → add-connection-dialog-C9ehEIhe.js} +1 -1
  7. package/dist/assets/{agent-panel-Ci6kmMWq.js → agent-panel-CteWNnTE.js} +1 -1
  8. package/dist/assets/ai-model-dropdown-tspiiyaT.js +5 -0
  9. package/dist/assets/{app-config-button-DrlCOjyd.js → app-config-button-Co0iUAmT.js} +1 -1
  10. package/dist/assets/{cell-editor-Bhvnqdc-.js → cell-editor-SWzZ01Xy.js} +1 -1
  11. package/dist/assets/{cell-link-rh-JpkCu.js → cell-link-DLb_k4Kf.js} +1 -1
  12. package/dist/assets/{cells-Cwex_Zk1.js → cells-yL2qMkYn.js} +41 -41
  13. package/dist/assets/{chat-display-DzBxD2g1.js → chat-display-CHd7vgqs.js} +1 -1
  14. package/dist/assets/{chat-panel-ipOkNc7y.js → chat-panel-DeHm9U27.js} +1 -1
  15. package/dist/assets/{chat-ui-DqHdyg0V.js → chat-ui-cSu2PBtp.js} +1 -1
  16. package/dist/assets/{column-preview-WtwlsutV.js → column-preview-D1138kdA.js} +1 -1
  17. package/dist/assets/{command-palette-C5YuwxOo.js → command-palette-DdhU05vN.js} +1 -1
  18. package/dist/assets/{common-B3E9c-gU.js → common-DqZ15mGE.js} +1 -1
  19. package/dist/assets/{components-DFkvRpxg.js → components-BK3xAU_5.js} +1 -1
  20. package/dist/assets/{components-wm4TXPI6.js → components-DXfCmhfc.js} +1 -1
  21. package/dist/assets/{datasource-rDrNZEmo.js → datasource-CJC51Mx7.js} +1 -1
  22. package/dist/assets/{dependency-graph-panel-BWe9yDlP.js → dependency-graph-panel-avUgiyMA.js} +1 -1
  23. package/dist/assets/{documentation-panel-BAxMFFrB.js → documentation-panel-BX7dDKRB.js} +1 -1
  24. package/dist/assets/{download-NRqwJhRT.js → download-DucsG72p.js} +1 -1
  25. package/dist/assets/{edit-page-CNuf6Bpw.js → edit-page-D-PmFfK7.js} +3 -3
  26. package/dist/assets/{error-panel-CByNONxp.js → error-panel-BqoOUjfw.js} +1 -1
  27. package/dist/assets/{file-explorer-panel-DcCFx-Mu.js → file-explorer-panel-8hhN0YIE.js} +1 -1
  28. package/dist/assets/{file-icons-CV0odlbf.js → file-icons-CNUmy2Dl.js} +1 -1
  29. package/dist/assets/{floating-outline-DmddQK6b.js → floating-outline-B_uWfcys.js} +1 -1
  30. package/dist/assets/{focus-DLnEejrn.js → focus-Cyz1EKwA.js} +1 -1
  31. package/dist/assets/{form-Dnx_5kyZ.js → form-Dyt6aN_7.js} +1 -1
  32. package/dist/assets/{home-page-ffvNN1h7.js → home-page-ahZaXEAO.js} +1 -1
  33. package/dist/assets/{hooks-DuHQuYPv.js → hooks-BmREojM6.js} +1 -1
  34. package/dist/assets/{html-to-image-CzpeYelq.js → html-to-image-CKzwKb6F.js} +1 -1
  35. package/dist/assets/{index-BN0lrf4C.js → index-CWMGYIgw.js} +3 -3
  36. package/dist/assets/{kiosk-mode-C6QWFFID.js → kiosk-mode-z2bbZ6_w.js} +1 -1
  37. package/dist/assets/{layout-dxaLq-eR.js → layout-i6tKZqCw.js} +3 -3
  38. package/dist/assets/{logs-panel-9W91k1zJ.js → logs-panel-CNV8j7by.js} +1 -1
  39. package/dist/assets/{markdown-renderer-B-iPeXPA.js → markdown-renderer-3mlKZ6Wa.js} +1 -1
  40. package/dist/assets/{name-cell-input-uFfmqWYT.js → name-cell-input-BnL86ka3.js} +1 -1
  41. package/dist/assets/{outline-panel-BAWIWb20.js → outline-panel-k7h8ZSSH.js} +1 -1
  42. package/dist/assets/{packages-panel-DncGPBWC.js → packages-panel-B60rK-z4.js} +1 -1
  43. package/dist/assets/{panels-ByGgkdwq.js → panels-DHCVX_8o.js} +1 -1
  44. package/dist/assets/{process-output-D06o1mmH.js → process-output-Bi7Z_Agd.js} +1 -1
  45. package/dist/assets/{radio-group-DUTOVun5.js → radio-group-CdBpUP4h.js} +1 -1
  46. package/dist/assets/{readonly-python-code-BnaYQo0K.js → readonly-python-code-beWODwjc.js} +1 -1
  47. package/dist/assets/{reveal-component-BXfhZjrl.js → reveal-component-fENoSU2O.js} +1 -1
  48. package/dist/assets/{run-page-Um3pVJx9.js → run-page-CxA8m2Pc.js} +1 -1
  49. package/dist/assets/{scratchpad-panel-D8kI0OKl.js → scratchpad-panel-Doe-hDIO.js} +1 -1
  50. package/dist/assets/{session-panel-07dCccS4.js → session-panel-C5xz5D-N.js} +1 -1
  51. package/dist/assets/{snippets-panel-s3hpmPTY.js → snippets-panel-rCxyqna5.js} +1 -1
  52. package/dist/assets/{state-DIFGjBXT.js → state-B6DTPcu0.js} +1 -1
  53. package/dist/assets/{state-B5L8iIIr.js → state-vUGPvNzI.js} +1 -1
  54. package/dist/assets/{textarea-D0VOSGcU.js → textarea-DRcRrFRn.js} +1 -1
  55. package/dist/assets/{tracing-CSRhEdtZ.js → tracing-DKMmxWD9.js} +1 -1
  56. package/dist/assets/{tracing-panel-DuaSjEhP.js → tracing-panel-KG023vH2.js} +2 -2
  57. package/dist/assets/{useCellActionButton-CtygwcqH.js → useCellActionButton-ZXUUkx8s.js} +1 -1
  58. package/dist/assets/{useDeleteCell-DeZ7T5A3.js → useDeleteCell-wNHy5lEM.js} +1 -1
  59. package/dist/assets/{useDependencyPanelTab-Bpa86UXQ.js → useDependencyPanelTab-B7Qj36AL.js} +1 -1
  60. package/dist/assets/{useNotebookActions-DuMI8tMy.js → useNotebookActions-67xj2Dr_.js} +1 -1
  61. package/dist/assets/{useRunCells-CScbBaxj.js → useRunCells-CJadPmdw.js} +1 -1
  62. package/dist/assets/{useSplitCell-CBlrUeHM.js → useSplitCell-C04l3e__.js} +1 -1
  63. package/dist/index.html +22 -22
  64. package/package.json +1 -1
  65. package/src/components/ai/__tests__/ai-utils.test.ts +43 -38
  66. package/src/components/ai/ai-model-dropdown.tsx +2 -2
  67. package/src/components/app-config/ai-config.tsx +1 -1
  68. package/src/components/databases/display.tsx +2 -0
  69. package/src/components/datasources/__tests__/utils.test.ts +82 -0
  70. package/src/components/datasources/utils.ts +16 -15
  71. package/src/core/ai/__tests__/model-registry.test.ts +72 -60
  72. package/src/core/ai/model-registry.ts +33 -28
  73. package/src/core/codemirror/format.ts +1 -0
  74. package/src/core/codemirror/language/languages/sql/sql.ts +1 -0
  75. package/src/core/codemirror/language/languages/sql/utils.ts +2 -0
  76. package/dist/assets/ai-model-dropdown-CNobct-x.js +0 -5
@@ -1,12 +1,8 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import type {
4
- AiModel as AiModelType,
5
- AiProvider,
6
- Role,
7
- } from "@marimo-team/llm-info";
8
- import { models } from "@marimo-team/llm-info/models.json";
9
- import { providers } from "@marimo-team/llm-info/providers.json";
3
+ import type { AiModel as AiModelType, AiProvider } from "@marimo-team/llm-info";
4
+ import { models as modelsJson } from "@marimo-team/llm-info/models.json";
5
+ import { providers as providersJson } from "@marimo-team/llm-info/providers.json";
10
6
  import { Logger } from "@/utils/Logger";
11
7
  import { MultiMap } from "@/utils/multi-map";
12
8
  import { once } from "@/utils/once";
@@ -14,13 +10,19 @@ import type { ProviderId } from "./ids/ids";
14
10
  import { AiModelId, type QualifiedModelId, type ShortModelId } from "./ids/ids";
15
11
 
16
12
  export interface AiModel extends AiModelType {
17
- roles: Role[];
18
13
  model: ShortModelId;
19
- providers: ProviderId[];
14
+ /** The provider this entry belongs to. */
15
+ provider: ProviderId;
20
16
  /** Whether this is a custom model. */
21
17
  custom: boolean;
22
18
  }
23
19
 
20
+ // JSON shape matches the `AiModel` schema (Zod-validated at codegen time).
21
+ const models = modelsJson as unknown as Partial<
22
+ Record<ProviderId, AiModelType[]>
23
+ >;
24
+ const providers = providersJson as unknown as readonly AiProvider[];
25
+
24
26
  interface KnownModelMaps {
25
27
  /** Map of qualified model ID to model info */
26
28
  modelMap: ReadonlyMap<QualifiedModelId, AiModel>;
@@ -32,24 +34,25 @@ export const getKnownModelMaps = once((): KnownModelMaps => {
32
34
  const modelMap = new Map<QualifiedModelId, AiModel>();
33
35
  const defaultModelByProvider = new Map<ProviderId, QualifiedModelId>();
34
36
 
35
- for (const model of models) {
36
- const modelId = model.model as ShortModelId;
37
- const modelInfo: AiModel = {
38
- ...model,
39
- model: model.model as ShortModelId,
40
- roles: model.roles.map((role) => role as Role),
41
- providers: model.providers as ProviderId[],
42
- custom: false,
43
- };
44
-
45
- const supportsChatOrEdit =
46
- modelInfo.roles.includes("chat") || modelInfo.roles.includes("edit");
37
+ for (const [providerKey, providerModels] of Object.entries(models)) {
38
+ if (!providerModels) {
39
+ continue;
40
+ }
41
+ const provider = providerKey as ProviderId;
42
+ for (const raw of providerModels) {
43
+ const modelId = raw.model as ShortModelId;
44
+ const modelInfo: AiModel = {
45
+ ...raw,
46
+ model: modelId,
47
+ provider,
48
+ custom: false,
49
+ };
47
50
 
48
- for (const provider of modelInfo.providers) {
49
51
  const qualifiedModelId: QualifiedModelId = `${provider}/${modelId}`;
50
52
  modelMap.set(qualifiedModelId, modelInfo);
51
53
 
52
- // Track first model per provider that supports chat or edit
54
+ const supportsChatOrEdit =
55
+ modelInfo.roles.includes("chat") || modelInfo.roles.includes("edit");
53
56
  if (supportsChatOrEdit && !defaultModelByProvider.has(provider)) {
54
57
  defaultModelByProvider.set(provider, qualifiedModelId);
55
58
  }
@@ -67,9 +70,8 @@ const getProviderMap = once(
67
70
  const providerMap = new Map<ProviderId, AiProvider>();
68
71
  const providerToOrderIdx = new Map<ProviderId, number>();
69
72
  providers.forEach((provider, idx) => {
70
- const providerId = provider.id as ProviderId;
71
- providerMap.set(providerId, provider);
72
- providerToOrderIdx.set(providerId, idx);
73
+ providerMap.set(provider.id, provider);
74
+ providerToOrderIdx.set(provider.id, idx);
73
75
  });
74
76
  return { providerMap, providerToOrderIdx };
75
77
  },
@@ -158,9 +160,12 @@ export class AiModelRegistry {
158
160
  name: modelId.shortModelId,
159
161
  model: modelId.shortModelId,
160
162
  description: "Custom model",
161
- providers: [modelId.providerId],
163
+ provider: modelId.providerId,
162
164
  roles: [],
163
- thinking: false,
165
+ capabilities: [],
166
+ input_types: [],
167
+ output_types: [],
168
+ release_date: "1970-01-01",
164
169
  custom: true,
165
170
  };
166
171
  customModelsMap.set(model, modelInfo);
@@ -205,6 +205,7 @@ async function getSqlFormatterDialect(
205
205
  case "mongodb":
206
206
  case "timescaledb":
207
207
  case "datafusion":
208
+ case "dremio":
208
209
  return sql;
209
210
  case "databricks":
210
211
  return spark;
@@ -410,6 +410,7 @@ function connectionNameToParserDialect(
410
410
  case "spark":
411
411
  case "databricks":
412
412
  case "datafusion":
413
+ case "dremio":
413
414
  Logger.debug("Unsupported dialect", { dialect });
414
415
  return null;
415
416
  default:
@@ -52,6 +52,7 @@ const KNOWN_DIALECTS_ARRAY = [
52
52
  "databricks",
53
53
  "datafusion",
54
54
  "microsoft sql server",
55
+ "dremio",
55
56
  ] as const;
56
57
  const KNOWN_DIALECTS: ReadonlySet<string> = new Set(KNOWN_DIALECTS_ARRAY);
57
58
  type KnownDialect = (typeof KNOWN_DIALECTS_ARRAY)[number];
@@ -115,6 +116,7 @@ export function guessDialect(
115
116
  case "spark":
116
117
  case "databricks":
117
118
  case "datafusion":
119
+ case "dremio":
118
120
  Logger.debug("Unsupported dialect", { dialect });
119
121
  return ModifiedStandardSQL;
120
122
  default: