From bdb615876df41717180c31640a8542b86326a9b3 Mon Sep 17 00:00:00 2001 From: Leyla Becker Date: Thu, 24 Jul 2025 00:55:54 -0500 Subject: [PATCH] fixed extension configs --- .vscode/extensions.json | 2 +- package.json | 59 ++++++++++++++++++++++++++++++++++++++++- src/config.ts | 51 ++++++++++++++++++++--------------- 3 files changed, 89 insertions(+), 23 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index dd01eb3..c0a2258 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,5 @@ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format - "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher", "ms-vscode.extension-test-runner"] + "recommendations": ["dbaeumer.vscode-eslint"] } diff --git a/package.json b/package.json index fc213b8..c9043bf 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,64 @@ "main": "./dist/extension.js", "contributes": { "commands": [ - ] + ], + "configuration": { + "title": "Ai Code", + "properties": { + "aiCode.ollamaHost": { + "type": "string", + "description": "host for ollama", + "default": "http://localhost:11434" + }, + "aiCode.inlineCompletion.enable": { + "type": "boolean", + "description": "should auto complete be enabled", + "default": true + }, + "aiCode.inlineCompletion.model": { + "type": "string", + "description": "", + "default": "deepseek-coder:6.7b" + }, + "aiCode.inlineCompletion.prefixStart": { + "type": "string", + "description": "", + "default": "" + }, + "aiCode.inlineCompletion.prefixEnds": { + "type": "string", + "description": "", + "default": ",,," + }, + "aiCode.inlineCompletion.suffixStart": { + "type": "string", + "description": "", + "default": "" + }, + "aiCode.inlineCompletion.suffixEnd": { + "type": "string", + "description": "", + "default": "" + }, + "aiCode.inlineCompletion.maxTokens": { + "type": "number", + "description": "", + "default": 50, + "minimum": 1 + }, + "aiCode.inlineCompletion.generationTimeout": { + "type": "number", + "description": "", + "default": 200, + "minimum": 1 + }, + "aiCode.inlineCompletion.triePruneTimeout": { + "type": "number", + "description": "", + "default": 10000 + } + } + } }, "scripts": { "vscode:prepublish": "npm run package", diff --git a/src/config.ts b/src/config.ts index 4da9580..6ddf6f6 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,10 +1,11 @@ import { Ollama } from 'ollama/browser'; import * as vscode from 'vscode'; -const CONFIG_NAMESPACE = 'ai-code'; +const CONFIG_NAMESPACE = 'aiCode'; const KEY_OLLAMA_HOST = 'ollamaHost'; +const KEY_INLINE_COMPLETION_ENABLE = 'inlineCompletion.enable'; const KEY_INLINE_COMPLETION_MODEL = 'inlineCompletion.model'; const KEY_INLINE_COMPLETION_PREFIX_START = 'inlineCompletion.prefixStart'; const KEY_INLINE_COMPLETION_PREFIX_END = 'inlineCompletion.prefixEnd'; @@ -14,9 +15,11 @@ const KEY_INLINE_COMPLETION_MAX_TOKENS = 'inlineCompletion.maxTokens'; const KEY_INLINE_COMPLETION_GENERATION_TIMEOUT = 'inlineCompletion.generationTimeout'; const KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT = 'inlineCompletion.triePruneTimeout'; +const DEFAULT_OLLAMA_HOST = 'http://localhost:11434'; +const DEFAULT_INLINE_COMPLETION_ENABLE = true; const DEFAULT_INLINE_COMPLETION_MODEL = 'deepseek-coder:6.7b'; const DEFAULT_INLINE_COMPLETION_PREFIX_START = ''; -const DEFAULT_INLINE_COMPLETION_PREFIX_ENDS = ['', '', '', '']; +const DEFAULT_INLINE_COMPLETION_PREFIX_ENDS = ['', '', '', ''].join(); const DEFAULT_INLINE_COMPLETION_SUFFIX_START = ''; const DEFAULT_INLINE_COMPLETION_SUFFIX_END = ''; const DEFAULT_INLINE_COMPLETION_MAX_TOKENS = 50; @@ -24,8 +27,9 @@ const DEFAULT_INLINE_COMPLETION_GENERATION_TIMEOUT = 200; const DEFAULT_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT = 10000; interface ExtensionConfiguration { - ollamaHost: string | undefined + ollamaHost: string inlineCompletion: { + enable: boolean model: string prefixStart: string prefixEnds: string[] @@ -46,16 +50,17 @@ export const getExtensionState = (): ExtensionState => { const extensionConfig = vscode.workspace.getConfiguration(CONFIG_NAMESPACE); const configuration: ExtensionConfiguration = { - ollamaHost: extensionConfig.get(KEY_OLLAMA_HOST), + ollamaHost: extensionConfig.get(KEY_OLLAMA_HOST, DEFAULT_OLLAMA_HOST), inlineCompletion: { - model: extensionConfig.get(KEY_INLINE_COMPLETION_MODEL) ?? DEFAULT_INLINE_COMPLETION_MODEL, - prefixStart: extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_START) ?? DEFAULT_INLINE_COMPLETION_PREFIX_START, - prefixEnds: extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_END)?.split(',') ?? DEFAULT_INLINE_COMPLETION_PREFIX_ENDS, - suffixStart: extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_START) ?? DEFAULT_INLINE_COMPLETION_SUFFIX_START, - suffixEnd: extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_END) ?? DEFAULT_INLINE_COMPLETION_SUFFIX_END, - maxTokens: extensionConfig.get(KEY_INLINE_COMPLETION_MAX_TOKENS) ?? DEFAULT_INLINE_COMPLETION_MAX_TOKENS, - generationTimeout: extensionConfig.get(KEY_INLINE_COMPLETION_GENERATION_TIMEOUT) ?? DEFAULT_INLINE_COMPLETION_GENERATION_TIMEOUT, - triePruneTimeout: extensionConfig.get(KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT) ?? DEFAULT_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT, + enable: extensionConfig.get(KEY_INLINE_COMPLETION_ENABLE, DEFAULT_INLINE_COMPLETION_ENABLE), + model: extensionConfig.get(KEY_INLINE_COMPLETION_MODEL, DEFAULT_INLINE_COMPLETION_MODEL), + prefixStart: extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_START, DEFAULT_INLINE_COMPLETION_PREFIX_START), + prefixEnds: extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_END, DEFAULT_INLINE_COMPLETION_PREFIX_ENDS)?.split(',').map((value) => value.trim()), + suffixStart: extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_START, DEFAULT_INLINE_COMPLETION_SUFFIX_START), + suffixEnd: extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_END, DEFAULT_INLINE_COMPLETION_SUFFIX_END), + maxTokens: extensionConfig.get(KEY_INLINE_COMPLETION_MAX_TOKENS, DEFAULT_INLINE_COMPLETION_MAX_TOKENS), + generationTimeout: extensionConfig.get(KEY_INLINE_COMPLETION_GENERATION_TIMEOUT, DEFAULT_INLINE_COMPLETION_GENERATION_TIMEOUT), + triePruneTimeout: extensionConfig.get(KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT, DEFAULT_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT), }, }; @@ -69,42 +74,46 @@ export const getExtensionState = (): ExtensionState => { vscode.workspace.onDidChangeConfiguration((event) => { if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_OLLAMA_HOST}`)) { - configuration.ollamaHost = extensionConfig.get(KEY_OLLAMA_HOST); + configuration.ollamaHost = extensionConfig.get(KEY_OLLAMA_HOST, DEFAULT_OLLAMA_HOST); state.ollama = new Ollama({ host: configuration.ollamaHost, }); } + if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_ENABLE}`)) { + configuration.inlineCompletion.enable = extensionConfig.get(KEY_INLINE_COMPLETION_ENABLE, DEFAULT_INLINE_COMPLETION_ENABLE); + } + if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_MODEL}`)) { - configuration.inlineCompletion.model = extensionConfig.get(KEY_INLINE_COMPLETION_MODEL) ?? DEFAULT_INLINE_COMPLETION_MODEL; + configuration.inlineCompletion.model = extensionConfig.get(KEY_INLINE_COMPLETION_MODEL, DEFAULT_INLINE_COMPLETION_MODEL); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_PREFIX_START}`)) { - configuration.inlineCompletion.prefixStart = extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_START) ?? DEFAULT_INLINE_COMPLETION_PREFIX_START; + configuration.inlineCompletion.prefixStart = extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_START, DEFAULT_INLINE_COMPLETION_PREFIX_START); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_PREFIX_END}`)) { - configuration.inlineCompletion.prefixEnds = extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_END)?.split(',') ?? DEFAULT_INLINE_COMPLETION_PREFIX_ENDS; + configuration.inlineCompletion.prefixEnds = extensionConfig.get(KEY_INLINE_COMPLETION_PREFIX_END, DEFAULT_INLINE_COMPLETION_PREFIX_ENDS)?.split(',').map((value) => value.trim()); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_SUFFIX_START}`)) { - configuration.inlineCompletion.suffixStart = extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_START) ?? DEFAULT_INLINE_COMPLETION_SUFFIX_START; + configuration.inlineCompletion.suffixStart = extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_START, DEFAULT_INLINE_COMPLETION_SUFFIX_START); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_SUFFIX_END}`)) { - configuration.inlineCompletion.suffixEnd = extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_END) ?? DEFAULT_INLINE_COMPLETION_SUFFIX_END; + configuration.inlineCompletion.suffixEnd = extensionConfig.get(KEY_INLINE_COMPLETION_SUFFIX_END, DEFAULT_INLINE_COMPLETION_SUFFIX_END); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_MAX_TOKENS}`)) { - configuration.inlineCompletion.maxTokens = extensionConfig.get(KEY_INLINE_COMPLETION_MAX_TOKENS) ?? DEFAULT_INLINE_COMPLETION_MAX_TOKENS; + configuration.inlineCompletion.maxTokens = extensionConfig.get(KEY_INLINE_COMPLETION_MAX_TOKENS, DEFAULT_INLINE_COMPLETION_MAX_TOKENS); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_GENERATION_TIMEOUT}`)) { - configuration.inlineCompletion.generationTimeout = extensionConfig.get(KEY_INLINE_COMPLETION_GENERATION_TIMEOUT) ?? DEFAULT_INLINE_COMPLETION_GENERATION_TIMEOUT; + configuration.inlineCompletion.generationTimeout = extensionConfig.get(KEY_INLINE_COMPLETION_GENERATION_TIMEOUT, DEFAULT_INLINE_COMPLETION_GENERATION_TIMEOUT); } if (event.affectsConfiguration(`${CONFIG_NAMESPACE}.${KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT}`)) { - configuration.inlineCompletion.triePruneTimeout = extensionConfig.get(KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT) ?? DEFAULT_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT; + configuration.inlineCompletion.triePruneTimeout = extensionConfig.get(KEY_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT, DEFAULT_INLINE_COMPLETION_TRIE_PRUNE_TIMEOUT); } });