@shipfox/client-agent 0.2.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/.storybook/main.ts +1 -0
- package/.storybook/preview.css +4 -0
- package/.storybook/preview.tsx +56 -0
- package/.turbo/turbo-build.log +2 -0
- package/.turbo/turbo-type$colon$emit.log +1 -0
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +93 -0
- package/LICENSE +21 -0
- package/dist/components/add-custom-provider-card.d.ts +4 -0
- package/dist/components/add-custom-provider-card.d.ts.map +1 -0
- package/dist/components/add-custom-provider-card.js +41 -0
- package/dist/components/add-custom-provider-card.js.map +1 -0
- package/dist/components/agent-workflow-example.d.ts +11 -0
- package/dist/components/agent-workflow-example.d.ts.map +1 -0
- package/dist/components/agent-workflow-example.js +38 -0
- package/dist/components/agent-workflow-example.js.map +1 -0
- package/dist/components/available-provider-card.d.ts +6 -0
- package/dist/components/available-provider-card.d.ts.map +1 -0
- package/dist/components/available-provider-card.js +41 -0
- package/dist/components/available-provider-card.js.map +1 -0
- package/dist/components/available-providers-grid.d.ts +10 -0
- package/dist/components/available-providers-grid.d.ts.map +1 -0
- package/dist/components/available-providers-grid.js +89 -0
- package/dist/components/available-providers-grid.js.map +1 -0
- package/dist/components/change-default-model-form.d.ts +9 -0
- package/dist/components/change-default-model-form.d.ts.map +1 -0
- package/dist/components/change-default-model-form.js +98 -0
- package/dist/components/change-default-model-form.js.map +1 -0
- package/dist/components/custom-model-provider-api-options.d.ts +7 -0
- package/dist/components/custom-model-provider-api-options.d.ts.map +1 -0
- package/dist/components/custom-model-provider-api-options.js +23 -0
- package/dist/components/custom-model-provider-api-options.js.map +1 -0
- package/dist/components/custom-model-provider-form.d.ts +8 -0
- package/dist/components/custom-model-provider-form.d.ts.map +1 -0
- package/dist/components/custom-model-provider-form.js +667 -0
- package/dist/components/custom-model-provider-form.js.map +1 -0
- package/dist/components/custom-model-provider-form.stories.d.ts +20 -0
- package/dist/components/custom-model-provider-form.stories.d.ts.map +1 -0
- package/dist/components/custom-model-provider-form.stories.js +104 -0
- package/dist/components/custom-model-provider-form.stories.js.map +1 -0
- package/dist/components/custom-model-provider-payload.d.ts +39 -0
- package/dist/components/custom-model-provider-payload.d.ts.map +1 -0
- package/dist/components/custom-model-provider-payload.js +203 -0
- package/dist/components/custom-model-provider-payload.js.map +1 -0
- package/dist/components/custom-model-provider-slug.d.ts +3 -0
- package/dist/components/custom-model-provider-slug.d.ts.map +1 -0
- package/dist/components/custom-model-provider-slug.js +14 -0
- package/dist/components/custom-model-provider-slug.js.map +1 -0
- package/dist/components/default-model-field.d.ts +16 -0
- package/dist/components/default-model-field.d.ts.map +1 -0
- package/dist/components/default-model-field.js +60 -0
- package/dist/components/default-model-field.js.map +1 -0
- package/dist/components/form-errors.d.ts +11 -0
- package/dist/components/form-errors.d.ts.map +1 -0
- package/dist/components/form-errors.js +101 -0
- package/dist/components/form-errors.js.map +1 -0
- package/dist/components/harness-availability.d.ts +8 -0
- package/dist/components/harness-availability.d.ts.map +1 -0
- package/dist/components/harness-availability.js +16 -0
- package/dist/components/harness-availability.js.map +1 -0
- package/dist/components/harnesses-section.d.ts +4 -0
- package/dist/components/harnesses-section.d.ts.map +1 -0
- package/dist/components/harnesses-section.js +249 -0
- package/dist/components/harnesses-section.js.map +1 -0
- package/dist/components/harnesses-section.stories.d.ts +25 -0
- package/dist/components/harnesses-section.stories.d.ts.map +1 -0
- package/dist/components/harnesses-section.stories.js +138 -0
- package/dist/components/harnesses-section.stories.js.map +1 -0
- package/dist/components/model-provider-usage-modal.d.ts +11 -0
- package/dist/components/model-provider-usage-modal.d.ts.map +1 -0
- package/dist/components/model-provider-usage-modal.js +349 -0
- package/dist/components/model-provider-usage-modal.js.map +1 -0
- package/dist/components/model-provider-usage-modal.stories.d.ts +21 -0
- package/dist/components/model-provider-usage-modal.stories.d.ts.map +1 -0
- package/dist/components/model-provider-usage-modal.stories.js +115 -0
- package/dist/components/model-provider-usage-modal.stories.js.map +1 -0
- package/dist/components/model-provider-usage-target.d.ts +14 -0
- package/dist/components/model-provider-usage-target.d.ts.map +1 -0
- package/dist/components/model-provider-usage-target.js +20 -0
- package/dist/components/model-provider-usage-target.js.map +1 -0
- package/dist/components/model-providers-section.d.ts +4 -0
- package/dist/components/model-providers-section.d.ts.map +1 -0
- package/dist/components/model-providers-section.js +668 -0
- package/dist/components/model-providers-section.js.map +1 -0
- package/dist/components/model-providers-section.stories.d.ts +32 -0
- package/dist/components/model-providers-section.stories.d.ts.map +1 -0
- package/dist/components/model-providers-section.stories.js +442 -0
- package/dist/components/model-providers-section.stories.js.map +1 -0
- package/dist/components/provider-search.d.ts +4 -0
- package/dist/components/provider-search.d.ts.map +1 -0
- package/dist/components/provider-search.js +13 -0
- package/dist/components/provider-search.js.map +1 -0
- package/dist/components/supported-model-provider-catalog-entry.d.ts +8 -0
- package/dist/components/supported-model-provider-catalog-entry.d.ts.map +1 -0
- package/dist/components/supported-model-provider-catalog-entry.js +9 -0
- package/dist/components/supported-model-provider-catalog-entry.js.map +1 -0
- package/dist/components/test-and-save-form.d.ts +10 -0
- package/dist/components/test-and-save-form.d.ts.map +1 -0
- package/dist/components/test-and-save-form.js +138 -0
- package/dist/components/test-and-save-form.js.map +1 -0
- package/dist/feature.d.ts +9 -0
- package/dist/feature.d.ts.map +1 -0
- package/dist/feature.js +13 -0
- package/dist/feature.js.map +1 -0
- package/dist/hooks/api/model-providers.d.ts +334 -0
- package/dist/hooks/api/model-providers.d.ts.map +1 -0
- package/dist/hooks/api/model-providers.js +190 -0
- package/dist/hooks/api/model-providers.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pages/model-provider-onboarding-page.d.ts +6 -0
- package/dist/pages/model-provider-onboarding-page.d.ts.map +1 -0
- package/dist/pages/model-provider-onboarding-page.js +295 -0
- package/dist/pages/model-provider-onboarding-page.js.map +1 -0
- package/dist/pages/model-provider-onboarding-page.stories.d.ts +27 -0
- package/dist/pages/model-provider-onboarding-page.stories.d.ts.map +1 -0
- package/dist/pages/model-provider-onboarding-page.stories.js +368 -0
- package/dist/pages/model-provider-onboarding-page.stories.js.map +1 -0
- package/dist/routes/model-provider.d.ts +5 -0
- package/dist/routes/model-provider.d.ts.map +1 -0
- package/dist/routes/model-provider.js +28 -0
- package/dist/routes/model-provider.js.map +1 -0
- package/dist/state/model-provider-onboarding.d.ts +3 -0
- package/dist/state/model-provider-onboarding.d.ts.map +1 -0
- package/dist/state/model-provider-onboarding.js +28 -0
- package/dist/state/model-provider-onboarding.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -0
- package/package.json +114 -0
- package/src/components/add-custom-provider-card.tsx +32 -0
- package/src/components/agent-workflow-example.test.ts +74 -0
- package/src/components/agent-workflow-example.ts +55 -0
- package/src/components/available-provider-card.tsx +39 -0
- package/src/components/available-providers-grid.test.tsx +55 -0
- package/src/components/available-providers-grid.tsx +106 -0
- package/src/components/change-default-model-form.tsx +104 -0
- package/src/components/custom-model-provider-api-options.test.ts +18 -0
- package/src/components/custom-model-provider-api-options.ts +12 -0
- package/src/components/custom-model-provider-form.stories.tsx +91 -0
- package/src/components/custom-model-provider-form.tsx +710 -0
- package/src/components/custom-model-provider-payload.test.ts +170 -0
- package/src/components/custom-model-provider-payload.ts +264 -0
- package/src/components/custom-model-provider-slug.test.ts +40 -0
- package/src/components/custom-model-provider-slug.ts +23 -0
- package/src/components/default-model-field.tsx +85 -0
- package/src/components/form-errors.test.ts +159 -0
- package/src/components/form-errors.ts +102 -0
- package/src/components/harness-availability.test.ts +45 -0
- package/src/components/harness-availability.ts +35 -0
- package/src/components/harnesses-section.stories.tsx +129 -0
- package/src/components/harnesses-section.test.tsx +188 -0
- package/src/components/harnesses-section.tsx +245 -0
- package/src/components/model-provider-usage-modal.stories.tsx +106 -0
- package/src/components/model-provider-usage-modal.test.tsx +210 -0
- package/src/components/model-provider-usage-modal.tsx +326 -0
- package/src/components/model-provider-usage-target.ts +36 -0
- package/src/components/model-providers-section.stories.tsx +345 -0
- package/src/components/model-providers-section.test.tsx +831 -0
- package/src/components/model-providers-section.tsx +645 -0
- package/src/components/provider-search.test.ts +45 -0
- package/src/components/provider-search.ts +18 -0
- package/src/components/supported-model-provider-catalog-entry.ts +19 -0
- package/src/components/test-and-save-form.tsx +166 -0
- package/src/feature.ts +12 -0
- package/src/hooks/api/model-providers.test.ts +167 -0
- package/src/hooks/api/model-providers.ts +281 -0
- package/src/index.ts +8 -0
- package/src/pages/model-provider-onboarding-page.stories.tsx +284 -0
- package/src/pages/model-provider-onboarding-page.test.tsx +368 -0
- package/src/pages/model-provider-onboarding-page.tsx +290 -0
- package/src/routes/model-provider.tsx +20 -0
- package/src/state/model-provider-onboarding.test.ts +55 -0
- package/src/state/model-provider-onboarding.ts +34 -0
- package/test/fixtures/model-providers.ts +111 -0
- package/test/setup.ts +3 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +3 -0
- package/tsconfig.test.json +8 -0
- package/vercel.json +8 -0
- package/vitest.config.ts +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supported-model-provider-catalog-entry.d.ts","sourceRoot":"","sources":["../../src/components/supported-model-provider-catalog-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,4BAA4B,EAAE,wBAAwB,EAAC,MAAM,wBAAwB,CAAC;AAEnG,MAAM,MAAM,kCAAkC,GAAG,4BAA4B,GAAG;IAC9E,EAAE,EAAE,wBAAwB,CAAC;IAC7B,cAAc,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAAG,SAAS,GAC9C,KAAK,IAAI,kCAAkC,CAE7C;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAAG,SAAS,GAC9C,kCAAkC,GAAG,SAAS,CAGhD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function isSupportedCatalogEntry(entry) {
|
|
2
|
+
return entry?.support_status === 'supported';
|
|
3
|
+
}
|
|
4
|
+
export function toSupportedCatalogEntry(entry) {
|
|
5
|
+
if (!isSupportedCatalogEntry(entry)) return undefined;
|
|
6
|
+
return entry;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=supported-model-provider-catalog-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/supported-model-provider-catalog-entry.ts"],"sourcesContent":["import type {ModelProviderCatalogEntryDto, SupportedModelProviderId} from '@shipfox/api-agent-dto';\n\nexport type SupportedModelProviderCatalogEntry = ModelProviderCatalogEntryDto & {\n id: SupportedModelProviderId;\n support_status: 'supported';\n};\n\nexport function isSupportedCatalogEntry(\n entry: ModelProviderCatalogEntryDto | undefined,\n): entry is SupportedModelProviderCatalogEntry {\n return entry?.support_status === 'supported';\n}\n\nexport function toSupportedCatalogEntry(\n entry: ModelProviderCatalogEntryDto | undefined,\n): SupportedModelProviderCatalogEntry | undefined {\n if (!isSupportedCatalogEntry(entry)) return undefined;\n return entry;\n}\n"],"names":["isSupportedCatalogEntry","entry","support_status","toSupportedCatalogEntry","undefined"],"mappings":"AAOA,OAAO,SAASA,wBACdC,KAA+C;IAE/C,OAAOA,OAAOC,mBAAmB;AACnC;AAEA,OAAO,SAASC,wBACdF,KAA+C;IAE/C,IAAI,CAACD,wBAAwBC,QAAQ,OAAOG;IAC5C,OAAOH;AACT"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ModelProviderCatalogEntryDto, ModelProviderConfigDto } from '@shipfox/api-agent-dto';
|
|
2
|
+
export declare const MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID = "model-provider-test-and-save-form";
|
|
3
|
+
export declare function ModelProviderTestAndSaveForm({ workspaceId, entry, existingConfig, onSaved, setAsDefaultOnSave, }: {
|
|
4
|
+
workspaceId: string;
|
|
5
|
+
entry: ModelProviderCatalogEntryDto;
|
|
6
|
+
existingConfig?: ModelProviderConfigDto | undefined;
|
|
7
|
+
onSaved: (savedDefaultModel: string | null) => void;
|
|
8
|
+
setAsDefaultOnSave?: boolean | undefined;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=test-and-save-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-and-save-form.d.ts","sourceRoot":"","sources":["../../src/components/test-and-save-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAiBhC,eAAO,MAAM,oCAAoC,sCAAsC,CAAC;AAExF,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,KAAK,EACL,cAAc,EACd,OAAO,EACP,kBAA0B,GAC3B,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,4BAA4B,CAAC;IACpC,cAAc,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACpD,OAAO,EAAE,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C,+BAwHA"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@shipfox/react-ui/button';
|
|
3
|
+
import { Callout } from '@shipfox/react-ui/callout';
|
|
4
|
+
import { FormField, FormFieldInput, fieldError } from '@shipfox/react-ui/form-field';
|
|
5
|
+
import { ModalBody, ModalFooter } from '@shipfox/react-ui/modal';
|
|
6
|
+
import { Text } from '@shipfox/react-ui/typography';
|
|
7
|
+
import { useForm } from '@tanstack/react-form';
|
|
8
|
+
import { useState } from 'react';
|
|
9
|
+
import { useUpsertModelProviderConfigMutation } from '#hooks/api/model-providers.js';
|
|
10
|
+
import { DefaultModelField, defaultModelFormValue, LATEST_MODEL_VALUE, selectedModelForCredentialsPayload } from './default-model-field.js';
|
|
11
|
+
import { modelProviderConfigErrorToFormError } from './form-errors.js';
|
|
12
|
+
export const MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID = 'model-provider-test-and-save-form';
|
|
13
|
+
export function ModelProviderTestAndSaveForm({ workspaceId, entry, existingConfig, onSaved, setAsDefaultOnSave = false }) {
|
|
14
|
+
const upsertConfig = useUpsertModelProviderConfigMutation();
|
|
15
|
+
const [formError, setFormError] = useState();
|
|
16
|
+
const form = useForm({
|
|
17
|
+
defaultValues: defaultFormValues(entry, existingConfig),
|
|
18
|
+
onSubmit: async ({ value })=>{
|
|
19
|
+
setFormError(undefined);
|
|
20
|
+
const credentials = Object.fromEntries(entry.credential_fields.map((credentialField)=>[
|
|
21
|
+
credentialField.key,
|
|
22
|
+
value[credentialField.key]?.trim() ?? ''
|
|
23
|
+
]));
|
|
24
|
+
const selectedModel = value.default_model ?? LATEST_MODEL_VALUE;
|
|
25
|
+
const defaultModel = existingConfig === undefined ? selectedModelForCredentialsPayload(selectedModel) : undefined;
|
|
26
|
+
try {
|
|
27
|
+
await upsertConfig.mutateAsync({
|
|
28
|
+
workspaceId,
|
|
29
|
+
providerId: entry.id,
|
|
30
|
+
body: {
|
|
31
|
+
...defaultModel !== undefined ? {
|
|
32
|
+
default_model: defaultModel
|
|
33
|
+
} : {},
|
|
34
|
+
credentials,
|
|
35
|
+
...setAsDefaultOnSave ? {
|
|
36
|
+
set_as_default: true
|
|
37
|
+
} : {}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
onSaved(selectedModelForCredentialsPayload(selectedModel));
|
|
41
|
+
} catch (error) {
|
|
42
|
+
const mapped = modelProviderConfigErrorToFormError(error);
|
|
43
|
+
setFormError(mapped.message);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
48
|
+
children: [
|
|
49
|
+
/*#__PURE__*/ _jsxs(ModalBody, {
|
|
50
|
+
className: "gap-16",
|
|
51
|
+
children: [
|
|
52
|
+
/*#__PURE__*/ _jsxs("form", {
|
|
53
|
+
id: MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID,
|
|
54
|
+
className: "flex w-full flex-col gap-14",
|
|
55
|
+
noValidate: true,
|
|
56
|
+
onSubmit: (event)=>{
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.stopPropagation();
|
|
59
|
+
void form.handleSubmit();
|
|
60
|
+
},
|
|
61
|
+
children: [
|
|
62
|
+
existingConfig === undefined ? /*#__PURE__*/ _jsx(form.Field, {
|
|
63
|
+
name: "default_model",
|
|
64
|
+
validators: {
|
|
65
|
+
onBlur: ({ value })=>value.trim() ? undefined : 'Default model is required.',
|
|
66
|
+
onSubmit: ({ value })=>value.trim() ? undefined : 'Default model is required.'
|
|
67
|
+
},
|
|
68
|
+
children: (field)=>/*#__PURE__*/ _jsx(DefaultModelField, {
|
|
69
|
+
entry: entry,
|
|
70
|
+
value: field.state.value,
|
|
71
|
+
error: fieldError(field),
|
|
72
|
+
onChange: (event)=>field.handleChange(event.target.value),
|
|
73
|
+
onBlur: field.handleBlur
|
|
74
|
+
})
|
|
75
|
+
}) : null,
|
|
76
|
+
entry.credential_fields.map((credentialField)=>/*#__PURE__*/ _jsx(form.Field, {
|
|
77
|
+
name: credentialField.key,
|
|
78
|
+
validators: {
|
|
79
|
+
onBlur: ({ value })=>value.trim() ? undefined : `${credentialField.label} is required.`,
|
|
80
|
+
onSubmit: ({ value })=>value.trim() ? undefined : `${credentialField.label} is required.`
|
|
81
|
+
},
|
|
82
|
+
children: (field)=>/*#__PURE__*/ _jsx(FormField, {
|
|
83
|
+
label: credentialField.label,
|
|
84
|
+
id: `model-provider-${entry.id}-${credentialField.key}`,
|
|
85
|
+
error: fieldError(field),
|
|
86
|
+
children: /*#__PURE__*/ _jsx(FormFieldInput, {
|
|
87
|
+
type: credentialField.secret ? 'password' : 'text',
|
|
88
|
+
autoComplete: "off",
|
|
89
|
+
value: field.state.value,
|
|
90
|
+
onChange: (event)=>field.handleChange(event.target.value),
|
|
91
|
+
onBlur: field.handleBlur
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
}, credentialField.key))
|
|
95
|
+
]
|
|
96
|
+
}),
|
|
97
|
+
formError ? /*#__PURE__*/ _jsx(Callout, {
|
|
98
|
+
role: "alert",
|
|
99
|
+
type: "error",
|
|
100
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
101
|
+
className: "flex flex-col gap-8",
|
|
102
|
+
children: [
|
|
103
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
104
|
+
size: "sm",
|
|
105
|
+
bold: true,
|
|
106
|
+
children: "Could not save provider"
|
|
107
|
+
}),
|
|
108
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
109
|
+
size: "sm",
|
|
110
|
+
children: formError
|
|
111
|
+
})
|
|
112
|
+
]
|
|
113
|
+
})
|
|
114
|
+
}) : null
|
|
115
|
+
]
|
|
116
|
+
}),
|
|
117
|
+
/*#__PURE__*/ _jsx(ModalFooter, {
|
|
118
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
119
|
+
type: "submit",
|
|
120
|
+
form: MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID,
|
|
121
|
+
isLoading: upsertConfig.isPending,
|
|
122
|
+
children: "Test & save"
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function defaultFormValues(entry, existingConfig) {
|
|
129
|
+
return {
|
|
130
|
+
default_model: defaultModelFormValue(existingConfig?.default_model),
|
|
131
|
+
...Object.fromEntries(entry.credential_fields.map((field)=>[
|
|
132
|
+
field.key,
|
|
133
|
+
''
|
|
134
|
+
]))
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
//# sourceMappingURL=test-and-save-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/test-and-save-form.tsx"],"sourcesContent":["import type {\n ModelProviderCatalogEntryDto,\n ModelProviderConfigDto,\n SupportedModelProviderId,\n} from '@shipfox/api-agent-dto';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {FormField, FormFieldInput, fieldError} from '@shipfox/react-ui/form-field';\nimport {ModalBody, ModalFooter} from '@shipfox/react-ui/modal';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {useForm} from '@tanstack/react-form';\nimport {useState} from 'react';\nimport {useUpsertModelProviderConfigMutation} from '#hooks/api/model-providers.js';\nimport {\n DefaultModelField,\n defaultModelFormValue,\n LATEST_MODEL_VALUE,\n selectedModelForCredentialsPayload,\n} from './default-model-field.js';\nimport {modelProviderConfigErrorToFormError} from './form-errors.js';\n\nexport const MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID = 'model-provider-test-and-save-form';\n\nexport function ModelProviderTestAndSaveForm({\n workspaceId,\n entry,\n existingConfig,\n onSaved,\n setAsDefaultOnSave = false,\n}: {\n workspaceId: string;\n entry: ModelProviderCatalogEntryDto;\n existingConfig?: ModelProviderConfigDto | undefined;\n onSaved: (savedDefaultModel: string | null) => void;\n setAsDefaultOnSave?: boolean | undefined;\n}) {\n const upsertConfig = useUpsertModelProviderConfigMutation();\n const [formError, setFormError] = useState<string | undefined>();\n const form = useForm({\n defaultValues: defaultFormValues(entry, existingConfig),\n onSubmit: async ({value}) => {\n setFormError(undefined);\n const credentials = Object.fromEntries(\n entry.credential_fields.map((credentialField) => [\n credentialField.key,\n value[credentialField.key]?.trim() ?? '',\n ]),\n );\n const selectedModel = value.default_model ?? LATEST_MODEL_VALUE;\n const defaultModel =\n existingConfig === undefined\n ? selectedModelForCredentialsPayload(selectedModel)\n : undefined;\n\n try {\n await upsertConfig.mutateAsync({\n workspaceId,\n providerId: entry.id as SupportedModelProviderId,\n body: {\n ...(defaultModel !== undefined ? {default_model: defaultModel} : {}),\n credentials,\n ...(setAsDefaultOnSave ? {set_as_default: true} : {}),\n },\n });\n onSaved(selectedModelForCredentialsPayload(selectedModel));\n } catch (error) {\n const mapped = modelProviderConfigErrorToFormError(error);\n setFormError(mapped.message);\n }\n },\n });\n\n return (\n <>\n <ModalBody className=\"gap-16\">\n <form\n id={MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID}\n className=\"flex w-full flex-col gap-14\"\n noValidate\n onSubmit={(event) => {\n event.preventDefault();\n event.stopPropagation();\n void form.handleSubmit();\n }}\n >\n {existingConfig === undefined ? (\n <form.Field\n name=\"default_model\"\n validators={{\n onBlur: ({value}) => (value.trim() ? undefined : 'Default model is required.'),\n onSubmit: ({value}) => (value.trim() ? undefined : 'Default model is required.'),\n }}\n >\n {(field) => (\n <DefaultModelField\n entry={entry}\n value={field.state.value}\n error={fieldError(field)}\n onChange={(event) => field.handleChange(event.target.value)}\n onBlur={field.handleBlur}\n />\n )}\n </form.Field>\n ) : null}\n {entry.credential_fields.map((credentialField) => (\n <form.Field\n key={credentialField.key}\n name={credentialField.key}\n validators={{\n onBlur: ({value}) =>\n value.trim() ? undefined : `${credentialField.label} is required.`,\n onSubmit: ({value}) =>\n value.trim() ? undefined : `${credentialField.label} is required.`,\n }}\n >\n {(field) => (\n <FormField\n label={credentialField.label}\n id={`model-provider-${entry.id}-${credentialField.key}`}\n error={fieldError(field)}\n >\n <FormFieldInput\n type={credentialField.secret ? 'password' : 'text'}\n autoComplete=\"off\"\n value={field.state.value}\n onChange={(event) => field.handleChange(event.target.value)}\n onBlur={field.handleBlur}\n />\n </FormField>\n )}\n </form.Field>\n ))}\n </form>\n {formError ? (\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex flex-col gap-8\">\n <Text size=\"sm\" bold>\n Could not save provider\n </Text>\n <Text size=\"sm\">{formError}</Text>\n </div>\n </Callout>\n ) : null}\n </ModalBody>\n <ModalFooter>\n <Button\n type=\"submit\"\n form={MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID}\n isLoading={upsertConfig.isPending}\n >\n Test & save\n </Button>\n </ModalFooter>\n </>\n );\n}\n\nfunction defaultFormValues(\n entry: ModelProviderCatalogEntryDto,\n existingConfig: ModelProviderConfigDto | undefined,\n): Record<string, string> {\n return {\n default_model: defaultModelFormValue(existingConfig?.default_model),\n ...Object.fromEntries(entry.credential_fields.map((field) => [field.key, ''])),\n };\n}\n"],"names":["Button","Callout","FormField","FormFieldInput","fieldError","ModalBody","ModalFooter","Text","useForm","useState","useUpsertModelProviderConfigMutation","DefaultModelField","defaultModelFormValue","LATEST_MODEL_VALUE","selectedModelForCredentialsPayload","modelProviderConfigErrorToFormError","MODEL_PROVIDER_TEST_AND_SAVE_FORM_ID","ModelProviderTestAndSaveForm","workspaceId","entry","existingConfig","onSaved","setAsDefaultOnSave","upsertConfig","formError","setFormError","form","defaultValues","defaultFormValues","onSubmit","value","undefined","credentials","Object","fromEntries","credential_fields","map","credentialField","key","trim","selectedModel","default_model","defaultModel","mutateAsync","providerId","id","body","set_as_default","error","mapped","message","className","noValidate","event","preventDefault","stopPropagation","handleSubmit","Field","name","validators","onBlur","field","state","onChange","handleChange","target","handleBlur","label","type","secret","autoComplete","role","div","size","bold","isLoading","isPending"],"mappings":";AAKA,SAAQA,MAAM,QAAO,2BAA2B;AAChD,SAAQC,OAAO,QAAO,4BAA4B;AAClD,SAAQC,SAAS,EAAEC,cAAc,EAAEC,UAAU,QAAO,+BAA+B;AACnF,SAAQC,SAAS,EAAEC,WAAW,QAAO,0BAA0B;AAC/D,SAAQC,IAAI,QAAO,+BAA+B;AAClD,SAAQC,OAAO,QAAO,uBAAuB;AAC7C,SAAQC,QAAQ,QAAO,QAAQ;AAC/B,SAAQC,oCAAoC,QAAO,gCAAgC;AACnF,SACEC,iBAAiB,EACjBC,qBAAqB,EACrBC,kBAAkB,EAClBC,kCAAkC,QAC7B,2BAA2B;AAClC,SAAQC,mCAAmC,QAAO,mBAAmB;AAErE,OAAO,MAAMC,uCAAuC,oCAAoC;AAExF,OAAO,SAASC,6BAA6B,EAC3CC,WAAW,EACXC,KAAK,EACLC,cAAc,EACdC,OAAO,EACPC,qBAAqB,KAAK,EAO3B;IACC,MAAMC,eAAeb;IACrB,MAAM,CAACc,WAAWC,aAAa,GAAGhB;IAClC,MAAMiB,OAAOlB,QAAQ;QACnBmB,eAAeC,kBAAkBT,OAAOC;QACxCS,UAAU,OAAO,EAACC,KAAK,EAAC;YACtBL,aAAaM;YACb,MAAMC,cAAcC,OAAOC,WAAW,CACpCf,MAAMgB,iBAAiB,CAACC,GAAG,CAAC,CAACC,kBAAoB;oBAC/CA,gBAAgBC,GAAG;oBACnBR,KAAK,CAACO,gBAAgBC,GAAG,CAAC,EAAEC,UAAU;iBACvC;YAEH,MAAMC,gBAAgBV,MAAMW,aAAa,IAAI5B;YAC7C,MAAM6B,eACJtB,mBAAmBW,YACfjB,mCAAmC0B,iBACnCT;YAEN,IAAI;gBACF,MAAMR,aAAaoB,WAAW,CAAC;oBAC7BzB;oBACA0B,YAAYzB,MAAM0B,EAAE;oBACpBC,MAAM;wBACJ,GAAIJ,iBAAiBX,YAAY;4BAACU,eAAeC;wBAAY,IAAI,CAAC,CAAC;wBACnEV;wBACA,GAAIV,qBAAqB;4BAACyB,gBAAgB;wBAAI,IAAI,CAAC,CAAC;oBACtD;gBACF;gBACA1B,QAAQP,mCAAmC0B;YAC7C,EAAE,OAAOQ,OAAO;gBACd,MAAMC,SAASlC,oCAAoCiC;gBACnDvB,aAAawB,OAAOC,OAAO;YAC7B;QACF;IACF;IAEA,qBACE;;0BACE,MAAC7C;gBAAU8C,WAAU;;kCACnB,MAACzB;wBACCmB,IAAI7B;wBACJmC,WAAU;wBACVC,UAAU;wBACVvB,UAAU,CAACwB;4BACTA,MAAMC,cAAc;4BACpBD,MAAME,eAAe;4BACrB,KAAK7B,KAAK8B,YAAY;wBACxB;;4BAECpC,mBAAmBW,0BAClB,KAACL,KAAK+B,KAAK;gCACTC,MAAK;gCACLC,YAAY;oCACVC,QAAQ,CAAC,EAAC9B,KAAK,EAAC,GAAMA,MAAMS,IAAI,KAAKR,YAAY;oCACjDF,UAAU,CAAC,EAACC,KAAK,EAAC,GAAMA,MAAMS,IAAI,KAAKR,YAAY;gCACrD;0CAEC,CAAC8B,sBACA,KAAClD;wCACCQ,OAAOA;wCACPW,OAAO+B,MAAMC,KAAK,CAAChC,KAAK;wCACxBkB,OAAO5C,WAAWyD;wCAClBE,UAAU,CAACV,QAAUQ,MAAMG,YAAY,CAACX,MAAMY,MAAM,CAACnC,KAAK;wCAC1D8B,QAAQC,MAAMK,UAAU;;iCAI5B;4BACH/C,MAAMgB,iBAAiB,CAACC,GAAG,CAAC,CAACC,gCAC5B,KAACX,KAAK+B,KAAK;oCAETC,MAAMrB,gBAAgBC,GAAG;oCACzBqB,YAAY;wCACVC,QAAQ,CAAC,EAAC9B,KAAK,EAAC,GACdA,MAAMS,IAAI,KAAKR,YAAY,GAAGM,gBAAgB8B,KAAK,CAAC,aAAa,CAAC;wCACpEtC,UAAU,CAAC,EAACC,KAAK,EAAC,GAChBA,MAAMS,IAAI,KAAKR,YAAY,GAAGM,gBAAgB8B,KAAK,CAAC,aAAa,CAAC;oCACtE;8CAEC,CAACN,sBACA,KAAC3D;4CACCiE,OAAO9B,gBAAgB8B,KAAK;4CAC5BtB,IAAI,CAAC,eAAe,EAAE1B,MAAM0B,EAAE,CAAC,CAAC,EAAER,gBAAgBC,GAAG,EAAE;4CACvDU,OAAO5C,WAAWyD;sDAElB,cAAA,KAAC1D;gDACCiE,MAAM/B,gBAAgBgC,MAAM,GAAG,aAAa;gDAC5CC,cAAa;gDACbxC,OAAO+B,MAAMC,KAAK,CAAChC,KAAK;gDACxBiC,UAAU,CAACV,QAAUQ,MAAMG,YAAY,CAACX,MAAMY,MAAM,CAACnC,KAAK;gDAC1D8B,QAAQC,MAAMK,UAAU;;;mCApBzB7B,gBAAgBC,GAAG;;;oBA2B7Bd,0BACC,KAACvB;wBAAQsE,MAAK;wBAAQH,MAAK;kCACzB,cAAA,MAACI;4BAAIrB,WAAU;;8CACb,KAAC5C;oCAAKkE,MAAK;oCAAKC,IAAI;8CAAC;;8CAGrB,KAACnE;oCAAKkE,MAAK;8CAAMjD;;;;yBAGnB;;;0BAEN,KAAClB;0BACC,cAAA,KAACN;oBACCoE,MAAK;oBACL1C,MAAMV;oBACN2D,WAAWpD,aAAaqD,SAAS;8BAClC;;;;;AAMT;AAEA,SAAShD,kBACPT,KAAmC,EACnCC,cAAkD;IAElD,OAAO;QACLqB,eAAe7B,sBAAsBQ,gBAAgBqB;QACrD,GAAGR,OAAOC,WAAW,CAACf,MAAMgB,iBAAiB,CAACC,GAAG,CAAC,CAACyB,QAAU;gBAACA,MAAMvB,GAAG;gBAAE;aAAG,EAAE;IAChF;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const agentFeature: {
|
|
2
|
+
readonly id: "shipfox.agent";
|
|
3
|
+
readonly routes: readonly [{
|
|
4
|
+
readonly path: "/workspaces/$wid/model-provider";
|
|
5
|
+
readonly parent: "workspaceLayout";
|
|
6
|
+
readonly impl: "@shipfox/client-agent/routes/model-provider";
|
|
7
|
+
}];
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=feature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;CASvB,CAAC"}
|
package/dist/feature.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineClientFeature } from '@shipfox/client-shell';
|
|
2
|
+
export const agentFeature = defineClientFeature({
|
|
3
|
+
id: 'shipfox.agent',
|
|
4
|
+
routes: [
|
|
5
|
+
{
|
|
6
|
+
path: '/workspaces/$wid/model-provider',
|
|
7
|
+
parent: 'workspaceLayout',
|
|
8
|
+
impl: '@shipfox/client-agent/routes/model-provider'
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/feature.ts"],"sourcesContent":["import {defineClientFeature} from '@shipfox/client-shell';\n\nexport const agentFeature = defineClientFeature({\n id: 'shipfox.agent',\n routes: [\n {\n path: '/workspaces/$wid/model-provider',\n parent: 'workspaceLayout',\n impl: '@shipfox/client-agent/routes/model-provider',\n },\n ],\n});\n"],"names":["defineClientFeature","agentFeature","id","routes","path","parent","impl"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,wBAAwB;AAE1D,OAAO,MAAMC,eAAeD,oBAAoB;IAC9CE,IAAI;IACJC,QAAQ;QACN;YACEC,MAAM;YACNC,QAAQ;YACRC,MAAM;QACR;KACD;AACH,GAAG"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import type { CreateCustomModelProviderBodyDto, DiscoverCustomModelProviderModelsBodyDto, DiscoverCustomModelProviderModelsBySlugBodyDto, ModelProviderRef, SetDefaultHarnessBodyDto, SetDefaultModelProviderBodyDto, SupportedModelProviderId, UpdateCustomModelProviderBodyDto, UpdateModelProviderConfigBodyDto, UpdateModelProviderDefaultModelBodyDto } from '@shipfox/api-agent-dto';
|
|
2
|
+
export declare const modelProviderQueryKeys: {
|
|
3
|
+
all: readonly ["model-providers"];
|
|
4
|
+
catalog: () => readonly ["model-providers", "catalog"];
|
|
5
|
+
configs: (workspaceId: string) => readonly ["model-providers", "configs", string];
|
|
6
|
+
};
|
|
7
|
+
export declare function getModelProviderCatalog({ signal }?: {
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
providers: {
|
|
11
|
+
id: "anthropic" | "ant-ling" | "azure-openai-responses" | "openai" | "deepseek" | "nvidia" | "google" | "mistral" | "groq" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "xai" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "opencode" | "opencode-go" | "huggingface" | "fireworks" | "together" | "kimi-coding" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "amazon-bedrock" | "google-vertex" | "openai-codex" | "github-copilot";
|
|
12
|
+
label: string;
|
|
13
|
+
support_status: "supported" | "unsupported";
|
|
14
|
+
default_model: string | null;
|
|
15
|
+
credential_fields: {
|
|
16
|
+
key: string;
|
|
17
|
+
label: string;
|
|
18
|
+
secret: boolean;
|
|
19
|
+
}[];
|
|
20
|
+
unsupported_reason: string | null;
|
|
21
|
+
models: {
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
}[];
|
|
25
|
+
}[];
|
|
26
|
+
}>;
|
|
27
|
+
export declare function listModelProviderConfigs({ workspaceId, signal, }: {
|
|
28
|
+
workspaceId: string;
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
configs: ({
|
|
32
|
+
kind: "builtin";
|
|
33
|
+
provider_id: string;
|
|
34
|
+
default_model: string | null;
|
|
35
|
+
created_at: string;
|
|
36
|
+
updated_at: string;
|
|
37
|
+
} | {
|
|
38
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
39
|
+
base_url: string;
|
|
40
|
+
headers: {
|
|
41
|
+
name: string;
|
|
42
|
+
value: string;
|
|
43
|
+
}[];
|
|
44
|
+
secret_header_names: string[];
|
|
45
|
+
models: {
|
|
46
|
+
id: string;
|
|
47
|
+
label: string;
|
|
48
|
+
context_window?: number | undefined;
|
|
49
|
+
max_output_tokens?: number | undefined;
|
|
50
|
+
input_image?: boolean | undefined;
|
|
51
|
+
reasoning?: boolean | undefined;
|
|
52
|
+
}[];
|
|
53
|
+
kind: "custom";
|
|
54
|
+
provider_id: string;
|
|
55
|
+
display_name: string;
|
|
56
|
+
default_model: string | null;
|
|
57
|
+
created_at: string;
|
|
58
|
+
updated_at: string;
|
|
59
|
+
})[];
|
|
60
|
+
default_provider_id: string | null;
|
|
61
|
+
default_harness_id: "pi" | "claude" | null;
|
|
62
|
+
}>;
|
|
63
|
+
export declare function upsertModelProviderConfig({ workspaceId, providerId, body, }: {
|
|
64
|
+
workspaceId: string;
|
|
65
|
+
providerId: SupportedModelProviderId;
|
|
66
|
+
body: UpdateModelProviderConfigBodyDto;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
kind: "builtin";
|
|
69
|
+
provider_id: string;
|
|
70
|
+
default_model: string | null;
|
|
71
|
+
created_at: string;
|
|
72
|
+
updated_at: string;
|
|
73
|
+
}>;
|
|
74
|
+
export declare function createCustomModelProviderConfig({ workspaceId, body, }: {
|
|
75
|
+
workspaceId: string;
|
|
76
|
+
body: CreateCustomModelProviderBodyDto;
|
|
77
|
+
}): Promise<{
|
|
78
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
79
|
+
base_url: string;
|
|
80
|
+
headers: {
|
|
81
|
+
name: string;
|
|
82
|
+
value: string;
|
|
83
|
+
}[];
|
|
84
|
+
secret_header_names: string[];
|
|
85
|
+
models: {
|
|
86
|
+
id: string;
|
|
87
|
+
label: string;
|
|
88
|
+
context_window?: number | undefined;
|
|
89
|
+
max_output_tokens?: number | undefined;
|
|
90
|
+
input_image?: boolean | undefined;
|
|
91
|
+
reasoning?: boolean | undefined;
|
|
92
|
+
}[];
|
|
93
|
+
kind: "custom";
|
|
94
|
+
provider_id: string;
|
|
95
|
+
display_name: string;
|
|
96
|
+
default_model: string | null;
|
|
97
|
+
created_at: string;
|
|
98
|
+
updated_at: string;
|
|
99
|
+
}>;
|
|
100
|
+
export declare function updateCustomModelProviderConfig({ workspaceId, providerId, body, }: {
|
|
101
|
+
workspaceId: string;
|
|
102
|
+
providerId: ModelProviderRef;
|
|
103
|
+
body: UpdateCustomModelProviderBodyDto;
|
|
104
|
+
}): Promise<{
|
|
105
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
106
|
+
base_url: string;
|
|
107
|
+
headers: {
|
|
108
|
+
name: string;
|
|
109
|
+
value: string;
|
|
110
|
+
}[];
|
|
111
|
+
secret_header_names: string[];
|
|
112
|
+
models: {
|
|
113
|
+
id: string;
|
|
114
|
+
label: string;
|
|
115
|
+
context_window?: number | undefined;
|
|
116
|
+
max_output_tokens?: number | undefined;
|
|
117
|
+
input_image?: boolean | undefined;
|
|
118
|
+
reasoning?: boolean | undefined;
|
|
119
|
+
}[];
|
|
120
|
+
kind: "custom";
|
|
121
|
+
provider_id: string;
|
|
122
|
+
display_name: string;
|
|
123
|
+
default_model: string | null;
|
|
124
|
+
created_at: string;
|
|
125
|
+
updated_at: string;
|
|
126
|
+
}>;
|
|
127
|
+
export declare function discoverCustomModelProviderModels({ workspaceId, body, }: {
|
|
128
|
+
workspaceId: string;
|
|
129
|
+
body: DiscoverCustomModelProviderModelsBodyDto;
|
|
130
|
+
}): Promise<{
|
|
131
|
+
models: {
|
|
132
|
+
id: string;
|
|
133
|
+
label: string;
|
|
134
|
+
}[];
|
|
135
|
+
}>;
|
|
136
|
+
export declare function discoverCustomModelProviderModelsBySlug({ workspaceId, providerId, body, }: {
|
|
137
|
+
workspaceId: string;
|
|
138
|
+
providerId: ModelProviderRef;
|
|
139
|
+
body: DiscoverCustomModelProviderModelsBySlugBodyDto;
|
|
140
|
+
}): Promise<{
|
|
141
|
+
models: {
|
|
142
|
+
id: string;
|
|
143
|
+
label: string;
|
|
144
|
+
}[];
|
|
145
|
+
}>;
|
|
146
|
+
export declare function deleteModelProviderConfig({ workspaceId, providerId, }: {
|
|
147
|
+
workspaceId: string;
|
|
148
|
+
providerId: ModelProviderRef;
|
|
149
|
+
}): Promise<void>;
|
|
150
|
+
export declare function updateModelProviderDefaultModel({ workspaceId, providerId, body, }: {
|
|
151
|
+
workspaceId: string;
|
|
152
|
+
providerId: SupportedModelProviderId;
|
|
153
|
+
body: UpdateModelProviderDefaultModelBodyDto;
|
|
154
|
+
}): Promise<{
|
|
155
|
+
kind: "builtin";
|
|
156
|
+
provider_id: string;
|
|
157
|
+
default_model: string | null;
|
|
158
|
+
created_at: string;
|
|
159
|
+
updated_at: string;
|
|
160
|
+
}>;
|
|
161
|
+
export declare function setDefaultModelProvider({ workspaceId, body, }: {
|
|
162
|
+
workspaceId: string;
|
|
163
|
+
body: SetDefaultModelProviderBodyDto;
|
|
164
|
+
}): Promise<{
|
|
165
|
+
default_provider_id: string | null;
|
|
166
|
+
}>;
|
|
167
|
+
export declare function setDefaultHarness({ workspaceId, body, }: {
|
|
168
|
+
workspaceId: string;
|
|
169
|
+
body: SetDefaultHarnessBodyDto;
|
|
170
|
+
}): Promise<{
|
|
171
|
+
default_harness_id: "pi" | "claude";
|
|
172
|
+
}>;
|
|
173
|
+
export declare function useModelProviderCatalogQuery(): import("@tanstack/react-query").UseQueryResult<NoInfer<{
|
|
174
|
+
providers: {
|
|
175
|
+
id: "anthropic" | "ant-ling" | "azure-openai-responses" | "openai" | "deepseek" | "nvidia" | "google" | "mistral" | "groq" | "cerebras" | "cloudflare-ai-gateway" | "cloudflare-workers-ai" | "xai" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "opencode" | "opencode-go" | "huggingface" | "fireworks" | "together" | "kimi-coding" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "amazon-bedrock" | "google-vertex" | "openai-codex" | "github-copilot";
|
|
176
|
+
label: string;
|
|
177
|
+
support_status: "supported" | "unsupported";
|
|
178
|
+
default_model: string | null;
|
|
179
|
+
credential_fields: {
|
|
180
|
+
key: string;
|
|
181
|
+
label: string;
|
|
182
|
+
secret: boolean;
|
|
183
|
+
}[];
|
|
184
|
+
unsupported_reason: string | null;
|
|
185
|
+
models: {
|
|
186
|
+
id: string;
|
|
187
|
+
label: string;
|
|
188
|
+
}[];
|
|
189
|
+
}[];
|
|
190
|
+
}>, Error>;
|
|
191
|
+
export declare function useModelProviderConfigsQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
|
|
192
|
+
configs: ({
|
|
193
|
+
kind: "builtin";
|
|
194
|
+
provider_id: string;
|
|
195
|
+
default_model: string | null;
|
|
196
|
+
created_at: string;
|
|
197
|
+
updated_at: string;
|
|
198
|
+
} | {
|
|
199
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
200
|
+
base_url: string;
|
|
201
|
+
headers: {
|
|
202
|
+
name: string;
|
|
203
|
+
value: string;
|
|
204
|
+
}[];
|
|
205
|
+
secret_header_names: string[];
|
|
206
|
+
models: {
|
|
207
|
+
id: string;
|
|
208
|
+
label: string;
|
|
209
|
+
context_window?: number | undefined;
|
|
210
|
+
max_output_tokens?: number | undefined;
|
|
211
|
+
input_image?: boolean | undefined;
|
|
212
|
+
reasoning?: boolean | undefined;
|
|
213
|
+
}[];
|
|
214
|
+
kind: "custom";
|
|
215
|
+
provider_id: string;
|
|
216
|
+
display_name: string;
|
|
217
|
+
default_model: string | null;
|
|
218
|
+
created_at: string;
|
|
219
|
+
updated_at: string;
|
|
220
|
+
})[];
|
|
221
|
+
default_provider_id: string | null;
|
|
222
|
+
default_harness_id: "pi" | "claude" | null;
|
|
223
|
+
}>, Error>;
|
|
224
|
+
export declare function useUpsertModelProviderConfigMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
225
|
+
kind: "builtin";
|
|
226
|
+
provider_id: string;
|
|
227
|
+
default_model: string | null;
|
|
228
|
+
created_at: string;
|
|
229
|
+
updated_at: string;
|
|
230
|
+
}, Error, {
|
|
231
|
+
workspaceId: string;
|
|
232
|
+
providerId: SupportedModelProviderId;
|
|
233
|
+
body: UpdateModelProviderConfigBodyDto;
|
|
234
|
+
}, unknown>;
|
|
235
|
+
export declare function useCreateCustomModelProviderMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
236
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
237
|
+
base_url: string;
|
|
238
|
+
headers: {
|
|
239
|
+
name: string;
|
|
240
|
+
value: string;
|
|
241
|
+
}[];
|
|
242
|
+
secret_header_names: string[];
|
|
243
|
+
models: {
|
|
244
|
+
id: string;
|
|
245
|
+
label: string;
|
|
246
|
+
context_window?: number | undefined;
|
|
247
|
+
max_output_tokens?: number | undefined;
|
|
248
|
+
input_image?: boolean | undefined;
|
|
249
|
+
reasoning?: boolean | undefined;
|
|
250
|
+
}[];
|
|
251
|
+
kind: "custom";
|
|
252
|
+
provider_id: string;
|
|
253
|
+
display_name: string;
|
|
254
|
+
default_model: string | null;
|
|
255
|
+
created_at: string;
|
|
256
|
+
updated_at: string;
|
|
257
|
+
}, Error, {
|
|
258
|
+
workspaceId: string;
|
|
259
|
+
body: CreateCustomModelProviderBodyDto;
|
|
260
|
+
}, unknown>;
|
|
261
|
+
export declare function useUpdateCustomModelProviderMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
262
|
+
api: "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai";
|
|
263
|
+
base_url: string;
|
|
264
|
+
headers: {
|
|
265
|
+
name: string;
|
|
266
|
+
value: string;
|
|
267
|
+
}[];
|
|
268
|
+
secret_header_names: string[];
|
|
269
|
+
models: {
|
|
270
|
+
id: string;
|
|
271
|
+
label: string;
|
|
272
|
+
context_window?: number | undefined;
|
|
273
|
+
max_output_tokens?: number | undefined;
|
|
274
|
+
input_image?: boolean | undefined;
|
|
275
|
+
reasoning?: boolean | undefined;
|
|
276
|
+
}[];
|
|
277
|
+
kind: "custom";
|
|
278
|
+
provider_id: string;
|
|
279
|
+
display_name: string;
|
|
280
|
+
default_model: string | null;
|
|
281
|
+
created_at: string;
|
|
282
|
+
updated_at: string;
|
|
283
|
+
}, Error, {
|
|
284
|
+
workspaceId: string;
|
|
285
|
+
providerId: ModelProviderRef;
|
|
286
|
+
body: UpdateCustomModelProviderBodyDto;
|
|
287
|
+
}, unknown>;
|
|
288
|
+
export declare function useDiscoverCustomModelProviderModelsMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
289
|
+
models: {
|
|
290
|
+
id: string;
|
|
291
|
+
label: string;
|
|
292
|
+
}[];
|
|
293
|
+
}, Error, {
|
|
294
|
+
workspaceId: string;
|
|
295
|
+
body: DiscoverCustomModelProviderModelsBodyDto;
|
|
296
|
+
}, unknown>;
|
|
297
|
+
export declare function useDiscoverCustomModelProviderModelsBySlugMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
298
|
+
models: {
|
|
299
|
+
id: string;
|
|
300
|
+
label: string;
|
|
301
|
+
}[];
|
|
302
|
+
}, Error, {
|
|
303
|
+
workspaceId: string;
|
|
304
|
+
providerId: ModelProviderRef;
|
|
305
|
+
body: DiscoverCustomModelProviderModelsBySlugBodyDto;
|
|
306
|
+
}, unknown>;
|
|
307
|
+
export declare function useDeleteModelProviderConfigMutation(): import("@tanstack/react-query").UseMutationResult<void, Error, {
|
|
308
|
+
workspaceId: string;
|
|
309
|
+
providerId: ModelProviderRef;
|
|
310
|
+
}, unknown>;
|
|
311
|
+
export declare function useUpdateModelProviderDefaultModelMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
312
|
+
kind: "builtin";
|
|
313
|
+
provider_id: string;
|
|
314
|
+
default_model: string | null;
|
|
315
|
+
created_at: string;
|
|
316
|
+
updated_at: string;
|
|
317
|
+
}, Error, {
|
|
318
|
+
workspaceId: string;
|
|
319
|
+
providerId: SupportedModelProviderId;
|
|
320
|
+
body: UpdateModelProviderDefaultModelBodyDto;
|
|
321
|
+
}, unknown>;
|
|
322
|
+
export declare function useSetDefaultModelProviderMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
323
|
+
default_provider_id: string | null;
|
|
324
|
+
}, Error, {
|
|
325
|
+
workspaceId: string;
|
|
326
|
+
body: SetDefaultModelProviderBodyDto;
|
|
327
|
+
}, unknown>;
|
|
328
|
+
export declare function useSetDefaultHarnessMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
329
|
+
default_harness_id: "pi" | "claude";
|
|
330
|
+
}, Error, {
|
|
331
|
+
workspaceId: string;
|
|
332
|
+
body: SetDefaultHarnessBodyDto;
|
|
333
|
+
}, unknown>;
|
|
334
|
+
//# sourceMappingURL=model-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-providers.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/model-providers.ts"],"names":[],"mappings":"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"}
|