!explain via ❓ reaction: thread-reply with a 3-bullet TL;DR
When a user reacts ❓ on one of Pete's posts, fetch the article body,
ask Ollama for a 3-bullet summary, and post it as a threaded reply
rooted at the original story event. Per-process cooldown of 5min per
story keeps repeated reactions from re-summarizing.
- ingestion.FetchArticleBody: visible <p> text capped at 8000 chars
- classifier.OllamaClient.GenerateText: non-JSON variant
- storage.GetStoryByGUID: full row lookup
- matrix.PostThreadedReply: m.thread + m.in_reply_to fallback
- poster.SetReactionCallback: optional hook fired after recording
- New package: internal/explainer
This commit is contained in:
@@ -51,20 +51,28 @@ func NewOllamaClient(cfg config.OllamaConfig) *OllamaClient {
|
||||
|
||||
// Generate sends a prompt to Ollama via the chat API and returns the raw response text.
|
||||
func (o *OllamaClient) Generate(prompt string) (string, error) {
|
||||
return o.call(
|
||||
"You are a JSON-only news classification API. Respond with valid JSON only. No preamble, no explanation, no markdown.",
|
||||
prompt,
|
||||
"json",
|
||||
)
|
||||
}
|
||||
|
||||
// GenerateText sends a system + user prompt to Ollama and returns the raw
|
||||
// text response. Unlike Generate, no JSON mode is forced.
|
||||
func (o *OllamaClient) GenerateText(systemPrompt, userPrompt string) (string, error) {
|
||||
return o.call(systemPrompt, userPrompt, "")
|
||||
}
|
||||
|
||||
func (o *OllamaClient) call(systemPrompt, userPrompt, format string) (string, error) {
|
||||
reqBody := chatRequest{
|
||||
Model: o.model,
|
||||
Messages: []chatMessage{
|
||||
{
|
||||
Role: "system",
|
||||
Content: "You are a JSON-only news classification API. Respond with valid JSON only. No preamble, no explanation, no markdown.",
|
||||
},
|
||||
{
|
||||
Role: "user",
|
||||
Content: prompt,
|
||||
},
|
||||
{Role: "system", Content: systemPrompt},
|
||||
{Role: "user", Content: userPrompt},
|
||||
},
|
||||
Stream: false,
|
||||
Format: "json",
|
||||
Format: format,
|
||||
}
|
||||
|
||||
body, err := json.Marshal(reqBody)
|
||||
|
||||
Reference in New Issue
Block a user