gomeshalerter/models.go

88 lines
3.0 KiB
Go

package main
import (
"time"
)
type Article struct {
Title string `json:"title"`
Description string `json:"description"`
Link string `json:"link"`
Published time.Time `json:"published"` // When we first saw the article
OriginalDate time.Time `json:"originalDate"` // Original publication date from the feed
Source string `json:"source"`
FirstSeen time.Time `json:"firstseen"`
Seen time.Time `json:"seen"`
Summary string `json:"summary"`
Importance int `json:"importance"`
ID string `json:"id"`
BroadcastTime time.Time `json:"broadcastTime,omitempty"`
}
type LogEntry struct {
Timestamp time.Time `json:"timestamp"`
Event string `json:"event"`
Details map[string]interface{} `json:"details"`
}
// Data structure for web UI
type DashboardData struct {
LastUpdated string
TotalArticles int
TotalBroadcast int
NewInLastHour int
UnsummarizedCount int
NextUp []Article
History []Article
RecentLogs []LogEntry
}
const (
dbPath = "articles.db"
// LLM prompts
ARTICLES_PROMPT = `Summarize each of these news items in under 165
characters, optimizing for information density (common news headline
abbreviations OK) and rate their importance from 1 to 100.
100 means most important; 1 means least important.
Never rate over 90 unless it is a massive event such as: war outbreak,
revolution, death of a head of state, large-scale natural disaster, mass
casualty terrorism, etc.
IMPORTANT: Rank any headlines primarily promoting commercial products or
services as 1 (lowest importance).
Rank any article with a headline that poses a question without providing an
answer (as an attempt to lure a reader into clicking a link) as 1 (lowest
importance).
IMPORTANT: Boost the importance score by 10-20 points for breaking news that is less
than 60 minutes old based on its original publication date (which is provided for each article).
This helps ensure timely distribution of very recent news.
For each article, return a JSON object with "id", "summary", and "importance"
fields. Return your response as a JSON array of objects like: [{"id":
"article_id", "summary": "...", "importance": 42}, ...]
Here are the articles:
`
SYSTEM_PROMPT = "You are a news analyst."
BATCH_SIZE = 10
MAX_INDIVIDUAL_PROCESSING = 50
// Timing constants
RSS_CHECK_INTERVAL = 15 * time.Minute
SUMMARIZE_INTERVAL = 10 * time.Second
BROADCAST_INTERVAL = 1 * time.Hour
STARTUP_DELAY = 60 * time.Second // Delay before first broadcast
BROADCAST_PREPARATION_DELAY = 30 * time.Second // Delay before executing broadcast command
ARTICLE_FRESHNESS_WINDOW = 24 * time.Hour // Time window for considering articles fresh
// Other constants
MAX_MESSAGE_LENGTH = 200 // Maximum length of broadcast messages in characters
MAX_LOG_ENTRIES = 1000 // Maximum number of log entries to keep in memory
)