diff --git a/web-common/src/features/models/navigation/ModelMenuItems.svelte b/web-common/src/features/models/navigation/ModelMenuItems.svelte
index 1c0c117563a..7e3fe221dfb 100644
--- a/web-common/src/features/models/navigation/ModelMenuItems.svelte
+++ b/web-common/src/features/models/navigation/ModelMenuItems.svelte
@@ -17,7 +17,7 @@
import Model from "../../../components/icons/Model.svelte";
import { behaviourEvent } from "../../../metrics/initMetrics";
import { V1ReconcileStatus } from "../../../runtime-client";
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
import { createSqlModelFromTable } from "../../connectors/code-utils";
import { getScreenNameFromPage } from "../../file-explorer/telemetry";
import {
@@ -26,17 +26,18 @@
useCreateMetricsViewWithCanvasUIAction,
} from "../../metrics-views/ai-generation/generateMetricsView";
+ const runtimeClient = useRuntimeClient();
const { ai, developerChat } = featureFlags;
const queryClient = useQueryClient();
export let filePath: string;
- $: ({ instanceId } = $runtime);
+ $: ({ instanceId } = runtimeClient);
$: fileArtifact = fileArtifacts.getFileArtifact(filePath);
- $: modelHasError = fileArtifact.getHasErrors(queryClient, instanceId);
- $: modelQuery = fileArtifact.getResource(queryClient, instanceId);
+ $: modelHasError = fileArtifact.getHasErrors(queryClient);
+ $: modelQuery = fileArtifact.getResource(queryClient);
$: modelResource = $modelQuery.data;
$: connector = modelResource?.model?.spec?.outputConnector;
$: modelIsIdle =
@@ -60,6 +61,7 @@
const previousActiveEntity = getScreenNameFromPage();
const addDevLimit = false; // Typically, the `dev` limit would be applied on the Source itself
const [newModelPath, newModelName] = await createSqlModelFromTable(
+ runtimeClient,
queryClient,
connector as string,
"",
@@ -83,6 +85,7 @@
}
$: createMetricsViewFromTable = useCreateMetricsViewFromTableUIAction(
+ runtimeClient,
instanceId,
connector as string,
"",
@@ -94,6 +97,7 @@
);
$: createExploreFromTable = useCreateMetricsViewFromTableUIAction(
+ runtimeClient,
instanceId,
connector as string,
"",
@@ -105,6 +109,7 @@
);
$: createCanvasDashboardFromTable = useCreateMetricsViewWithCanvasUIAction(
+ runtimeClient,
instanceId,
connector as string,
"",
@@ -118,7 +123,7 @@
// Use developer agent if enabled, otherwise fall back to RPC
if ($developerChat) {
await createCanvasDashboardFromTableWithAgent(
- instanceId,
+ runtimeClient,
connector as string,
"",
"",
diff --git a/web-common/src/features/models/partitions/PartitionsTable.svelte b/web-common/src/features/models/partitions/PartitionsTable.svelte
index bcd8b2f7629..1c57e363b80 100644
--- a/web-common/src/features/models/partitions/PartitionsTable.svelte
+++ b/web-common/src/features/models/partitions/PartitionsTable.svelte
@@ -13,10 +13,9 @@
import {
type V1ModelPartition,
type V1Resource,
- createRuntimeServiceGetModelPartitionsInfinite,
} from "../../../runtime-client";
-
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
+ import { createRuntimeServiceGetModelPartitionsInfinite } from "../../../runtime-client";
import DataCell from "./DataCell.svelte";
import ErrorCell from "./ErrorCell.svelte";
import TriggerPartition from "./TriggerPartition.svelte";
@@ -25,8 +24,9 @@
export let whereErrored: boolean;
export let wherePending: boolean;
+ const runtimeClient = useRuntimeClient();
+
$: modelName = resource?.meta?.name?.name as string;
- $: ({ instanceId } = $runtime);
// ==========================
// Infinite Query
@@ -36,19 +36,10 @@
...(wherePending ? { pending: true } : {}),
};
$: query = createRuntimeServiceGetModelPartitionsInfinite(
- instanceId,
- modelName,
- {
- ...baseParams,
- },
+ runtimeClient,
+ { model: modelName, ...baseParams },
{
query: {
- getNextPageParam: (lastPage) => {
- if (lastPage.nextPageToken !== "") {
- return lastPage.nextPageToken;
- }
- return undefined;
- },
enabled: !!modelName,
refetchOnMount: true,
},
@@ -195,7 +186,7 @@
setOptions({
count: $query.hasNextPage ? allRows.length + 1 : allRows.length,
});
- const [lastItem] = [...virtualRows].reverse();
+ const lastItem = virtualRows[virtualRows.length - 1];
if (
lastItem &&
lastItem.index > allRows.length - 1 &&
@@ -249,7 +240,7 @@
- {#each getVirtualItems() as virtualRow (virtualRow.index)}
+ {#each virtualRows as virtualRow (virtualRow.index)}
{#each rows[virtualRow.index]?.getVisibleCells() ?? [] as cell (cell.id)}
diff --git a/web-common/src/features/models/partitions/TriggerPartition.svelte b/web-common/src/features/models/partitions/TriggerPartition.svelte
index 8f9c448f63a..96a4c1a83c0 100644
--- a/web-common/src/features/models/partitions/TriggerPartition.svelte
+++ b/web-common/src/features/models/partitions/TriggerPartition.svelte
@@ -5,16 +5,18 @@
import { Button } from "../../../components/button";
import {
V1ReconcileStatus,
- createRuntimeServiceCreateTrigger,
+ createRuntimeServiceCreateTriggerMutation,
getRuntimeServiceGetModelPartitionsQueryKey,
type V1Resource,
} from "../../../runtime-client";
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
import { addLeadingSlash } from "../../entity-management/entity-mappers";
import { fileArtifacts } from "../../entity-management/file-artifacts";
+ const runtimeClient = useRuntimeClient();
const queryClient = useQueryClient();
- const triggerMutation = createRuntimeServiceCreateTrigger();
+ const triggerMutation =
+ createRuntimeServiceCreateTriggerMutation(runtimeClient);
export let partitionKey: string;
export let resource: V1Resource | undefined = undefined;
@@ -38,24 +40,20 @@
}
await $triggerMutation.mutateAsync({
- instanceId,
- data: {
- models: [
- {
- model: modelName,
- partitions: [partitionKey],
- },
- ],
- },
+ models: [
+ {
+ model: modelName,
+ partitions: [partitionKey],
+ },
+ ],
});
// Poll for updates since partition execution happens asynchronously
const invalidate = () =>
queryClient.invalidateQueries({
- queryKey: getRuntimeServiceGetModelPartitionsQueryKey(
- instanceId,
- modelName,
- ),
+ queryKey: getRuntimeServiceGetModelPartitionsQueryKey(instanceId, {
+ model: modelName,
+ }),
});
await invalidate();
@@ -75,7 +73,7 @@
}, 2000);
}
- $: ({ instanceId } = $runtime);
+ $: ({ instanceId } = runtimeClient);
$: isLoading = $triggerMutation.isPending;
// If resource is passed as prop, use it directly; otherwise derive from URL params (web-local)
@@ -84,7 +82,7 @@
params.file !== undefined
? fileArtifacts.getFileArtifact(addLeadingSlash(params.file))
: undefined;
- $: resourceQuery = fileArtifact?.getResource(queryClient, instanceId);
+ $: resourceQuery = fileArtifact?.getResource(queryClient);
$: resolvedResource = resource ?? $resourceQuery?.data;
diff --git a/web-common/src/features/models/selectors.ts b/web-common/src/features/models/selectors.ts
index 7437cea10b1..0dbf7b746b9 100644
--- a/web-common/src/features/models/selectors.ts
+++ b/web-common/src/features/models/selectors.ts
@@ -3,6 +3,7 @@ import {
useClientFilteredResources,
useResource,
} from "@rilldata/web-common/features/entity-management/resource-selectors";
+import type { RuntimeClient } from "@rilldata/web-common/runtime-client/v2";
import type { QueryClient } from "@tanstack/query-core";
import type { Readable } from "svelte/motion";
import { derived } from "svelte/store";
@@ -11,9 +12,9 @@ import {
type TableColumnsWithName,
} from "../sources/selectors";
-export function useModels(instanceId: string) {
+export function useModels(client: RuntimeClient) {
return useClientFilteredResources(
- instanceId,
+ client,
ResourceKind.Model,
(res) =>
res.meta?.name?.name === res.model?.state?.resultTable &&
@@ -21,15 +22,15 @@ export function useModels(instanceId: string) {
);
}
-export function useModel(instanceId: string, name: string) {
- return useResource(instanceId, name, ResourceKind.Model);
+export function useModel(client: RuntimeClient, name: string) {
+ return useResource(client, name, ResourceKind.Model);
}
export function useAllModelColumns(
queryClient: QueryClient,
- instanceId: string,
+ client: RuntimeClient,
): Readable> {
- return derived([useModels(instanceId)], ([allModels], set) => {
+ return derived([useModels(client)], ([allModels], set) => {
if (!allModels.data?.length) {
set([]);
return;
@@ -39,7 +40,7 @@ export function useAllModelColumns(
allModels.data.map((r) =>
createTableColumnsWithName(
queryClient,
- instanceId,
+ client,
r.model?.state?.resultConnector ?? "",
"",
"",
diff --git a/web-common/src/features/models/workspace/CreateDashboardButton.svelte b/web-common/src/features/models/workspace/CreateDashboardButton.svelte
index c90c8b967cf..829db39b397 100644
--- a/web-common/src/features/models/workspace/CreateDashboardButton.svelte
+++ b/web-common/src/features/models/workspace/CreateDashboardButton.svelte
@@ -8,7 +8,7 @@
import { MetricsEventSpace } from "@rilldata/web-common/metrics/service/MetricsTypes";
import { Wand } from "lucide-svelte";
import { V1ReconcileStatus } from "../../../runtime-client";
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
import { allowPrimary } from "../../dashboards/workspace/DeployProjectCTA.svelte";
import { featureFlags } from "../../feature-flags";
import { useCreateMetricsViewFromTableUIAction } from "../../metrics-views/ai-generation/generateMetricsView";
@@ -18,17 +18,19 @@
export let hasResultTable = false;
export let collapse = false;
+ const runtimeClient = useRuntimeClient();
const { ai } = featureFlags;
- $: ({ instanceId } = $runtime);
+ $: ({ instanceId } = runtimeClient);
- $: modelQuery = useModel(instanceId, modelName);
+ $: modelQuery = useModel(runtimeClient, modelName);
$: connector = $modelQuery.data?.model?.spec?.outputConnector;
$: modelIsIdle =
$modelQuery.data?.meta?.reconcileStatus ===
V1ReconcileStatus.RECONCILE_STATUS_IDLE;
$: createMetricsViewFromModel = useCreateMetricsViewFromTableUIAction(
+ runtimeClient,
instanceId,
connector as string,
"",
diff --git a/web-common/src/features/models/workspace/ModelEditor.svelte b/web-common/src/features/models/workspace/ModelEditor.svelte
index b9707003863..dcb6630c2d6 100644
--- a/web-common/src/features/models/workspace/ModelEditor.svelte
+++ b/web-common/src/features/models/workspace/ModelEditor.svelte
@@ -8,7 +8,7 @@
import { EditorView } from "@codemirror/view";
import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient";
import { DuckDBSQL } from "../../../components/editor/presets/duckDBDialect";
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
import Editor from "../../editor/Editor.svelte";
import { getExtensionsForFile } from "../../editor/getExtensionsForFile";
import { FileArtifact } from "../../entity-management/file-artifact";
@@ -21,7 +21,7 @@
export let fileArtifact: FileArtifact;
export let onSave: (content: string) => void = () => {};
- $: ({ instanceId } = $runtime);
+ const runtimeClient = useRuntimeClient();
$: ({ remoteContent } = fileArtifact);
@@ -29,7 +29,7 @@
let autocompleteCompartment = new Compartment();
// Autocomplete: source tables
- $: allSourceColumns = useAllSourceColumns(queryClient, instanceId);
+ $: allSourceColumns = useAllSourceColumns(queryClient, runtimeClient);
$: if ($allSourceColumns?.length) {
for (const sourceTable of $allSourceColumns) {
const sourceIdentifier = sourceTable?.tableName;
@@ -41,7 +41,7 @@
}
// Autocomplete: model tables
- $: allModelColumns = useAllModelColumns(queryClient, instanceId);
+ $: allModelColumns = useAllModelColumns(queryClient, runtimeClient);
$: if ($allModelColumns?.length) {
for (const modelTable of $allModelColumns) {
const modelIdentifier = modelTable?.tableName;
diff --git a/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte b/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte
index 4d0b83d53bb..ce6aa05050a 100644
--- a/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte
+++ b/web-common/src/features/models/workspace/ModelWorkspaceCTAs.svelte
@@ -10,7 +10,7 @@
V1ReconcileStatus,
type V1Resource,
} from "@rilldata/web-common/runtime-client";
- import { runtime } from "../../../runtime-client/runtime-store";
+ import { useRuntimeClient } from "../../../runtime-client/v2";
import { useGetMetricsViewsForModel } from "../../dashboards/selectors";
import ExportMenu from "../../exports/ExportMenu.svelte";
import { useCreateMetricsViewFromTableUIAction } from "../../metrics-views/ai-generation/generateMetricsView";
@@ -25,15 +25,18 @@
export let hasUnsavedChanges: boolean;
export let connector: string;
- $: ({ instanceId } = $runtime);
+ const runtimeClient = useRuntimeClient();
+
+ $: ({ instanceId } = runtimeClient);
$: isModelIdle =
resource?.meta?.reconcileStatus === V1ReconcileStatus.RECONCILE_STATUS_IDLE;
- $: metricsViewsQuery = useGetMetricsViewsForModel(instanceId, modelName);
+ $: metricsViewsQuery = useGetMetricsViewsForModel(runtimeClient, modelName);
$: availableMetricsViews = $metricsViewsQuery.data ?? [];
$: createMetricsViewFromTable = useCreateMetricsViewFromTableUIAction(
+ runtimeClient,
instanceId,
connector,
"",
diff --git a/web-common/src/features/onboarding/OnboardingWorkspace.svelte b/web-common/src/features/onboarding/OnboardingWorkspace.svelte
index 62ee0c4cd8a..3dd4b62d812 100644
--- a/web-common/src/features/onboarding/OnboardingWorkspace.svelte
+++ b/web-common/src/features/onboarding/OnboardingWorkspace.svelte
@@ -2,8 +2,8 @@
import { goto } from "$app/navigation";
import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu";
import Button from "../../components/button/Button.svelte";
- import { createRuntimeServiceUnpackExample } from "../../runtime-client";
- import { runtime } from "../../runtime-client/runtime-store";
+ import { createRuntimeServiceUnpackExampleMutation } from "../../runtime-client";
+ import { useRuntimeClient } from "../../runtime-client/v2";
import { addSourceModal } from "../sources/modal/add-source-visibility";
import ImportData from "@rilldata/web-common/components/icons/ImportData.svelte";
import GenerateSampleData from "@rilldata/web-common/features/sample-data/GenerateSampleData.svelte";
@@ -21,9 +21,10 @@
import { waitUntil } from "@rilldata/web-common/lib/waitUtils.ts";
import { fileArtifacts } from "@rilldata/web-common/features/entity-management/file-artifacts.ts";
- $: ({ instanceId } = $runtime);
+ const runtimeClient = useRuntimeClient();
- const unpackExampleProject = createRuntimeServiceUnpackExample();
+ const unpackExampleProject =
+ createRuntimeServiceUnpackExampleMutation(runtimeClient);
async function unpackProject(example: (typeof EXAMPLES)[number]) {
await behaviourEvent?.fireSplashEvent(
@@ -37,11 +38,8 @@
try {
await $unpackExampleProject.mutateAsync({
- instanceId,
- data: {
- name: example.name,
- force: true,
- },
+ name: example.name,
+ force: true,
});
await waitUntil(() => fileArtifacts.hasFileArtifact(example.firstFile));
@@ -74,7 +72,8 @@
|