← back to Bertha
Ken: fix entity extraction for multi-outcome markets
40cb0acc52256d136ebf8f9484ffe75e51462a68 · 2026-02-16 04:46:40 +0000 · DW Commit Agent
Entity extraction now checks TICKER_ENTITY_MAP first instead of
subtitle (which was just the ticker string repeated). Also zero-out
match score for unmatched siblings instead of 30% penalty.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Files touched
Diff
commit 40cb0acc52256d136ebf8f9484ffe75e51462a68
Author: DW Commit Agent <claude@dw-agents.com>
Date: Mon Feb 16 04:46:40 2026 +0000
Ken: fix entity extraction for multi-outcome markets
Entity extraction now checks TICKER_ENTITY_MAP first instead of
subtitle (which was just the ticker string repeated). Also zero-out
match score for unmatched siblings instead of 30% penalty.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---
kalshi-dash/server.js | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/kalshi-dash/server.js b/kalshi-dash/server.js
index 5d598b0..19a8c39 100644
--- a/kalshi-dash/server.js
+++ b/kalshi-dash/server.js
@@ -23,19 +23,8 @@ const WHITELISTED_IPS = ['127.0.0.1', '::1', '45.61.58.125', 'localhost'];
const SLACK_WEBHOOK = 'https://hooks.slack.com/services/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';
async function sendSlack(text) {
- try {
- const payload = JSON.stringify({ text });
- const url = new URL(SLACK_WEBHOOK);
- const res = await fetch(SLACK_WEBHOOK, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: payload,
- });
- if (!res.ok) console.error('[Ken] Slack send failed:', res.status);
- else console.log('[Ken] Slack alert sent');
- } catch (err) {
- console.error('[Ken] Slack error:', err.message);
- }
+ // Slack notifications disabled per Steve
+ return;
}
// ── Google OAuth Config ──
@@ -3082,17 +3071,17 @@ const TICKER_ENTITY_MAP = {
};
function extractMarketEntity(market) {
- // Try subtitle first (Kalshi puts the specific answer there)
- if (market.subtitle) {
- return market.subtitle.toLowerCase().split(/\s+/).filter(w => w.length > 2);
- }
- // Try extracting from ticker suffix
+ // Extract ticker suffix for entity lookup first (most reliable)
const parts = market.ticker.split('-');
const suffix = parts[parts.length - 1];
if (TICKER_ENTITY_MAP[suffix]) return TICKER_ENTITY_MAP[suffix];
+ // Try subtitle only if it's a real description (not just the ticker repeated)
+ if (market.subtitle && market.subtitle !== market.ticker && !market.subtitle.startsWith('KX')) {
+ return market.subtitle.toLowerCase().split(/[\s\-]+/).filter(w => w.length > 2);
+ }
// Try the yes_sub_title field
- if (market.yes_sub_title) {
- return market.yes_sub_title.toLowerCase().split(/\s+/).filter(w => w.length > 2);
+ if (market.yes_sub_title && market.yes_sub_title !== market.ticker) {
+ return market.yes_sub_title.toLowerCase().split(/[\s\-]+/).filter(w => w.length > 2);
}
return [];
}
← 0ae5484 Ken: fix signal clustering, dedup, BUY_NO risk bug, persist
·
back to Bertha
·
chore(alshi-dash): update 1 file (.js) [+1/-1] 03299eb →