49 lines
1.8 KiB
Lua
49 lines
1.8 KiB
Lua
|
|
-- "Что было в этот день в истории" — Wikipedia API + LLM сжатие.
|
|||
|
|
local t = jarvis.context.time
|
|||
|
|
|
|||
|
|
-- Wikipedia's "On this day" Featured Content API:
|
|||
|
|
-- https://api.wikimedia.org/feed/v1/wikipedia/ru/onthisday/events/MM/DD
|
|||
|
|
local url = string.format(
|
|||
|
|
"https://api.wikimedia.org/feed/v1/wikipedia/ru/onthisday/events/%02d/%02d",
|
|||
|
|
t.month, t.day
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
local data = jarvis.http.json(url)
|
|||
|
|
if not data or not data.events or #data.events == 0 then
|
|||
|
|
-- fallback: EN
|
|||
|
|
url = string.format(
|
|||
|
|
"https://api.wikimedia.org/feed/v1/wikipedia/en/onthisday/events/%02d/%02d",
|
|||
|
|
t.month, t.day
|
|||
|
|
)
|
|||
|
|
data = jarvis.http.json(url)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if not data or not data.events or #data.events == 0 then
|
|||
|
|
return jarvis.cmd.not_found("На этот день в истории ничего интересного.")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Pick first 5 events to feed into LLM for summarisation
|
|||
|
|
local sample = {}
|
|||
|
|
for i = 1, math.min(5, #data.events) do
|
|||
|
|
local ev = data.events[i]
|
|||
|
|
local year = ev.year or "?"
|
|||
|
|
local text = ev.text or ""
|
|||
|
|
if text ~= "" then
|
|||
|
|
table.insert(sample, year .. ": " .. text)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local context = table.concat(sample, "\n")
|
|||
|
|
|
|||
|
|
local reply = jarvis.llm({
|
|||
|
|
{ role = "system", content = "Ты — историк. Из списка событий выбери 2-3 самых интересных для русскоязычного слушателя, расскажи коротко на русском. Без преамбул." },
|
|||
|
|
{ role = "user", content = "Сегодня " .. t.day .. " число месяца " .. t.month .. ". События в этот день:\n\n" .. context }
|
|||
|
|
}, { max_tokens = 350, temperature = 0.4 })
|
|||
|
|
|
|||
|
|
if not reply or reply == "" then
|
|||
|
|
-- Fallback: just speak first event
|
|||
|
|
return jarvis.cmd.ok(sample[1] or "Не нашёл интересного.")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return jarvis.cmd.ok(reply)
|