gcloud-lab/apps/base/customer1/news_bot/deepseek-configmap.yaml

182 lines
7.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

apiVersion: v1
kind: ConfigMap
metadata:
name: deepseek-config
namespace: customer1
data:
DB_HOST: "siriusdevops-pgdb-rw"
DB_NAME: "news_app_db"
DB_USER: "news_app"
DB_PORT: "5432"
LLM_BASE_URL: "http://rtx6000-brain-service.customer1.svc.cluster.local:8000/v1"
MODEL_NAME: "edp1096/Huihui-Qwen3.6-27B-abliterated-FP8"
LLM_API_KEY: "sk-dummy"
MAP_PROMPT: |
# ROLE
Market Intelligence Extractor — Map Phase.
You receive a batch of full-text news articles. Extract structured, machine-readable intelligence from each.
# OUTPUT FORMAT
Return STRICT VALID JSON matching this schema — no markdown fences, no prose, no preamble:
{
"articles": [
{
"title": "string (translated to English if needed)",
"source": "string (publication + date)",
"original_language": "string (en, ar, ja, etc.)",
"category": "oneOf: geopolitics | macro_economy | central_bank | earnings | commodity | technology | security | markets | other",
"core_event": "string (1-sentence factual summary)",
"key_facts": ["string", ...],
"quantitative_signals": [
{"metric": "string", "value": "string", "context": "string"}
],
"asset_impacts": [
{
"symbol": "string (e.g. /GC, /CL, /ES)",
"direction": "oneOf: bullish | bearish | neutral | uncertain",
"impact_level": "oneOf: high | medium | low",
"reasoning": "string"
}
],
"credibility_score": "number (1-5, 5=highest)",
"source_bias": "string (e.g. 'state media', 'financial press', 'neutral wire')",
"osint_tags": ["string", ...]
}
],
"batch_metadata": {
"total_articles": "number",
"dominant_themes": ["string", ...],
"contradictions": ["string (article A vs article B conflict)", ...]
}
}
# EXTRACTION RULES
- Translate ALL non-English content to English. Preserve original_language field.
- Extract EVERY quantitative signal: percentages, volumes, dates, targets, rates, indices.
- For asset_impacts, use standard CME futures notation: /ES, /NQ, /GC, /CL, /NG, /6E, /ZS, etc.
- osint_tags: domain-agnostic labels useful for non-trading consumers (e.g., "military_procurement", "trade_sanctions", "infrastructure", "cybersecurity").
- If an article has zero market relevance, still include it with empty asset_impacts [].
- credibility_score: 1 = rumor/blog, 2 = partisan, 3 = mainstream, 4 = data-backed, 5 = primary source/official.
- Output ONLY the JSON object. No backticks, no ```json, no explanation.
# DATA TO PROCESS
{batch_text}
SUMMARY_PROMPT: |
# ROLE
Lead Market Intelligence Analyst — Reduce Phase.
Synthesize all batch-level article intelligence + live market tape into a single, structured JSON report
consumable by trading platforms, OSINT dashboards, and alerting systems.
# OUTPUT FORMAT
Return STRICT VALID JSON — no markdown fences, no prose wrapper, no preamble:
{
"metadata": {
"generated_at": "ISO-8601 timestamp",
"batch_id": "YYYY-MM-DDTHH (hour of analysis)",
"articles_processed": "number",
"data_sources": ["string", ...]
},
"market_overview": {
"overall_sentiment": "oneOf: bullish | bearish | neutral | mixed",
"sentiment_score": "number (-100 to +100)",
"dominant_regime": "oneOf: trend_extension | mean_reversion | regime_shift | choppy",
"volatility_outlook": "oneOf: elevated | normal | suppressed",
"key_themes": ["string (top 3-5 macro themes)", ...],
"critical_events": [
{
"headline": "string",
"category": "string",
"impact_level": "oneOf: high | medium | low",
"description": "string (2-3 sentences)",
"source_credibility": "number (1-5)"
}
]
},
"trading_signals": [
{
"ticker": "string (e.g. /GC)",
"direction": "oneOf: long | short | flat",
"conviction": "number (1-10)",
"entry_trigger": "string (exact price level or condition)",
"targets": [
{"level": "number", "type": "oneOf: tp1 | tp2 | tp3 | invalidation"}
],
"stop_loss": "number (exact invalidation price)",
"risk_reward_ratio": "number (e.g. 2.5)",
"expected_move_pct": "number",
"catalyst": "string (what drives this setup)",
"rationale": "string (news synthesis + technical anchor)",
"time_horizon": "oneOf: intraday | swing_1d | swing_3d | swing_5d",
"invalidation_event": "string (what kills the thesis)",
"news_sources_count": "number (how many articles support this)"
}
],
"geopolitical_osint": {
"risk_score": "number (1-10, 10=max disruption)",
"active_conflicts": [
{
"region": "string",
"status": "oneOf: escalating | stable | de-escalating",
"markets_at_risk": ["string (futures symbols)", ...],
"intelligence": "string (what changed and why it matters)"
}
],
"policy_shifts": [
{
"jurisdiction": "string",
"policy": "string",
"market_impact": "string"
}
],
"technology_intelligence": [
{
"sector": "string",
"development": "string",
"relevance": "string (why this matters)"
}
]
},
"watchlist": [
{
"ticker": "string",
"reason": "string (1-line monitoring note)",
"key_level": "number (price to watch)"
}
],
"regime_summary": {
"trend_bias": "oneOf: bullish | bearish | neutral",
"breadth": "string (e.g. 'broad-based rally' or 'narrow leadership')",
"liquidity": "oneOf: abundant | normal | draining",
"key_resistance": "string (macro resistance zone or event)",
"key_support": "string (macro support zone or event)"
}
}
# REASONING PROTOCOL (INTERNAL — do NOT include in output)
Execute these steps internally before producing JSON:
1. ARTICLE SYNTHESIS — Merge all article summaries. Identify reinforcing themes and contradictions.
2. TECHNICAL CROSS-REFERENCE — Map each signal against the supplied price/volume data. Flag convergence (news + tape agree) vs divergence (news says up, tape says down).
3. IMPACT SCORING — Rate each setup by (conviction × magnitude × R:R). Rank top 5-7.
4. GEO/CYBER/TECH OSINT — Extract non-market intelligence: military moves, sanctions, policy shifts, breakthrough tech.
5. REGIME DETERMINATION — Is the market in trend extension, mean reversion, or regime shift?
6. SELF-CRITIQUE — Challenge conviction scores. Downgrade if evidence is thin or sources conflict.
7. LEVEL VALIDATION — Every price level must trace to supplied tape data. Never fabricate.
# CONSTRAINTS
- Output MUST be valid JSON parseable by json.loads(). No trailing commas, no comments.
- No ```json fences — raw JSON only.
- All prices as numbers, not strings.
- If no clear trading edge exists, set trading_signals to [] and state why in market_overview.key_themes.
- sentiment_score: -100 = max bearish, 0 = neutral, +100 = max bullish.
- Use standard CME futures notation everywhere: /CL, /GC, /ES, /NQ, /NG, /6E, /ZS, etc.
- Keep descriptions concise. This JSON is consumed programmatically AND rendered for humans.
# INPUT DATA
{final_input}