Skip to content

Model response with unformatted markdown table #12167

Description

@dhuertas

Before submitting your bug report

Relevant environment info

- OS: Linux Debian Trixie
- Continue version: 1.3.38
- IDE version: VS Code 1.116.0
- Model: google/gemma-4-e4b
- config:
  
name: Local Config
version: 1.0.0
schema: v1
models:
  - name: Gemma 4 E4B
    provider: lmstudio
    model: google/gemma-4-e4b
    apiBase: http://localhost:1234/v1
    defaultCompletionOptions:
      reasoning: true
      temperature: 0.2
    requestOptions:
      verifySsl: false
    capabilities:
      - tool_use
      - image_input
    roles:
      - chat
      - edit
      - apply
mcpServers:
  - name: Github MCP
    type: streamable-http
    url: http://localhost:8000/mcp

Description

There seems to be a problem with how VS Code + Continue extension are not able to render markdown tables in the model response sections. I am attaching a screenshot below. It shows how the markdown table appears in a single line of text but not rendered, and I am not sure which one is the culprit (vscode or continue, that is).

I initially thought the model was not returning the table in proper markdown, but logs show it does (also attached).

Here's a screenshot showcasing the problem:

Image

These are the logs from lmstudio (lms log stream --stats | tee lms.txt command line):

Streaming logs from LM Studio

timestamp: �[32m4/18/2026, 8:22:48 AM�[39m
type: �[32mllm.prediction.input�[39m
modelIdentifier: �[32mgoogle/gemma-4-e4b�[39m
modelPath: �[32mgoogle/gemma-4-e4b�[39m
input:
�[32m<|turn>system�[39m
�[32m<|think|>�[39m
�[32m<important_rules>�[39m
�[32m  You are in chat mode.�[39m
�[32m�[39m
�[32m  If the user asks to make changes to files offer that they can use the Apply Button on the code block, or switch to Agent Mode to make the suggested updates automatically.�[39m
�[32m  If needed concisely explain to the user they can switch to agent mode using the Mode Selector dropdown and provide no other details.�[39m
�[32m�[39m
�[32m  Always include the language and file name in the info string when you write code blocks.�[39m
�[32m  If you are editing "src/main.py" for example, your code block should start with '```python src/main.py'�[39m
�[32m�[39m
�[32m  When addressing code modification requests, present a concise code snippet that�[39m
�[32m  emphasizes only the necessary changes and uses abbreviated placeholders for�[39m
�[32m  unmodified sections. For example:�[39m
�[32m�[39m
�[32m  ```language /path/to/file�[39m
�[32m  // ... existing code ...�[39m
�[32m�[39m
�[32m  {{ modified code here }}�[39m
�[32m�[39m
�[32m  // ... existing code ...�[39m
�[32m�[39m
�[32m  {{ another modification }}�[39m
�[32m�[39m
�[32m  // ... rest of code ...�[39m
�[32m  ```�[39m
�[32m�[39m
�[32m  In existing files, you should always restate the function or class that the snippet belongs to:�[39m
�[32m�[39m
�[32m  ```language /path/to/file�[39m
�[32m  // ... existing code ...�[39m
�[32m�[39m
�[32m  function exampleFunction() {�[39m
�[32m    // ... existing code ...�[39m
�[32m�[39m
�[32m    {{ modified code here }}�[39m
�[32m�[39m
�[32m    // ... rest of function ...�[39m
�[32m  }�[39m
�[32m�[39m
�[32m  // ... rest of code ...�[39m
�[32m  ```�[39m
�[32m�[39m
�[32m  Since users have access to their complete file, they prefer reading only the�[39m
�[32m  relevant modifications. It's perfectly acceptable to omit unmodified portions�[39m
�[32m  at the beginning, middle, or end of files using these "lazy" comments. Only�[39m
�[32m  provide the complete file when explicitly requested. Include a concise explanation�[39m
�[32m  of changes unless the user specifically asks for code only.�[39m
�[32m�[39m
�[32m</important_rules>�[39m
�[32m�[39m
�[32mBe concise<turn|>�[39m
�[32m<|turn>user�[39m
�[32mI'm debugging a problem parsing markdown tables and I need your help. Generate a 3 by 3 markdown table with dummy content so I can debug the parser.<turn|>�[39m
�[32m<|turn>model�[39m
�[32m�[39m


timestamp: �[32m4/18/2026, 8:22:51 AM�[39m
type: �[32mllm.prediction.output�[39m
modelIdentifier: �[32mgoogle/gemma-4-e4b�[39m
output:
�[32m<|channel>thought�[39m
�[32mThe user wants a sample 3x3 Markdown table for testing a markdown table parser. I should generate this directly in the response. No file modifications are needed.<channel|>Here is a 3x3 markdown table with dummy content you can use for debugging:�[39m
�[32m�[39m
�[32m| Header 1 | Header 2 | Header 3 |�[39m
�[32m| :--- | :---: | ---: |�[39m
�[32m| Row 1, Col 1 | Data A | Value X |�[39m
�[32m| Row 2, Col 1 | Data B | Value Y |�[39m
�[32m| Row 3, Col 1 | Data C | Value Z |�[39m
stopReason: �[32meosFound�[39m
tokensPerSecond: �[32m47.063338202578706�[39m
numGpuLayers: �[32m-1�[39m
timeToFirstTokenSec: �[32m0.094�[39m
totalTimeSec: �[32m2.734�[39m
promptTokensCount: �[32m426�[39m
predictedTokensCount: �[32m130�[39m
totalTokensCount: �[32m556�[39m

Color characters from the lms log command aside, it seems the markdown table is properly generated, but either VS Code or the extension is not able to render to its markdown preview format. Any ideas where to look next?

Thanks!

To reproduce

  1. Open Continue extension
  2. Force model to write a markdown table
  3. More often than not, it will output an unrendered markdown table in one line

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:chatRelates to chat interfaceide:vscodeRelates specifically to VS Code extensionkind:bugIndicates an unexpected problem or unintended behavior

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions