better logging

This commit is contained in:
2026-09-16 21:35:34 -06:00
parent 6381a49d13
commit 23c2db1046
2 changed files with 74 additions and 63 deletions
+59 -52
View File
@@ -1,11 +1,8 @@
local stored_messages = {}
local display_levels = {}
local enable_logging = true
local message_limit = math.huge
-- USAGE: -- USAGE:
-- -- set arbitrary log levels to be printed immediately -- -- set arbitrary log levels to be printed immediately
-- log{ info = true, warning = true, ducksauce = true, } -- log{ info = true, warning = true, ducksauce = true, }
-- -- disable storage of messages depending on log level
-- log{ error = false, verbose = false, }
-- -- send anything (except nil) to a log level -- -- send anything (except nil) to a log level
-- log("bacom", true, "text", 5, function() end, {}) -- log("bacom", true, "text", 5, function() end, {})
-- -- print all messages saved at a particular log level -- -- print all messages saved at a particular log level
@@ -14,62 +11,72 @@ local message_limit = math.huge
-- log(false) -- this deletes all stored messages -- log(false) -- this deletes all stored messages
-- -- set a maximum number of stored messages per log level -- -- set a maximum number of stored messages per log level
-- log(50) -- warning: reaching large limits makes logging expensive -- log(50) -- warning: reaching large limits makes logging expensive
-- -- check if a log level is being displayed
-- if log.arbitrary_exit then log("arbitrary_exit") os.exit(1) end
-- -- do anything to the stored messages (this example deletes them all) -- -- do anything to the stored messages (this example deletes them all)
-- log(function(messages) return {} end) -- log(function(messages) return {} end)
return function(options, ...) local microlog = {} -- display_levels are stored directly here
local options_type = type(options) local stored_messages = {}
local enable_logging = true
local message_limit = math.huge
if (options_type == "string") and enable_logging then return setmetatable(microlog, {
if not stored_messages[options] then stored_messages[options] = {} end __call = function(options, ...)
local message_table = stored_messages[options] local options_type = type(options)
-- turn log message into text if (options_type == "string") and enable_logging then
local tab = {...} if microlog[options] == false then return end
for i = 1, #tab do if not stored_messages[options] then stored_messages[options] = {} end
tab[i] = tostring(tab[i]) local message_table = stored_messages[options]
end
local current_message = table.concat(tab, "\t")
if #current_message == 0 then -- turn log message into text
-- print all stored_messages of specified level local tab = {...}
for i = 1, #message_table do for i = 1, #tab do
print(message_table[i]) tab[i] = tostring(tab[i])
end
local current_message = table.concat(tab, "\t")
if #current_message == 0 then
-- print all stored_messages of specified level
for i = 1, #message_table do
print(message_table[i])
end
else
-- store message (and print if in display_levels)
message_table[#message_table + 1] = current_message
if #message_table > message_limit then table.remove(message_table, 1) end
if microlog[options] then print(current_message) end
end end
else -- set display_levels
-- store message (and print if in display_levels) elseif options_type == "table" then
message_table[#message_table + 1] = current_message for k,v in pairs(options) do
if #message_table > message_limit then table.remove(message_table, 1) end microlog[k] = v
if display_levels[options] then print(current_message) end
end
-- set display_levels
elseif options_type == "table" then
for k,v in pairs(options) do
display_levels[k] = v
end
elseif options_type == "number" then
message_limit = options
for k,v in pairs(stored_messages) do
while #v > message_limit do
table.remove(v, 1)
end end
end
-- turn all logging off and delete stored messages; or turn it on elseif options_type == "number" then
elseif options_type == "boolean" then message_limit = options
if options then for k,v in pairs(stored_messages) do
enable_logging = true while #v > message_limit do
else table.remove(v, 1)
enable_logging = false end
stored_messages = {} end
end
-- arbitrary access :D -- turn all logging off and delete stored messages; or turn it on
elseif options_type == "function" then elseif options_type == "boolean" then
local result = options(stored_messages) if options then
if type(result) == "table" then stored_messages = result end enable_logging = true
else
enable_logging = false
stored_messages = {}
end
-- arbitrary access :D
elseif options_type == "function" then
local result = options(stored_messages)
if type(result) == "table" then stored_messages = result end
end
end end
end })
+15 -11
View File
@@ -25,7 +25,7 @@ end
log{ log{
info = true, info = true,
warning = true, warning = true,
-- debug = true, debug = false,
-- files = true, -- debugging why the wrong files are selected -- files = true, -- debugging why the wrong files are selected
-- sha = true, -- what the fuck is going on with sha sums? -- sha = true, -- what the fuck is going on with sha sums?
} }
@@ -43,7 +43,7 @@ if not utility.path_exists(embeddings_file_path) then
}, embeddings_file_path) }, embeddings_file_path)
end end
embeddings = utility.load_data(embeddings_file_path) embeddings = utility.load_data(embeddings_file_path)
local function embeddings_debug() if log.debug then
log("debug", "Embeddings loaded.", embeddings, embeddings.files, embeddings.vectors) log("debug", "Embeddings loaded.", embeddings, embeddings.files, embeddings.vectors)
local file_count = 0 local file_count = 0
for k,v in pairs(embeddings.files) do for k,v in pairs(embeddings.files) do
@@ -57,7 +57,6 @@ local function embeddings_debug()
log("debug", vector_count .. " vectors.") log("debug", vector_count .. " vectors.")
-- os.exit(1) -- os.exit(1)
end end
embeddings_debug()
@@ -93,12 +92,15 @@ local refresh_file_list = function(source_name, data_source)
end end
-- returns nothing when too much text is sent -- returns nothing when too much text is sent
local generate_embeddings = function(text) local generate_embeddings = function(data_source, text)
if #text > config.models.embedding.max_chunk_size then local max_chunk_size = data_source.max_chunk_size or config.models.embedding.max_chunk_size
local model = data_source.embedding_model or config.models.embedding.model
if #text > max_chunk_size then
return nil, "generate_embeddings() must only be passed appropriately-sized chunks!" return nil, "generate_embeddings() must only be passed appropriately-sized chunks!"
end end
local result = utility.llm_prompt(text, config.models.embedding.model) local result = utility.llm_prompt(text, model)
return json.decode(result) return json.decode(result)
end end
@@ -115,7 +117,7 @@ local process_file = function(data_source, file_name)
return return
end end
local chunk_size = config.models.embedding.max_chunk_size local chunk_size = data_source.max_chunk_size or config.models.embedding.max_chunk_size
local half_chunk_size = math.floor(chunk_size / 2) local half_chunk_size = math.floor(chunk_size / 2)
local chunks = { text } local chunks = { text }
@@ -136,13 +138,15 @@ local process_file = function(data_source, file_name)
local new_embeddings = {} local new_embeddings = {}
for i = 1, #chunks do for i = 1, #chunks do
log("debug", "Embedding length:", #chunks[i]) log("debug", "Embedding length:", #chunks[i])
new_embeddings[i] = generate_embeddings(chunks[i]) or {} new_embeddings[i] = generate_embeddings(data_source, chunks[i]) or {}
end end
if #new_embeddings[1] == 0 then if #new_embeddings[1] == 0 then
log("debug", "Vector lengths:") if log.debug then
for e = 1, #new_embeddings do log("debug", "Vector lengths:")
log("debug", "", e, #new_embeddings[e]) for e = 1, #new_embeddings do
log("debug", "", e, #new_embeddings[e])
end
end end
if #new_embeddings == 1 then if #new_embeddings == 1 then
-- Ollama very rarely errors with: -- Ollama very rarely errors with: