Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57fd9fe2b6 | ||
|
|
46a7c7595f | ||
|
|
0def017060 | ||
|
|
6dfb1af261 | ||
|
|
f438658b6b | ||
|
|
5f0096c464 | ||
|
|
6ac797a69c | ||
|
|
3d6bcc3102 | ||
|
|
75df1f3997 |
@@ -1779,6 +1779,7 @@ enum FeatureFlagKey {
|
||||
IS_EMAIL_GROUP_ENABLED
|
||||
IS_JUNCTION_RELATIONS_ENABLED
|
||||
IS_REST_METADATA_API_NEW_FORMAT_DIRECT
|
||||
IS_SETTINGS_DISCOVERY_HERO_ENABLED
|
||||
}
|
||||
|
||||
type WorkspaceUrls {
|
||||
|
||||
@@ -1411,7 +1411,7 @@ export interface FeatureFlag {
|
||||
__typename: 'FeatureFlag'
|
||||
}
|
||||
|
||||
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_MARKETPLACE_SETTING_TAB_VISIBLE' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAIL_GROUP_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT'
|
||||
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_MARKETPLACE_SETTING_TAB_VISIBLE' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAIL_GROUP_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT' | 'IS_SETTINGS_DISCOVERY_HERO_ENABLED'
|
||||
|
||||
export interface WorkspaceUrls {
|
||||
customUrl?: Scalars['String']
|
||||
@@ -8732,7 +8732,8 @@ export const enumFeatureFlagKey = {
|
||||
IS_PUBLIC_DOMAIN_ENABLED: 'IS_PUBLIC_DOMAIN_ENABLED' as const,
|
||||
IS_EMAIL_GROUP_ENABLED: 'IS_EMAIL_GROUP_ENABLED' as const,
|
||||
IS_JUNCTION_RELATIONS_ENABLED: 'IS_JUNCTION_RELATIONS_ENABLED' as const,
|
||||
IS_REST_METADATA_API_NEW_FORMAT_DIRECT: 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT' as const
|
||||
IS_REST_METADATA_API_NEW_FORMAT_DIRECT: 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT' as const,
|
||||
IS_SETTINGS_DISCOVERY_HERO_ENABLED: 'IS_SETTINGS_DISCOVERY_HERO_ENABLED' as const
|
||||
}
|
||||
|
||||
export const enumIdentityProviderType = {
|
||||
|
||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 70 KiB |
@@ -289,6 +289,7 @@ export enum FeatureFlagKey {
|
||||
IS_MARKETPLACE_SETTING_TAB_VISIBLE = 'IS_MARKETPLACE_SETTING_TAB_VISIBLE',
|
||||
IS_PUBLIC_DOMAIN_ENABLED = 'IS_PUBLIC_DOMAIN_ENABLED',
|
||||
IS_REST_METADATA_API_NEW_FORMAT_DIRECT = 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT',
|
||||
IS_SETTINGS_DISCOVERY_HERO_ENABLED = 'IS_SETTINGS_DISCOVERY_HERO_ENABLED',
|
||||
IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED'
|
||||
}
|
||||
|
||||
|
||||
@@ -1641,6 +1641,7 @@ export enum FeatureFlagKey {
|
||||
IS_MARKETPLACE_SETTING_TAB_VISIBLE = 'IS_MARKETPLACE_SETTING_TAB_VISIBLE',
|
||||
IS_PUBLIC_DOMAIN_ENABLED = 'IS_PUBLIC_DOMAIN_ENABLED',
|
||||
IS_REST_METADATA_API_NEW_FORMAT_DIRECT = 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT',
|
||||
IS_SETTINGS_DISCOVERY_HERO_ENABLED = 'IS_SETTINGS_DISCOVERY_HERO_ENABLED',
|
||||
IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED'
|
||||
}
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Kon nie verskaffer byvoeg nie"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Kon nie hulpmiddel skep nie"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Kon nie verstekmodel opdateer nie"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Kon nie model opdateer nie"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Kon nie modelkeusemodus opdateer nie"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Gereedskap-oproepe gemaak"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Hulpmiddel geskep"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "فشل في إضافة المزود"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "فشل إنشاء الأداة"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "فشل في تحديث النموذج الافتراضي"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "فشل في تحديث النموذج"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "فشل في تحديث وضع اختيار النموذج"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "عمليات استدعاء الأدوات المنفذة"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "تم إنشاء الأداة"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "No s'ha pogut afegir el proveïdor"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "No s'ha pogut crear l'eina"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "No s'ha pogut actualitzar el model predeterminat"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "No s'ha pogut actualitzar el model"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "No s'ha pogut actualitzar el mode de selecció de models"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Crides a eines efectuades"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Eina creada"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Nepodařilo se přidat poskytovatele"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Nepodařilo se vytvořit nástroj"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Nepodařilo se aktualizovat výchozí model"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Nepodařilo se aktualizovat model"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Nepodařilo se aktualizovat režim výběru modelu"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Provedená volání nástrojů"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Nástroj byl vytvořen"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Kunne ikke tilføje udbyder"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Kunne ikke oprette værktøj"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Kunne ikke opdatere standardmodellen"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Kunne ikke opdatere modellen"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Kunne ikke opdatere tilstand for modelvalg"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Værktøjskald foretaget"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Værktøj oprettet"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Fehler beim Hinzufügen des Anbieters"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Erstellen des Tools fehlgeschlagen"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Standardmodell konnte nicht aktualisiert werden"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Fehler beim Aktualisieren des Modells"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Fehler beim Aktualisieren des Modellauswahlmodus"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Getätigte Tool-Aufrufe"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Tool erstellt"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Αποτυχία προσθήκης παρόχου"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Αποτυχία δημιουργίας εργαλείου"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Αποτυχία ενημέρωσης προεπιλεγμένου μοντέλου"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Αποτυχία ενημέρωσης μοντέλου"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Αποτυχία ενημέρωσης λειτουργίας επιλογής μοντέλου"
|
||||
|
||||
@@ -16017,7 +16012,7 @@ msgid "Tool calls made"
|
||||
msgstr "Κλήσεις εργαλείων που έγιναν"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Το εργαλείο δημιουργήθηκε"
|
||||
|
||||
|
||||
@@ -7053,11 +7053,6 @@ msgstr "Failed to add provider"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr "Failed to create email handle. Email handles may not be configured on this server."
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Failed to create tool"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7198,13 +7193,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Failed to update default model"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Failed to update model"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7221,7 +7216,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr "Failed to update model recommendations"
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Failed to update model selection mode"
|
||||
|
||||
@@ -16063,7 +16058,7 @@ msgid "Tool calls made"
|
||||
msgstr "Tool calls made"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Tool created"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Error al añadir el proveedor"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "No se pudo crear la herramienta"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "No se pudo actualizar el modelo predeterminado"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Error al actualizar el modelo"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Error al actualizar el modo de selección de modelos"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Llamadas a herramientas realizadas"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Herramienta creada"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Tarjoajan lisääminen epäonnistui"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Työkalun luominen epäonnistui"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Oletusmallin päivittäminen epäonnistui"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Mallin päivittäminen epäonnistui"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Mallin valintatilan päivittäminen epäonnistui"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Työkalukutsuja tehty"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Työkalu luotu"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Échec de l'ajout du fournisseur"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Échec de la création de l'outil"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Échec de la mise à jour du modèle par défaut"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Échec de la mise à jour du modèle"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Échec de la mise à jour du mode de sélection des modèles"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Appels d'outils effectués"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Outil créé"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "הוספת הספק נכשלה"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "יצירת הכלי נכשלה"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "עדכון מודל ברירת המחדל נכשל"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "העדכון של המודל נכשל"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "העדכון של מצב בחירת המודל נכשל"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "קריאות לכלים שבוצעו"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "הכלי נוצר"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Nem sikerült hozzáadni a szolgáltatót"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Nem sikerült létrehozni az eszközt"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Az alapértelmezett modell frissítése nem sikerült"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Nem sikerült frissíteni a modellt"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Nem sikerült frissíteni a modell kiválasztási módját"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Végrehajtott eszközhívások"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Eszköz létrehozva"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Impossibile aggiungere il provider"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Impossibile creare lo strumento"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Impossibile aggiornare il modello predefinito"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Impossibile aggiornare il modello"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Impossibile aggiornare la modalità di selezione del modello"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Chiamate agli strumenti effettuate"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Strumento creato"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "プロバイダーの追加に失敗しました"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "ツールの作成に失敗しました"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "デフォルトモデルの更新に失敗しました"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "モデルの更新に失敗しました"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "モデル選択モードの更新に失敗しました"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "ツール呼び出しの回数"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "ツールが作成されました"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "공급자를 추가하지 못했습니다"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "도구 생성 실패"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "기본 모델 업데이트 실패"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "모델을 업데이트하지 못했습니다"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "모델 선택 모드를 업데이트하지 못했습니다"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "실행된 도구 호출"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "도구 생성됨"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Het toevoegen van de aanbieder is mislukt"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Aanmaken van tool mislukt"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Fout bij het bijwerken van het standaardmodel"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Fout bij het bijwerken van het model"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Fout bij het bijwerken van de modus voor modelselectie"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Uitgevoerde toolaanroepen"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Tool aangemaakt"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Kunne ikke legge til tilbyder"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Kunne ikke opprette verktøy"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Kunne ikke oppdatere standardmodellen"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Kunne ikke oppdatere modell"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Kunne ikke oppdatere modus for modellvalg"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Verktøykall utført"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Verktøy opprettet"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Nie udało się dodać dostawcy"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Nie udało się utworzyć narzędzia"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Nie udało się zaktualizować modelu domyślnego"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Nie udało się zaktualizować modelu"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Nie udało się zaktualizować trybu wyboru modelu"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Wykonane wywołania narzędzi"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Utworzono narzędzie"
|
||||
|
||||
|
||||
@@ -7053,11 +7053,6 @@ msgstr ""
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7198,13 +7193,13 @@ msgid "Failed to update default model"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7221,7 +7216,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr ""
|
||||
|
||||
@@ -16008,7 +16003,7 @@ msgid "Tool calls made"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Falha ao adicionar o provedor"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Falha ao criar a ferramenta"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Falha ao atualizar o modelo padrão"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Falha ao atualizar o modelo"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Falha ao atualizar o modo de seleção de modelos"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Chamadas de ferramentas realizadas"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Ferramenta criada"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Falha ao adicionar o provedor"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Falha ao criar ferramenta"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Falha ao atualizar o modelo padrão"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Falha ao atualizar o modelo"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Falha ao atualizar o modo de seleção de modelo"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Chamadas de ferramentas efetuadas"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Ferramenta criada"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Eroare la adăugarea furnizorului"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Crearea instrumentului a eșuat"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Eroare la actualizarea modelului implicit"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Eroare la actualizarea modelului"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Eroare la actualizarea modului de selecție a modelului"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Apeluri de instrumente efectuate"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Instrument creat"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Није успело додавање провајдера"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Није успело креирање алата"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Није успело ажурирање подразумеваног модела"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Није успело ажурирање модела"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Није успело ажурирање режима избора модела"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Остварени позиви алата"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Алат је креиран"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Det gick inte att lägga till leverantören"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Det gick inte att skapa verktyg"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Det gick inte att uppdatera standardmodellen"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr ""
|
||||
|
||||
@@ -16021,7 +16016,7 @@ msgid "Tool calls made"
|
||||
msgstr "Verktygsanrop gjorda"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Verktyg skapat"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Sağlayıcı eklenemedi"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Araç oluşturulamadı"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Varsayılan model güncellenemedi"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Model güncellenemedi"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Model seçim modu güncellenemedi"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Gerçekleştirilen araç çağrıları"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Araç oluşturuldu"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Не вдалося додати провайдера"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Не вдалося створити інструмент"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Не вдалося оновити модель за замовчуванням"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Не вдалося оновити модель"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Не вдалося оновити режим вибору моделі"
|
||||
|
||||
@@ -16015,7 +16010,7 @@ msgid "Tool calls made"
|
||||
msgstr "Здійснено викликів інструментів"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Інструмент створено"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "Thêm nhà cung cấp thất bại"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "Tạo công cụ thất bại"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "Cập nhật mô hình mặc định thất bại"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "Cập nhật mô hình thất bại"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "Cập nhật chế độ chọn mô hình thất bại"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "Số lần gọi công cụ"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "Đã tạo công cụ"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "添加提供商失败"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "创建工具失败"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "更新默认模型失败"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "更新模型失败"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "更新模型选择模式失败"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "工具调用次数"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "工具已创建"
|
||||
|
||||
|
||||
@@ -7058,11 +7058,6 @@ msgstr "新增供應商失敗"
|
||||
msgid "Failed to create email handle. Email handles may not be configured on this server."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: WM7GKt
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
msgid "Failed to create tool"
|
||||
msgstr "建立工具失敗"
|
||||
|
||||
#. js-lingui-id: lWoewm
|
||||
#: src/pages/settings/workspace/SettingsWorkspaceEmailGroupChannelDetail.tsx
|
||||
msgid "Failed to delete email handle."
|
||||
@@ -7203,13 +7198,13 @@ msgid "Failed to update default model"
|
||||
msgstr "更新預設模型失敗"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model"
|
||||
msgstr "更新模型失敗"
|
||||
|
||||
#. js-lingui-id: W7Ff/4
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
msgid "Failed to update model availability"
|
||||
@@ -7226,7 +7221,7 @@ msgid "Failed to update model recommendations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: rCUG3c
|
||||
#: src/pages/settings/ai/components/SettingsAiModelsTab.tsx
|
||||
#: src/pages/settings/ai/hooks/useSettingsAiModelsActions.ts
|
||||
msgid "Failed to update model selection mode"
|
||||
msgstr "更新模型選擇模式失敗"
|
||||
|
||||
@@ -16013,7 +16008,7 @@ msgid "Tool calls made"
|
||||
msgstr "已進行的工具呼叫"
|
||||
|
||||
#. js-lingui-id: SrWh42
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/hooks/useCreateTool.ts
|
||||
msgid "Tool created"
|
||||
msgstr "工具已建立"
|
||||
|
||||
|
||||
@@ -24,9 +24,6 @@ export const useEnterLayoutCustomizationMode = () => {
|
||||
const { navigateSidePanel } = useNavigateSidePanel();
|
||||
const { enqueueWarningSnackBar } = useSnackBar();
|
||||
|
||||
// Returns whether customization mode is active afterward, so callers that
|
||||
// navigate on entry can skip navigation when entry was blocked (e.g. a
|
||||
// dashboard is mid-edit).
|
||||
const enterLayoutCustomizationMode = useCallback((): boolean => {
|
||||
const isLayoutCustomizationModeAlreadyEnabled = store.get(
|
||||
isLayoutCustomizationModeEnabledState.atom,
|
||||
|
||||
@@ -4,11 +4,13 @@ import {
|
||||
} from '@/settings/components/SettingsCustomizeVideoModal';
|
||||
import { HeroPlayButton } from '@/ui/layout/hero/components/HeroPlayButton';
|
||||
import { useModal } from '@/ui/layout/modal/hooks/useModal';
|
||||
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
||||
import { styled } from '@linaria/react';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useContext } from 'react';
|
||||
import { Card } from 'twenty-ui/layout';
|
||||
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import { FeatureFlagKey } from '~/generated-metadata/graphql';
|
||||
|
||||
const COVER_HEIGHT = 150;
|
||||
|
||||
@@ -56,6 +58,9 @@ export const SettingsDiscoveryHeroCard = ({
|
||||
const { t } = useLingui();
|
||||
const { colorScheme } = useContext(ThemeContext);
|
||||
const { openModal } = useModal();
|
||||
const isDiscoveryVideoEnabled = useIsFeatureEnabled(
|
||||
FeatureFlagKey.IS_SETTINGS_DISCOVERY_HERO_ENABLED,
|
||||
);
|
||||
|
||||
const modalInstanceId = `${instanceIdPrefix}-modal`;
|
||||
const tabsInstanceId = `${instanceIdPrefix}-tabs`;
|
||||
@@ -67,19 +72,23 @@ export const SettingsDiscoveryHeroCard = ({
|
||||
<Card rounded>
|
||||
<StyledCoverContainer>
|
||||
<StyledImage src={src} alt="" aria-hidden />
|
||||
<StyledOverlay>
|
||||
<HeroPlayButton
|
||||
onClick={() => openModal(modalInstanceId)}
|
||||
ariaLabel={playButtonAriaLabel ?? t`Watch demo`}
|
||||
/>
|
||||
</StyledOverlay>
|
||||
{isDiscoveryVideoEnabled && (
|
||||
<StyledOverlay>
|
||||
<HeroPlayButton
|
||||
onClick={() => openModal(modalInstanceId)}
|
||||
ariaLabel={playButtonAriaLabel ?? t`Watch demo`}
|
||||
/>
|
||||
</StyledOverlay>
|
||||
)}
|
||||
</StyledCoverContainer>
|
||||
</Card>
|
||||
<SettingsCustomizeVideoModal
|
||||
modalInstanceId={modalInstanceId}
|
||||
tabsInstanceId={tabsInstanceId}
|
||||
tabs={tabs}
|
||||
/>
|
||||
{isDiscoveryVideoEnabled && (
|
||||
<SettingsCustomizeVideoModal
|
||||
modalInstanceId={modalInstanceId}
|
||||
tabsInstanceId={tabsInstanceId}
|
||||
tabs={tabs}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -6,15 +6,10 @@ import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
export type SettingsStatRow = {
|
||||
Icon: IconComponent;
|
||||
label: string;
|
||||
// String so callers can render a placeholder (e.g. "—") while async counts
|
||||
// are still loading. Layout stats just pass `count.toString()`.
|
||||
value: string;
|
||||
};
|
||||
|
||||
type SettingsStatsGridProps = {
|
||||
// Each inner array is one column rendered top-to-bottom; columns are
|
||||
// separated by a vertical divider. Pass [[a, b], [c, d]] for a 2x2 layout
|
||||
// or [[a, b, c]] for a single column.
|
||||
columns: SettingsStatRow[][];
|
||||
};
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 40 KiB |
@@ -3,12 +3,8 @@ import { styled } from '@linaria/react';
|
||||
import { MOBILE_VIEWPORT, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import React from 'react';
|
||||
|
||||
// Column width used by the Applications data tables (Instances column).
|
||||
export const SETTINGS_OBJECT_TABLE_COLUMN_WIDTH = '98.7px';
|
||||
|
||||
// Relative grid: Name takes all remaining space (with a floor); App / Fields /
|
||||
// Instances get fixed minimums so short text columns don't collapse; trailing
|
||||
// 36 px holds the chevron / action cell.
|
||||
export const SETTINGS_OBJECT_TABLE_ROW_GRID_TEMPLATE_COLUMNS = `minmax(180px, 1fr) 140px 80px 100px 36px`;
|
||||
|
||||
export const SETTINGS_OBJECT_TABLE_ROW_MOBILE_MIN_WIDTH = '520px';
|
||||
|
||||
@@ -58,7 +58,6 @@ export const ObjectLayout = ({ objectMetadataItem }: ObjectLayoutProps) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip navigation when entry was blocked (e.g. a dashboard is mid-edit).
|
||||
if (!enterLayoutCustomizationMode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { styled } from '@linaria/react';
|
||||
|
||||
import { WEBHOOK_TABLE_ROW_GRID_TEMPLATE_COLUMNS } from '@/settings/developers/constants/WebhookTableRowGridTemplateColumns';
|
||||
import { TableCell } from '@/ui/layout/table/components/TableCell';
|
||||
import { TableRow } from '@/ui/layout/table/components/TableRow';
|
||||
import { getUrlHostnameOrThrow, isValidUrl } from 'twenty-shared/utils';
|
||||
@@ -11,8 +12,6 @@ import { useContext } from 'react';
|
||||
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import { type Webhook } from '~/generated-metadata/graphql';
|
||||
|
||||
export const WEBHOOK_TABLE_ROW_GRID_TEMPLATE_COLUMNS = '1fr 28px';
|
||||
|
||||
const StyledIconChevronRightContainer = styled.span`
|
||||
align-items: center;
|
||||
color: ${themeCssVariables.font.color.tertiary};
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import { styled } from '@linaria/react';
|
||||
|
||||
import {
|
||||
SettingsDevelopersWebhookTableRow,
|
||||
WEBHOOK_TABLE_ROW_GRID_TEMPLATE_COLUMNS,
|
||||
} from '@/settings/developers/components/SettingsDevelopersWebhookTableRow';
|
||||
import { SettingsDevelopersWebhookTableRow } from '@/settings/developers/components/SettingsDevelopersWebhookTableRow';
|
||||
import { WEBHOOK_TABLE_ROW_GRID_TEMPLATE_COLUMNS } from '@/settings/developers/constants/WebhookTableRowGridTemplateColumns';
|
||||
import { Table } from '@/ui/layout/table/components/Table';
|
||||
import { TableBody } from '@/ui/layout/table/components/TableBody';
|
||||
import { TableHeader } from '@/ui/layout/table/components/TableHeader';
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export const WEBHOOK_TABLE_ROW_GRID_TEMPLATE_COLUMNS = '1fr 28px';
|
||||
|
Before Width: | Height: | Size: 288 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 290 KiB After Width: | Height: | Size: 111 KiB |
@@ -19,9 +19,6 @@ const playgroundSetupFormSchema = z.object({
|
||||
|
||||
type PlaygroundSetupFormValues = z.infer<typeof playgroundSetupFormSchema>;
|
||||
|
||||
// Last column shrinks to the Launch button's content width so its right
|
||||
// edge sits at the form's right edge. The two select columns share the
|
||||
// remaining space equally.
|
||||
const StyledForm = styled.form`
|
||||
align-items: end;
|
||||
display: grid;
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import { PlaygroundSetupForm } from '@/settings/playground/components/PlaygroundSetupForm';
|
||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||
|
||||
const meta: Meta<typeof PlaygroundSetupForm> = {
|
||||
title: 'Modules/Settings/Playground/PlaygroundSetupForm',
|
||||
component: PlaygroundSetupForm,
|
||||
decorators: [ComponentDecorator, RouterDecorator],
|
||||
decorators: [ComponentDecorator, RouterDecorator, SnackBarDecorator],
|
||||
parameters: {
|
||||
docs: {
|
||||
description: {
|
||||
|
||||
@@ -2,17 +2,13 @@ import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomStat
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type AuthToken } from '~/generated-metadata/graphql';
|
||||
|
||||
// In-memory only: a short-lived, full-permission bearer token. Keeping it out of
|
||||
// localStorage bounds the exfiltration window to the current tab and leaves no
|
||||
// usable credential at rest after the tab closes.
|
||||
// In-memory only — never persist this bearer token to localStorage.
|
||||
export const playgroundApiKeyState = createAtomState<AuthToken | null>({
|
||||
key: 'playgroundApiKeyState',
|
||||
defaultValue: null,
|
||||
});
|
||||
|
||||
// Usable only while it stays valid for at least `bufferMs` longer. Consumers pass
|
||||
// no buffer (reject the moment it expires); the launcher passes a buffer so it
|
||||
// re-mints before a near-expired token can fail mid-session.
|
||||
// Returns true when the token is still valid `bufferMs` from now.
|
||||
export const isPlaygroundApiKeyFresh = (
|
||||
token: AuthToken | null,
|
||||
bufferMs = 0,
|
||||
|
||||
@@ -20,9 +20,6 @@ type SubMenuTopBarContainerProps = {
|
||||
tag?: JSX.Element;
|
||||
};
|
||||
|
||||
// Cards, forms, and tables inside the white panel are centered in a fixed
|
||||
// max-width column so they don't sprawl on large displays. The white panel
|
||||
// itself spans edge-to-edge; only the content is constrained.
|
||||
const SETTINGS_CONTENT_MAX_WIDTH = 760;
|
||||
|
||||
const StyledContainer = styled.div`
|
||||
@@ -31,10 +28,8 @@ const StyledContainer = styled.div`
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
// flex: 1 + min-height: 0 keep the vertical-scroll chain intact: PagePanel's
|
||||
// own overflow handling sits one level up and depends on its children
|
||||
// participating in the flex height calculation rather than collapsing to
|
||||
// content height.
|
||||
// flex: 1 + min-height: 0 are required for PagePanel's overflow chain — the
|
||||
// child must participate in the flex height calc rather than collapse to content.
|
||||
const StyledBodyContentWrapper = styled.div`
|
||||
display: flex;
|
||||
flex: 1;
|
||||
@@ -72,12 +67,6 @@ export const SubMenuTopBarContainer = ({
|
||||
<PageHeader title={<Breadcrumb links={links} />}>
|
||||
{actionButton}
|
||||
</PageHeader>
|
||||
{/*
|
||||
MainContainerLayoutWithSidePanel is the same wrapper the App's record
|
||||
pages use: it renders the page body on the left and SidePanelForDesktop
|
||||
on the right. Hosting it here lets the AI chat side panel (and any
|
||||
other side-panel page) open in settings exactly as it does in the App.
|
||||
*/}
|
||||
<MainContainerLayoutWithSidePanel>
|
||||
<StyledBodyContentWrapper>
|
||||
<InformationBannerWrapper />
|
||||
|
||||
@@ -5,24 +5,13 @@ import { type ReactNode } from 'react';
|
||||
import { AnimatedExpandableContainer } from 'twenty-ui/layout';
|
||||
|
||||
type CollapsibleNavigationDrawerSectionProps = {
|
||||
// Unique id used to persist the open/closed state in localStorage. Pass
|
||||
// a namespaced value (e.g. 'settings/User') so unrelated sections in
|
||||
// different drawers don't share state.
|
||||
// Namespaced id (e.g. 'settings/User') used to persist open/closed state.
|
||||
sectionId: string;
|
||||
label: string;
|
||||
children: ReactNode;
|
||||
// Optional wrapper around the section title (e.g. AdvancedSettingsWrapper
|
||||
// for advanced-mode-only sections). Receives the title node and returns
|
||||
// the wrapped node.
|
||||
wrapTitle?: (titleNode: ReactNode) => ReactNode;
|
||||
};
|
||||
|
||||
// One-stop section component for any drawer that wants the main-app's
|
||||
// collapsible section behavior: click the title to collapse / expand,
|
||||
// animated height transition, persisted open state, chevron-on-hover.
|
||||
// Use this instead of stitching together NavigationDrawerSection +
|
||||
// NavigationDrawerSectionTitle + AnimatedExpandableContainer by hand at
|
||||
// every call site.
|
||||
export const CollapsibleNavigationDrawerSection = ({
|
||||
sectionId,
|
||||
label,
|
||||
|
||||
@@ -5,8 +5,6 @@ import { styled } from '@linaria/react';
|
||||
import { useIsMobile } from 'twenty-ui/utilities';
|
||||
import { themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
|
||||
// Mobile keeps the touch-friendly horizontal padding; on desktop the container
|
||||
// is edge-to-edge and the child supplies its own padding.
|
||||
const StyledFixedContainer = styled.div<{ isMobile?: boolean }>`
|
||||
padding-left: ${({ isMobile }) =>
|
||||
isMobile ? themeCssVariables.spacing[5] : '0'};
|
||||
|
||||
@@ -52,9 +52,6 @@ export type NavigationDrawerItemProps = {
|
||||
onClick?: () => void;
|
||||
Icon?: IconComponent | ((props: TablerIconsProps) => JSX.Element);
|
||||
iconColor?: string | null;
|
||||
// Wrap the plain icon in a soft grey tile (no border) — used by the
|
||||
// settings drawer so its icons read as a uniform group without picking
|
||||
// up TintedIconTile's bordered colored treatment.
|
||||
withIconBackground?: boolean;
|
||||
active?: boolean;
|
||||
modifier?: NavigationDrawerItemModifier;
|
||||
@@ -206,10 +203,6 @@ const StyledIcon = styled.div`
|
||||
margin-right: ${themeCssVariables.spacing[2]};
|
||||
`;
|
||||
|
||||
// Soft grey background-only tile (no border) used by the settings drawer.
|
||||
// Sized one step larger than the icon so the icon sits with a couple of
|
||||
// pixels of breathing room on every side. radius.md matches the rest of
|
||||
// the App's small-card / tile language; radius.sm read as sharp squares.
|
||||
const StyledIconBackgroundTile = styled.div`
|
||||
align-items: center;
|
||||
background-color: ${themeCssVariables.background.tertiary};
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
import { useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
import { usePersistLogicFunction } from '@/logic-functions/hooks/usePersistLogicFunction';
|
||||
import { SettingsDiscoveryHeroCard } from '@/settings/components/SettingsDiscoveryHeroCard';
|
||||
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
|
||||
import { TabList } from '@/ui/layout/tab-list/components/TabList';
|
||||
import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState';
|
||||
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath, isDefined } from 'twenty-shared/utils';
|
||||
import { getSettingsPath } from 'twenty-shared/utils';
|
||||
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
@@ -30,6 +25,7 @@ import { SettingsAiModelsTab } from '~/pages/settings/ai/components/SettingsAiMo
|
||||
import { SettingsAiOverviewTab } from '~/pages/settings/ai/components/SettingsAiOverviewTab';
|
||||
import { SettingsAiUsageTab } from '~/pages/settings/ai/components/SettingsAiUsageTab';
|
||||
import { SETTINGS_AI_TABS } from '~/pages/settings/ai/constants/SettingsAiTabs';
|
||||
import { useCreateTool } from '~/pages/settings/ai/hooks/useCreateTool';
|
||||
|
||||
const AI_HERO_LIGHT = '/images/ai/ai-tools-cover-light.png';
|
||||
const AI_HERO_DARK = '/images/ai/ai-tools-cover-dark.png';
|
||||
@@ -37,55 +33,13 @@ const AI_HERO_DARK = '/images/ai/ai-tools-cover-dark.png';
|
||||
const SETTINGS_AI_HERO_INSTANCE_ID_PREFIX = 'settings-ai-hero';
|
||||
|
||||
export const SettingsAI = () => {
|
||||
const navigate = useNavigate();
|
||||
const { enqueueSuccessSnackBar, enqueueErrorSnackBar } = useSnackBar();
|
||||
const { createLogicFunction } = usePersistLogicFunction();
|
||||
const [isCreatingTool, setIsCreatingTool] = useState(false);
|
||||
const { handleCreateTool, isCreatingTool } = useCreateTool();
|
||||
|
||||
const activeTabId = useAtomComponentStateValue(
|
||||
activeTabIdComponentState,
|
||||
SETTINGS_AI_TABS.COMPONENT_INSTANCE_ID,
|
||||
);
|
||||
|
||||
const handleCreateTool = async () => {
|
||||
setIsCreatingTool(true);
|
||||
try {
|
||||
const result = await createLogicFunction({
|
||||
input: {
|
||||
name: 'new-tool',
|
||||
toolTriggerSettings: {
|
||||
inputSchema: { type: 'object', properties: {} },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (result.status === 'successful' && isDefined(result.response?.data)) {
|
||||
const newLogicFunction = result.response.data.createOneLogicFunction;
|
||||
enqueueSuccessSnackBar({ message: t`Tool created` });
|
||||
|
||||
const applicationId = newLogicFunction.applicationId;
|
||||
if (isDefined(applicationId)) {
|
||||
navigate(
|
||||
getSettingsPath(SettingsPath.ApplicationLogicFunctionDetail, {
|
||||
applicationId,
|
||||
logicFunctionId: newLogicFunction.id,
|
||||
}),
|
||||
);
|
||||
} else {
|
||||
navigate(
|
||||
getSettingsPath(SettingsPath.LogicFunctionDetail, {
|
||||
logicFunctionId: newLogicFunction.id,
|
||||
}),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
enqueueErrorSnackBar({ message: t`Failed to create tool` });
|
||||
}
|
||||
} finally {
|
||||
setIsCreatingTool(false);
|
||||
}
|
||||
};
|
||||
|
||||
const tabs = [
|
||||
{
|
||||
id: SETTINGS_AI_TABS.TABS_IDS.OVERVIEW,
|
||||
|
||||
@@ -104,7 +104,7 @@ export const SettingsAgentSkillsTab = () => {
|
||||
<DropdownMenuItemsContainer>
|
||||
<MenuItemToggle
|
||||
LeftIcon={IconArchive}
|
||||
onToggleChange={() => setShowDeactivated(!showDeactivated)}
|
||||
onToggleChange={setShowDeactivated}
|
||||
toggled={showDeactivated}
|
||||
text={t`Deactivated`}
|
||||
toggleSize="small"
|
||||
|
||||
@@ -1,80 +1,35 @@
|
||||
import { gql } from '@apollo/client';
|
||||
import { useQuery } from '@apollo/client/react';
|
||||
import { styled } from '@linaria/react';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { type ReactNode, useMemo, useState } from 'react';
|
||||
import { type ReactNode, useState } from 'react';
|
||||
|
||||
import { useGetToolIndex } from '@/ai/hooks/useGetToolIndex';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { logicFunctionsSelector } from '@/logic-functions/states/logicFunctionsSelector';
|
||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||
import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent';
|
||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { ToolCategory } from 'twenty-shared/ai';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { H2Title, IconLock, IconPuzzle, IconTool } from 'twenty-ui/display';
|
||||
import { SearchInput } from 'twenty-ui/input';
|
||||
import { Section } from 'twenty-ui/layout';
|
||||
import { MenuItemToggle } from 'twenty-ui/navigation';
|
||||
import { themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import {
|
||||
type SettingsAgentToolItem,
|
||||
SettingsAgentToolsTable,
|
||||
} from '~/pages/settings/ai/components/SettingsAgentToolsTable';
|
||||
import { SettingsAgentToolsTable } from '~/pages/settings/ai/components/SettingsAgentToolsTable';
|
||||
import { useSettingsAgentToolsTable } from '~/pages/settings/ai/hooks/useSettingsAgentToolsTable';
|
||||
import { type SettingsAgentToolItem } from '~/pages/settings/ai/types/SettingsAgentToolItem';
|
||||
import { normalizeSearchText } from '~/utils/normalizeSearchText';
|
||||
|
||||
const FIND_MANY_APPLICATIONS_FOR_TOOL_TABLE = gql`
|
||||
query FindManyApplicationsForToolTable {
|
||||
findManyApplications {
|
||||
id
|
||||
name
|
||||
universalIdentifier
|
||||
logo
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const FIND_MANY_MARKETPLACE_APPS_FOR_TOOL_TABLE = gql`
|
||||
query FindManyMarketplaceAppsForToolTable {
|
||||
findManyMarketplaceApps {
|
||||
id
|
||||
universalIdentifier
|
||||
icon
|
||||
logo
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const StyledSearchContainer = styled.div`
|
||||
padding-bottom: ${themeCssVariables.spacing[2]};
|
||||
`;
|
||||
|
||||
export const SettingsAgentToolsTab = () => {
|
||||
const logicFunctions = useAtomStateValue(logicFunctionsSelector);
|
||||
const currentWorkspace = useAtomStateValue(currentWorkspaceState);
|
||||
const {
|
||||
toolIndex,
|
||||
loading: toolIndexLoading,
|
||||
error: toolIndexError,
|
||||
} = useGetToolIndex();
|
||||
const { data: applicationsData } = useQuery<{
|
||||
findManyApplications: Array<{
|
||||
id: string;
|
||||
name: string;
|
||||
universalIdentifier: string;
|
||||
logo?: string | null;
|
||||
}>;
|
||||
}>(FIND_MANY_APPLICATIONS_FOR_TOOL_TABLE);
|
||||
const { data: marketplaceAppsData } = useQuery<{
|
||||
findManyMarketplaceApps: Array<{
|
||||
id: string;
|
||||
universalIdentifier: string;
|
||||
icon: string;
|
||||
logo?: string | null;
|
||||
}>;
|
||||
}>(FIND_MANY_MARKETPLACE_APPS_FOR_TOOL_TABLE);
|
||||
const { t } = useLingui();
|
||||
const {
|
||||
allTools,
|
||||
applicationById,
|
||||
marketplaceAppByUniversalIdentifier,
|
||||
currentWorkspace,
|
||||
isLoading,
|
||||
} = useSettingsAgentToolsTable();
|
||||
|
||||
const [searchTerm, setSearchTerm] = useState('');
|
||||
const [showCustomTools, setShowCustomTools] = useState(true);
|
||||
const [showManagedTools, setShowManagedTools] = useState(true);
|
||||
@@ -89,42 +44,6 @@ export const SettingsAgentToolsTab = () => {
|
||||
const isCustom = (tool: SettingsAgentToolItem) =>
|
||||
isDefined(tool.applicationId);
|
||||
|
||||
const allTools: SettingsAgentToolItem[] = useMemo(
|
||||
() => [
|
||||
...logicFunctions
|
||||
.filter((fn) => isDefined(fn.toolTriggerSettings))
|
||||
.map((fn) => ({
|
||||
identifier: fn.id,
|
||||
name: fn.name,
|
||||
description: fn.description,
|
||||
applicationId: fn.applicationId,
|
||||
})),
|
||||
...toolIndex
|
||||
.filter((tool) => tool.category !== ToolCategory.LOGIC_FUNCTION)
|
||||
.map((tool) => ({
|
||||
identifier: tool.name,
|
||||
name: tool.name,
|
||||
description: tool.description,
|
||||
category: tool.category,
|
||||
objectName: tool.objectName,
|
||||
icon: tool.icon,
|
||||
})),
|
||||
],
|
||||
[logicFunctions, toolIndex],
|
||||
);
|
||||
|
||||
const applicationById = new Map(
|
||||
(applicationsData?.findManyApplications ?? []).map((application) => [
|
||||
application.id,
|
||||
application,
|
||||
]),
|
||||
);
|
||||
const marketplaceAppByUniversalIdentifier = new Map(
|
||||
(marketplaceAppsData?.findManyMarketplaceApps ?? []).map(
|
||||
(marketplaceApp) => [marketplaceApp.universalIdentifier, marketplaceApp],
|
||||
),
|
||||
);
|
||||
|
||||
const filteredTools = allTools
|
||||
.filter((tool) => {
|
||||
const searchNormalized = normalizeSearchText(searchTerm);
|
||||
@@ -149,8 +68,6 @@ export const SettingsAgentToolsTab = () => {
|
||||
})
|
||||
.sort((a, b) => a.name.localeCompare(b.name));
|
||||
|
||||
const isLoading = toolIndexLoading && !toolIndexError;
|
||||
|
||||
return (
|
||||
<Section>
|
||||
<H2Title
|
||||
@@ -173,27 +90,21 @@ export const SettingsAgentToolsTab = () => {
|
||||
<DropdownMenuItemsContainer>
|
||||
<MenuItemToggle
|
||||
LeftIcon={IconTool}
|
||||
onToggleChange={() =>
|
||||
setShowCustomTools(!showCustomTools)
|
||||
}
|
||||
onToggleChange={setShowCustomTools}
|
||||
toggled={showCustomTools}
|
||||
text={t`Custom`}
|
||||
toggleSize="small"
|
||||
/>
|
||||
<MenuItemToggle
|
||||
LeftIcon={IconLock}
|
||||
onToggleChange={() =>
|
||||
setShowManagedTools(!showManagedTools)
|
||||
}
|
||||
onToggleChange={setShowManagedTools}
|
||||
toggled={showManagedTools}
|
||||
text={t`Managed`}
|
||||
toggleSize="small"
|
||||
/>
|
||||
<MenuItemToggle
|
||||
LeftIcon={IconPuzzle}
|
||||
onToggleChange={() =>
|
||||
setShowStandardTools(!showStandardTools)
|
||||
}
|
||||
onToggleChange={setShowStandardTools}
|
||||
toggled={showStandardTools}
|
||||
text={t`Standard`}
|
||||
toggleSize="small"
|
||||
|
||||
@@ -1,53 +1,34 @@
|
||||
import { useContext } from 'react';
|
||||
import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
|
||||
|
||||
import { type CurrentWorkspace } from '@/auth/states/currentWorkspaceState';
|
||||
import { Table } from '@/ui/layout/table/components/Table';
|
||||
import { TableHeader } from '@/ui/layout/table/components/TableHeader';
|
||||
import { TableRow } from '@/ui/layout/table/components/TableRow';
|
||||
import { styled } from '@linaria/react';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath, isDefined } from 'twenty-shared/utils';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { IconChevronRight } from 'twenty-ui/display';
|
||||
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
|
||||
import { type CurrentWorkspace } from '@/auth/states/currentWorkspaceState';
|
||||
import { SettingsToolIcon } from '~/pages/settings/ai/components/SettingsToolIcon';
|
||||
import {
|
||||
SettingsToolTableRow,
|
||||
TOOL_TABLE_ROW_GRID_TEMPLATE_COLUMNS,
|
||||
} from '~/pages/settings/ai/components/SettingsToolTableRow';
|
||||
|
||||
export type SettingsAgentToolItem = {
|
||||
identifier: string;
|
||||
name: string;
|
||||
description?: string | null;
|
||||
category?: string;
|
||||
objectName?: string | null;
|
||||
icon?: string | null;
|
||||
applicationId?: string | null;
|
||||
};
|
||||
|
||||
type Application = {
|
||||
id: string;
|
||||
name: string;
|
||||
universalIdentifier: string;
|
||||
logo?: string | null;
|
||||
};
|
||||
|
||||
type MarketplaceApp = {
|
||||
id: string;
|
||||
universalIdentifier: string;
|
||||
icon: string;
|
||||
logo?: string | null;
|
||||
};
|
||||
import { type SettingsAgentToolApplication } from '~/pages/settings/ai/types/SettingsAgentToolApplication';
|
||||
import { type SettingsAgentToolItem } from '~/pages/settings/ai/types/SettingsAgentToolItem';
|
||||
import { type SettingsAgentToolMarketplaceApp } from '~/pages/settings/ai/types/SettingsAgentToolMarketplaceApp';
|
||||
import { getToolApplicationId } from '~/pages/settings/ai/utils/getToolApplicationId';
|
||||
import { getToolLink } from '~/pages/settings/ai/utils/getToolLink';
|
||||
|
||||
type SettingsAgentToolsTableProps = {
|
||||
tools: SettingsAgentToolItem[];
|
||||
isLoading: boolean;
|
||||
applicationById: Map<string, Application>;
|
||||
marketplaceAppByUniversalIdentifier: Map<string, MarketplaceApp>;
|
||||
applicationById: Map<string, SettingsAgentToolApplication>;
|
||||
marketplaceAppByUniversalIdentifier: Map<
|
||||
string,
|
||||
SettingsAgentToolMarketplaceApp
|
||||
>;
|
||||
currentWorkspace: CurrentWorkspace | null;
|
||||
};
|
||||
|
||||
@@ -55,28 +36,6 @@ const StyledTableHeaderRowContainer = styled.div`
|
||||
margin-bottom: ${themeCssVariables.spacing[2]};
|
||||
`;
|
||||
|
||||
const getToolApplicationId = (
|
||||
tool: SettingsAgentToolItem,
|
||||
currentWorkspace: CurrentWorkspace | null,
|
||||
): string => {
|
||||
if (isDefined(tool.applicationId)) {
|
||||
return tool.applicationId;
|
||||
}
|
||||
|
||||
return (
|
||||
currentWorkspace?.installedApplications?.find(
|
||||
(app) =>
|
||||
app.universalIdentifier ===
|
||||
TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
)?.id ?? ''
|
||||
);
|
||||
};
|
||||
|
||||
const getToolLink = (tool: SettingsAgentToolItem): string =>
|
||||
getSettingsPath(SettingsPath.AiToolDetail, {
|
||||
toolIdentifier: tool.identifier,
|
||||
});
|
||||
|
||||
export const SettingsAgentToolsTable = ({
|
||||
tools,
|
||||
isLoading,
|
||||
|
||||
@@ -10,17 +10,17 @@ import { getModelIcon } from '@/settings/ai/utils/getModelIcon';
|
||||
import { SettingsCard } from '@/settings/components/SettingsCard';
|
||||
import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect';
|
||||
import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { Select } from '@/ui/input/components/Select';
|
||||
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
|
||||
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { useMutation, useQuery } from '@apollo/client/react';
|
||||
import { useQuery } from '@apollo/client/react';
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
AUTO_SELECT_FAST_MODEL_ID,
|
||||
AUTO_SELECT_SMART_MODEL_ID,
|
||||
} from 'twenty-shared/constants';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath, isDefined } from 'twenty-shared/utils';
|
||||
import {
|
||||
H2Title,
|
||||
IconBolt,
|
||||
@@ -32,12 +32,8 @@ import { SearchInput } from 'twenty-ui/input';
|
||||
import { Card, Section } from 'twenty-ui/layout';
|
||||
import { UndecoratedLink } from 'twenty-ui/navigation';
|
||||
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath, isDefined } from 'twenty-shared/utils';
|
||||
import {
|
||||
GetAiSystemPromptPreviewDocument,
|
||||
UpdateWorkspaceDocument,
|
||||
} from '~/generated-metadata/graphql';
|
||||
import { GetAiSystemPromptPreviewDocument } from '~/generated-metadata/graphql';
|
||||
import { useSettingsAiModelsActions } from '~/pages/settings/ai/hooks/useSettingsAiModelsActions';
|
||||
import { formatNumber } from '~/utils/format/formatNumber';
|
||||
|
||||
const StyledCustomModelsContainer = styled.div`
|
||||
@@ -49,14 +45,19 @@ const StyledCustomModelsContainer = styled.div`
|
||||
|
||||
export const SettingsAiModelsTab = () => {
|
||||
const { theme } = useContext(ThemeContext);
|
||||
const { enqueueErrorSnackBar } = useSnackBar();
|
||||
const [currentWorkspace, setCurrentWorkspace] = useAtomState(
|
||||
currentWorkspaceState,
|
||||
);
|
||||
const [updateWorkspace] = useMutation(UpdateWorkspaceDocument);
|
||||
const currentWorkspace = useAtomStateValue(currentWorkspaceState);
|
||||
const [searchQuery, setSearchQuery] = useState('');
|
||||
|
||||
const { data: previewData } = useQuery(GetAiSystemPromptPreviewDocument);
|
||||
const aiModels = useAtomStateValue(aiModelsState);
|
||||
const { useRecommendedModels, realModels, enabledModels } =
|
||||
useWorkspaceAiModelAvailability();
|
||||
const {
|
||||
handleModelFieldChange,
|
||||
handleUseRecommendedToggle,
|
||||
handleModelToggle,
|
||||
handleToggleAllVisibleModels,
|
||||
} = useSettingsAiModelsActions();
|
||||
|
||||
const systemPromptTokenCount =
|
||||
previewData?.getAiSystemPromptPreview.estimatedTokenCount;
|
||||
@@ -67,9 +68,6 @@ export const SettingsAiModelsTab = () => {
|
||||
)} tokens)`
|
||||
: t`Read the system prompts to understand how the AI works`;
|
||||
|
||||
const { useRecommendedModels, realModels, enabledModels } =
|
||||
useWorkspaceAiModelAvailability();
|
||||
|
||||
const currentSmartModel = currentWorkspace?.smartModel;
|
||||
const currentFastModel = currentWorkspace?.fastModel;
|
||||
|
||||
@@ -103,110 +101,11 @@ export const SettingsAiModelsTab = () => {
|
||||
};
|
||||
});
|
||||
|
||||
const handleModelFieldChange = async (
|
||||
field: 'smartModel' | 'fastModel',
|
||||
value: string,
|
||||
) => {
|
||||
if (!currentWorkspace?.id) return;
|
||||
const previousValue = currentWorkspace[field];
|
||||
try {
|
||||
setCurrentWorkspace({ ...currentWorkspace, [field]: value });
|
||||
await updateWorkspace({ variables: { input: { [field]: value } } });
|
||||
} catch {
|
||||
setCurrentWorkspace({ ...currentWorkspace, [field]: previousValue });
|
||||
enqueueErrorSnackBar({ message: t`Failed to update model` });
|
||||
}
|
||||
};
|
||||
|
||||
const enabledModelIdSet = new Set(currentWorkspace?.enabledAiModelIds ?? []);
|
||||
|
||||
const handleUseRecommendedToggle = async (checked: boolean) => {
|
||||
if (!currentWorkspace?.id) {
|
||||
return;
|
||||
}
|
||||
|
||||
const previousValue = currentWorkspace.useRecommendedModels;
|
||||
|
||||
let newEnabledIds = currentWorkspace.enabledAiModelIds ?? [];
|
||||
|
||||
if (!checked && previousValue) {
|
||||
const recommendedModelIds = realModels
|
||||
.filter((model) => model.isRecommended)
|
||||
.map((model) => model.modelId);
|
||||
|
||||
newEnabledIds = recommendedModelIds;
|
||||
}
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
useRecommendedModels: checked,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
|
||||
await updateWorkspace({
|
||||
variables: {
|
||||
input: {
|
||||
useRecommendedModels: checked,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
useRecommendedModels: previousValue,
|
||||
});
|
||||
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model selection mode`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleModelToggle = async (
|
||||
modelId: string,
|
||||
isCurrentlyEnabled: boolean,
|
||||
) => {
|
||||
if (!currentWorkspace?.id) {
|
||||
return;
|
||||
}
|
||||
|
||||
const previousEnabled = currentWorkspace.enabledAiModelIds ?? [];
|
||||
|
||||
const newEnabledIds = isCurrentlyEnabled
|
||||
? previousEnabled.filter((id) => id !== modelId)
|
||||
: [...previousEnabled, modelId];
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
|
||||
await updateWorkspace({
|
||||
variables: {
|
||||
input: {
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: previousEnabled,
|
||||
});
|
||||
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model availability`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const filteredModels = searchQuery.trim()
|
||||
? realModels.filter((model) => {
|
||||
const query = searchQuery.toLowerCase();
|
||||
|
||||
return (
|
||||
model.label.toLowerCase().includes(query) ||
|
||||
(model.modelFamily?.toLowerCase().includes(query) ?? false) ||
|
||||
@@ -284,34 +183,12 @@ export const SettingsAiModelsTab = () => {
|
||||
models={filteredModels}
|
||||
isChecked={(model) => enabledModelIdSet.has(model.modelId)}
|
||||
onToggle={handleModelToggle}
|
||||
onToggleAll={async (shouldCheckAll) => {
|
||||
const previousIds = currentWorkspace?.enabledAiModelIds ?? [];
|
||||
const visibleModelIds = new Set(
|
||||
filteredModels.map((m) => m.modelId),
|
||||
);
|
||||
|
||||
const newEnabledIds = shouldCheckAll
|
||||
? [...new Set([...previousIds, ...visibleModelIds])]
|
||||
: previousIds.filter((id) => !visibleModelIds.has(id));
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace!,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
await updateWorkspace({
|
||||
variables: { input: { enabledAiModelIds: newEnabledIds } },
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace!,
|
||||
enabledAiModelIds: previousIds,
|
||||
});
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model availability`,
|
||||
});
|
||||
}
|
||||
}}
|
||||
onToggleAll={(shouldCheckAll) =>
|
||||
handleToggleAllVisibleModels(
|
||||
shouldCheckAll,
|
||||
new Set(filteredModels.map((m) => m.modelId)),
|
||||
)
|
||||
}
|
||||
anchorPrefix="workspace-model-row"
|
||||
/>
|
||||
</StyledCustomModelsContainer>
|
||||
|
||||
@@ -22,7 +22,6 @@ type ApplicationInfo = {
|
||||
};
|
||||
|
||||
type MarketplaceAppInfo = {
|
||||
icon: string;
|
||||
logo?: string | null;
|
||||
};
|
||||
|
||||
@@ -109,11 +108,6 @@ export const SettingsToolIcon = ({
|
||||
);
|
||||
}
|
||||
|
||||
if (isDefined(marketplaceApp)) {
|
||||
const MarketplaceIcon = getIcon(marketplaceApp.icon);
|
||||
return <MarketplaceIcon size={16} />;
|
||||
}
|
||||
|
||||
if (isDefined(application)) {
|
||||
return (
|
||||
<Avatar
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const FIND_MANY_APPLICATIONS_FOR_TOOL_TABLE = gql`
|
||||
query FindManyApplicationsForToolTable {
|
||||
findManyApplications {
|
||||
id
|
||||
name
|
||||
universalIdentifier
|
||||
logo
|
||||
}
|
||||
}
|
||||
`;
|
||||
@@ -0,0 +1,10 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const FIND_MANY_MARKETPLACE_APPS_FOR_TOOL_TABLE = gql`
|
||||
query FindManyMarketplaceAppsForToolTable {
|
||||
findManyMarketplaceApps {
|
||||
id
|
||||
logo
|
||||
}
|
||||
}
|
||||
`;
|
||||
@@ -0,0 +1,58 @@
|
||||
import { useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
import { t } from '@lingui/core/macro';
|
||||
import { SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath, isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { usePersistLogicFunction } from '@/logic-functions/hooks/usePersistLogicFunction';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
|
||||
export const useCreateTool = () => {
|
||||
const navigate = useNavigate();
|
||||
const { enqueueSuccessSnackBar } = useSnackBar();
|
||||
const { createLogicFunction } = usePersistLogicFunction();
|
||||
const [isCreatingTool, setIsCreatingTool] = useState(false);
|
||||
|
||||
const handleCreateTool = async () => {
|
||||
setIsCreatingTool(true);
|
||||
try {
|
||||
const result = await createLogicFunction({
|
||||
input: {
|
||||
name: 'new-tool',
|
||||
toolTriggerSettings: {
|
||||
inputSchema: { type: 'object', properties: {} },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Failure path already surfaces its own snackbar from usePersistLogicFunction.
|
||||
if (result.status !== 'successful' || !isDefined(result.response?.data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const newLogicFunction = result.response.data.createOneLogicFunction;
|
||||
enqueueSuccessSnackBar({ message: t`Tool created` });
|
||||
|
||||
const applicationId = newLogicFunction.applicationId;
|
||||
if (isDefined(applicationId)) {
|
||||
navigate(
|
||||
getSettingsPath(SettingsPath.ApplicationLogicFunctionDetail, {
|
||||
applicationId,
|
||||
logicFunctionId: newLogicFunction.id,
|
||||
}),
|
||||
);
|
||||
} else {
|
||||
navigate(
|
||||
getSettingsPath(SettingsPath.LogicFunctionDetail, {
|
||||
logicFunctionId: newLogicFunction.id,
|
||||
}),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
setIsCreatingTool(false);
|
||||
}
|
||||
};
|
||||
|
||||
return { handleCreateTool, isCreatingTool };
|
||||
};
|
||||
@@ -0,0 +1,81 @@
|
||||
import { useQuery } from '@apollo/client/react';
|
||||
import { useMemo } from 'react';
|
||||
|
||||
import { useGetToolIndex } from '@/ai/hooks/useGetToolIndex';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { logicFunctionsSelector } from '@/logic-functions/states/logicFunctionsSelector';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { ToolCategory } from 'twenty-shared/ai';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { FIND_MANY_APPLICATIONS_FOR_TOOL_TABLE } from '~/pages/settings/ai/graphql/queries/findManyApplicationsForToolTable';
|
||||
import { FIND_MANY_MARKETPLACE_APPS_FOR_TOOL_TABLE } from '~/pages/settings/ai/graphql/queries/findManyMarketplaceAppsForToolTable';
|
||||
import { type SettingsAgentToolApplication } from '~/pages/settings/ai/types/SettingsAgentToolApplication';
|
||||
import { type SettingsAgentToolItem } from '~/pages/settings/ai/types/SettingsAgentToolItem';
|
||||
import { type SettingsAgentToolMarketplaceApp } from '~/pages/settings/ai/types/SettingsAgentToolMarketplaceApp';
|
||||
|
||||
export const useSettingsAgentToolsTable = () => {
|
||||
const logicFunctions = useAtomStateValue(logicFunctionsSelector);
|
||||
const currentWorkspace = useAtomStateValue(currentWorkspaceState);
|
||||
const {
|
||||
toolIndex,
|
||||
loading: toolIndexLoading,
|
||||
error: toolIndexError,
|
||||
} = useGetToolIndex();
|
||||
|
||||
const { data: applicationsData } = useQuery<{
|
||||
findManyApplications: SettingsAgentToolApplication[];
|
||||
}>(FIND_MANY_APPLICATIONS_FOR_TOOL_TABLE);
|
||||
|
||||
const { data: marketplaceAppsData } = useQuery<{
|
||||
findManyMarketplaceApps: SettingsAgentToolMarketplaceApp[];
|
||||
}>(FIND_MANY_MARKETPLACE_APPS_FOR_TOOL_TABLE);
|
||||
|
||||
const allTools: SettingsAgentToolItem[] = useMemo(
|
||||
() => [
|
||||
...logicFunctions
|
||||
.filter((fn) => isDefined(fn.toolTriggerSettings))
|
||||
.map((fn) => ({
|
||||
identifier: fn.id,
|
||||
name: fn.name,
|
||||
description: fn.description,
|
||||
applicationId: fn.applicationId,
|
||||
})),
|
||||
...toolIndex
|
||||
.filter((tool) => tool.category !== ToolCategory.LOGIC_FUNCTION)
|
||||
.map((tool) => ({
|
||||
identifier: tool.name,
|
||||
name: tool.name,
|
||||
description: tool.description,
|
||||
category: tool.category,
|
||||
objectName: tool.objectName,
|
||||
icon: tool.icon,
|
||||
})),
|
||||
],
|
||||
[logicFunctions, toolIndex],
|
||||
);
|
||||
|
||||
const applicationById = new Map(
|
||||
(applicationsData?.findManyApplications ?? []).map((application) => [
|
||||
application.id,
|
||||
application,
|
||||
]),
|
||||
);
|
||||
|
||||
// MarketplaceApp.id IS the universal identifier — see
|
||||
// marketplace-query.service.ts where `id: registration.universalIdentifier`.
|
||||
const marketplaceAppByUniversalIdentifier = new Map(
|
||||
(marketplaceAppsData?.findManyMarketplaceApps ?? []).map(
|
||||
(marketplaceApp) => [marketplaceApp.id, marketplaceApp],
|
||||
),
|
||||
);
|
||||
|
||||
const isLoading = toolIndexLoading && !toolIndexError;
|
||||
|
||||
return {
|
||||
allTools,
|
||||
applicationById,
|
||||
marketplaceAppByUniversalIdentifier,
|
||||
currentWorkspace,
|
||||
isLoading,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,137 @@
|
||||
import { useMutation } from '@apollo/client/react';
|
||||
import { t } from '@lingui/core/macro';
|
||||
|
||||
import { useWorkspaceAiModelAvailability } from '@/ai/hooks/useWorkspaceAiModelAvailability';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
|
||||
import { UpdateWorkspaceDocument } from '~/generated-metadata/graphql';
|
||||
|
||||
export const useSettingsAiModelsActions = () => {
|
||||
const { enqueueErrorSnackBar } = useSnackBar();
|
||||
const [currentWorkspace, setCurrentWorkspace] = useAtomState(
|
||||
currentWorkspaceState,
|
||||
);
|
||||
const [updateWorkspace] = useMutation(UpdateWorkspaceDocument);
|
||||
const { realModels } = useWorkspaceAiModelAvailability();
|
||||
|
||||
const handleModelFieldChange = async (
|
||||
field: 'smartModel' | 'fastModel',
|
||||
value: string,
|
||||
) => {
|
||||
if (!currentWorkspace?.id) return;
|
||||
|
||||
const previousValue = currentWorkspace[field];
|
||||
try {
|
||||
setCurrentWorkspace({ ...currentWorkspace, [field]: value });
|
||||
await updateWorkspace({ variables: { input: { [field]: value } } });
|
||||
} catch {
|
||||
setCurrentWorkspace({ ...currentWorkspace, [field]: previousValue });
|
||||
enqueueErrorSnackBar({ message: t`Failed to update model` });
|
||||
}
|
||||
};
|
||||
|
||||
const handleUseRecommendedToggle = async (checked: boolean) => {
|
||||
if (!currentWorkspace?.id) return;
|
||||
|
||||
const previousValue = currentWorkspace.useRecommendedModels;
|
||||
let newEnabledIds = currentWorkspace.enabledAiModelIds ?? [];
|
||||
|
||||
if (!checked && previousValue) {
|
||||
newEnabledIds = realModels
|
||||
.filter((model) => model.isRecommended)
|
||||
.map((model) => model.modelId);
|
||||
}
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
useRecommendedModels: checked,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
await updateWorkspace({
|
||||
variables: {
|
||||
input: {
|
||||
useRecommendedModels: checked,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
useRecommendedModels: previousValue,
|
||||
});
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model selection mode`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleModelToggle = async (
|
||||
modelId: string,
|
||||
isCurrentlyEnabled: boolean,
|
||||
) => {
|
||||
if (!currentWorkspace?.id) return;
|
||||
|
||||
const previousEnabled = currentWorkspace.enabledAiModelIds ?? [];
|
||||
const newEnabledIds = isCurrentlyEnabled
|
||||
? previousEnabled.filter((id) => id !== modelId)
|
||||
: [...previousEnabled, modelId];
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
await updateWorkspace({
|
||||
variables: { input: { enabledAiModelIds: newEnabledIds } },
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: previousEnabled,
|
||||
});
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model availability`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleToggleAllVisibleModels = async (
|
||||
shouldCheckAll: boolean,
|
||||
visibleModelIds: Set<string>,
|
||||
) => {
|
||||
if (!currentWorkspace?.id) return;
|
||||
|
||||
const previousIds = currentWorkspace.enabledAiModelIds ?? [];
|
||||
const newEnabledIds = shouldCheckAll
|
||||
? [...new Set([...previousIds, ...visibleModelIds])]
|
||||
: previousIds.filter((id) => !visibleModelIds.has(id));
|
||||
|
||||
try {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: newEnabledIds,
|
||||
});
|
||||
await updateWorkspace({
|
||||
variables: { input: { enabledAiModelIds: newEnabledIds } },
|
||||
});
|
||||
} catch {
|
||||
setCurrentWorkspace({
|
||||
...currentWorkspace,
|
||||
enabledAiModelIds: previousIds,
|
||||
});
|
||||
enqueueErrorSnackBar({
|
||||
message: t`Failed to update model availability`,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
handleModelFieldChange,
|
||||
handleUseRecommendedToggle,
|
||||
handleModelToggle,
|
||||
handleToggleAllVisibleModels,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
export type SettingsAgentToolApplication = {
|
||||
id: string;
|
||||
name: string;
|
||||
universalIdentifier: string;
|
||||
logo?: string | null;
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
export type SettingsAgentToolItem = {
|
||||
identifier: string;
|
||||
name: string;
|
||||
description?: string | null;
|
||||
category?: string;
|
||||
objectName?: string | null;
|
||||
icon?: string | null;
|
||||
applicationId?: string | null;
|
||||
};
|
||||