v0.2.0

LLM Digest

Last updated

This page explains when the news digest in the Summary pane is generated, what is sent, and the streaming client in internal/api.

Trigger Conditions

Condition Result
A check finds at least one new article Generate a digest after full-text extraction finishes
No new articles No digest; Summary keeps the last result
On launch Load the last result from the summary key without calling the API

The digest request runs on the tview main thread (QueueUpdateDraw), so the interface does not respond to keys while waiting for the reply.

What Gets Sent

Role Content
system Fixed Traditional Chinese instructions, the current time, OS/architecture, and the previous digest
user (only without a previous digest) Every article stored in the last 24 hours
user Every article from this fetch (within 72 hours)

Each article sends Title, Source, PublishedAt (local time), and Content; Content is the RSS description, not the extracted full text.

Output Structure

The system instructions ask for Traditional Chinese output in this order:

Section Content
重大要聞 (major news) International affairs, government policy, major social events
科技與金融 (tech & finance) Tech trends, market moves, economic indicators
生活資訊 (lifestyle) Weather, traffic, consumer, health, education and culture
趨勢分析 (trend analysis) Changes against the previous digest and likely follow-ups

On success the result is written back to summary in the data table and displayed; on failure the error message appears in Summary and the stored digest stays unchanged.

API Client

Symbol Behavior
api.ApiKey Package-level variable; loaded from apikey in the database before a digest
AskWithSmallModel(msgList) Calls gpt-4o-mini; does not check the key
AskWithLargeModel(msgList) Calls gpt-4o; returns API key is not set when the key is empty or shorter than 20 characters; unused by the interface
Message Role, Content
Request Model, Messages, Stream (always true)
Response Choices[].Delta.Content of a stream chunk

Requests go to https://api.openai.com/v1/chat/completions; data: lines are read from the SSE stream and delta.content is concatenated. A non-200 response returns API Error (Status N): <body>. The HTTP client has no timeout.

中文