stupid LLM only outputs Markdown
This commit is contained in:
+35
-4
@@ -87,6 +87,19 @@ local function strip_frontmatter(text)
|
|||||||
return text
|
return text
|
||||||
end
|
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)
|
local strip_reasoning = function(text, reasoning_lines)
|
||||||
if not reasoning_lines then reasoning_lines = {} end
|
if not reasoning_lines then reasoning_lines = {} end
|
||||||
local tab = text:split("\n")
|
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
|
if not output then error("ollama failed to generate output") end
|
||||||
output = output:sub(1, -2) -- strip extra newline from utility.capture_safe
|
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
|
end
|
||||||
|
|
||||||
local tree
|
local tree
|
||||||
@@ -174,13 +188,17 @@ local generate_and_score = function(file_name, text)
|
|||||||
local synopsis = send_prompt(synopsis_prompt .. text)
|
local synopsis = send_prompt(synopsis_prompt .. text)
|
||||||
print(synopsis)
|
print(synopsis)
|
||||||
print("Scoring synopsis...")
|
print("Scoring synopsis...")
|
||||||
local scoring = send_prompt(scoring_prompt .. synopsis)
|
local scoring, thinking = send_prompt(scoring_prompt .. synopsis)
|
||||||
print(scoring)
|
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 = {
|
local object = {
|
||||||
synopsis = synopsis,
|
synopsis = synopsis,
|
||||||
scoring = scoring_decoded or scoring, -- either the correct values or a string of output that isn't JSON
|
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 }))
|
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()
|
refresh_file_list()
|
||||||
end
|
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.")
|
print(#files .. " files to select from.")
|
||||||
if #files == 0 then
|
if #files == 0 then
|
||||||
print("Run \"./synopsis_generator.lua refresh_file_list\" first.")
|
print("Run \"./synopsis_generator.lua refresh_file_list\" first.")
|
||||||
|
|||||||
Reference in New Issue
Block a user