llm mail integration
This commit is contained in:
110
cmd/mailtest/main.go
Normal file
110
cmd/mailtest/main.go
Normal file
@@ -0,0 +1,110 @@
|
||||
// mailtest – IMAP-Verbindungstest und LLM-Zusammenfassungstest
|
||||
//
|
||||
// Flags:
|
||||
//
|
||||
// -llm-only Überspringt IMAP, testet LLM mit eingebetteten Testdaten
|
||||
// -unread Holt nur ungelesene Emails (statt letzte 5)
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"my-brain-importer/internal/agents/tool/email"
|
||||
"my-brain-importer/internal/config"
|
||||
)
|
||||
|
||||
// testEmails sind eingebettete Beispieldaten für den LLM-Test ohne IMAP.
|
||||
var testEmails = []email.Message{
|
||||
{Subject: "KRITISCH: Server down in Produktion", From: "monitoring@company.com", Date: "2026-03-19 09:00"},
|
||||
{Subject: "Meeting morgen 10 Uhr – Projektreview Q1", From: "chef@company.com", Date: "2026-03-19 08:30"},
|
||||
{Subject: "Rechnung Nr. 2026-042 fällig bis 25.03.", From: "buchhaltung@lieferant.de", Date: "2026-03-18 14:00"},
|
||||
{Subject: "Re: Urlaubsantrag genehmigt", From: "hr@company.com", Date: "2026-03-18 11:00"},
|
||||
{Subject: "Newsletter: Neue Features in Go 1.26", From: "newsletter@golangweekly.com", Date: "2026-03-17 18:00"},
|
||||
{Subject: "Amazon: Ihre Bestellung wurde versendet", From: "no-reply@amazon.de", Date: "2026-03-17 10:00"},
|
||||
{Subject: "Erinnerung: Zahnarzttermin 21.03. um 15:00", From: "praxis@zahnarzt.de", Date: "2026-03-16 09:00"},
|
||||
}
|
||||
|
||||
func main() {
|
||||
llmOnly := flag.Bool("llm-only", false, "Überspringe IMAP, teste LLM mit eingebetteten Testdaten")
|
||||
unread := flag.Bool("unread", false, "Hole nur ungelesene Emails")
|
||||
verbose := flag.Bool("v", false, "Verbose Logging (Debug-Level)")
|
||||
flag.Parse()
|
||||
|
||||
config.LoadConfig()
|
||||
|
||||
// Logging konfigurieren
|
||||
logLevel := slog.LevelInfo
|
||||
if *verbose {
|
||||
logLevel = slog.LevelDebug
|
||||
}
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel})))
|
||||
|
||||
if *llmOnly {
|
||||
runLLMTest()
|
||||
return
|
||||
}
|
||||
|
||||
cfg := config.Cfg.Email
|
||||
fmt.Printf("🔌 Verbinde mit %s:%d (TLS=%v StartTLS=%v) als %s ...\n",
|
||||
cfg.Host, cfg.Port, cfg.TLS, cfg.StartTLS, cfg.User)
|
||||
|
||||
cl, err := email.Connect()
|
||||
if err != nil {
|
||||
log.Fatalf("❌ Verbindung fehlgeschlagen: %v", err)
|
||||
}
|
||||
defer cl.Close()
|
||||
fmt.Println("✅ Login erfolgreich!")
|
||||
|
||||
var msgs []email.Message
|
||||
if *unread {
|
||||
fmt.Println("📥 Hole ungelesene Emails...")
|
||||
msgs, err = cl.FetchUnread()
|
||||
} else {
|
||||
fmt.Println("📥 Hole die letzten 5 Emails...")
|
||||
msgs, err = cl.FetchRecent(5)
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatalf("❌ Fetch fehlgeschlagen: %v", err)
|
||||
}
|
||||
if len(msgs) == 0 {
|
||||
fmt.Println("📭 Keine Emails gefunden.")
|
||||
return
|
||||
}
|
||||
for i, m := range msgs {
|
||||
fmt.Printf("[%d] %s | Von: %s | %s\n", i+1, m.Date, m.From, m.Subject)
|
||||
}
|
||||
|
||||
fmt.Printf("\n🤖 Teste LLM-Zusammenfassung (Modell: %s)...\n", effectiveModel())
|
||||
summary, err := email.Summarize()
|
||||
if err != nil {
|
||||
log.Fatalf("❌ Fehler: %v", err)
|
||||
}
|
||||
fmt.Println(summary)
|
||||
}
|
||||
|
||||
func runLLMTest() {
|
||||
fmt.Printf("🧪 LLM-Testmodus mit %d eingebetteten Testdaten\n", len(testEmails))
|
||||
fmt.Printf(" Modell: %s\n\n", effectiveModel())
|
||||
for i, m := range testEmails {
|
||||
fmt.Printf("[%d] %s | %s | %s\n", i+1, m.Date, m.From, m.Subject)
|
||||
}
|
||||
|
||||
fmt.Println("\n🤖 Starte LLM-Zusammenfassung...")
|
||||
result, err := email.SummarizeMessages(testEmails, "Fasse diese Emails zusammen. Priorisiere nach Dringlichkeit und Wichtigkeit.")
|
||||
if err != nil {
|
||||
log.Fatalf("❌ LLM-Fehler: %v", err)
|
||||
}
|
||||
fmt.Println("\n--- Ergebnis ---")
|
||||
fmt.Println(result)
|
||||
}
|
||||
|
||||
func effectiveModel() string {
|
||||
if config.Cfg.Email.Model != "" {
|
||||
return config.Cfg.Email.Model
|
||||
}
|
||||
return config.Cfg.Chat.Model
|
||||
}
|
||||
Reference in New Issue
Block a user