112 lines
2.4 KiB
Go
112 lines
2.4 KiB
Go
//go:build llm_script
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func loadIntradayEnv() {
|
|
for _, path := range []string{".env.local", ".env"} {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, line := range strings.Split(string(data), "\n") {
|
|
line = strings.TrimSpace(line)
|
|
if line == "" || strings.HasPrefix(line, "#") {
|
|
continue
|
|
}
|
|
key, value, ok := strings.Cut(line, "=")
|
|
if !ok {
|
|
continue
|
|
}
|
|
key = strings.TrimSpace(key)
|
|
value = strings.Trim(strings.TrimSpace(value), `"'`)
|
|
if key == "" {
|
|
continue
|
|
}
|
|
if _, exists := os.LookupEnv(key); exists {
|
|
continue
|
|
}
|
|
_ = os.Setenv(key, value)
|
|
}
|
|
}
|
|
}
|
|
|
|
func intradayDefaultDSN() string {
|
|
if dsn := os.Getenv("DATABASE_URL"); dsn != "" {
|
|
return dsn
|
|
}
|
|
return "postgres://long@/llm_intelligence?host=/var/run/postgresql"
|
|
}
|
|
|
|
func intradayDateValue() string {
|
|
if value := strings.TrimSpace(os.Getenv("REPORT_DATE")); value != "" {
|
|
return value
|
|
}
|
|
return time.Now().Format("2006-01-02")
|
|
}
|
|
|
|
func discoveryTimeoutFromEnv() time.Duration {
|
|
raw := strings.TrimSpace(os.Getenv("INTRADAY_DISCOVERY_TIMEOUT_SEC"))
|
|
if raw == "" {
|
|
return 20 * time.Second
|
|
}
|
|
var seconds int
|
|
if _, err := fmt.Sscanf(raw, "%d", &seconds); err != nil || seconds <= 0 {
|
|
return 20 * time.Second
|
|
}
|
|
return time.Duration(seconds) * time.Second
|
|
}
|
|
|
|
func normalizeIntradayEventType(value string) string {
|
|
switch strings.TrimSpace(strings.ToLower(value)) {
|
|
case "price_cut":
|
|
return "price_cut"
|
|
case "price_increase":
|
|
return "price_increase"
|
|
case "official_release":
|
|
return "official_release"
|
|
case "promo_campaign":
|
|
return "promo_campaign"
|
|
case "leak_or_rumor":
|
|
return "leak_or_rumor"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
func normalizeWord(value string) string {
|
|
value = strings.ToLower(strings.TrimSpace(value))
|
|
value = strings.ReplaceAll(value, "_", "-")
|
|
re := regexp.MustCompile(`[^a-z0-9\-]+`)
|
|
value = re.ReplaceAllString(value, "-")
|
|
value = strings.Trim(value, "-")
|
|
if value == "" {
|
|
return "unknown"
|
|
}
|
|
return value
|
|
}
|
|
|
|
func dedupeStrings(values []string) []string {
|
|
seen := map[string]struct{}{}
|
|
result := make([]string, 0, len(values))
|
|
for _, value := range values {
|
|
trimmed := strings.TrimSpace(value)
|
|
if trimmed == "" {
|
|
continue
|
|
}
|
|
if _, exists := seen[trimmed]; exists {
|
|
continue
|
|
}
|
|
seen[trimmed] = struct{}{}
|
|
result = append(result, trimmed)
|
|
}
|
|
return result
|
|
}
|