Reuse mapping agent to attribute trackers in enricher
The enrichment worker no longer invents a description when a tracker's purpose cannot be substantiated; it records an empty description and marks the row enriched so the stale-recovery loop does not retry it. Vendor identification is the mapping pipeline's job, so the enricher reuses the existing tracker-mapping agent to attribute a third party for an unlinked common pattern before describing it. A confident catalog match seeds the enrichment prompt and links the pattern, but the enricher never creates or overrides an attribution. When a blank, unlinked catalog row later gains a third party through the mapping pipeline's upsert, enrichment is re-armed so the now-known vendor gets a second, better-informed description attempt. Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
@@ -161,3 +161,27 @@ func buildAgentPrompt(tp coredata.TrackerPattern, domains []string) string {
|
||||
|
||||
return prompt
|
||||
}
|
||||
|
||||
// buildCommonPatternIdentificationPrompt builds the mapping-agent input
|
||||
// for a global catalog pattern. Catalog rows carry no observed domains,
|
||||
// so the prompt omits the <observed_domains> signal and relies on the
|
||||
// pattern name, type, and naming conventions. It lets the enrichment
|
||||
// worker reuse the mapping agent to attribute a vendor before describing.
|
||||
func buildCommonPatternIdentificationPrompt(cp coredata.CommonTrackerPattern) string {
|
||||
maxAge := "session"
|
||||
if cp.MaxAgeSeconds != nil {
|
||||
maxAge = fmt.Sprintf("%d seconds", *cp.MaxAgeSeconds)
|
||||
}
|
||||
|
||||
return fmt.Sprintf(
|
||||
"Identify the following tracker:\n\n"+
|
||||
"<pattern> %s </pattern>\n"+
|
||||
"<type> %s </type>\n"+
|
||||
"<match_type> %s </match_type>\n"+
|
||||
"<max_age> %s </max_age>\n",
|
||||
cp.Pattern,
|
||||
cp.TrackerType,
|
||||
cp.MatchType,
|
||||
maxAge,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user