diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-19 21:41:33 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-19 21:41:33 +0300 |
| commit | ef188388102b0377ed506b8767536233575965bb (patch) | |
| tree | 837fa426d8f2cc65a1bc144630f968bf2cab5c1a /internal/lsp/server.go | |
| parent | 526e40a54ba325a6f75f35817799614d7b5997b7 (diff) | |
lsp: reduce eager completions and add throttling\n\n- Defaults: remove ';' and '?' from trigger characters\n- Add min-typed-prefix heuristic for LLM completions (>=2 chars)\n- Add simple time-based throttle between LLM completions (default 900ms)\n- Tests: verify default triggers and skip logic (throttle + min prefix)\n- Config example: update trigger_characters list
Diffstat (limited to 'internal/lsp/server.go')
| -rw-r--r-- | internal/lsp/server.go | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/internal/lsp/server.go b/internal/lsp/server.go index f1ca302..474020c 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -32,6 +32,9 @@ type Server struct { triggerChars []string // If set, used as the LSP coding temperature for all LLM calls codingTemperature *float64 + // Throttling for LLM-powered completion + lastLLMCompletion time.Time + minCompletionInterval time.Duration // LLM request stats llmReqTotal int64 llmSentBytesTotal int64 @@ -51,6 +54,7 @@ type ServerOptions struct { Client llm.Client TriggerCharacters []string CodingTemperature *float64 + MinCompletionIntervalMs int } func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server { @@ -79,11 +83,17 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) s.startTime = time.Now() s.llmClient = opts.Client if len(opts.TriggerCharacters) == 0 { - s.triggerChars = []string{".", ":", "/", "_", ";", "?"} + // Conservative defaults to reduce early triggers and API usage + s.triggerChars = []string{".", ":", "/", "_"} } else { s.triggerChars = append([]string{}, opts.TriggerCharacters...) } s.codingTemperature = opts.CodingTemperature + if opts.MinCompletionIntervalMs <= 0 { + s.minCompletionInterval = 900 * time.Millisecond + } else { + s.minCompletionInterval = time.Duration(opts.MinCompletionIntervalMs) * time.Millisecond + } return s } |
