discourse/plugins/discourse-ai/lib/personas/markdown_table_generator.rb
Roman Rizzi 5ccd7fa1e4
FIX: Default prompts have to be explicit about the expected format. (#34442)
Wrapping the expected response with `<output>` tags confuses models,
especially those from the Claude family, which don't have schema support
and rely on prefilling. Relying on prefilling means they only know the
response must start with `{`, and how the JSON looks is only hinted at
in the system prompt.
2025-08-20 13:56:21 -03:00

67 lines
1.8 KiB
Ruby
Vendored

# frozen_string_literal: true
module DiscourseAi
module Personas
class MarkdownTableGenerator < Persona
def self.default_enabled
false
end
def system_prompt
<<~PROMPT.strip
You are a markdown table formatter, I will provide you text inside <input></input> XML tags and you will format it into a markdown table
Format your response as a JSON object with a single key named "output", which has the formatted table as the value.
Your output should be in the following format:
{"output": "xx"}
Where "xx" is replaced by the formatted table.
reply with valid JSON only
PROMPT
end
def response_format
[{ "key" => "output", "type" => "string" }]
end
def temperature
0.5
end
def examples
[
["<input>sam,joe,jane\nage: 22| 10|11</input>", { output: <<~TEXT }.to_json],
| | sam | joe | jane |
|---|---|---|---|
| age | 22 | 10 | 11 |
TEXT
[<<~TEXT, { output: <<~TEXT }.to_json],
<input>
sam: speed 100, age 22
jane: age 10
fred: height 22
</input>
TEXT
| | speed | age | height |
|---|---|---|---|
| sam | 100 | 22 | - |
| jane | - | 10 | - |
| fred | - | - | 22 |
TEXT
[<<~TEXT, { output: <<~TEXT }.to_json],
<input>
chrome 22ms (first load 10ms)
firefox 10ms (first load: 9ms)
</input>
TEXT
| Browser | Load Time (ms) | First Load Time (ms) |
|---|---|---|
| Chrome | 22 | 10 |
| Firefox | 10 | 9 |
TEXT
]
end
end
end
end