Skip to content

Inline Code Completion

Ghost-text completions as you type. Local-first by default — Ollama + qwen2.5-coder → fast, private, zero cloud cost. Any of 9 providers can back it.

graph TB A[Keystroke] --> B[Debounce 300 ms] B --> C[Context gathering<br/>prefix + suffix + imports via Tree-sitter] C --> D[FIM prompt builder<br/>model-specific tokens] D --> E[LLM provider] E --> F[Ghost text in editor]

Steps:

  1. Debounce — waits configured delay (default 300 ms) after you stop typing. Prevents excessive API calls during rapid typing.
  2. ContextContextCompletionService captures prefix (~8000 chars / 2000 tokens), suffix (~2000 chars / 500 tokens), imports via Tree-sitter AST (TypeScript, JavaScript, Python).
  3. FIM promptFIMPromptService wraps context in model-specific Fill-in-the-Middle tokens. No FIM support → falls back to prefix-only prompt.
  4. Send — result cached (LRU, 50 entries) so identical contexts don’t re-request.
  5. Display — appears as ghost text. Tab accepts.

FIM-capable models mark prefix / suffix / fill position with special tokens:

Model familyPrefixSuffixMiddleEOT
Qwen (default)<|fim_prefix|><|fim_suffix|><|fim_middle|><|endoftext|>
DeepSeek<|fim_begin|><|fim_hole|><|fim_end|><|end_of_text|>
CodeLlama<PRE><SUF><MID><EOT>
StarCoder / Codestral<fim_prefix><fim_suffix><fim_middle><|endoftext|>

Non-FIM models receive prefix text only → generate next-likely tokens.

SettingDefaultPurpose
codebuddy.completion.enabledtrueMaster toggle
codebuddy.completion.provider"Local"Provider — Gemini, Groq, Anthropic, DeepSeek, OpenAI, Qwen, GLM, Local
codebuddy.completion.model"qwen2.5-coder"Model name
codebuddy.completion.apiKey""Overrides provider key (falls back if empty)
codebuddy.completion.debounceMs300Trigger delay (min 50)
codebuddy.completion.maxTokens128Max tokens per completion
codebuddy.completion.triggerMode"automatic"automatic (as you type) or manual
codebuddy.completion.multiLinetrueAllow multi-line completions
CommandEffect
Toggle Inline CompletionsFlips codebuddy.completion.enabled
Configure Completion SettingsOpens settings filtered to codebuddy.completion.*
  • $(zap) CodeBuddy: qwen2.5-coder — enabled, active model shown
  • $(circle-slash) CodeBuddy: Off — disabled

Click to open completion settings.

ProviderEndpointFIM support
Local (default)http://localhost:11434/v1Yes (Qwen, DeepSeek, CodeLlama, StarCoder)
Groqapi.groq.comDepends on model
OpenAIapi.openai.comNo (chat fallback)
AnthropicAnthropic SDKNo (chat fallback)
GeminiGoogle AI SDKNo (chat fallback)
DeepSeekapi.deepseek.comYes
Qwendashscope-intl.aliyuncs.comYes
GLMopen.bigmodel.cnDepends on model

Completions work in all file types — provider registered with { pattern: "**" }. Import extraction via Tree-sitter covers TypeScript, JavaScript, Python. Other languages get prefix + suffix without import signatures.