windmill-components 1.542.4 → 1.550.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/package/common.d.ts +4 -1
- package/package/components/AIAgentLogViewer.svelte +1 -1
- package/package/components/ArgEnum.svelte +14 -5
- package/package/components/ArgInput.svelte +23 -15
- package/package/components/ArgInput.svelte.d.ts +1 -1
- package/package/components/ChannelSelector.svelte +92 -18
- package/package/components/ChannelSelector.svelte.d.ts +2 -0
- package/package/components/ConnectionSection.svelte +12 -1
- package/package/components/Dev.svelte +18 -5
- package/package/components/Dev.svelte.d.ts +23 -1
- package/package/components/DisplayResult.svelte +36 -23
- package/package/components/DropdownV2.svelte +8 -2
- package/package/components/DropdownV2.svelte.d.ts +1 -0
- package/package/components/DynamicInput.svelte +10 -10
- package/package/components/EditableSchemaForm.svelte +21 -7
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
- package/package/components/FlowHistoryJobPicker.svelte +3 -0
- package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +5 -5
- package/package/components/FlowLogRow.svelte +2 -2
- package/package/components/FlowLogViewer.svelte +228 -57
- package/package/components/FlowLogViewer.svelte.d.ts +16 -5
- package/package/components/FlowLogViewerWrapper.svelte +56 -3
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
- package/package/components/FlowLoopIterationPreview.svelte +4 -4
- package/package/components/FlowMetadata.svelte +3 -4
- package/package/components/FlowMetadata.svelte.d.ts +4 -18
- package/package/components/FlowPreviewContent.svelte +9 -3
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewer.svelte +62 -59
- package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
- package/package/components/FlowStatusViewerInner.svelte +186 -94
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
- package/package/components/FlowTimeline.svelte +110 -131
- package/package/components/FlowTimeline.svelte.d.ts +13 -4
- package/package/components/FlowTimelineBar.svelte +227 -0
- package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
- package/package/components/InputTransformForm.svelte +119 -3
- package/package/components/InputTransformForm.svelte.d.ts +3 -0
- package/package/components/InputTransformSchemaForm.svelte +5 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSetting.svelte +17 -42
- package/package/components/InstanceSettings.svelte +12 -21
- package/package/components/JobArgs.svelte +15 -16
- package/package/components/JobArgs.svelte.d.ts +4 -18
- package/package/components/JobLoader.svelte +23 -42
- package/package/components/JobLoader.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +1 -1
- package/package/components/JobStatus.svelte.d.ts +4 -18
- package/package/components/ModulePreviewResultViewer.svelte +1 -7
- package/package/components/NextcloudSetting.svelte +6 -1
- package/package/components/Password.svelte +7 -11
- package/package/components/Password.svelte.d.ts +5 -20
- package/package/components/PasswordArgInput.svelte +35 -15
- package/package/components/PasswordArgInput.svelte.d.ts +4 -18
- package/package/components/QueuePosition.svelte +6 -2
- package/package/components/RunForm.svelte +5 -14
- package/package/components/S3ArrayHelperButton.svelte +12 -0
- package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
- package/package/components/ScriptEditor.svelte +5 -6
- package/package/components/StringTypeNarrowing.svelte +39 -24
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TeamSelector.svelte +83 -37
- package/package/components/TeamSelector.svelte.d.ts +0 -1
- package/package/components/apps/components/buttons/AppButton.svelte +11 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
- package/package/components/apps/components/display/table/utils.js +1 -1
- package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppTabs.svelte +116 -71
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
- package/package/components/apps/editor/component/components.d.ts +16 -1
- package/package/components/apps/editor/component/components.js +22 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
- package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
- package/package/components/common/CloseButton.svelte +2 -2
- package/package/components/common/CloseButton.svelte.d.ts +1 -0
- package/package/components/common/layout/List.svelte +3 -7
- package/package/components/common/layout/List.svelte.d.ts +7 -29
- package/package/components/common/popup/PopupV2.svelte +8 -25
- package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
- package/package/components/common/table/ScriptRow.svelte +22 -2
- package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -4
- package/package/components/copilot/chat/script/core.js +93 -34
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +6 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/flows/FlowProgressBar.svelte +16 -16
- package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
- package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
- package/package/components/flows/flowInfers.js +34 -8
- package/package/components/flows/flowStore.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +4 -14
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
- package/package/components/flows/map/InsertModuleInner.svelte +17 -20
- package/package/components/flows/map/MapItem.svelte +1 -1
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
- package/package/components/git_sync/DetectionFlow.svelte +33 -44
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
- package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
- package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
- package/package/components/git_sync/GitSyncSection.svelte +134 -14
- package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
- package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
- package/package/components/graph/model.d.ts +5 -5
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
- package/package/components/home/ItemsList.svelte +1 -1
- package/package/components/jobs/JobProgressBar.svelte +27 -21
- package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
- package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
- package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
- package/package/components/meltComponents/Popover.svelte +3 -2
- package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
- package/package/components/meltComponents/Tooltip.svelte +1 -1
- package/package/components/progressBar/ProgressBar.svelte +39 -53
- package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
- package/package/components/runs/JobsLoader.svelte +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyV2.svelte +7 -4
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/select/MultiSelect.svelte +2 -2
- package/package/components/select/MultiSelect.svelte.d.ts +1 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
- package/package/components/sidebar/MenuLink.svelte +2 -1
- package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
- package/package/components/sidebar/SidebarContent.svelte +27 -27
- package/package/components/table/Cell.svelte +7 -14
- package/package/components/table/Cell.svelte.d.ts +13 -35
- package/package/components/triggers/AddTriggersButton.svelte +1 -0
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
- package/package/components/triggers/websocket/utils.js +1 -0
- package/package/components/workspaceSettings/AISettings.svelte +8 -2
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
- package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +141 -16
- package/package/gen/schemas.gen.js +144 -16
- package/package/gen/services.gen.d.ts +62 -42
- package/package/gen/services.gen.js +131 -82
- package/package/gen/types.gen.d.ts +218 -144
- package/package/hubPaths.json +2 -1
- package/package/services/JobManager.js +10 -7
- package/package/stores.d.ts +1 -0
- package/package/stores.js +6 -3
- package/package/timelineCompute.svelte.d.ts +21 -0
- package/package/timelineCompute.svelte.js +113 -0
- package/package/utils.d.ts +15 -8
- package/package/utils.js +62 -12
- package/package/workspace_settings.d.ts +13 -8
- package/package/workspace_settings.js +46 -11
- package/package.json +2 -2
|
@@ -57,7 +57,7 @@ async function loadAllSubscriptionFromGooglePubSubTopic() {
|
|
|
57
57
|
loadingSubscription = false;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
let { can_write = false, headless = false, isValid = $bindable(false), gcp_resource_path = $bindable(''), subscription_id = $bindable(''), topic_id = $bindable(''), delivery_type = $bindable('pull'), delivery_config = $bindable(), subscription_mode = $bindable('create_update'), base_endpoint = $bindable(getBaseUrl()), auto_acknowledge_msg = $bindable(true), path = '', showTestingBadge = false, cloud_subscription_id = $bindable(''), create_update_subscription_id = $bindable('') } = $props();
|
|
60
|
+
let { can_write = false, headless = false, isValid = $bindable(false), gcp_resource_path = $bindable(''), subscription_id = $bindable(''), topic_id = $bindable(''), delivery_type = $bindable('pull'), delivery_config = $bindable(), subscription_mode = $bindable('create_update'), base_endpoint = $bindable(getBaseUrl()), auto_acknowledge_msg = $bindable(true), ack_deadline = $bindable(), path = '', showTestingBadge = false, cloud_subscription_id = $bindable(''), create_update_subscription_id = $bindable('') } = $props();
|
|
61
61
|
if (gcp_resource_path) {
|
|
62
62
|
loadAllPubSubTopicsFromProject();
|
|
63
63
|
}
|
|
@@ -15,7 +15,8 @@ interface Props {
|
|
|
15
15
|
cloud_subscription_id?: string;
|
|
16
16
|
create_update_subscription_id?: string;
|
|
17
17
|
auto_acknowledge_msg: boolean;
|
|
18
|
+
ack_deadline?: number;
|
|
18
19
|
}
|
|
19
|
-
declare const GcpTriggerEditorConfigSection: import("svelte").Component<Props, {}, "base_endpoint" | "gcp_resource_path" | "topic_id" | "subscription_id" | "delivery_type" | "subscription_mode" | "delivery_config" | "auto_acknowledge_msg" | "isValid" | "cloud_subscription_id" | "create_update_subscription_id">;
|
|
20
|
+
declare const GcpTriggerEditorConfigSection: import("svelte").Component<Props, {}, "base_endpoint" | "gcp_resource_path" | "topic_id" | "subscription_id" | "delivery_type" | "subscription_mode" | "delivery_config" | "auto_acknowledge_msg" | "ack_deadline" | "isValid" | "cloud_subscription_id" | "create_update_subscription_id">;
|
|
20
21
|
type GcpTriggerEditorConfigSection = ReturnType<typeof GcpTriggerEditorConfigSection>;
|
|
21
22
|
export default GcpTriggerEditorConfigSection;
|
|
@@ -46,6 +46,7 @@ let initialConfig = undefined;
|
|
|
46
46
|
let deploymentLoading = $state(false);
|
|
47
47
|
let base_endpoint = $derived(`${window.location.origin}${base}`);
|
|
48
48
|
let auto_acknowledge_msg = $state(true);
|
|
49
|
+
let ack_deadline = $state();
|
|
49
50
|
let optionTabSelected = $state('error_handler');
|
|
50
51
|
let errorHandlerSelected = $state('slack');
|
|
51
52
|
let error_handler_path = $state();
|
|
@@ -99,6 +100,7 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
|
|
|
99
100
|
error_handler_args = defaultValues?.error_handler_args ?? {};
|
|
100
101
|
retry = defaultValues?.retry ?? undefined;
|
|
101
102
|
auto_acknowledge_msg = defaultValues?.auto_acknowledge_msg ?? true;
|
|
103
|
+
ack_deadline = defaultValues?.ack_deadline;
|
|
102
104
|
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
103
105
|
}
|
|
104
106
|
finally {
|
|
@@ -140,6 +142,7 @@ async function loadTriggerConfig(cfg) {
|
|
|
140
142
|
error_handler_args = cfg?.error_handler_args ?? {};
|
|
141
143
|
retry = cfg?.retry;
|
|
142
144
|
auto_acknowledge_msg = cfg?.auto_acknowledge_msg ?? true;
|
|
145
|
+
ack_deadline = cfg?.ack_deadline;
|
|
143
146
|
errorHandlerSelected = getHandlerType(error_handler_path ?? '');
|
|
144
147
|
}
|
|
145
148
|
async function updateTrigger() {
|
|
@@ -171,7 +174,8 @@ function getGcpConfig() {
|
|
|
171
174
|
error_handler_path,
|
|
172
175
|
error_handler_args,
|
|
173
176
|
retry,
|
|
174
|
-
auto_acknowledge_msg
|
|
177
|
+
auto_acknowledge_msg,
|
|
178
|
+
ack_deadline
|
|
175
179
|
};
|
|
176
180
|
}
|
|
177
181
|
function getGcpCaptureConfig() {
|
|
@@ -183,6 +187,7 @@ function getGcpCaptureConfig() {
|
|
|
183
187
|
delivery_config,
|
|
184
188
|
base_endpoint,
|
|
185
189
|
auto_acknowledge_msg,
|
|
190
|
+
ack_deadline,
|
|
186
191
|
topic_id,
|
|
187
192
|
path
|
|
188
193
|
};
|
|
@@ -337,6 +342,7 @@ $effect(() => {
|
|
|
337
342
|
bind:topic_id
|
|
338
343
|
bind:subscription_mode
|
|
339
344
|
bind:auto_acknowledge_msg
|
|
345
|
+
bind:ack_deadline
|
|
340
346
|
{path}
|
|
341
347
|
cloud_subscription_id={subscription_id}
|
|
342
348
|
create_update_subscription_id={subscription_id}
|
|
@@ -376,11 +382,28 @@ $effect(() => {
|
|
|
376
382
|
</div>
|
|
377
383
|
{/if}
|
|
378
384
|
</Subsection>
|
|
379
|
-
{:else}
|
|
380
|
-
<div class="flex items-center justify-center h-32 text-tertiary">
|
|
381
|
-
No settings available for push delivery type
|
|
382
|
-
</div>
|
|
383
385
|
{/if}
|
|
386
|
+
<Subsection
|
|
387
|
+
label="Acknowledgment deadline"
|
|
388
|
+
tooltip="Time in seconds within which the message must be acknowledged. If not provided, defaults to the subscription's acknowledgment deadline (600 seconds). Range: 10-600 seconds."
|
|
389
|
+
>
|
|
390
|
+
<div class="mt-2">
|
|
391
|
+
<input
|
|
392
|
+
type="number"
|
|
393
|
+
bind:value={ack_deadline}
|
|
394
|
+
disabled={!can_write}
|
|
395
|
+
min="10"
|
|
396
|
+
max="600"
|
|
397
|
+
step="1"
|
|
398
|
+
placeholder="600"
|
|
399
|
+
class="w-full px-3 py-2 text-sm border border-gray-200 dark:border-gray-700 rounded-md bg-surface text-primary focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
400
|
+
/>
|
|
401
|
+
</div>
|
|
402
|
+
<div class="mt-2 text-xs text-secondary">
|
|
403
|
+
Leave empty to use subscription default (600 seconds). This affects how long
|
|
404
|
+
messages remain in flight before being redelivered.
|
|
405
|
+
</div>
|
|
406
|
+
</Subsection>
|
|
384
407
|
</div>
|
|
385
408
|
{:else}
|
|
386
409
|
<TriggerRetriesAndErrorHandler
|
|
@@ -23,6 +23,7 @@ export async function saveGcpTriggerFromCfg(initialPath, cfg, edit, workspace, u
|
|
|
23
23
|
enabled: cfg.enabled,
|
|
24
24
|
is_flow: cfg.is_flow,
|
|
25
25
|
auto_acknowledge_msg: cfg.auto_acknowledge_msg,
|
|
26
|
+
ack_deadline: cfg.ack_deadline,
|
|
26
27
|
...errorHandlerAndRetries
|
|
27
28
|
};
|
|
28
29
|
if (edit) {
|
|
@@ -5,7 +5,7 @@ import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
|
|
|
5
5
|
import { DEFAULT_WEBHOOK_TYPE, SCRIPT_VIEW_SHOW_EXAMPLE_CURL, SCRIPT_VIEW_SHOW_CREATE_TOKEN_BUTTON } from '../../../consts';
|
|
6
6
|
import bash from 'svelte-highlight/languages/bash';
|
|
7
7
|
import { Tabs, Tab, TabContent, Button } from '../../common';
|
|
8
|
-
import { ArrowDownRight, ArrowUpRight, Clipboard } from 'lucide-svelte';
|
|
8
|
+
import { ArrowDownRight, ArrowUpRight, Clipboard, RssIcon } from 'lucide-svelte';
|
|
9
9
|
import { Highlight } from 'svelte-highlight';
|
|
10
10
|
import { typescript } from 'svelte-highlight/languages';
|
|
11
11
|
import ClipboardPanel from '../../details/ClipboardPanel.svelte';
|
|
@@ -20,12 +20,18 @@ let { isFlow = false, path = '', hash = undefined, token = $bindable(''), runnab
|
|
|
20
20
|
let webhooks = $derived(isFlow ? computeFlowWebhooks(path) : computeScriptWebhooks(hash, path));
|
|
21
21
|
let selectedTab = $state('rest');
|
|
22
22
|
let userSettings = $state();
|
|
23
|
-
let
|
|
24
|
-
let
|
|
23
|
+
let requestType = $state(DEFAULT_WEBHOOK_TYPE);
|
|
24
|
+
let callMethod = $state('post');
|
|
25
|
+
let runnableId = $state('path');
|
|
25
26
|
let tokenType = $state('headers');
|
|
26
27
|
$effect(() => {
|
|
27
|
-
if (
|
|
28
|
-
|
|
28
|
+
if (requestType === 'async' && (callMethod === 'get' || callMethod === 'sse')) {
|
|
29
|
+
callMethod = 'post';
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
$effect(() => {
|
|
33
|
+
if (callMethod === 'sse' && tokenType === 'headers') {
|
|
34
|
+
tokenType = 'query';
|
|
29
35
|
}
|
|
30
36
|
});
|
|
31
37
|
let cleanedRunnableArgs = $derived.by(() => {
|
|
@@ -34,25 +40,37 @@ let cleanedRunnableArgs = $derived.by(() => {
|
|
|
34
40
|
? Object.fromEntries(Object.entries(runnableArgs).filter(([key]) => key !== 'wm_trigger'))
|
|
35
41
|
: runnableArgs;
|
|
36
42
|
});
|
|
37
|
-
let url = $derived(webhooks[
|
|
43
|
+
let url = $derived(webhooks[requestType][callMethod][runnableId] +
|
|
38
44
|
(tokenType === 'query'
|
|
39
|
-
? `?token=${token}${
|
|
45
|
+
? `?token=${token}${callMethod === 'get' || callMethod === 'sse'
|
|
40
46
|
? `&payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
|
|
41
47
|
: ''}`
|
|
42
|
-
: `${
|
|
48
|
+
: `${callMethod === 'get'
|
|
43
49
|
? `?payload=${encodeURIComponent(btoa(JSON.stringify(cleanedRunnableArgs ?? {})))}`
|
|
44
50
|
: ''}`));
|
|
45
51
|
function computeScriptWebhooks(hash, path) {
|
|
46
52
|
let webhookBase = `${location.origin}${base}/api/w/${$workspaceStore}/jobs`;
|
|
47
53
|
return {
|
|
48
54
|
async: {
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
get: {},
|
|
56
|
+
post: {
|
|
57
|
+
hash: `${webhookBase}/run/h/${hash}`,
|
|
58
|
+
path: `${webhookBase}/run/p/${path}`
|
|
59
|
+
},
|
|
60
|
+
sse: {}
|
|
51
61
|
},
|
|
52
62
|
sync: {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
get: {
|
|
64
|
+
path: `${webhookBase}/run_wait_result/p/${path}`
|
|
65
|
+
},
|
|
66
|
+
post: {
|
|
67
|
+
hash: `${webhookBase}/run_wait_result/h/${hash}`,
|
|
68
|
+
path: `${webhookBase}/run_wait_result/p/${path}`
|
|
69
|
+
},
|
|
70
|
+
sse: {
|
|
71
|
+
hash: `${webhookBase}/run_and_stream/h/${hash}`,
|
|
72
|
+
path: `${webhookBase}/run_and_stream/p/${path}`
|
|
73
|
+
}
|
|
56
74
|
}
|
|
57
75
|
};
|
|
58
76
|
}
|
|
@@ -60,19 +78,31 @@ function computeFlowWebhooks(path) {
|
|
|
60
78
|
let webhooksBase = `${location.origin}${base}/api/w/${$workspaceStore}/jobs`;
|
|
61
79
|
let urlAsync = `${webhooksBase}/run/f/${path}`;
|
|
62
80
|
let urlSync = `${webhooksBase}/run_wait_result/f/${path}`;
|
|
81
|
+
let urlStream = `${webhooksBase}/run_and_stream/f/${path}`;
|
|
63
82
|
return {
|
|
64
83
|
async: {
|
|
65
|
-
|
|
84
|
+
get: {},
|
|
85
|
+
post: {
|
|
86
|
+
path: urlAsync
|
|
87
|
+
},
|
|
88
|
+
sse: {}
|
|
66
89
|
},
|
|
67
90
|
sync: {
|
|
68
|
-
|
|
69
|
-
|
|
91
|
+
get: {
|
|
92
|
+
path: urlSync
|
|
93
|
+
},
|
|
94
|
+
post: {
|
|
95
|
+
path: urlSync
|
|
96
|
+
},
|
|
97
|
+
sse: {
|
|
98
|
+
path: urlStream
|
|
99
|
+
}
|
|
70
100
|
}
|
|
71
101
|
};
|
|
72
102
|
}
|
|
73
103
|
function headers() {
|
|
74
104
|
const headers = {};
|
|
75
|
-
if (
|
|
105
|
+
if (callMethod === 'post') {
|
|
76
106
|
headers['Content-Type'] = 'application/json';
|
|
77
107
|
}
|
|
78
108
|
if (tokenType === 'headers') {
|
|
@@ -81,7 +111,34 @@ function headers() {
|
|
|
81
111
|
return headers;
|
|
82
112
|
}
|
|
83
113
|
function fetchCode() {
|
|
84
|
-
if (
|
|
114
|
+
if (callMethod === 'sse') {
|
|
115
|
+
return `
|
|
116
|
+
import { EventSource } from "eventsource";
|
|
117
|
+
|
|
118
|
+
export async function main() {
|
|
119
|
+
const endpoint = \`${url}\`;
|
|
120
|
+
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
const eventSource = new EventSource(endpoint);
|
|
123
|
+
|
|
124
|
+
eventSource.onmessage = (event) => {
|
|
125
|
+
const data = JSON.parse(event.data);
|
|
126
|
+
console.log(data);
|
|
127
|
+
if (data.completed) {
|
|
128
|
+
eventSource.close();
|
|
129
|
+
resolve();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
eventSource.onerror = (error) => {
|
|
134
|
+
console.error('EventSource error:', error);
|
|
135
|
+
eventSource.close();
|
|
136
|
+
reject(error);
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
}`;
|
|
140
|
+
}
|
|
141
|
+
if (requestType === 'sync') {
|
|
85
142
|
return `
|
|
86
143
|
export async function main() {
|
|
87
144
|
const jobTriggerResponse = await triggerJob();
|
|
@@ -90,39 +147,40 @@ export async function main() {
|
|
|
90
147
|
}
|
|
91
148
|
|
|
92
149
|
async function triggerJob() {
|
|
93
|
-
${
|
|
150
|
+
${callMethod === 'get'
|
|
94
151
|
? '// Payload is a base64 encoded string of the arguments'
|
|
95
152
|
: `const body = JSON.stringify(${JSON.stringify(cleanedRunnableArgs ?? {}, null, 2).replaceAll('\n', '\n\t')});`}
|
|
96
153
|
const endpoint = \`${url}\`;
|
|
97
154
|
|
|
98
155
|
return await fetch(endpoint, {
|
|
99
|
-
method: '${
|
|
100
|
-
headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t')}${
|
|
156
|
+
method: '${callMethod === 'get' ? 'GET' : 'POST'}',
|
|
157
|
+
headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t')}${callMethod === 'get' ? '' : `,\n\t\tbody`}
|
|
101
158
|
});
|
|
102
159
|
}`;
|
|
103
160
|
}
|
|
104
|
-
|
|
105
|
-
|
|
161
|
+
else {
|
|
162
|
+
// Main function
|
|
163
|
+
let mainFunction = `
|
|
106
164
|
export async function main() {
|
|
107
165
|
const jobTriggerResponse = await triggerJob();
|
|
108
166
|
const UUID = await jobTriggerResponse.text();
|
|
109
167
|
const jobCompletionData = await waitForJobCompletion(UUID);
|
|
110
168
|
return jobCompletionData;
|
|
111
169
|
}`;
|
|
112
|
-
|
|
113
|
-
|
|
170
|
+
// triggerJob function
|
|
171
|
+
let triggerJobFunction = `
|
|
114
172
|
async function triggerJob() {
|
|
115
173
|
const body = JSON.stringify(${JSON.stringify(cleanedRunnableArgs ?? {}, null, 2).replaceAll('\n', '\n\t')});
|
|
116
174
|
const endpoint = \`${url}\`;
|
|
117
175
|
|
|
118
176
|
return await fetch(endpoint, {
|
|
119
|
-
method: '${
|
|
177
|
+
method: '${callMethod === 'get' ? 'GET' : 'POST'}',
|
|
120
178
|
headers: ${JSON.stringify(headers(), null, 2).replaceAll('\n', '\n\t\t')},
|
|
121
179
|
body
|
|
122
180
|
});
|
|
123
181
|
}`;
|
|
124
|
-
|
|
125
|
-
|
|
182
|
+
// waitForJobCompletion function
|
|
183
|
+
let waitForJobCompletionFunction = `
|
|
126
184
|
function waitForJobCompletion(UUID) {
|
|
127
185
|
return new Promise(async (resolve, reject) => {
|
|
128
186
|
try {
|
|
@@ -148,16 +206,17 @@ function waitForJobCompletion(UUID) {
|
|
|
148
206
|
}
|
|
149
207
|
});
|
|
150
208
|
}`;
|
|
151
|
-
|
|
152
|
-
|
|
209
|
+
// Combine and return
|
|
210
|
+
return `${mainFunction}\n\n${triggerJobFunction}\n\n${waitForJobCompletionFunction}`;
|
|
211
|
+
}
|
|
153
212
|
}
|
|
154
213
|
function curlCode() {
|
|
155
214
|
return `TOKEN='${token}'
|
|
156
|
-
${
|
|
215
|
+
${callMethod !== 'get' ? `BODY='${JSON.stringify(cleanedRunnableArgs ?? {})}'` : ''}
|
|
157
216
|
URL='${url}'
|
|
158
|
-
${
|
|
217
|
+
${requestType === 'sync' ? 'RESULT' : 'UUID'}=$(curl -s ${callMethod != 'get' ? "-H 'Content-Type: application/json'" : ''} ${tokenType === 'headers' ? `-H "Authorization: Bearer $TOKEN"` : ''} -X ${callMethod === 'get' ? 'GET' : 'POST'} ${callMethod !== 'get' ? `-d "$BODY" ` : ''}$URL)
|
|
159
218
|
|
|
160
|
-
${
|
|
219
|
+
${requestType === 'sync'
|
|
161
220
|
? 'echo -E $RESULT | jq'
|
|
162
221
|
: `
|
|
163
222
|
URL="${location.origin}/api/w/${$workspaceStore}/jobs_u/completed/get_result_maybe/$UUID"
|
|
@@ -213,7 +272,7 @@ done`}`;
|
|
|
213
272
|
<div class="flex flex-col gap-2">
|
|
214
273
|
<div class="flex flex-row justify-between">
|
|
215
274
|
<div class="text-sm font-normal text-secondary flex flex-row items-center">Request type</div>
|
|
216
|
-
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={
|
|
275
|
+
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={requestType}>
|
|
217
276
|
{#snippet children({ item })}
|
|
218
277
|
<ToggleButton
|
|
219
278
|
label="Async"
|
|
@@ -232,44 +291,63 @@ done`}`;
|
|
|
232
291
|
</div>
|
|
233
292
|
<div class="flex flex-row justify-between">
|
|
234
293
|
<div class="text-sm font-normal text-secondary flex flex-row items-center">Call method</div>
|
|
235
|
-
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={
|
|
294
|
+
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={callMethod}>
|
|
236
295
|
{#snippet children({ item })}
|
|
237
296
|
<ToggleButton
|
|
238
|
-
label="POST
|
|
239
|
-
|
|
240
|
-
|
|
297
|
+
label="POST"
|
|
298
|
+
icon={ArrowDownRight}
|
|
299
|
+
selectedColor="#14b8a6"
|
|
300
|
+
value="post"
|
|
241
301
|
{item}
|
|
302
|
+
/>
|
|
303
|
+
<ToggleButton
|
|
304
|
+
label="GET"
|
|
305
|
+
icon={ArrowUpRight}
|
|
242
306
|
selectedColor="#fb923c"
|
|
307
|
+
value="get"
|
|
308
|
+
{item}
|
|
309
|
+
disabled={requestType !== 'sync'}
|
|
243
310
|
/>
|
|
244
|
-
{#if !isFlow}
|
|
245
|
-
<ToggleButton
|
|
246
|
-
label="POST by hash"
|
|
247
|
-
value="hash"
|
|
248
|
-
icon={ArrowUpRight}
|
|
249
|
-
selectedColor="#fb923c"
|
|
250
|
-
disabled={!hash}
|
|
251
|
-
{item}
|
|
252
|
-
/>
|
|
253
|
-
{/if}
|
|
254
|
-
|
|
255
311
|
<ToggleButton
|
|
256
|
-
label="
|
|
257
|
-
value="
|
|
258
|
-
icon={
|
|
259
|
-
|
|
312
|
+
label="SSE"
|
|
313
|
+
value="sse"
|
|
314
|
+
icon={RssIcon}
|
|
315
|
+
selectedColor="#3B82F6"
|
|
316
|
+
disabled={requestType !== 'sync'}
|
|
317
|
+
tooltip={'Returns an SSE stream. ' +
|
|
318
|
+
(isFlow
|
|
319
|
+
? 'Only useful if the last step of the flow returns a stream.'
|
|
320
|
+
: 'Only useful if the script returns a stream.')}
|
|
260
321
|
{item}
|
|
261
|
-
selectedColor="#14b8a6"
|
|
262
322
|
/>
|
|
263
323
|
{/snippet}
|
|
264
324
|
</ToggleButtonGroup>
|
|
265
325
|
</div>
|
|
326
|
+
{#if !isFlow}
|
|
327
|
+
<div class="flex flex-row justify-between">
|
|
328
|
+
<div class="text-sm font-normal text-secondary flex flex-row items-center">
|
|
329
|
+
Reference type
|
|
330
|
+
</div>
|
|
331
|
+
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={runnableId}>
|
|
332
|
+
{#snippet children({ item })}
|
|
333
|
+
<ToggleButton label="Path" value="path" {item} />
|
|
334
|
+
<ToggleButton label="Hash" value="hash" disabled={!hash} {item} />
|
|
335
|
+
{/snippet}
|
|
336
|
+
</ToggleButtonGroup>
|
|
337
|
+
</div>
|
|
338
|
+
{/if}
|
|
266
339
|
<div class="flex flex-row justify-between">
|
|
267
340
|
<div class="text-sm font-normal text-secondary flex flex-row items-center"
|
|
268
341
|
>Token configuration</div
|
|
269
342
|
>
|
|
270
343
|
<ToggleButtonGroup class="h-[30px] w-auto" bind:selected={tokenType}>
|
|
271
344
|
{#snippet children({ item })}
|
|
272
|
-
<ToggleButton
|
|
345
|
+
<ToggleButton
|
|
346
|
+
label="Token in Headers"
|
|
347
|
+
value="headers"
|
|
348
|
+
{item}
|
|
349
|
+
disabled={callMethod === 'sse'}
|
|
350
|
+
/>
|
|
273
351
|
<ToggleButton label="Token in Query" value="query" {item} />
|
|
274
352
|
{/snippet}
|
|
275
353
|
</ToggleButtonGroup>
|
|
@@ -281,10 +359,12 @@ done`}`;
|
|
|
281
359
|
<div>
|
|
282
360
|
<Tabs bind:selected={selectedTab}>
|
|
283
361
|
<Tab value="rest" size="xs">REST</Tab>
|
|
284
|
-
{#if SCRIPT_VIEW_SHOW_EXAMPLE_CURL}
|
|
362
|
+
{#if SCRIPT_VIEW_SHOW_EXAMPLE_CURL && callMethod !== 'sse'}
|
|
285
363
|
<Tab value="curl" size="xs">Curl</Tab>
|
|
286
364
|
{/if}
|
|
287
|
-
<Tab value="fetch" size="xs">
|
|
365
|
+
<Tab value="fetch" size="xs">
|
|
366
|
+
{callMethod === 'sse' ? 'Event Source' : 'Fetch'}
|
|
367
|
+
</Tab>
|
|
288
368
|
|
|
289
369
|
{#snippet content()}
|
|
290
370
|
{#key token}
|
|
@@ -294,12 +374,12 @@ done`}`;
|
|
|
294
374
|
<ClipboardPanel content={url} />
|
|
295
375
|
</Label>
|
|
296
376
|
|
|
297
|
-
{#if
|
|
377
|
+
{#if callMethod !== 'get'}
|
|
298
378
|
<Label label="Body">
|
|
299
379
|
<ClipboardPanel content={JSON.stringify(cleanedRunnableArgs ?? {}, null, 2)} />
|
|
300
380
|
</Label>
|
|
301
381
|
{/if}
|
|
302
|
-
{#key
|
|
382
|
+
{#key callMethod}
|
|
303
383
|
{#key tokenType}
|
|
304
384
|
<Label label="Headers">
|
|
305
385
|
<ClipboardPanel content={JSON.stringify(headers(), null, 2)} />
|
|
@@ -311,8 +391,8 @@ done`}`;
|
|
|
311
391
|
<TabContent value="curl" class="flex flex-col flex-1 h-full">
|
|
312
392
|
<div class="relative">
|
|
313
393
|
{#key runnableArgs}
|
|
314
|
-
{#key
|
|
315
|
-
{#key
|
|
394
|
+
{#key callMethod}
|
|
395
|
+
{#key requestType}
|
|
316
396
|
{#key tokenType}
|
|
317
397
|
<div
|
|
318
398
|
class="flex flex-row flex-1 h-full border p-2 rounded-md overflow-auto relative"
|
|
@@ -332,8 +412,8 @@ done`}`;
|
|
|
332
412
|
</TabContent>
|
|
333
413
|
<TabContent value="fetch">
|
|
334
414
|
{#key runnableArgs}
|
|
335
|
-
{#key
|
|
336
|
-
{#key
|
|
415
|
+
{#key callMethod}
|
|
416
|
+
{#key requestType}
|
|
337
417
|
{#key tokenType}
|
|
338
418
|
{#key token}
|
|
339
419
|
<div
|
|
@@ -39,6 +39,7 @@ let filters = $state([]);
|
|
|
39
39
|
let initial_messages = $state([]);
|
|
40
40
|
let url_runnable_args = $state({});
|
|
41
41
|
let can_return_message = $state(false);
|
|
42
|
+
let can_return_error_result = $state(false);
|
|
42
43
|
let dirtyPath = $state(false);
|
|
43
44
|
let can_write = $state(true);
|
|
44
45
|
let drawerLoading = $state(true);
|
|
@@ -70,6 +71,11 @@ const saveDisabled = $derived.by(() => {
|
|
|
70
71
|
$effect(() => {
|
|
71
72
|
is_flow = itemKind === 'flow';
|
|
72
73
|
});
|
|
74
|
+
$effect(() => {
|
|
75
|
+
if (!can_return_message) {
|
|
76
|
+
can_return_error_result = false;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
73
79
|
export async function openEdit(ePath, isFlow, defaultConfig) {
|
|
74
80
|
let loadingTimeout = setTimeout(() => {
|
|
75
81
|
showLoading = true;
|
|
@@ -118,6 +124,7 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
|
|
|
118
124
|
url_runnable_args = defaultValues?.url_runnable_args ?? {};
|
|
119
125
|
dirtyPath = false;
|
|
120
126
|
can_return_message = false;
|
|
127
|
+
can_return_error_result = false;
|
|
121
128
|
error_handler_path = defaultValues?.error_handler_path ?? undefined;
|
|
122
129
|
error_handler_args = defaultValues?.error_handler_args ?? {};
|
|
123
130
|
retry = defaultValues?.retry ?? undefined;
|
|
@@ -140,6 +147,7 @@ function loadTriggerConfig(cfg) {
|
|
|
140
147
|
initial_messages = cfg?.initial_messages ?? [];
|
|
141
148
|
url_runnable_args = cfg?.url_runnable_args;
|
|
142
149
|
can_return_message = cfg?.can_return_message;
|
|
150
|
+
can_return_error_result = cfg?.can_return_error_result;
|
|
143
151
|
can_write = canWrite(path, cfg?.extra_perms, $userStore);
|
|
144
152
|
error_handler_path = cfg?.error_handler_path;
|
|
145
153
|
error_handler_args = cfg?.error_handler_args ?? {};
|
|
@@ -157,6 +165,7 @@ function getSaveCfg() {
|
|
|
157
165
|
initial_messages,
|
|
158
166
|
url_runnable_args,
|
|
159
167
|
can_return_message,
|
|
168
|
+
can_return_error_result,
|
|
160
169
|
enabled,
|
|
161
170
|
error_handler_path,
|
|
162
171
|
error_handler_args,
|
|
@@ -377,6 +386,19 @@ $effect(() => {
|
|
|
377
386
|
}}
|
|
378
387
|
disabled={!can_write}
|
|
379
388
|
/>
|
|
389
|
+
|
|
390
|
+
<Toggle
|
|
391
|
+
checked={can_return_error_result}
|
|
392
|
+
on:change={() => {
|
|
393
|
+
can_return_error_result = !can_return_error_result
|
|
394
|
+
}}
|
|
395
|
+
options={{
|
|
396
|
+
right: 'Send result on error',
|
|
397
|
+
rightTooltip:
|
|
398
|
+
'Allows the runnable result to be sent as a message to the WebSocket server if the result is a non-null error.'
|
|
399
|
+
}}
|
|
400
|
+
disabled={!can_write || !can_return_message}
|
|
401
|
+
/>
|
|
380
402
|
</Section>
|
|
381
403
|
|
|
382
404
|
<WebsocketEditorConfigSection
|
|
@@ -20,6 +20,7 @@ export async function saveWebsocketTriggerFromCfg(initialPath, triggerCfg, edit,
|
|
|
20
20
|
initial_messages: triggerCfg.initial_messages,
|
|
21
21
|
url_runnable_args: triggerCfg.url_runnable_args,
|
|
22
22
|
can_return_message: triggerCfg.can_return_message,
|
|
23
|
+
can_return_error_result: triggerCfg.can_return_error_result,
|
|
23
24
|
...errorHandlerAndRetries
|
|
24
25
|
};
|
|
25
26
|
try {
|
|
@@ -17,8 +17,9 @@ import { AIMode } from '../copilot/chat/AIChatManager.svelte';
|
|
|
17
17
|
import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
18
18
|
import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
|
|
19
19
|
import autosize from '../../autosize';
|
|
20
|
+
import ModelTokenLimits from './ModelTokenLimits.svelte';
|
|
20
21
|
const MAX_CUSTOM_PROMPT_LENGTH = 5000;
|
|
21
|
-
let { aiProviders = $bindable(), codeCompletionModel = $bindable(), defaultModel = $bindable(), customPrompts = $bindable(), usingOpenaiClientCredentialsOauth = $bindable() } = $props();
|
|
22
|
+
let { aiProviders = $bindable(), codeCompletionModel = $bindable(), defaultModel = $bindable(), customPrompts = $bindable(), maxTokensPerModel = $bindable(), usingOpenaiClientCredentialsOauth = $bindable() } = $props();
|
|
22
23
|
let fetchedAiModels = $state(false);
|
|
23
24
|
let availableAiModels = $state(Object.fromEntries(Object.keys(AI_PROVIDERS).map((provider) => [provider, AI_PROVIDERS[provider].defaultModels])));
|
|
24
25
|
// Custom system prompt settings
|
|
@@ -66,7 +67,8 @@ async function editCopilotConfig() {
|
|
|
66
67
|
providers: aiProviders,
|
|
67
68
|
code_completion_model,
|
|
68
69
|
default_model,
|
|
69
|
-
custom_prompts: Object.keys(custom_prompts).length > 0 ? custom_prompts : undefined
|
|
70
|
+
custom_prompts: Object.keys(custom_prompts).length > 0 ? custom_prompts : undefined,
|
|
71
|
+
max_tokens_per_model: Object.keys(maxTokensPerModel).length > 0 ? maxTokensPerModel : undefined
|
|
70
72
|
};
|
|
71
73
|
await WorkspaceService.editCopilotConfig({
|
|
72
74
|
workspace: $workspaceStore,
|
|
@@ -276,6 +278,10 @@ async function onAiProviderChange(provider) {
|
|
|
276
278
|
</div>
|
|
277
279
|
{/if}
|
|
278
280
|
|
|
281
|
+
{#if Object.keys(aiProviders).length > 0}
|
|
282
|
+
<ModelTokenLimits {aiProviders} bind:maxTokensPerModel />
|
|
283
|
+
{/if}
|
|
284
|
+
|
|
279
285
|
{#if Object.keys(aiProviders).length > 0}
|
|
280
286
|
<div class="flex flex-col gap-2">
|
|
281
287
|
<p class="font-semibold">Custom system prompts</p>
|
|
@@ -4,8 +4,9 @@ type $$ComponentProps = {
|
|
|
4
4
|
codeCompletionModel: string | undefined;
|
|
5
5
|
defaultModel: string | undefined;
|
|
6
6
|
customPrompts: Record<string, string>;
|
|
7
|
+
maxTokensPerModel: Record<string, number>;
|
|
7
8
|
usingOpenaiClientCredentialsOauth: boolean;
|
|
8
9
|
};
|
|
9
|
-
declare const AiSettings: import("svelte").Component<$$ComponentProps, {}, "codeCompletionModel" | "defaultModel" | "aiProviders" | "customPrompts" | "usingOpenaiClientCredentialsOauth">;
|
|
10
|
+
declare const AiSettings: import("svelte").Component<$$ComponentProps, {}, "codeCompletionModel" | "defaultModel" | "aiProviders" | "maxTokensPerModel" | "customPrompts" | "usingOpenaiClientCredentialsOauth">;
|
|
10
11
|
type AiSettings = ReturnType<typeof AiSettings>;
|
|
11
12
|
export default AiSettings;
|