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