From 43a7451e8f30d5c5e8b3aee9e02edb046251d7b6 Mon Sep 17 00:00:00 2001 From: Sylvie Crowe <107814465+oneirocosm@users.noreply.github.com> Date: Fri, 7 Feb 2025 14:56:11 -0800 Subject: [PATCH] feat: add ai presets schema (#1928) --- cmd/generateschema/main-generateschema.go | 43 ++++++--------- .../app/view/codeeditor/schemaendpoints.ts | 1 + schema/aipresets.json | 54 +++++++++++++++++++ 3 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 schema/aipresets.json diff --git a/cmd/generateschema/main-generateschema.go b/cmd/generateschema/main-generateschema.go index a10289985..03b4f62b9 100644 --- a/cmd/generateschema/main-generateschema.go +++ b/cmd/generateschema/main-generateschema.go @@ -16,49 +16,40 @@ import ( const WaveSchemaSettingsFileName = "schema/settings.json" const WaveSchemaConnectionsFileName = "schema/connections.json" +const WaveSchemaAiPresetsFileName = "schema/aipresets.json" -func generateSettingsSchema() error { - settingsSchema := jsonschema.Reflect(&wconfig.SettingsType{}) +func generateSchema(template any, dir string) error { + settingsSchema := jsonschema.Reflect(template) jsonSettingsSchema, err := json.MarshalIndent(settingsSchema, "", " ") if err != nil { - return fmt.Errorf("failed to parse local schema: %v", err) + return fmt.Errorf("failed to parse local schema: %w", err) } - written, err := utilfn.WriteFileIfDifferent(WaveSchemaSettingsFileName, jsonSettingsSchema) + written, err := utilfn.WriteFileIfDifferent(dir, jsonSettingsSchema) if !written { - fmt.Fprintf(os.Stderr, "no changes to %s\n", WaveSchemaSettingsFileName) + fmt.Fprintf(os.Stderr, "no changes to %s\n", dir) } if err != nil { - return fmt.Errorf("failed to write local schema: %v", err) - } - return nil -} - -func generateConnectionsSchema() error { - connExample := make(map[string]wconfig.ConnKeywords) - connectionSchema := jsonschema.Reflect(connExample) - - jsonSettingsSchema, err := json.MarshalIndent(connectionSchema, "", " ") - if err != nil { - return fmt.Errorf("failed to parse local schema: %v", err) - } - written, err := utilfn.WriteFileIfDifferent(WaveSchemaConnectionsFileName, jsonSettingsSchema) - if !written { - fmt.Fprintf(os.Stderr, "no changes to %s\n", WaveSchemaConnectionsFileName) - } - if err != nil { - return fmt.Errorf("failed to write local schema: %v", err) + return fmt.Errorf("failed to write local schema: %w", err) } return nil } func main() { - err := generateSettingsSchema() + err := generateSchema(&wconfig.SettingsType{}, WaveSchemaSettingsFileName) if err != nil { log.Fatalf("settings schema error: %v", err) } - err = generateConnectionsSchema() + + connectionTemplate := make(map[string]wconfig.ConnKeywords) + err = generateSchema(&connectionTemplate, WaveSchemaConnectionsFileName) if err != nil { log.Fatalf("connections schema error: %v", err) } + + aiPresetsTemplate := make(map[string]wconfig.AiSettingsType) + err = generateSchema(&aiPresetsTemplate, WaveSchemaAiPresetsFileName) + if err != nil { + log.Fatalf("ai presets schema error: %v", err) + } } diff --git a/frontend/app/view/codeeditor/schemaendpoints.ts b/frontend/app/view/codeeditor/schemaendpoints.ts index 4c9d98670..4619cb2a6 100644 --- a/frontend/app/view/codeeditor/schemaendpoints.ts +++ b/frontend/app/view/codeeditor/schemaendpoints.ts @@ -13,6 +13,7 @@ type EndpointInfo = { const allFilepaths: Map> = new Map(); allFilepaths.set(`${getWebServerEndpoint()}/schema/settings.json`, [`${getApi().getConfigDir()}/settings.json`]); allFilepaths.set(`${getWebServerEndpoint()}/schema/connections.json`, [`${getApi().getConfigDir()}/connections.json`]); +allFilepaths.set(`${getWebServerEndpoint()}/schema/aipresets.json`, [`${getApi().getConfigDir()}/presets/ai.json`]); async function getSchemaEndpointInfo(endpoint: string): Promise { let schema: Object; diff --git a/schema/aipresets.json b/schema/aipresets.json new file mode 100644 index 000000000..4e88007ac --- /dev/null +++ b/schema/aipresets.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "AiSettingsType": { + "properties": { + "ai:*": { + "type": "boolean" + }, + "ai:preset": { + "type": "string" + }, + "ai:apitype": { + "type": "string" + }, + "ai:baseurl": { + "type": "string" + }, + "ai:apitoken": { + "type": "string" + }, + "ai:name": { + "type": "string" + }, + "ai:model": { + "type": "string" + }, + "ai:orgid": { + "type": "string" + }, + "ai:apiversion": { + "type": "string" + }, + "ai:maxtokens": { + "type": "number" + }, + "ai:timeoutms": { + "type": "number" + }, + "ai:fontsize": { + "type": "number" + }, + "ai:fixedfontsize": { + "type": "number" + } + }, + "additionalProperties": false, + "type": "object" + } + }, + "additionalProperties": { + "$ref": "#/$defs/AiSettingsType" + }, + "type": "object" +} \ No newline at end of file