stupid LLM only outputs Markdown

This commit is contained in:
2026-07-12 01:11:22 -06:00
parent e2238ec1dc
commit 83edc35af9
+35 -4
View File
@@ -87,6 +87,19 @@ local function strip_frontmatter(text)
return text
end
-- strip Markdown formatting of a JSON block
-- just returns the string if it doesn't match
local function strip_markdown_codeblock(text)
local tab = text:split("\n")
if tab[1] == "```json" then
table.remove(tab, 1)
table.remove(tab, #tab)
return table.concat(tab, "\n")
else
return text
end
end
local strip_reasoning = function(text, reasoning_lines)
if not reasoning_lines then reasoning_lines = {} end
local tab = text:split("\n")
@@ -121,9 +134,10 @@ local send_prompt = function(text, model)
if not output then error("ollama failed to generate output") end
output = output:sub(1, -2) -- strip extra newline from utility.capture_safe
output = strip_reasoning(output)
local thinking = {}
output = strip_reasoning(output, thinking)
return output
return output, thinking
end
local tree
@@ -174,13 +188,17 @@ local generate_and_score = function(file_name, text)
local synopsis = send_prompt(synopsis_prompt .. text)
print(synopsis)
print("Scoring synopsis...")
local scoring = send_prompt(scoring_prompt .. synopsis)
local scoring, thinking = send_prompt(scoring_prompt .. synopsis)
print(scoring)
local scoring_decoded = json.decode(scoring)
local scoring_decoded = json.decode(scoring) -- likely will not work because it consistently returns Markdown instead of JSON
if not scoring_decoded then
scoring_decoded = json.decode(strip_markdown_codeblock(scoring))
end
local object = {
synopsis = synopsis,
scoring = scoring_decoded or scoring, -- either the correct values or a string of output that isn't JSON
thinking = thinking,
}
write_all("PRIVATE_DATA/synopses/" .. utility.uuid() .. ".json", json.encode(object, { indent = true }))
@@ -193,6 +211,19 @@ if arg[1] == "refresh_file_list" then
refresh_file_list()
end
if arg[1] == "repair_synopsis_exports" then
utility.list("PRIVATE_DATA/synopses", function(path_name)
if path_name:find("%.json") then
local object = json.decode(read_all(path_name))
local decoded = json.decode(strip_markdown_codeblock(object.scoring))
if decoded then
object.scoring = decoded
write_all(path_name, json.encode(object, { indent = true, }))
end
end
end)
end
print(#files .. " files to select from.")
if #files == 0 then
print("Run \"./synopsis_generator.lua refresh_file_list\" first.")